diff --git a/blockly/blockly_compressed.js b/blockly/blockly_compressed.js new file mode 100644 index 00000000..c0775bee --- /dev/null +++ b/blockly/blockly_compressed.js @@ -0,0 +1,1782 @@ +// Do not edit this file; automatically generated by build.py. +'use strict'; + +var COMPILED=!0,goog=goog||{};goog.global=this;goog.isDef=function(a){return void 0!==a};goog.exportPath_=function(a,b,c){a=a.split(".");c=c||goog.global;a[0]in c||!c.execScript||c.execScript("var "+a[0]);for(var d;a.length&&(d=a.shift());)!a.length&&goog.isDef(b)?c[d]=b:c=c[d]&&Object.prototype.hasOwnProperty.call(c,d)?c[d]:c[d]={}}; +goog.define=function(a,b){var c=b;COMPILED||(goog.global.CLOSURE_UNCOMPILED_DEFINES&&Object.prototype.hasOwnProperty.call(goog.global.CLOSURE_UNCOMPILED_DEFINES,a)?c=goog.global.CLOSURE_UNCOMPILED_DEFINES[a]:goog.global.CLOSURE_DEFINES&&Object.prototype.hasOwnProperty.call(goog.global.CLOSURE_DEFINES,a)&&(c=goog.global.CLOSURE_DEFINES[a]));goog.exportPath_(a,c)};goog.DEBUG=!1;goog.LOCALE="en";goog.TRUSTED_SITE=!0;goog.STRICT_MODE_COMPATIBLE=!1;goog.DISALLOW_TEST_ONLY_CODE=COMPILED&&!goog.DEBUG; +goog.ENABLE_CHROME_APP_SAFE_SCRIPT_LOADING=!1;goog.provide=function(a){if(goog.isInModuleLoader_())throw Error("goog.provide can not be used within a goog.module.");if(!COMPILED&&goog.isProvided_(a))throw Error('Namespace "'+a+'" already declared.');goog.constructNamespace_(a)};goog.constructNamespace_=function(a,b){if(!COMPILED){delete goog.implicitNamespaces_[a];for(var c=a;(c=c.substring(0,c.lastIndexOf(".")))&&!goog.getObjectByName(c);)goog.implicitNamespaces_[c]=!0}goog.exportPath_(a,b)}; +goog.VALID_MODULE_RE_=/^[a-zA-Z_$][a-zA-Z0-9._$]*$/; +goog.module=function(a){if(!goog.isString(a)||!a||-1==a.search(goog.VALID_MODULE_RE_))throw Error("Invalid module identifier");if(!goog.isInModuleLoader_())throw Error("Module "+a+" has been loaded incorrectly. Note, modules cannot be loaded as normal scripts. They require some kind of pre-processing step. You're likely trying to load a module via a script tag or as a part of a concatenated bundle without rewriting the module. For more info see: https://github.com/google/closure-library/wiki/goog.module:-an-ES6-module-like-alternative-to-goog.provide.");if(goog.moduleLoaderState_.moduleName)throw Error("goog.module may only be called once per module."); +goog.moduleLoaderState_.moduleName=a;if(!COMPILED){if(goog.isProvided_(a))throw Error('Namespace "'+a+'" already declared.');delete goog.implicitNamespaces_[a]}};goog.module.get=function(a){return goog.module.getInternal_(a)};goog.module.getInternal_=function(a){if(!COMPILED){if(a in goog.loadedModules_)return goog.loadedModules_[a];if(!goog.implicitNamespaces_[a])return a=goog.getObjectByName(a),null!=a?a:null}return null};goog.moduleLoaderState_=null; +goog.isInModuleLoader_=function(){return null!=goog.moduleLoaderState_};goog.module.declareLegacyNamespace=function(){if(!COMPILED&&!goog.isInModuleLoader_())throw Error("goog.module.declareLegacyNamespace must be called from within a goog.module");if(!COMPILED&&!goog.moduleLoaderState_.moduleName)throw Error("goog.module must be called prior to goog.module.declareLegacyNamespace.");goog.moduleLoaderState_.declareLegacyNamespace=!0}; +goog.setTestOnly=function(a){if(goog.DISALLOW_TEST_ONLY_CODE)throw a=a||"",Error("Importing test-only code into non-debug environment"+(a?": "+a:"."));};goog.forwardDeclare=function(a){};COMPILED||(goog.isProvided_=function(a){return a in goog.loadedModules_||!goog.implicitNamespaces_[a]&&goog.isDefAndNotNull(goog.getObjectByName(a))},goog.implicitNamespaces_={"goog.module":!0}); +goog.getObjectByName=function(a,b){for(var c=a.split("."),d=b||goog.global,e;e=c.shift();)if(goog.isDefAndNotNull(d[e]))d=d[e];else return null;return d};goog.globalize=function(a,b){var c=b||goog.global,d;for(d in a)c[d]=a[d]}; +goog.addDependency=function(a,b,c,d){if(goog.DEPENDENCIES_ENABLED){var e;a=a.replace(/\\/g,"/");var f=goog.dependencies_;d&&"boolean"!==typeof d||(d=d?{module:"goog"}:{});for(var g=0;e=b[g];g++)f.nameToPath[e]=a,f.loadFlags[a]=d;for(d=0;b=c[d];d++)a in f.requires||(f.requires[a]={}),f.requires[a][b]=!0}};goog.ENABLE_DEBUG_LOADER=!0;goog.logToConsole_=function(a){goog.global.console&&goog.global.console.error(a)}; +goog.require=function(a){if(!COMPILED){goog.ENABLE_DEBUG_LOADER&&goog.IS_OLD_IE_&&goog.maybeProcessDeferredDep_(a);if(goog.isProvided_(a)){if(goog.isInModuleLoader_())return goog.module.getInternal_(a)}else if(goog.ENABLE_DEBUG_LOADER){var b=goog.getPathFromDeps_(a);if(b)goog.writeScripts_(b);else throw a="goog.require could not find: "+a,goog.logToConsole_(a),Error(a);}return null}};goog.basePath="";goog.nullFunction=function(){}; +goog.abstractMethod=function(){throw Error("unimplemented abstract method");};goog.addSingletonGetter=function(a){a.instance_=void 0;a.getInstance=function(){if(a.instance_)return a.instance_;goog.DEBUG&&(goog.instantiatedSingletons_[goog.instantiatedSingletons_.length]=a);return a.instance_=new a}};goog.instantiatedSingletons_=[];goog.LOAD_MODULE_USING_EVAL=!0;goog.SEAL_MODULE_EXPORTS=goog.DEBUG;goog.loadedModules_={};goog.DEPENDENCIES_ENABLED=!COMPILED&&goog.ENABLE_DEBUG_LOADER;goog.TRANSPILE="detect"; +goog.TRANSPILER="transpile.js"; +goog.DEPENDENCIES_ENABLED&&(goog.dependencies_={loadFlags:{},nameToPath:{},requires:{},visited:{},written:{},deferred:{}},goog.inHtmlDocument_=function(){var a=goog.global.document;return null!=a&&"write"in a},goog.findBasePath_=function(){if(goog.isDef(goog.global.CLOSURE_BASE_PATH))goog.basePath=goog.global.CLOSURE_BASE_PATH;else if(goog.inHtmlDocument_())for(var a=goog.global.document.getElementsByTagName("SCRIPT"),b=a.length-1;0<=b;--b){var c=a[b].src,d=c.lastIndexOf("?"),d=-1==d?c.length:d;if("base.js"== +c.substr(d-7,7)){goog.basePath=c.substr(0,d-7);break}}},goog.importScript_=function(a,b){(goog.global.CLOSURE_IMPORT_SCRIPT||goog.writeScriptTag_)(a,b)&&(goog.dependencies_.written[a]=!0)},goog.IS_OLD_IE_=!(goog.global.atob||!goog.global.document||!goog.global.document.all),goog.importProcessedScript_=function(a,b,c){goog.importScript_("",'goog.retrieveAndExec_("'+a+'", '+b+", "+c+");")},goog.queuedModules_=[],goog.wrapModule_=function(a,b){return goog.LOAD_MODULE_USING_EVAL&&goog.isDef(goog.global.JSON)? +"goog.loadModule("+goog.global.JSON.stringify(b+"\n//# sourceURL="+a+"\n")+");":'goog.loadModule(function(exports) {"use strict";'+b+"\n;return exports});\n//# sourceURL="+a+"\n"},goog.loadQueuedModules_=function(){var a=goog.queuedModules_.length;if(0\x3c/script>')},goog.appendScriptSrcNode_=function(a){var b=goog.global.document,c=b.createElement("script");c.type="text/javascript";c.src=a;c.defer=!1;c.async=!1;b.head.appendChild(c)},goog.writeScriptTag_= +function(a,b){if(goog.inHtmlDocument_()){var c=goog.global.document;if(!goog.ENABLE_CHROME_APP_SAFE_SCRIPT_LOADING&&"complete"==c.readyState){if(/\bdeps.js$/.test(a))return!1;throw Error('Cannot write "'+a+'" after document load');}if(void 0===b)if(goog.IS_OLD_IE_){var d=" onreadystatechange='goog.onScriptLoad_(this, "+ ++goog.lastNonModuleScriptIndex_+")' ";c.write(' + +
+ + + + + + +
+

+    '
+      ;
+    };
+
+    $('.ui.embed').embed();
+    
+    $('.md-video-link').on("click", function () {
+        var name = $(this).data("playerurl") || $(this).data("videosrc");
+        $(this).find("img").remove();
+        $(this).find("svg").remove();
+        var outer = $('
', { + "class": 'embed-responsive embed-responsive-16by9' + }); + outer.appendTo($(this)); + $(' +
+ + + @body@ + +
+

Edit in Visual Studio Code

+
+# open a shell and run these commands
+pxt extract @id@
+cd @dirname@
+code .
+

Do you need help installing the tools? + Follow these instructions!

+
+ + + + + + + + + + + \ No newline at end of file diff --git a/docfiles/stream.html b/docfiles/stream.html new file mode 100644 index 00000000..d1aa1508 --- /dev/null +++ b/docfiles/stream.html @@ -0,0 +1,100 @@ + + + + + + Stream: @name@ + + + + + + + + + + + + + + + + + +
+ + @breadcrumb@ + + + +
+
+
+ +
+
Stream: @title@
+
+ @humantime@ + /@id@ +
+
+ Live data powered by + +
+
+
+ +
+ JSON + CSV +
+ +
+
+
+
+

Streaming data in Excel 2016

+

The data stored in this stream can easily be imported into an Excel 2016 spreadsheet using + Get & Transform. +

+
+

Create a Blank Workbook in Excel 2016

+
+
+

Click on Data » New Query » From Other Sources » From Web. +

+ +
+
+

Enter the following URL and click on Connect.

+
+
URL
+ +
+ +
+
+

Select Anonymous and click Connect.

+ +
+
+

Click on Close & Load.

+ +
+
+
+ + @body@ + +
+ + + + + + + \ No newline at end of file diff --git a/docfiles/style.css b/docfiles/style.css new file mode 100644 index 00000000..b7065ead --- /dev/null +++ b/docfiles/style.css @@ -0,0 +1,160 @@ +body#root { + font-size: 16px; +} + +div.listing +{ + color:Black; + border-style:none; + margin: 0px 0px 0px 0px; + font-size: 11pt; + font-family: Consolas, "Andale Mono WT" , "Andale Mono" , "Lucida Console" , "Lucida Sans Typewriter" , "DejaVu Sans Mono" , "Bitstream Vera Sans Mono" , "Liberation Mono" , "Nimbus Mono L" , Monaco, "Courier New" , Courier, monospace; + padding: 5px 5px 5px 5px; + background: #f8f8f8; + clear: both; + + white-space: pre-wrap; /* css-3 */ + white-space: -moz-pre-wrap !important; /* Mozilla, since 1999 */ + white-space: -pre-wrap; /* Opera 4-6 */ + white-space: -o-pre-wrap; /* Opera 7 */ + word-wrap: break-word; /* Internet Explorer 5.5+ */ +} +div.listing A:link +{ + color:#000020; + text-decoration: none; +} +div.listing A:visited +{ + color:#000020; + text-decoration: none; +} +div.listing A:active +{ + color:#000080; + text-decoration: none; +} +div.listing A:hover +{ + color:#000080; + text-decoration: underline; +} + +.mainbody { + margin-top: 6em; + margin-bottom: 3em; +} + +.prodname { + font-weight: normal; + font-size: 1.8em; + margin-left: 0.5em; + color: #ff7d00; +} + +#root .editor-image { + margin: 2em auto; + display: block; + max-width: 80%; +} + +pre { + padding: 16px; + overflow: auto; + font-size: 85%; + line-height: 1.45; + background-color: #f7f7f7; + border-radius: 3px; +} + +code { + padding: 0; + padding-top: 0.2em; + padding-bottom: 0.2em; + margin: 0; + font-size: 85%; + background-color: rgba(0,0,0,0.04); + border-radius: 3px; +} + +code:before, code:after { + letter-spacing: -0.2em; + content: "\00a0"; +} + +.ui[class*="5:3"].embed { + padding-bottom: 83%; + background:transparent !important; +} + +code { + white-space: pre-wrap; +} +code.lang-config, code.lang-package { display: none;} +code.lang-blocks::before, +code.lang-sig::before, +code.lang-block::before, +code.lang-shuffle::before, +code.lang-sim::before, +code.lang-cards::before, +code.lang-namespaces::before, +code.lang-codecard::before +{ + content:"..."; + position: absolute; + top:calc(50% - 0.5em); + left:calc(50% - 5em); +} +code.lang-blocks, +code.lang-sig, +code.lang-block, +code.lang-shuffle, +code.lang-sim, +code.lang-cards, +code.lang-namespaces, +code.lang-codecard +{ + color:transparent; +} + +code.lang-typescript { + background: none !important; +} + +/* Limit width of text so that it's readable + */ + +.ui.text p, +.ui.text li { + max-width: 45em; +} + +/* wrap cards header */ +.ui.card > .content > .header { + word-break: break-all; +} + + +svg { + max-width: 100%; +} + +.blocklyText { + font-family:'Monaco', 'Menlo', 'Ubuntu Mono', 'Consolas', 'source-code-pro', monospace !important; +} + +.blocklyCheckbox, +.blocklyLed { + fill: #ff3030 !important; + text-shadow: 0px 0px 6px #f00; + font-size: 17pt !important; +} + +.ui.card .blocklyPreview { + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + width: calc(100% - 1em); + max-height: calc(100% - 1em); +} diff --git a/docfiles/target.css b/docfiles/target.css new file mode 100644 index 00000000..b0a04807 --- /dev/null +++ b/docfiles/target.css @@ -0,0 +1 @@ +/* To be overridden by target */ diff --git a/docfiles/target.js b/docfiles/target.js new file mode 100644 index 00000000..b0a04807 --- /dev/null +++ b/docfiles/target.js @@ -0,0 +1 @@ +/* To be overridden by target */ diff --git a/docfiles/tracking.html b/docfiles/tracking.html new file mode 100644 index 00000000..5267bffd --- /dev/null +++ b/docfiles/tracking.html @@ -0,0 +1,26 @@ + \ No newline at end of file diff --git a/docfiles/vs.css b/docfiles/vs.css new file mode 100644 index 00000000..c5d07d31 --- /dev/null +++ b/docfiles/vs.css @@ -0,0 +1,68 @@ +/* + +Visual Studio-like style based on original C# coloring by Jason Diamond + +*/ +.hljs { + display: block; + overflow-x: auto; + padding: 0.5em; + background: white; + color: black; +} + +.hljs-comment, +.hljs-quote, +.hljs-variable { + color: #008000; +} + +.hljs-keyword, +.hljs-selector-tag, +.hljs-built_in, +.hljs-name, +.hljs-tag { + color: #00f; +} + +.hljs-string, +.hljs-title, +.hljs-section, +.hljs-attribute, +.hljs-literal, +.hljs-template-tag, +.hljs-template-variable, +.hljs-type, +.hljs-addition { + color: #a31515; +} + +.hljs-deletion, +.hljs-selector-attr, +.hljs-selector-pseudo, +.hljs-meta { + color: #2b91af; +} + +.hljs-doctag { + color: #808080; +} + +.hljs-attr { + color: #f00; +} + +.hljs-symbol, +.hljs-bullet, +.hljs-link { + color: #00b0e8; +} + + +.hljs-emphasis { + font-style: italic; +} + +.hljs-strong { + font-weight: bold; +} diff --git a/docs.html b/docs.html new file mode 100644 index 00000000..e73d7f97 --- /dev/null +++ b/docs.html @@ -0,0 +1,136 @@ + + + + + + + + + + +
+
+
+
+ +
+ + + + + + + + + \ No newline at end of file diff --git a/docs/about.html b/docs/about.html new file mode 100644 index 00000000..77e573e2 --- /dev/null +++ b/docs/about.html @@ -0,0 +1,195 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+

+

About

+

Read more at https://calliope.cc .

+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/beta-ref.json b/docs/beta-ref.json new file mode 100644 index 00000000..58f715cc --- /dev/null +++ b/docs/beta-ref.json @@ -0,0 +1,3 @@ +{ + "appref": "v" +} diff --git a/docs/blocks.html b/docs/blocks.html new file mode 100644 index 00000000..1091b033 --- /dev/null +++ b/docs/blocks.html @@ -0,0 +1,200 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+

Blocks language

+ +
for (let i = 0;i<5;++i) {}
+if (true){}
+let x = 0;
+Math.random(5);
+

See Also

+

logic, loops, math, variables

+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/blocks/logic.html b/docs/blocks/logic.html new file mode 100644 index 00000000..cfdf77b7 --- /dev/null +++ b/docs/blocks/logic.html @@ -0,0 +1,203 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

Logic

+
if(true) {}
+true;
+true && false;
+!true;
+1 != 0;
+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/blocks/logic/boolean.html b/docs/blocks/logic/boolean.html new file mode 100644 index 00000000..d10bb73a --- /dev/null +++ b/docs/blocks/logic/boolean.html @@ -0,0 +1,252 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

Boolean

+

true or false.

+

A Boolean has one of two possible values: true; false. Boolean (logical) operators (and, or, not) take Boolean inputs and yields a Boolean value. Comparison operators on other types (numbers, strings yields a Boolean value.

+

The following blocks represent the true and false Boolean values, which can be plugged in anywhere a Boolean value is expected:

+
true;
+false;
+

The next three blocks represent the three Boolean (logic) operators:

+
true && false;
+true || false;
+!true;
+

The next six blocks represent comparison operators that yield a Boolean value. Most comparisons you will do involve numbers:

+
42 == 0;
+42 != 0;
+42 < 0;
+42 > 0;
+42 <= 0;
+42 >= 0;
+

Boolean values and operators are often used with an if or while statement to determine which code will execute next. For example:

+

Functions that return a Boolean

+

Some functions return a Boolean value, which you can store in a Boolean variable. For example, the following code gets the on/off state of point (1, 2) and stores this in the Boolean variable named on. Then the code clears the screen if on is true:

+

Boolean operators

+

Boolean operators take Boolean inputs and evaluate to a Boolean output:

+

Conjunction: A and B

+

A and B evaluates to true if-and-only-if both A and B are true:

+
false && false == false;
+false && true == false;
+true && false == false;
+true && true == true;
+

Disjunction: A or B

+

A or B evaluates to true if-and-only-if either A is true or B is true:

+
false || false == false;
+false || true == true;
+true || false == true;
+true || true == true;
+

Negation: not A

+

not A evaluates to the opposite (negation) of A:

+
!false == true;
+!true == false;
+

Example

+

This example turns on LED 3 , 3, if LEDs 1 , 1 and 2 , 2 are both on:

+
if (led.point(1,1) && led.point(2,2)) {
+   led.plot(3,3)
+}
+

Comparisons of numbers and strings

+

When you compare two Numbers, you get a Boolean value, such as the comparison x < 5 in the code below:

+
let x = Math.random(5)
+if(x < 5) {
+   basic.showString("low");
+} else { 
+   basic.showString("high");
+}
+

See the documentation on Numbers for more information on comparing two Numbers. You can also compare strings using the equals function.

+

See also

+

if, while, number

+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/blocks/logic/if.html b/docs/blocks/logic/if.html new file mode 100644 index 00000000..8fdba463 --- /dev/null +++ b/docs/blocks/logic/if.html @@ -0,0 +1,211 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

If

+ +

Conditionally run code depending on whether a Boolean condition is true or false.

+
if(true) {
+}
+

Click on the dark blue gear icon (see above) to add an else or if to the current block.

+

Example: adjusting screen brightness

+
if(input.lightLevel()<100){
+    led.setBrightness(255);
+}
+

If the light level is < 100, this code sets the brightness to 255:

+

See also

+

while loop, for, boolean

+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/blocks/loops.html b/docs/blocks/loops.html new file mode 100644 index 00000000..2b79b848 --- /dev/null +++ b/docs/blocks/loops.html @@ -0,0 +1,201 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

Loops

+
for(let i = 0;i<5;i++) {}
+while(true) {}
+basic.forever(() => {});
+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/blocks/loops/for.html b/docs/blocks/loops/for.html new file mode 100644 index 00000000..4c0c23fc --- /dev/null +++ b/docs/blocks/loops/for.html @@ -0,0 +1,208 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

For

+ +

Run part of the program the number of times you say.

+

Example: Count to 4

+

This program will show the numbers 0, 1, 2, 3, and 4 one after another on the LED screen.

+
for(let i = 0; i < 5; ++i) {
+basic.showNumber(i)
+}
+

See also

+

repeat, while, if, show number

+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/blocks/loops/repeat.html b/docs/blocks/loops/repeat.html new file mode 100644 index 00000000..ba1c31a1 --- /dev/null +++ b/docs/blocks/loops/repeat.html @@ -0,0 +1,204 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

Repeat

+

Run part of the program the number of times you say.

+

Block Editor

+

+

See also

+

for, while, if, show number

+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/blocks/loops/while.html b/docs/blocks/loops/while.html new file mode 100644 index 00000000..5450b0d9 --- /dev/null +++ b/docs/blocks/loops/while.html @@ -0,0 +1,213 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

While

+

Repeat code while a Boolean condition is true.

+
while(true) {
+}
+

The while loop has a condition that evaluates to a Boolean value. After the do keyword, add the code that you want to run while the condition is true. The while loop concludes with end while.

+

The condition is tested before any code runs. Which means that if the condition is false, the code inside the loop doesn’t execute.

+

Example: diagonal line

+

The following example uses a while loop to make a diagonal line on the LED screen (points 0, 0, 1, 1, 2, 2, 3, 3, 4, 4).

+
let index = 4;
+while(index >= 0) {
+    led.plot(index, index);
+    index--;
+}
+

See also

+

on button pressed, for, if, forever

+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/blocks/math.html b/docs/blocks/math.html new file mode 100644 index 00000000..803ad374 --- /dev/null +++ b/docs/blocks/math.html @@ -0,0 +1,213 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

Math

+

Numeric values: 0, 1, 2, …

+
0;
+1;
+2;
+

Arithmetic binary operation (+, -, *, /)

+
0+1;
+0-1;
+1*2;
+3/4;
+

Absolute value

+
Math.abs(-5);
+

Minimum/maximum of two values

+
Math.min(0, 1);
+

Random value

+
Math.random(5);
+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/blocks/variables.html b/docs/blocks/variables.html new file mode 100644 index 00000000..6271bcd4 --- /dev/null +++ b/docs/blocks/variables.html @@ -0,0 +1,206 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

Variables

+

Assign (set) a variable’s value

+
let x = 0;
+

Get a variable’s value

+
let x = 0;
+x;
+

Change a variable’s value

+
let x = 0;
+x+=1;
+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/blocks/variables/assign.html b/docs/blocks/variables/assign.html new file mode 100644 index 00000000..c15e7e4e --- /dev/null +++ b/docs/blocks/variables/assign.html @@ -0,0 +1,217 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

Assignment Operator

+

Use an equals sign to make a variable store the number +or string you say.

+

When you use the equals sign to store something in a variable, the equals sign is called +an assignment operator, and what you store is called a value.

+

Storing numbers in variables

+

This program makes the variable item equal 5 and then shows it on the LED screen.

+
let item = 5
+basic.showNumber(item)
+

Storing strings in variables

+

This program makes the variable name equal Joe and then shows it on the LED screen.

+
let name = "Joe"
+basic.showString(name);
+

Notes

+

You can use the assignment operator with variables of +every type. A type is which kind of thing +a variable can store, like a number or string.

+

See also

+

variable, types

+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/blocks/variables/change-var.html b/docs/blocks/variables/change-var.html new file mode 100644 index 00000000..e1e4ce08 --- /dev/null +++ b/docs/blocks/variables/change-var.html @@ -0,0 +1,219 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

Change Value

+

Set the value for local and global variables.

+ +

Change the value of a variable

+
let x = 0
+x += 1
+

Declare a variable

+

Use the assignment operator to set the value of a variable. Change the value of a variable from 0 to 1 using the change item block. Like this:

+
let x = 0
+x += 1
+

Example

+

Use the assignment operator to set the value of a variable. Change the value of a variable from 0 to 1 using the change item block. Then display the new value of the variable on the LED screen. Like this:

+
let x = 0;
+x += 1;
+basic.showNumber(x);
+

Notes

+
    +
  • You can use the assignment operator with variables of each of the supported types.
  • +
+

See also

+

variable, types

+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/blocks/variables/var.html b/docs/blocks/variables/var.html new file mode 100644 index 00000000..b4be4926 --- /dev/null +++ b/docs/blocks/variables/var.html @@ -0,0 +1,253 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

Local Variables

+

How to define and use local variables.

+ +

A variable is a place where you can store and retrieve data. Variables have a name, a type, and value:

+
    +
  • name is how you’ll refer to the variable
  • +
  • type refers to the kind of data a variable can store
  • +
  • value refers to what’s stored in the variable
  • +
+

Var statement

+

Use the Block Editor variable statement to create a variable +and the assignment operator +to store something in the variable.

+

For example, this code stores the number 2 in the x variable:

+
let x = 2;
+

Here’s how to define a variable in the Block Editor:

+
    +
  1. Click variables.

    +
  2. +
  3. Change the default variable name if you like.

    +
  4. +
  5. Drag a block type on the right-side of the assignment operator and click the down arrow to change the variable name.

    +
  6. +
+

A variable is created for the number returned by the brightness function.

+
let b = led.brightness();
+

Using variables

+

Once you’ve defined a variable, just use the variable’s name whenever you need what’s stored in the variable. For example, the following code shows the value stored in counter on the LED screen:

+
let counter = 1;
+basic.showNumber(counter);
+

To change the contents of a variable use the assignment operator. The following code sets counter to 1 and then increments counter by 10:

+
let counter = 1;
+counter = counter + 10;
+basic.showNumber(counter);
+

Why use variables?

+

If you want to remember and modify data, you’ll need a variable. +A counter is a great example:

+
let counter = 0;
+input.onButtonPressed(Button.A, () => { 
+  counter = counter + 1;
+  basic.showNumber(counter);
+});
+

Local variables

+

Local variables exist only within the function or block of code where they’re defined. For example:

+
// x does NOT exist here.
+if (led.brightness() > 128) {
+  // x exists here
+  let x = 0;
+}
+

Notes

+
    +
  • You can use the default variable names if you’d like, however, it’s best to use descriptive variable names. To change a variable name in the editor, select the down arrow next to the variable and then click “new variable”.
  • +
+

See also

+

types, assignment operator

+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/browsers.html b/docs/browsers.html new file mode 100644 index 00000000..2f37011d --- /dev/null +++ b/docs/browsers.html @@ -0,0 +1,277 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+

Unsupported configuration

+

Your browser is currently not supported. The following configurations are supported:

+

Windows

+

You need one of these browsers running on Windows 7, Windows 8, Windows 8.1, or +Windows 10:

+
    +
  • Internet Explorer 11
  • +
  • Microsoft Edge
  • +
  • Google Chrome
  • +
  • Mozilla Firefox
  • +
+

Mac

+

You need one of these browsers running on OS X 10.9 Mavericks, OS X 10.10 +Yosemite, OS X 10.11 El Capitan, or macOS 10.12 Sierra:

+
    +
  • Safari
  • +
  • Google Chrome
  • +
  • Mozilla Firefox
  • +
+

Linux

+

If you’re using a Raspberry Pi, please see the documentation +here.

+

You need to be running a Linux distribution recent enough to run the most recent +version of one of the following:

+
    +
  • Google Chrome, or Chromium
  • +
  • Mozilla Firefox, Iceweasel, or Seamonkey
  • +
+

How to check your OS or browser

+

Windows

+
    +
  • Click on the Start menu
  • +
  • Type ‘System’
  • +
  • Click on the app called ‘System’
  • +
  • The version of Windows you are using will be displayed:
  • +
+

+

Mac

+
    +
  • Click on the Apple icon in the top left
  • +
  • Click on ‘About this Mac’
  • +
  • This window will be displayed:
  • +
+

+

Internet Explorer

+
    +
  • Click on the Settings icon in the top right
  • +
  • Click ‘About Internet Explorer’
  • +
  • This window will be displayed:
  • +
+

+

Edge

+

Edge automatically updates, so you should always be using the latest version

+
    +
  • Click on the menu icon in the top right (three dots)
  • +
  • Scroll to the bottom
  • +
  • Information similar to the following will be displayed:
  • +
+

+

Google Chrome

+

Google Chrome automatically updates, so you should always be using the latest version

+
    +
  • Click on the menu icon in the top right (three dots)
  • +
  • Click Help, and About Google Chrome
  • +
  • Information similar to the following will be displayed:
  • +
+

+

Firefox

+

Firefox automatically updates, so you should always be using the latest version

+
    +
  • Click on the menu icon in the top right (three horizontal lines)
  • +
  • Click the question mark icon (help button)
  • +
  • Click ‘About Firefox’
  • +
+

+

Safari

+

Safari updates when your operating system updates, so if you are using the +latest version of OS X then you’ll be using the latest version of Safari.

+
    +
  • Click on the Safari menu in the top left
  • +
  • Click ‘About Safari’
  • +
+

+

IT administrators should check which browser versions are supported +here.

+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/browsers/linux.html b/docs/browsers/linux.html new file mode 100644 index 00000000..e73da5cb --- /dev/null +++ b/docs/browsers/linux.html @@ -0,0 +1,202 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

Recommended browser for Linux

+

As you are using Linux, it is recommended that you use Mozilla +Firefox or Google Chrome.

+

Please see here for technical information on which browsers are +supported, or here to check which version you are using.

+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/browsers/mac.html b/docs/browsers/mac.html new file mode 100644 index 00000000..aa78a120 --- /dev/null +++ b/docs/browsers/mac.html @@ -0,0 +1,202 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

Recommended browser for Mac

+

As you are using a Mac, it is recommended that you use Safari. Alternatively, +Google Chrome and Mozilla Firefox are also supported.

+

Please see here for technical information on which browsers are +supported, or here to check which version you are using.

+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/browsers/technical.html b/docs/browsers/technical.html new file mode 100644 index 00000000..c861f4e4 --- /dev/null +++ b/docs/browsers/technical.html @@ -0,0 +1,264 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

Technical information about browser support

+

pxt.microbit.org requires that you use a recent version of a modern +browser, such as Microsoft Edge, Google Chrome, Mozilla Firefox, Safari, Opera, +or IE11. This is because the editor uses modern web technologies such as web +workers to enable compiling TypeScript in the browser, or the using the +same Monaco editor that powers Visual Studio Code.

+

Most modern browsers automatically update themselves, but in some environments +such as schools these automatic updates are disabled for security. We +strongly recommend that you use the most recent version of any of these +browsers, but if you can’t then you must use at least:

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
BrowserMinimum versionRelease dateWindowsMac
Edge12March 2015Windows 10+N/A
Internet Explorer11October 2013Windows 7+N/A
Mozilla Firefox31 ESRJuly 2014Windows XP+OS X 10.6+
Google Chrome38October 2014Windows XP+OS X 10.6+
Safari9September 2015N/AOS X 10.9+
Opera21May 2014Windows 7+OS X 10.9+
+

Please see our information for which browsers are recommended for Windows, +Mac, Linux, or Raspberry Pi.

+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/browsers/windows.html b/docs/browsers/windows.html new file mode 100644 index 00000000..510c57cb --- /dev/null +++ b/docs/browsers/windows.html @@ -0,0 +1,203 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

Recommended browser for Windows

+

We recommend Microsoft Edge if you are running Windows 10, but users on +Windows 7 or higher can use Internet Explorer 11 or recent versions of +Mozilla Firefox, Google Chrome, or Opera.

+

Please see here for technical information on which browsers are +supported, or here to check which version you are using.

+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/docs.html b/docs/docs.html new file mode 100644 index 00000000..630ae557 --- /dev/null +++ b/docs/docs.html @@ -0,0 +1,199 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/favicon.ico b/docs/favicon.ico new file mode 100644 index 00000000..16625b1f Binary files /dev/null and b/docs/favicon.ico differ diff --git a/docs/index-ref.json b/docs/index-ref.json new file mode 100644 index 00000000..1512fc33 --- /dev/null +++ b/docs/index-ref.json @@ -0,0 +1,3 @@ +{ + "appref": "v0.8.30" +} diff --git a/docs/javascript.html b/docs/javascript.html new file mode 100644 index 00000000..90d568b0 --- /dev/null +++ b/docs/javascript.html @@ -0,0 +1,227 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+

JavaScript

+

Visit the cards below to starting programming JavaScript +with the Calliope mini:

+
[{
+  "name": "Calling",
+  "url":  "/js/call"
+},{
+  "name": "Sequencing",
+  "url":  "/js/sequence"
+},{
+  "name": "Variables",
+  "url":  "/js/variables"
+},{
+  "name": "Operators",
+  "url": "/js/operators"
+},{
+  "name": "Statements",
+  "url": "/js/statements"
+},{
+  "name": "Functions",
+  "url": "/js/functions"
+},{
+  "name": "Types",
+  "url": "/js/types"
+},{
+  "name": "Classes",
+  "url": "/js/classes"
+},{
+  "name": "FAQ",
+  "url": "/js/faq"
+}
+]
+

See Also

+

calling, sequencing, variables, operators, statements, functions, +types, classes, FAQ

+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/js/call.html b/docs/js/call.html new file mode 100644 index 00000000..103f8b1c --- /dev/null +++ b/docs/js/call.html @@ -0,0 +1,231 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

Call a function

+

The simplest way to get started in JavaScript with your Calliope mini is to +call one of the Calliope mini’s built-in JavaScript functions. Just like Blocks +are organized into categories/drawers, the Calliope mini functions are organized by +namespaces, with names corresponding to the drawer names. The basic namespace +contains a number of helpful functions, such as:

+
basic.showString("Hello!")
+

If you want to see all functions available in the basic namespace, simply type basic +followed by . and a list of all the functions will appear.

+

+

This feature is known as “Intellisense”. Continue typing to select one of the functions, +or click on one of the functions to select. You also narrow down the set of functions by typing, as below:

+

+

You can type anything to see what Intellisense will find for you. Here’s an example +of what happens when you type the word for: +

+

Function parameter values

+

You might have noticed that the call showString above takes one parameter value, +the string to be scrolled on the LED screen. There is a second (optional) +parameter that controls the speed of the scroll. Try this:

+
basic.showString("Hello!",50)
+

Intellisense shows all the available parameters for a function.

+

Left and right parentheses, please!

+

Whenever you want to call a function, you give the name of the function +followed by ( and ending with ). Inbetween the left and right +parentheses go the function arguments. If a function has zero arguments, you still +need the parentheses in order to call the function. For example

+
basic.clearScreen()
+

It’s a syntax error to have a left parenthesis without the “closing” right parenthesis:

+
basic.clearScreen(
+ +

NEXT: Sequencing Commands

+
+ + +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/js/classes.html b/docs/js/classes.html new file mode 100644 index 00000000..60064671 --- /dev/null +++ b/docs/js/classes.html @@ -0,0 +1,407 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

Classes

+

Traditional JavaScript focuses on functions and prototype-based inheritance as the basic means of building up reusable components, +but this may feel a bit awkward to programmers more comfortable with an object-oriented approach, where classes inherit functionality +and objects are built from these classes.

+

Starting with ECMAScript 2015, also known as ECMAScript 6, JavaScript programmers will be able to build their applications using +this object-oriented class-based approach. TypeScript, allows you to use these techniques now, compiling them +down to JavaScript that works across all major browsers and platforms, without having to wait for the next version of JavaScript.

+

Let’s take a look at a simple class-based example:

+
class Greeter {
+    greeting: string;
+    constructor(message: string) {
+        this.greeting = message;
+    }
+    greet() {
+        return "Hello, " + this.greeting;
+    }
+}
+
+let greeter = new Greeter("world");
+

We declare a new class Greeter. This class has three members: a property called greeting, a constructor, and a method greet.

+

You’ll notice that in the class when we refer to one of the members of the class we prepend this.. +This denotes that it’s a member access.

+

In the last line we construct an instance of the Greeter class using new. +This calls into the constructor we defined earlier, creating a new object with the Greeter shape, and running the constructor to initialize it.

+

Inheritance

+ +
+
+ +

Inheritance is not supported yet for the Calliope mini. Coming soon…

+ +
+
+ +

In TypeScript, we can use common object-oriented patterns. +Of course, one of the most fundamental patterns in class-based programming is being able to extend existing classes to create new ones using inheritance.

+

Let’s take a look at an example:

+
class Animal {
+    name: string;
+    constructor(theName: string) { this.name = theName; }
+    move(distanceInMeters: number = 0) {
+        console.log(`${this.name} moved ${distanceInMeters}m.`);
+    }
+}
+
+class Snake extends Animal {
+    constructor(name: string) { super(name); }
+    move(distanceInMeters = 5) {
+        console.log("Slithering...");
+        super.move(distanceInMeters);
+    }
+}
+
+class Horse extends Animal {
+    constructor(name: string) { super(name); }
+    move(distanceInMeters = 45) {
+        console.log("Galloping...");
+        super.move(distanceInMeters);
+    }
+}
+
+let sam = new Snake("Sammy the Python");
+let tom: Animal = new Horse("Tommy the Palomino");
+
+sam.move();
+tom.move(34);
+

This example covers quite a few of the inheritance features in TypeScript that are common to other languages. +Here we see the extends keywords used to create a subclass. +You can see this where Horse and Snake subclass the base class Animal and gain access to its features.

+

Derived classes that contain constructor functions must call super() which will execute the constructor function on the base class.

+

The example also shows how to override methods in the base class with methods that are specialized for the subclass. +Here both Snake and Horse create a move method that overrides the move from Animal, giving it functionality specific to each class. +Note that even though tom is declared as an Animal, since its value is a Horse, when tom.move(34) calls the overriding method in Horse:

+
Slithering...
+Sammy the Python moved 5m.
+Galloping...
+Tommy the Palomino moved 34m.
+

Public, private, and protected modifiers

+

Public by default

+

In our examples, we’ve been able to freely access the members that we declared throughout our programs. +If you’re familiar with classes in other languages, you may have noticed in the above examples +we haven’t had to use the word public to accomplish this; for instance, +C# requires that each member be explicitly labeled public to be visible. +In TypeScript, each member is public by default.

+

You may still mark a member public explicitly. +We could have written the Animal class from the previous section in the following way:

+
class Animal {
+    public name: string;
+    public constructor(theName: string) { this.name = theName; }
+    public move(distanceInMeters: number) {
+        console.log(`${this.name} moved ${distanceInMeters}m.`);
+    }
+}
+

Understanding private

+

When a member is marked private, it cannot be accessed from outside of its containing class. For example:

+
class Animal {
+    private name: string;
+    constructor(theName: string) { this.name = theName; }
+}
+
+new Animal("Cat").name; // Error: 'name' is private;
+

TypeScript is a structural type system. +When we compare two different types, regardless of where they came from, if the types of all members are compatible, then we say the types themselves are compatible.

+

However, when comparing types that have private and protected members, we treat these types differently. +For two types to be considered compatible, if one of them has a private member, +then the other must have a private member that originated in the same declaration. +The same applies to protected members.

+

Let’s look at an example to better see how this plays out in practice:

+
class Animal {
+    private name: string;
+    constructor(theName: string) { this.name = theName; }
+}
+
+class Rhino extends Animal {
+    constructor() { super("Rhino"); }
+}
+
+class Employee {
+    private name: string;
+    constructor(theName: string) { this.name = theName; }
+}
+
+let animal = new Animal("Goat");
+let rhino = new Rhino();
+let employee = new Employee("Bob");
+
+animal = rhino;
+animal = employee; // Error: 'Animal' and 'Employee' are not compatible
+

In this example, we have an Animal and a Rhino, with Rhino being a subclass of Animal. +We also have a new class Employee that looks identical to Animal in terms of shape. +We create some instances of these classes and then try to assign them to each other to see what will happen. +Because Animal and Rhino share the private side of their shape from the same declaration of +private name: string in Animal, they are compatible. However, this is not the case for Employee. +When we try to assign from an Employee to Animal we get an error that these types are not compatible. +Even though Employee also has a private member called name, it’s not the one we declared in Animal.

+

Understanding protected

+

The protected modifier acts much like the private modifier with the exception that members +declared protected can also be accessed by instances of deriving classes. For example,

+
class Person {
+    protected name: string;
+    constructor(name: string) { this.name = name; }
+}
+
+class Employee extends Person {
+    private department: string;
+
+    constructor(name: string, department: string) {
+        super(name);
+        this.department = department;
+    }
+
+    public getElevatorPitch() {
+        return `Hello, my name is ${this.name} and I work in ${this.department}.`;
+    }
+}
+
+let howard = new Employee("Howard", "Sales");
+console.log(howard.getElevatorPitch());
+console.log(howard.name); // error
+

Notice that while we can’t use name from outside of Person, +we can still use it from within an instance method of Employee because Employee derives from Person.

+

A constructor may also be marked protected. +This means that the class cannot be instantiated outside of its containing class, but can be extended. For example,

+
class Person {
+    protected name: string;
+    protected constructor(theName: string) { this.name = theName; }
+}
+
+// Employee can extend Person
+class Employee extends Person {
+    private department: string;
+
+    constructor(name: string, department: string) {
+        super(name);
+        this.department = department;
+    }
+
+    public getElevatorPitch() {
+        return `Hello, my name is ${this.name} and I work in ${this.department}.`;
+    }
+}
+
+let howard = new Employee("Howard", "Sales");
+let john = new Person("John"); // Error: The 'Person' constructor is protected
+

Readonly modifier

+

You can make properties readonly by using the readonly keyword. +Readonly properties must be initialized at their declaration or in the constructor.

+
class Octopus {
+    readonly name: string;
+    readonly numberOfLegs: number = 8;
+    constructor (theName: string) {
+        this.name = theName;
+    }
+}
+let dad = new Octopus("Man with the 8 strong legs");
+dad.name = "Man with the 3-piece suit"; // error! name is readonly.
+

Parameter properties

+

In our last example, we had to declare a readonly member name and a constructor parameter theName in the Octopus class, and we then immediately set name to theName. +This turns out to be a very common practice. +Parameter properties let you create and initialize a member in one place. +Here’s a further revision of the previous Octopus class using a parameter property:

+
class Octopus {
+    readonly numberOfLegs: number = 8;
+    constructor(readonly name: string) {
+    }
+}
+

Notice how we dropped theName altogether and just use the shortened readonly name: string parameter on the constructor to create and initialize the name member. +We’ve consolidated the declarations and assignment into one location.

+

Parameter properties are declared by prefixing a constructor parameter with an accessibility modifier or readonly, or both. +Using private for a parameter property declares and initializes a private member; likewise, the same is done for public, protected, and readonly.

+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/js/faq.html b/docs/js/faq.html new file mode 100644 index 00000000..c5b09a8d --- /dev/null +++ b/docs/js/faq.html @@ -0,0 +1,252 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

Frequently asked questions

+

What is the language supported for the Calliope mini?

+

For the Calliope mini, we support a “static” subset of TypeScript (itself a superset of JavaScript):

+

Supported language features

+
    +
  • variables with let, const, and var
  • +
  • functions with lexical scoping and recursion
  • +
  • top-level code in the file; hello world really is console.log("Hello world")
  • +
  • if ... else if ... else statements
  • +
  • while and do ... while loops
  • +
  • for(;;) loops (see below about for ... in/of)
  • +
  • break/continue; also with labeled loops
  • +
  • switch statement (on numbers only)
  • +
  • debugger statement for breakpoints
  • +
  • conditional operator ? :; lazy boolean operators
  • +
  • namespaces (a form of modules)
  • +
  • all arithmetic operators (including bitwise operators); note that in microcontroller targets +all arithmetic is performed on integers, also when simulating in the browser
  • +
  • strings (with a few common methods)
  • +
  • string templates (`x is ${x}` )
  • +
  • arrow functions () => ...
  • +
  • classes with fields, methods and constructors; new keyword
  • +
  • array literals [1, 2, 3]
  • +
  • enums
  • +
+

Unsupported language features

+

We generally stay away from the more dynamic parts of JavaScript. +Things you may miss and we may implement:

+
    +
  • exceptions (throw, try ... catch, try ... finally)
  • +
  • for ... of statements
  • +
  • object literals { foo: 1, bar: "two" }
  • +
  • method-like properties (get/set accessors)
  • +
  • class inheritance
  • +
+

For JS-only targets we may implement the following:

+
    +
  • regular expressions
  • +
  • classes implementing interfaces
  • +
+

Things that we are not very likely to implement:

+
    +
  • file-based modules (import * from ..., module.exports etc); we do support namespaces
  • +
  • spread operator
  • +
  • yield expression and function*
  • +
  • await expression and async function
  • +
  • typeof expression
  • +
  • tagged templates tag `text ${expression} more text` ; regular templates are supported
  • +
  • binding with arrays or objects: let [a, b] = ...; let { x, y } = ...
  • +
  • with statement
  • +
  • eval
  • +
  • delete statement
  • +
  • for ... in statements
  • +
  • JSX (HTML as part of JavaScript)
  • +
+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/js/functions.html b/docs/js/functions.html new file mode 100644 index 00000000..954d61b9 --- /dev/null +++ b/docs/js/functions.html @@ -0,0 +1,312 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

Functions

+

Functions are the fundamental building block of programs. Here is the simplest +way to make a function that adds two numbers:

+
// Named function
+function add(x : number, y : number) {
+    return x + y;
+}
+
+basic.showNumber(add(1, 2))
+ +
+
+ +

For the Calliope mini, you must specify a type for each function parameter.

+ +
+
+ +

Functions can refer to variables outside of the function body. +When they do so, they’re said to capture these variables.

+
let z = 100;
+
+function addToZ(x: number, y: number) {
+    return x + y + z;
+}
+
+basic.showNumber(addToZ(1, 2))
+

Typing the function

+

Let’s add a return type to our add function:

+
function add(x: number, y: number): number {
+    return x + y;
+}
+

TypeScript can figure the return type out by looking at the return statements, so you can optionally leave this off in many cases.

+

Optional and Default Parameters

+

In TypeScript, the number of arguments given to a function has to match the number of parameters the function expects.

+
function buildName(firstName: string, lastName: string) {
+    return firstName + " " + lastName;
+}
+
+let result1 = buildName("Bob");                  // error, too few parameters
+let result2 = buildName("Bob", "Adams", "Sr.");  // error, too many parameters
+let result3 = buildName("Bob", "Adams");         // ah, just right
+

In JavaScript, every parameter is optional, and users may leave them off as they see fit. +When they do, their value is undefined. +We can get this functionality in TypeScript by adding a ? to the end of parameters we want to be optional. +For example, let’s say we want the last name parameter from above to be optional:

+
function buildName(firstName: string, lastName?: string) {
+    if (lastName)
+        return firstName + " " + lastName;
+    else
+        return firstName;
+}
+
+let result1 = buildName("Bob");                  // works correctly now
+let result2 = buildName("Bob", "Adams", "Sr.");  // error, too many parameters
+let result3 = buildName("Bob", "Adams");         // ah, just right
+

Any optional parameters must follow required parameters. +Had we wanted to make the first name optional rather than the last name, we would need to change the order of parameters in the function, putting the first name last in the list.

+

In TypeScript, we can also set a value that a parameter will be assigned if the user does not provide one, or if the user passes undefined in its place. +These are called default-initialized parameters. +Let’s take the previous example and default the last name to "Smith".

+
function buildName(firstName: string, lastName = "Smith") {
+    return firstName + " " + lastName;
+}
+
+let result1 = buildName("Bob");                  // works correctly now, returns "Bob Smith"
+let result2 = buildName("Bob", undefined);       // still works, also returns "Bob Smith"
+let result3 = buildName("Bob", "Adams", "Sr.");  // error, too many parameters
+let result4 = buildName("Bob", "Adams");         // ah, just right
+

Default-initialized parameters that come after all required parameters are treated as optional, and just like optional parameters, can be omitted when calling their respective function. +This means optional parameters and trailing default parameters will share commonality in their types, so both

+
function buildName(firstName: string, lastName?: string) {
+    // ...
+}
+

and

+
function buildName(firstName: string, lastName = "Smith") {
+    // ...
+}
+

share the same type (firstName: string, lastName?: string) => string. +The default value of lastName disappears in the type, only leaving behind the fact that the parameter is optional.

+

Unlike plain optional parameters, default-initialized parameters don’t need to occur after required parameters. +If a default-initialized parameter comes before a required parameter, users need to explicitly pass undefined to get the default initialized value. +For example, we could write our last example with only a default initializer on firstName:

+
function buildName(firstName = "Will", lastName: string) {
+    return firstName + " " + lastName;
+}
+
+let result1 = buildName("Bob");                  // error, too few parameters
+let result2 = buildName("Bob", "Adams", "Sr.");  // error, too many parameters
+let result3 = buildName("Bob", "Adams");         // okay and returns "Bob Adams"
+let result4 = buildName(undefined, "Adams");     // okay and returns "Will Adams"
+

Rest Parameters

+

Required, optional, and default parameters all have one thing in common: they talk about one parameter at a time. +Sometimes, you want to work with multiple parameters as a group, or you may not know how many parameters a function will ultimately take. +In JavaScript, you can work with the arguments directly using the arguments variable that is visible inside every function body.

+

In TypeScript, you can gather these arguments together into a variable:

+
function buildName(firstName: string, ...restOfName: string[]) {
+    return firstName + " " + restOfName.join(" ");
+}
+
+let employeeName = buildName("Joseph", "Samuel", "Lucas", "MacKinzie");
+

Rest parameters are treated as a boundless number of optional parameters. +When passing arguments for a rest parameter, you can use as many as you want; you can even pass none. +The compiler will build an array of the arguments passed in with the name given after the ellipsis (...), allowing you to use it in your function.

+

The ellipsis is also used in the type of the function with rest parameters:

+
function buildName(firstName: string, ...restOfName: string[]) {
+    return firstName + " " + restOfName.join(" ");
+}
+
+let buildNameFun: (fname: string, ...rest: string[]) => string = buildName;
+ + +

NEXT: Types

+
+ + +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/js/inference.html b/docs/js/inference.html new file mode 100644 index 00000000..35a5acfa --- /dev/null +++ b/docs/js/inference.html @@ -0,0 +1,197 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/js/operators.html b/docs/js/operators.html new file mode 100644 index 00000000..1190d858 --- /dev/null +++ b/docs/js/operators.html @@ -0,0 +1,232 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

Operators

+

The following JavaScript operators are supported for the Calliope mini.

+ +
+
+ +

Note that for the Calliope mini all arithmetic is performed on integers, rather than floating point. +This also is true when simulating in the browser.

+ +
+
+ +

Assignment, arithmetic and bitwise

+ +

Comparision and conditional

+ +

More

+
    +
  • lambda functions () => { ... }
  • +
  • array literals [1, 2, 3]
  • +
  • strings, with a few common methods
  • +
  • string templates (`x is ${x}` )
  • +
+ + +

NEXT: Statements

+
+ + +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/js/sequence.html b/docs/js/sequence.html new file mode 100644 index 00000000..24928d6e --- /dev/null +++ b/docs/js/sequence.html @@ -0,0 +1,246 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

Sequencing

+

By calling one function after another, in sequence, you can create an animation:

+
basic.showLeds(`
+    . # . # .
+    . . . . .
+    . . # . .
+    # . . . #
+    . # # # .
+    `);
+basic.showLeds(`
+    . # . # .
+    . . . . .
+    . . . . .
+    . # # # .
+    # . . . #
+    `);
+

The semicolon

+

In JavaScript, the semicolon (;) is used to terminate (or end) a statement. However, in most +cases, the semicolon is optional and can be omitted. So both code sequences below are +legal:

+
basic.showNumber(1)
+basic.showNumber(2)
+
basic.showNumber(1); 
+basic.showNumber(2);
+

The empty statement

+

In JavaScript, there is the concept of an empty statement, which is whitespace followed by +a semicolon in the context where a statement is expected. +So, the following code is an infinite loop +followed by a call to showNumber that will never execute:

+
while(true) ;
+basic.showNumber(1);
+ +
+
+ +

For the Calliope mini, we don’t allow a program to contain an empty statement, such as shown above. +If you really want an empty statement, you need to use curly braces to delimit an empty statement block:

+
while(true) { } 
+basic.showNumber(1);
+ +
+
+ +

Read more about semicolons in JavaScript.

+ + +

NEXT: Variable Declarations

+
+ + +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/js/statements.html b/docs/js/statements.html new file mode 100644 index 00000000..80931361 --- /dev/null +++ b/docs/js/statements.html @@ -0,0 +1,231 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

Statements

+

The following JavaScript statements are supported for the Calliope mini:

+

Variable declarations

+ +

Block-structured statements

+ +

Control-flow commands

+ +

Labelling statements

+ + + +

NEXT: Functions

+
+ + +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/js/types.html b/docs/js/types.html new file mode 100644 index 00000000..af08737d --- /dev/null +++ b/docs/js/types.html @@ -0,0 +1,287 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

Types

+

For programs to be useful, we need to be able to work with some of the simplest units of data: +numbers, strings, structures, boolean values, and the like.

+

Boolean

+

The most basic datatype is the simple true/false value, which is called a boolean value.

+
let isDone: boolean = false;
+

Number

+ +
+
+ +

In JavaScript, numbers are floating point values. +However, for the Calliope mini, numbers are integer values.

+ +
+
+ +

Integer values can be specified via decimal, hexadecimal and octal notation:

+
let decimal: number = 42;
+let hex: number = 0xf00d;
+let binary: number = 0b1010;
+let octal: number = 0o744;
+

String

+

As in other languages, we use the type string to refer to textual data. +Use double quotes (") or single quotes (') to surround string data.

+
let color: string = "blue";
+color = 'red';
+

You can also use template strings, which can span multiple lines and have embedded expressions. +These strings are surrounded by the backtick/backquote (` ) character, and embedded expressions are of the form ${ expr }.

+
let fullName: string = `Bob Bobbington`;
+let age: number = 37;
+let sentence: string = `Hello, my name is ${ fullName }.
+
+I'll be ${ age + 1 } years old next month.`
+

This is equivalent to declaring sentence like so:

+
let fullName: string = `Bob Bobbington`;
+let age: number = 37;
+let sentence: string = "Hello, my name is " + fullName + ".\n\n" +
+    "I'll be " + (age + 1) + " years old next month."
+

Array

+

Arrays allow you to work with an expandable sequence of values, addressed by an integer-valued index. +Array types can be written in one of two ways. +In the first, you use the type of the elements followed by [] to denote an array of that element type:

+
let list: number[] = [1, 2, 3];
+

The second way uses a generic array type, Array<elemType>:

+
let list: Array<number> = [1, 2, 3];
+ +
+
+ +

For the Calliope mini, all elements of an array must have the same type.

+ +
+
+ +

Enum

+

A helpful addition to the standard set of datatypes from JavaScript is the enum. +As in languages like C#, an enum is a way of giving more friendly names to sets of numeric values.

+
enum Color {Red, Green, Blue}
+let c: Color = Color.Green;
+

By default, enums begin numbering their members starting at 0. +You can change this by manually setting the value of one of its members. +For example, we can start the previous example at 1 instead of 0:

+
enum Color {Red = 1, Green, Blue}
+let c: Color = Color.Green;
+

Or, even manually set all the values in the enum:

+
enum Color {Red = 1, Green = 2, Blue = 4}
+let c: Color = Color.Green;
+

Any

+

The TypeScript type any is not supported in the Calliope mini.

+

Void

+

void is the absence of having any type at all. +You may commonly see this as the return type of functions that do not return a value:

+
function warnUser(): void {
+    basic.showString("This is my warning message");
+}
+

Declaring variables of type void is not useful.

+

Type Inference

+

In TypeScript, there are several places where type inference is used to provide type information when there is +no explicit type annotation. For example, in this code

+
let x = 3;
+let y = x + 3
+

The type of the x variable is inferred to be number. Similarly, the type of y variable also is inferred to be number. +This kind of inference takes place when initializing variables and members, +setting parameter default values, and determining function return types.

+ + +

NEXT: Classes

+
+ + +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/js/variables.html b/docs/js/variables.html new file mode 100644 index 00000000..158c4a2a --- /dev/null +++ b/docs/js/variables.html @@ -0,0 +1,276 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

Variable Declarations

+

Declaring a variable in JavaScript has always traditionally been done with the var keyword.

+
var a = 10;
+

The var construct has some problems, +which is why let statements were introduced. Apart from the keyword used, let statements are written +the same way var statements are.

+
let a = 10;
+

The key difference is not in the syntax, but in the semantics, which we’ll now dive into.

+

Block-scoping

+

When a variable is declared using let, it uses what some call lexical-scoping or block-scoping. +Unlike variables declared with var whose scopes leak out to their containing function, +block-scoped variables are not visible outside of their nearest containing block or for-loop.

+
function f(input: boolean) {
+    let a = 100;
+
+    if (input) {
+        // Still okay to reference 'a'
+        let b = a + 1;
+        return b;
+    }
+
+    // Error: 'b' doesn't exist here
+    return b;
+}
+

Here, we have two local variables a and b. +a‘s scope is limited to the body of f while b‘s scope is limited to the containing if statement’s block.

+

Another property of block-scoped variables is that they can’t be read or written to before they’re actually declared. +While these variables are “present” throughout their scope, all points up until their declaration are part of their temporal dead zone. +This is just a sophisticated way of saying you can’t access them before the let statement, and luckily TypeScript will let you know that.

+
a++; // illegal to use 'a' before it's declared;
+let a;
+

Re-declarations

+

With var declarations, it doesn’t matter how many times you declare your variables, you just get one:

+
var x = 10;
+var x = 20;
+

In the above example, all declarations of x actually refer to the same x, and this is perfectly valid. +This often ends up being a source of bugs. Thankfully, let declarations are not as forgiving.

+
let x = 10;
+let x = 20; // error: can't re-declare 'x' in the same scope
+

Shadowing

+

The act of introducing a new name in a more deeply nested scope is called shadowing. +It is a bit of a double-edged sword in that it can introduce certain bugs on its own in the +event of accidental shadowing, while also preventing certain bugs. +For instance, imagine a sumMatrix function using let variables.

+
function sumMatrix(matrix: number[][]) {
+    let sum = 0;
+    for (let i = 0; i < matrix.length; i++) {
+        var currentRow = matrix[i];
+        for (let i = 0; i < currentRow.length; i++) {
+            sum += currentRow[i];
+        }
+    }
+
+    return sum;
+}
+

This version of the loop will actually perform the summation correctly because the inner loop’s i shadows i from the outer loop. +Shadowing should usually be avoided in the interest of write clearer code, such as

+
function sumMatrix(matrix: number[][]) {
+    let sum = 0;
+    for (let i = 0; i < matrix.length; i++) {
+        var currentRow = matrix[i];
+        for (let j = 0; j < currentRow.length; j++) {
+            sum += currentRow[j];
+        }
+    }
+
+    return sum;
+}
+

While there are some scenarios where it may be fitting to take advantage of it, you should use your best judgement.

+

const declarations

+

const declarations are another way of declaring variables.

+
const numLivesForCat = 9;
+

They are like let declarations but, as their name implies, their value cannot be changed once they are bound. +In other words, they have the same scoping rules as let, but you can’t re-assign to them.

+ + +

NEXT: Operators

+
+ + +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference.html b/docs/reference.html new file mode 100644 index 00000000..82901a42 --- /dev/null +++ b/docs/reference.html @@ -0,0 +1,223 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + +
+

Reference

+ +
basic.showNumber(0);
+input.onButtonPressed(Button.A, () => {
+
+});
+music.playTone(0, 0);
+led.plot(0, 0);
+radio.sendNumber(0);
+

Advanced

+
game.addScore(1);
+images.createImage(`
+. . . . .
+. . . . .
+. . # . .
+. . . . .
+. . . . .
+`);
+pins.digitalReadPin(DigitalPin.P0);
+serial.writeNumber(0);
+control.inBackground(() => {
+
+});
+

Bluetooth

+
devices.tellCameraTo(MesCameraEvent.TakePhoto);
+bluetooth.onBluetoothConnected(() => {});
+
radio
+devices
+bluetooth
+

See Also

+

basic, input, music, led, Math (blocks), String, game, images, pins, serial, control, radio, devices, bluetooth

+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/basic.html b/docs/reference/basic.html new file mode 100644 index 00000000..99aa6aab --- /dev/null +++ b/docs/reference/basic.html @@ -0,0 +1,231 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

Basic

+

Provides access to basic Calliope mini functionality.

+
basic.showNumber(0);
+basic.showLeds(`
+. . . . .
+. . . . .
+. . # . .
+. . . . .
+. . . . .
+`);
+basic.showString("Hello!");
+basic.clearScreen();
+basic.forever(() => {
+
+});
+basic.pause(100);
+basic.plotLeds(`
+. . . . .
+. . . . .
+. . # . .
+. . . . .
+. . . . .
+`);
+basic.showAnimation(`
+. . . . .
+. . . . .
+. . # . .
+. . . . .
+. . . . .
+`);
+

See Also

+

showNumber, showLeds, showString, +clearScreen, forever, pause, +showAnimation

+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/basic/clear-screen.html b/docs/reference/basic/clear-screen.html new file mode 100644 index 00000000..b98db613 --- /dev/null +++ b/docs/reference/basic/clear-screen.html @@ -0,0 +1,213 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

Clear Screen

+

Turn off all the LED lights on the LED screen.

+
basic.clearScreen()
+

Example: Vanishing heart

+

The following code shows a heart on the screen and then turns off all the LED lights.

+
basic.showLeds(`
+. # . # . 
+# # # # # 
+# # # # # 
+. # # # . 
+. . # . . 
+`)
+basic.clearScreen()
+

See also

+

set brightness, unplot, plot, Image

+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/basic/forever.html b/docs/reference/basic/forever.html new file mode 100644 index 00000000..1afe6f42 --- /dev/null +++ b/docs/reference/basic/forever.html @@ -0,0 +1,245 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

Forever

+

Keep running part of a program +in the background.

+
basic.forever(() => {
+})
+

Example: compass

+

The following example constantly checks the +compass heading +and updates the screen with the direction.

+
basic.forever(() => {
+    let heading = input.compassHeading()
+    if (heading < 45) {
+        basic.showString("N", 100)
+    } else if (heading < 135) {
+        basic.showString("E", 100)
+    }
+    else if (heading < 225) {
+        basic.showString("S", 100)
+    }
+    else {
+        basic.showString("W", 100)
+    }
+})
+

Example: counter

+

The following example keeps showing the number stored in a global variable. +When you press button A, the number gets bigger. +You can use a program like this to count things with your Calliope mini.

+
let num = 0
+basic.forever(() => {
+    basic.showNumber(num, 150)
+})
+input.onButtonPressed(Button.A, () => {
+    num = num + 1
+})
+

Competing for the LED screen

+

If different parts of a program are each trying +to show something on the LED screen at the same time, +you may get unexpected results. +Try this on your Calliope mini:

+
basic.forever(() => {
+    basic.showNumber(6789, 150)
+})
+input.onButtonPressed(Button.A, () => {
+    basic.showNumber(2, 150)
+})
+

See also

+

while, on button pressed, in background

+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/basic/pause.html b/docs/reference/basic/pause.html new file mode 100644 index 00000000..98f15fe3 --- /dev/null +++ b/docs/reference/basic/pause.html @@ -0,0 +1,216 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

Pause

+

Pause the program for the number of milliseconds you say. +You can use this function to slow your program down.

+
basic.pause(400)
+

Parameters

+
    +
  • ms is the number of milliseconds that you want to pause (100 milliseconds = 1/10 second, and 1000 milliseconds = 1 second).
  • +
+

Example: diagonal line

+

This example draws a diagonal line by turning on LED 0, 0 (top left) through LED 4, 4 (bottom right). +The program pauses 500 milliseconds after turning on each LED. +Without pause, the program would run so fast that you would not have time to see each LED turning on.

+
for (let i = 0; i < 5; i++) {
+    led.plot(i, i)
+    basic.pause(500)
+}
+

See also

+

while, running time, for

+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/basic/show-animation.html b/docs/reference/basic/show-animation.html new file mode 100644 index 00000000..f063f706 --- /dev/null +++ b/docs/reference/basic/show-animation.html @@ -0,0 +1,253 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

Show Animation

+

Show a group of image frames (pictures) one after another on the LED screen. It pauses the amount of time you tell it after each frame.

+
basic.showAnimation(`
+. . # . . . # # # . . # # # .
+. # # . . . . . # . . . . # .
+. . # . . . . # . . . # # # .
+. . # . . . # . . . . . . # .
+. . # . . . # # # . . # # # .
+`)
+

Parameters

+
    +
  • leds is a String that shows which LEDs are on and off, in groups one after another.
  • +
  • interval is an optional Number. It means the number of milliseconds to pause after each image frame.
  • +
+

Example: Animating a group of image frames

+

In this animation, each row is 15 spaces wide because +there are three frames in the animation, and each frame is +five spaces wide, just like the screen on the Calliope mini.

+
basic.showAnimation(`
+. . # . . . # # # . . # # # .
+. # # . . . . . # . . . . # .
+. . # . . . . # . . . # # # .
+. . # . . . # . . . . . . # .
+. . # . . . # # # . . # # # .
+`)
+ +
+
+ +

If the animation is too fast, make interval bigger.

+ +
+
+ +

Example: animating frames with a pause

+

This example shows six frames on the screen, pausing 500 milliseconds after each frame.

+

In this animation, each row is 30 spaces wide because +there are six frames in the animation, and each frame is +five spaces wide, just like the screen.

+
basic.showAnimation(`
+. . . . . # . . . . . . . . . . . . . # . . . . . # . . . .
+. . # . . . . . . . . . # . . . . . . . . . # . . . . . . .
+. # . # . . . # . . . # . # . . . # . . . # . # . . . # . .
+. . # . . . . . . . . . # . . . . . . . . . # . . . . . . .
+. . . . . . . . . # . . . . . # . . . . . . . . . . . . . #
+`, 500)
+ +
+
+ +

Use forever to show an animation over and over.

+ +
+
+ + +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/basic/show-leds.html b/docs/reference/basic/show-leds.html new file mode 100644 index 00000000..ddb5f57c --- /dev/null +++ b/docs/reference/basic/show-leds.html @@ -0,0 +1,236 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

Show LEDs

+

Shows a picture on the LED screen.

+
basic.showLeds(`
+    . . . . .
+    . # . # .
+    . . # . .
+    # . . . #
+    . # # # .
+    `
+)
+

Parameters

+
    +
  • leds is a string that controls which LEDs are on and off.
  • +
  • interval is an optional number that means how many milliseconds to wait after showing a picture. +If you are programming with blocks, interval is set at 400 milliseconds.
  • +
+

Example

+

This program shows a picture with the show leds function.

+
basic.showLeds(`
+    # # . # #
+    # # . # #
+    . # # # .
+    . # . # .
+    . # . # .
+    `
+)
+ +
+
+ +

If you are programming in JavaScript, # means an LED that is turned +on and . means an LED that is turned off.

+ +
+
+ +

See also

+

plot leds, show animation

+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/basic/show-number.html b/docs/reference/basic/show-number.html new file mode 100644 index 00000000..f6cf3487 --- /dev/null +++ b/docs/reference/basic/show-number.html @@ -0,0 +1,225 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

Show Number

+

Show a number on the LED screen. It will slide left if it has more than one digit.

+
basic.showNumber(2, 150)
+

Parameters

+
    +
  • value is a Number.
  • +
  • interval is an optional Number. It means the number of milliseconds before sliding the value left by one LED each time. Bigger intervals make the sliding slower.
  • +
+

Examples:

+

To show the number 10:

+
basic.showNumber(10)
+

To show the number stored in a variable:

+
let x = 1
+basic.showNumber(x)
+

Example: count to 5

+

This example uses a for loop to show numbers 0 through 5 on the screen:

+
for (let i = 0; i < 6; i++) {
+    basic.showNumber(i)
+    basic.pause(200)
+}
+

Other show functions

+ +

See also

+

show string, show animation, Number, math

+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/basic/show-string.html b/docs/reference/basic/show-string.html new file mode 100644 index 00000000..cb9797da --- /dev/null +++ b/docs/reference/basic/show-string.html @@ -0,0 +1,219 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

Show String

+

Show a number on the LED screen. It will slide left if it is bigger than the screen.

+
basic.showString("Hello!")
+

Parameters

+
    +
  • text is a String. It can contain letters, numbers, and punctuation.
  • +
  • interval is an optional Number. It means the number of milliseconds before sliding the String left by one LED each time. Bigger intervals make the sliding slower.
  • +
+

Examples:

+

To show the word Hello:

+
basic.showString("Hello")
+

To show what is stored in a String variable:

+
let s = "Hi"
+basic.showString(s)
+

Other show functions

+ +

See also

+

String, show number, show animation

+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/bluetooth.html b/docs/reference/bluetooth.html new file mode 100644 index 00000000..bb7b1df0 --- /dev/null +++ b/docs/reference/bluetooth.html @@ -0,0 +1,234 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

Bluetooth

+

Support for additional Bluetooth services.

+ +
+
+ +

+

For another device like a smartphone to use any of the Bluetooth “services” which the Calliope mini has, it must first be paired with the Calliope mini. Once paired, the other device may connect to the Calliope mini and exchange data relating to many of the Calliope mini’s features.

+ +
+
+ +
bluetooth.startAccelerometerService();
+bluetooth.startButtonService();
+bluetooth.startIOPinService();
+bluetooth.startLEDService();
+bluetooth.startMagnetometerService();
+bluetooth.startTemperatureService();
+bluetooth.onBluetoothConnected(() => {});
+bluetooth.onBluetoothDisconnected(() => {});
+

UART

+
bluetooth.startUartService();
+bluetooth.uartReadUntil("");
+bluetooth.uartWriteString("");
+bluetooth.uartWriteNumber(0);
+bluetooth.uartWriteValue("", 0);
+
bluetooth
+

Advanced

+

For more advanced information on the Calliope mini Bluetooth UART service including information on using a smartphone, see the Lancaster University Calliope mini runtime technical documentation

+

See Also

+

startAccelerometerService, startButtonService, startIOPinService, startLEDService, startMagnetometerService, startTemperatureService, +startUartService, +uartReadUntil, +uartWriteString, +uartWriteNumber, +uartWriteValue, +onBluetoothConnected, onBluetoothDisconnected

+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/bluetooth/about-bluetooth.html b/docs/reference/bluetooth/about-bluetooth.html new file mode 100644 index 00000000..45bfe6b6 --- /dev/null +++ b/docs/reference/bluetooth/about-bluetooth.html @@ -0,0 +1,256 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

About Bluetooth

+

+

Introduction

+

Bluetooth is a wireless communications technology which allows devices to communicate with each other without the need for a central device like a router or access point.

+

Bluetooth has a special “low energy feature” which means it can be used without requiring much power from the devices using it. It’s the Bluetooth low energy feature which the Calliope mini uses.

+

In the world of Bluetooth low energy, a device has something called a “profile” which defines the way other devices are able to communicate over Bluetooth with it. In a way, the Bluetooth profile defines the way a device appears to other devices in terms of its features and the things it can do.

+

To put it another way, a Bluetooth profile is really an interface specification. It defines the data which a device has, what another device can do with that data over a Bluetooth connection and how the device with the profile should respond when a connected device acts upon its data in some way. Let’s look at that description in a little more technical detail.

+

Basic Concepts

+

A Bluetooth device contains a table of data called an Attribute Table which can be accessed by other connected devices in various possible ways. That table of data and the ways in which it can be exploited falls into a technical area of Bluetooth called the Generic Attribute profile or “GATT” for short and you may see the term GATT in some of the documentation for APIs such as those provided by the Android platform.

+

The Attribute Table contains something like a series of records of various types. The main types are called Services, Characteristics and Descriptors. Let’s look at each of these terms in turn.

+

Attributes

+

Services, Characteristics and Descriptors are all types of Attribute. Hence Generic Attribute Profile, Attribute Table and something called the Attribute Protocol. All attributes have a type which is identified by a UUID (Universally Unique Identifer). Some Attributes are defined by the Bluetooth SIG, the technical standards body for Bluetooth and these have UUIDs which are 16 bits in length. Some Attributes are custom designed for a particular device by the product team and these have 128 bit UUIDs. The Calliope mini uses a mixture of 16 bit and 128 bit UUIDs.

+

Structure

+

Services, Characteristics and Descriptors are organised in a hierarchy with Services at the top and Descriptors at the bottom. Services contain one or more Characteristics. A Characteristic owns zero or more Descriptors. Zero because Descriptors are completely optional whereas a Service must contain at least one Characteristic.

+

+

Services

+

A Service is a container for logically related Bluetooth data items. Those data items are in fact called Characteristics. A Service can be thought of as the owner of the Characteristics inside it. Often a Service represents a particular feature (e.g. a hardware feature) of a device like the buttons or a particular sensor. An example of a Bluetooth SIG defined Service is the Device Information Service which, as the name suggests, is a container for various items of information about the device such as its manufacturer and serial number. The Calliope mini has this service.

+

Characteristics

+

Characteristics are items of data which relate to a particular internal state of the device or perhaps some state of the environment which the device can measure using a sensor. The current battery level is an example of internal state data whereas the ambient temperature could perhaps be measured by a sensor. Sometimes Characteristics represent configuration data such as the frequency at which you want something to be measured. In any of these cases, the way a device can expose such data to other devices to use via Bluetooth is by making them available as a Characteristic. An example of a Bluetooth SIG defined Characteristic is the Serial Number String which you’ll find inside the Device Information service.

+

Characteristics contain various parts. They have a type, a value, some properties and some permissions.

+

Type is something already explained above, a UUID value which indicates which particular type of Characteristic an Attribute is. Value is the value of the associated state data item.

+

Properties define what another device can do with the characteristic over Bluetooth in terms of various defined operations such as READ, WRITE or NOTIFY. Reading a characteristic means transferring its current value from the attribute table to the connected device over Bluetooth. Writing allows the connected device to change that value in the state table. Notifications are a special message type which a device like the Calliope mini can send to a connected device whenever the value of the associated characteristic changes or perhaps periodically, controlled by a timer. Not all Characteristics support all operations. The Characteristic’s properties tell you which operations are supported.

+

Sometimes the device will have been programmed to respond in a special way when it processes an operation like reading or writing a value from the attribute table so operations can result in more happening than simply transferring data across the connection. Perhaps changing the value of a Characteristic will result in the device changing the frequency with which it samples readings from the device accelerometer for example.

+

Permissions are to do with security and further describe the security conditions that must be met before read or write access to the characteristic is to be granted.

+

Descriptors

+

Descriptors contain meta data which either augments the details relating to the Characteristic which the Descriptor belongs to or allows the configuration of a behaviour involving that Characteristic. Notification messages are switched on or off using a special descriptor called the Client Characteristic Configuration Descriptor for example.

+

Profile

+

A Bluetooth profile is a specification which pulls together all the required information about how a device behaves, how it can be accessed in terms of its services, characteristics and descriptors, security rules, concurrency limitations and so on.

+

Client Server Architecture

+

When a smartphone application interacts with a device like the Calliope mini over a Bluetooth connection we have a client/server architecture. The phone application is usually the GATT client and the Calliope mini is usually the GATT server. They communicate using a protocol called the Attribute Protocol or just ATT for short. As a smartphone developer you work with APIs and do not have to worry about formulating ATT protocol data units and so on.

+

+

Device Discovery

+

Everything described above relates to devices which are connected and communicating as GATT client and server. But there’s a stage which precedes this where the two devices are not yet connected. How do they find each other and connect? The answer to this question is termed ‘Device Discovery’ and is the responsibility of another part of the Bluetooth architecture called the Generic Access Profile (GAP).

+

In GAP, one devices advertises, emitting small packets of data periodically. These packets contain information about the device doing the advertising. Other devices looking for devices to connect to perform something called scanning, receiving and processing advertising packets and filtering out those that come from devices of a type that are not of interest. Usually the user is given information about devices which are discovered and they then select one to be connected to. The device which advertises is called a Bluetooth Peripheral whereas the one doing the scanning is a Bluetooth Central device. Calliope mini is a Bluetooth peripheral.

+

Bluetooth on the Calliope mini

+

Full documentation for the Calliope mini Bluetooth profile as used by this application can be found at the Lancaster University documentation web site.

+

The Calliope mini’s accelerometer (motion detector), magnetometer (digital compass), two buttons on the front, LED Display, IO pins on the edge connector, internal message bus and internal temperature sensor are all exposed as Services so that applications can exploit these features of the device. In addition:

+
    +
  • the Bluetooth SIG defined Device Information Service is included to allow applications to obtain information such as firmware version details over Bluetooth
  • +
  • there’s a Device Firmware Update (DFU) service which allows new Calliope mini code to be flahsed to the device over Bluetooth instead of over USB
  • +
  • there’s a UART service which allows arbitrary data to be exchanged with the Calliope mini in a way resembling traditional serial communications.
  • +
+

Everything you can do with the Calliope mini over Bluetooth is achieved through read, write and notify operations. Not all characteristics support all three so check the profile documentation. Often there are Characteristics whose purpose is to allow you to write configuration values which control other behviours. Technically these are called Control Points. For example you can specify the frequency with which accelerometer data is sampled before it is transmitted as a Notification message to your application.

+

Want to Know More?

+

The Bluetooth SIG web site at http://www.bluetooth.com is a good place for further information about Bluetooth in general. You’ll find all the SIG defined profiles, services, characteristics and descriptors there as well as the core specification for all Bluetooth technology.

+

That’s it! Enjoy using Bluetooth on the Calliope mini!

+

Martin Woolley, Bluetooth SIG. Twitter: @bluetooth_mdw

+

Video

+ +
+
+
+
+
+ +

See also

+

About Bluetooth, Calliope mini Bluetooth profile overview , Calliope mini Bluetooth profile reference, Bluetooth on Calliope mini resources, Bluetooth SIG

+
bluetooth
+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/bluetooth/bluetooth-pairing.html b/docs/reference/bluetooth/bluetooth-pairing.html new file mode 100644 index 00000000..900fa90e --- /dev/null +++ b/docs/reference/bluetooth/bluetooth-pairing.html @@ -0,0 +1,296 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

Bluetooth Pairing

+ +
+
+ +

+

For another device like a smartphone to use any of the Bluetooth “services” which the Calliope mini has, it must first be paired with the Calliope mini. Once paired, the other device may connect to the Calliope mini and exchange data relating to many of the Calliope mini’s features.

+ +
+
+ +

What is ‘pairing’?

+

‘Pairing’ is what you have to do to have your Calliope mini trust another device like a smartphone and similarly, have your smartphone trust your Calliope mini. Why ‘trust’? Well, pairing is all about security. You wouldn’t usually want just anyone’s smartphone connecting to your Calliope mini and making it do things so by pairing your smartphone with your Calliope mini you ensure that only your devices can talk to each other.

+

Once you’ve paired your Calliope mini with another device it also means that they are able to exchange information privately, without someone else being able to “see” the data they’re exchanging over the air using Bluetooth. This is accomplished by data being encrypted and pairing makes it possible for devices who trust each other to encrypt and decrypt data from each other.

+

How do you pair your Calliope mini with another device?

+

Making your Calliope mini pair requires you to follow some simple steps which will be described shortly. What you do with the device you’re pairing it to will vary slightly depending on what that device is. We’ll look at how it’s done with common smartphones and tablets here too.

+

To get your Calliope mini ready for pairing do the following:

+
    +
  1. Hold down buttons A and B on the front of your Calliope mini together. The front is the side with two buttons and the LED display. Keep the two buttons held down. Don’t let go of them yet!
  2. +
  3. While still holding down buttons A and B, press and then release the reset button on the back of the Calliope mini. Keep holding down buttons A and B.
  4. +
  5. You should see “PAIRING MODE!” start to scroll across the Calliope mini display. When you see this message start to appear you can release buttons A and B.
  6. +
  7. Eventually you’ll see a strange pattern on your Calliope mini display. This is like your Calliope mini’s signature. Other people’s Calliope minis will probably display a different pattern.
  8. +
+

Your Calliope mini is now ready to be paired with the other device. Read the section below which relates to your ‘other’ device and watch the video too.

+

How do you pair your Calliope mini with a Windows smartphone or tablet?

+
    +
  1. Go into Settings
  2. +
  3. Select Bluetooth
  4. +
  5. Switch your Calliope mini into ‘pairing mode’ using the steps above
  6. +
  7. Wait until ‘PAIRING MODE!’ has finished scrolling across the Calliope mini display. You should see your Calliope mini listed on your Windows smartphone with a name something like ‘Calliope mini [zatig]’. Note that the 5 characters in brackets at the end will vary.
  8. +
  9. On the Windows smartphone, tap the Calliope mini named in the device list. This will initiate the pairing process.
  10. +
  11. The Calliope mini will display a left pointing arrow and the Windows smartphone will pop up a box into which you will be invited to enter a “pin” (Personal Identity Number).
  12. +
  13. Press button A on the Calliope mini and watch carefully as the Calliope mini displays a sequence of 6 random numbers. You may find it easier to write them down than to remember them.
  14. +
  15. Enter the 6 digits which the Calliope mini displayed into your Windows smartphone in the pop-up box provided and then select “done”.
  16. +
  17. If you entered the right number the Calliope mini will display a tick / check mark. If you made a mistake it will display a cross or X and you should repeat the process to try again.
  18. +
+

Video

+ +
+
+
+
+
+ +

How do you pair your Calliope mini with an Android smartphone or tablet?

+
    +
  1. Go into Settings
  2. +
  3. Select Bluetooth
  4. +
  5. Switch your Calliope mini into ‘pairing mode’ using the steps above
  6. +
  7. Wait until ‘PAIRING MODE!’ has finished scrolling across the Calliope mini display. You should see your Calliope mini listed on your Android smartphone under the heading “Available devices” with a name something like ‘Calliope mini [zatig]’. Note that the 5 characters in brackets at the end will vary.
  8. +
  9. On the Android smartphone, tap the Calliope mini named in the Available devices list. This will initiate the pairing process.
  10. +
  11. The Calliope mini will display a left pointing arrow and the Android smartphone will pop up a box into which you will be invited to enter a “pin” (Personal Identity Number).
  12. +
  13. Press button A on the Calliope mini and watch carefully as the Calliope mini displays a sequence of 6 random numbers. You may find it easier to write them down than to remember them.
  14. +
  15. Enter the 6 digits which the Calliope mini displayed into your Android smartphone in the pop-up box provided and then select “done”.
  16. +
  17. If you entered the right number the Calliope mini will display a tick / check mark. If you made a mistake it will display a cross or X and you should repeat the process to try again.
  18. +
+

Video

+ +
+
+
+
+
+ +

How do you pair your Calliope mini with an Apple iOS smartphone or tablet?

+

The steps to pair with an Apple iOS device are different to those followed for an Android or Windows device. To trigger pairing you need an application which will try to interact with your Calliope mini and it’s that interaction that triggers the iOS pairing process. There are many you could use but for the purposes of this documentation we’ll suggest you install the “nRF Master Control Panel” (nRF MCP) application from Nordic Semiconductor. You’ll find it in the Apple app store. It’s a really useful Bluetooth application which will help you learn about Bluetooth as well as it having the ability to trigger the pairing process. After installing nRF MCP you should follow these steps to pair with your Calliope mini:

+
    +
  1. Switch your Calliope mini into ‘pairing mode’ using the steps above
  2. +
  3. Wait until ‘PAIRING MODE!’ has finished scrolling across the Calliope mini display.
  4. +
  5. Launch the nRF MCP application. Your Calliope mini should be listed and have a “Connect” button next to it.
  6. +
  7. Select “Connect” to connect your Apple device to the Calliope mini. This will trigger the pairing process.
  8. +
  9. The Calliope mini will display a left pointing arrow and the Apple device will pop up a box into which you will be invited to enter a “pin” (Personal Identity Number).
  10. +
  11. Press button A on the Calliope mini and watch carefully as the Calliope mini displays a sequence of 6 random numbers. You may find it easier to write them down than to remember them.
  12. +
  13. Enter the 6 digits which the Calliope mini displayed into your Apple device in the pop-up box provided and then select “Pair”.
  14. +
  15. If you entered the right number the Calliope mini will display a tick / check mark. If you made a mistake it will display a cross or X and you should repeat the process to try again.
  16. +
+

Video

+ +
+
+
+
+
+ +

How often do I need to pair my Calliope mini with my phone?

+

You do not need to pair your Calliope mini and smartphone or tablet every time you use them together. Pairing establishes ‘trust’ which will be retained until it is somehow lost. When another device wants to talk to your Calliope mini it must connect to it but connecting and pairing are not the same thing.

+

There are circumstances which will result in pairing data being lost however and when this happens you will need to pair again.

+

Currently, flashing new code via a USB cable causes the Calliope mini’s Bluetooth pairing data to be lost. Consequently, if you do flash new code to your Calliope mini using a USB cable you will need to pair again.

+

In contrast if you upload new code to your Calliope mini over Bluetooth, using for example the Samsung Calliope mini application for Android devices, you will not need to pair again.

+

If you do find yourself needing to pair again you will first need to remove the pairing from your other device (i.e. smartphone or tablet):

+
    +
  • On Android go into Settings/Bluetooth, select the ‘cog’ next to your Calliope mini and then select FORGET
  • +
  • On iOS go into Settings/Bluetooth, select your Calliope mini and then select Forget This Device
  • +
  • On a Windows device go into Settings/Bluetooth. Press and hold the Calliope mini entry on the Windows device. A pop-up will appear with the option “delete”. Select “delete” to unpair your Calliope mini.
  • +
+

See also

+

About Bluetooth, Calliope mini Bluetooth profile overview , Calliope mini Bluetooth profile reference, Bluetooth on Calliope mini resources, Bluetooth SIG

+
bluetooth
+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/bluetooth/on-bluetooth-connected.html b/docs/reference/bluetooth/on-bluetooth-connected.html new file mode 100644 index 00000000..7f129db7 --- /dev/null +++ b/docs/reference/bluetooth/on-bluetooth-connected.html @@ -0,0 +1,228 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

On Bluetooth Connected

+ +
+
+ +

+

For another device like a smartphone to use any of the Bluetooth “services” which the Calliope mini has, it must first be paired with the Calliope mini. Once paired, the other device may connect to the Calliope mini and exchange data relating to many of the Calliope mini’s features.

+ +
+
+ +

This block starts an event handler which in this case will run +when something connects to your Calliope mini using Bluetooth.

+
bluetooth.onBluetoothConnected(() => {});
+

Example

+

You could use this event handler to display a letter “C” on the Calliope mini LED grid so you know you have a Bluetooth connection. Or you might want to send some data you’ve been accumulating to your smartphone as soon as it connects to your Calliope mini. Maybe you’ve been using the accelerometer in your Calliope mini to count your steps for example. Using this event handler you could send the accumulated step count to your phone when it establishes a Bluetooth connection.

+
bluetooth.onBluetoothConnected(() => {
+    basic.showString("C");
+});
+

Video - on Bluetooth connected

+ +
+
+
+
+
+ +

See also

+

About Bluetooth, Calliope mini Bluetooth profile overview , Calliope mini Bluetooth profile reference, Bluetooth on Calliope mini resources, Bluetooth SIG

+
bluetooth
+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/bluetooth/on-bluetooth-disconnected.html b/docs/reference/bluetooth/on-bluetooth-disconnected.html new file mode 100644 index 00000000..47f4e9b0 --- /dev/null +++ b/docs/reference/bluetooth/on-bluetooth-disconnected.html @@ -0,0 +1,228 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

On Bluetooth Disconnected

+ +
+
+ +

+

For another device like a smartphone to use any of the Bluetooth “services” which the Calliope mini has, it must first be paired with the Calliope mini. Once paired, the other device may connect to the Calliope mini and exchange data relating to many of the Calliope mini’s features.

+ +
+
+ +

This block starts an event handler which in this case will run when a device which is connected to your Calliope mini over Bluetooth disconnects.

+

You could use this event handler to display a letter “D” on the Calliope mini LED grid so you know that the Bluetooth connection has been closed.

+
bluetooth.onBluetoothDisconnected(() => {
+});
+

Example: Displaying “D” when a Bluetooth connection to the Calliope mini is closed

+
bluetooth.onBluetoothDisconnected(() => {
+    basic.showString("D");
+});
+

Video - on Bluetooth disconnected

+ +
+
+
+
+
+ +

See also

+

About Bluetooth, Calliope mini Bluetooth profile overview , Calliope mini Bluetooth profile reference, Bluetooth on Calliope mini resources, Bluetooth SIG

+
bluetooth
+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/bluetooth/start-accelerometer-service.html b/docs/reference/bluetooth/start-accelerometer-service.html new file mode 100644 index 00000000..d91e98dc --- /dev/null +++ b/docs/reference/bluetooth/start-accelerometer-service.html @@ -0,0 +1,229 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

Bluetooth Accelerometer Service

+ +
+
+ +

+

For another device like a smartphone to use any of the Bluetooth “services” which the Calliope mini has, it must first be paired with the Calliope mini. Once paired, the other device may connect to the Calliope mini and exchange data relating to many of the Calliope mini’s features.

+ +
+
+ +

The Bluetooth accelerometer service allows another device such as a smartphone to wirelessly receive data from the Calliope mini’s accelerometer. An accelerometer detects motion. More precisely, it measures acceleration in one or more of three directions which we call X, Y and Z.

+

Using the Bluetooth accelerometer service you could, for example, create a smartphone application which makes a loud noise whenever your Calliope mini (or the important thing you’ve attached it to) is moved. Or you could use your Calliope mini to control the movement of a cartoon character in a game on your smartphone just by tilting the Calliope mini in the direction you want the character to move in.

+

No additional code is needed on the Calliope mini to use the Bluetooth accelerometer service from another device.

+
bluetooth.startAccelerometerService();
+

Example: Starting the Bluetooth accelerometer service

+

The following code shows the Bluetooth accelerometer service being started:

+
bluetooth.startAccelerometerService();
+

Video - Accelerometer service demo - Starts at 0:18

+ +
+
+
+
+
+ +

Advanced

+

For more advanced information on the Calliope mini Bluetooth accelerometer service including information on using a smartphone, see the Lancaster University Calliope mini runtime technical documentation

+

See also

+

About Bluetooth, Calliope mini Bluetooth profile overview , Calliope mini Bluetooth profile reference, Bluetooth on Calliope mini resources, Bluetooth SIG

+
bluetooth
+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/bluetooth/start-button-service.html b/docs/reference/bluetooth/start-button-service.html new file mode 100644 index 00000000..bed4f5b7 --- /dev/null +++ b/docs/reference/bluetooth/start-button-service.html @@ -0,0 +1,234 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

Bluetooth Button Service

+ +
+
+ +

+

For another device like a smartphone to use any of the Bluetooth “services” which the Calliope mini has, it must first be paired with the Calliope mini. Once paired, the other device may connect to the Calliope mini and exchange data relating to many of the Calliope mini’s features.

+ +
+
+ +

The Bluetooth button service makes it possible for another device such as a smartphone to be notified wirelessly whenever a button on the front of a Calliope mini is pressed. Each of the two Calliope mini buttons can be in one of three possible states:

+
    +
  • Not pressed
  • +
  • Pressed
  • +
  • Long press - pressed and held down for at least 2 seconds
  • +
+

The button service allows you to make other things which are connected to your Calliope mini using Bluetooth respond in some way when you press either of the buttons. You could, for example, hide your smartphone somewhere in the room and have it make an amusing noise when you press either of the buttons on your Calliope mini. We’ll leave it to you to decide what would be amusing.

+

No additional code is needed on the Calliope mini to use the Bluetooth button service from another device.

+
bluetooth.startButtonService();
+

Example: Starting the Bluetooth button service

+

The following code shows the Bluetooth button service being started:

+
bluetooth.startButtonService();
+

Video - Button service demo - Starts at 0:59

+ +
+
+
+
+
+ +

Advanced

+

For more advanced information on the Calliope mini Bluetooth button service including information on using a smartphone, see the Lancaster University Calliope mini runtime technical documentation

+

See also

+

About Bluetooth, Calliope mini Bluetooth profile overview , Calliope mini Bluetooth profile reference, Bluetooth on Calliope mini resources, Bluetooth SIG

+
bluetooth
+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/bluetooth/start-io-pin-service.html b/docs/reference/bluetooth/start-io-pin-service.html new file mode 100644 index 00000000..16cd7da4 --- /dev/null +++ b/docs/reference/bluetooth/start-io-pin-service.html @@ -0,0 +1,228 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

Bluetooth IO Pin Service

+ +
+
+ +

+

For another device like a smartphone to use any of the Bluetooth “services” which the Calliope mini has, it must first be paired with the Calliope mini. Once paired, the other device may connect to the Calliope mini and exchange data relating to many of the Calliope mini’s features.

+ +
+
+ +

The Bluetooth IO pin service makes it possible for another device such as a smartphone to communicate with other electronic ‘things’ connected to a Calliope mini’s edge connector. You could for example, use your smartphone to switch on or off a light which is connected to the Calliope mini or your smartphone could receive data collected from a sensor connected to the Calliope mini. In fact you could do both of these things at the same time since the Bluetooth IO pin service lets you interact with multiple ‘pins’ on the edge conector in different ways all at the same time.

+

No additional code is needed on the Calliope mini to use the Bluetooth IO pin service from another device.

+
bluetooth.startIOPinService();
+

Example: Starting the Bluetooth IO pin service

+

The following code shows the Bluetooth IO pin service being started:

+
bluetooth.startIOPinService();
+

Video - IO pin service demo starts at 3:49

+ +
+
+
+
+
+ +

Advanced

+

For more advanced information on the Calliope mini Bluetooth IO pin service including information on using a smartphone, see the Lancaster University Calliope mini runtime technical documentation

+

See also

+

About Bluetooth, Calliope mini Bluetooth profile overview , Calliope mini Bluetooth profile reference, Bluetooth on Calliope mini resources, Bluetooth SIG

+
bluetooth
+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/bluetooth/start-led-service.html b/docs/reference/bluetooth/start-led-service.html new file mode 100644 index 00000000..f300fe99 --- /dev/null +++ b/docs/reference/bluetooth/start-led-service.html @@ -0,0 +1,229 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

Bluetooth LED Service

+ +
+
+ +

+

For another device like a smartphone to use any of the Bluetooth “services” which the Calliope mini has, it must first be paired with the Calliope mini. Once paired, the other device may connect to the Calliope mini and exchange data relating to many of the Calliope mini’s features.

+ +
+
+ +

The Bluetooth LED service allows another device such as a smartphone to send short text strings or patterns over a Bluetooth connection to a Calliope mini for display on its LED matrix. Text will scroll across the Calliope mini and the speed at which it scrolls can also be controlled using the Bluetooth LED service. Devices using the LED service may also read the current state of the Calliope mini’s LED matrix.

+

So you could, for example, draw a smiley face in a smartphone app and at the press of a button, have it magically appear on your Calliope mini on the other side of the room. Or you could program your smartphone to send a message to your Calliope mini whenever your phone receives an email, SMS or social media message so you could wear your Calliope mini like a smart watch and leave your phone in your bag.

+

No additional code is needed on the Calliope mini to use the Bluetooth LED service from another device.

+
bluetooth.startLEDService();
+

Example: Starting the Bluetooth LED service

+

The following code shows the Bluetooth LED service being started:

+
bluetooth.startLEDService();
+

Video - LED service demo starts at 2:00

+ +
+
+
+
+
+ +

Advanced

+

For more advanced information on the Calliope mini Bluetooth LED service including information on using a smartphone, see the Lancaster University Calliope mini runtime technical documentation

+

See also

+

About Bluetooth, Calliope mini Bluetooth profile overview , Calliope mini Bluetooth profile reference, Bluetooth on Calliope mini resources, Bluetooth SIG

+
bluetooth
+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/bluetooth/start-magnetometer-service.html b/docs/reference/bluetooth/start-magnetometer-service.html new file mode 100644 index 00000000..00a3bcfc --- /dev/null +++ b/docs/reference/bluetooth/start-magnetometer-service.html @@ -0,0 +1,229 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

Bluetooth Magnetometer Service

+ +
+
+ +

+

For another device like a smartphone to use any of the Bluetooth “services” which the Calliope mini has, it must first be paired with the Calliope mini. Once paired, the other device may connect to the Calliope mini and exchange data relating to many of the Calliope mini’s features.

+ +
+
+ +

The Bluetooth magnetometer service allows another device such as a smartphone to wirelessly receive data from the Calliope mini’s magnetometer. The magnetometer measures the strength and direction of magnetic fields including the earth’s and so it can be used as a digital compass and indicate the way the Calliope mini is pointing relative to magnetic north.

+

Using the Bluetooth magnetometer service you could, for example, create a smartphone application which displays your direction of travel, updating it in real time.

+

No additional code is needed on the Calliope mini to use the Bluetooth magnetometer service from another device.

+
bluetooth.startMagnetometerService();
+

Example: Starting the Bluetooth magnetometer service

+

The following code shows the Bluetooth magnetometer service being started:

+
bluetooth.startMagnetometerService();
+

Video - Magnetometer service demo

+ +
+
+
+
+
+ +

Advanced

+

For more advanced information on the Calliope mini Bluetooth magnetometer service including information on using a smartphone, see the Lancaster University Calliope mini runtime technical documentation

+

See also

+

About Bluetooth, Calliope mini Bluetooth profile overview , Calliope mini Bluetooth profile reference, Bluetooth on Calliope mini resources, Bluetooth SIG

+
bluetooth
+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/bluetooth/start-temperature-service.html b/docs/reference/bluetooth/start-temperature-service.html new file mode 100644 index 00000000..74c6a5af --- /dev/null +++ b/docs/reference/bluetooth/start-temperature-service.html @@ -0,0 +1,229 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

Bluetooth Temperature Service

+ +
+
+ +

+

For another device like a smartphone to use any of the Bluetooth “services” which the Calliope mini has, it must first be paired with the Calliope mini. Once paired, the other device may connect to the Calliope mini and exchange data relating to many of the Calliope mini’s features.

+ +
+
+ +

A Calliope mini is able to provide a rough measure of the current environmental temperature. It’s an approximation only as in fact the temperature value is inferred from the temperature of its main processor. The Bluetooth temperature service allows another device such as a smartphone to wirelessly find out the Calliope mini’s current temperature reading or to receive a constant stream of temperature data values. Temperature values are expressed in degrees celsius.

+

Using the Bluetooth temperature service you could turn your smartphone or tablet into a graphical thermometer using your Calliope mini as the sensor.

+

No additional code is needed on the Calliope mini to use the Bluetooth temperature service from another device.

+
bluetooth.startTemperatureService();
+

Example: Starting the Bluetooth temperature service

+

The following code shows the Bluetooth temperature service being started:

+
bluetooth.startTemperatureService();
+

Video - Temperature service demo - Starts at 3:05

+ +
+
+
+
+
+ +

Advanced

+

For more advanced information on the Calliope mini Bluetooth temperature service including information on using a smartphone, see the Lancaster University Calliope mini runtime technical documentation

+

See also

+

About Bluetooth, Calliope mini Bluetooth profile overview , Calliope mini Bluetooth profile reference, Bluetooth on Calliope mini resources, Bluetooth SIG

+
bluetooth
+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/bluetooth/start-uart-service.html b/docs/reference/bluetooth/start-uart-service.html new file mode 100644 index 00000000..0f3e3b73 --- /dev/null +++ b/docs/reference/bluetooth/start-uart-service.html @@ -0,0 +1,230 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

Bluetooth UART Service

+ +
+
+ +

+

For another device like a smartphone to use any of the Bluetooth “services” which the Calliope mini has, it must first be paired with the Calliope mini. Once paired, the other device may connect to the Calliope mini and exchange data relating to many of the Calliope mini’s features.

+ +
+
+ +

The Bluetooth UART service allows another device such as a smartphone to exchange any data it wants to with the Calliope mini, in small chunks which are intended to be joined together. [UART[(https://en.wikipedia.org/wiki/Universal_asynchronous_receiver/transmitter) stands for Universal Asynchronous Receiver Transmitter and is one way in which serial data communications can be performed, usually between two devices connected by a physical, wired connection. The Bluetooth UART service emulates the behaviour of a physical UART system and allows the exchange of a maximum of 20 bytes of data at a time in either direction.

+

When this service is used, the Calliope mini sets up a 60 byte buffer and data it receives will be accumulated in the buffer until it is full. When using the UART service from your Calliope mini code, you can indicate a special character which will be used to mean that the entire message in at most three chunks has now been sent by the other, connected device, at which point the Calliope mini will release the entire contents of its buffer to any code trying to read it. In other words this special character, known as a ‘delimiter’ is used by the device connected to the Calliope mini to mean “I’ve sent my whole message, you can now use it”.

+

You could use the UART service for many things. It doesn’t care what you put in messages which makes it very flexible. You could create a guessing game, with questions and answers passing between Calliope mini and a smartphone or you could connect a camera to the Calliope mini and transmit image data obtained from the edge connector, in chunks over Bluetooth to a smartphone. There are a great many possibilities.

+

To use the Bluetooth UART service from another device you’ll need additional Calliope mini code which reads and uses data from the UART buffer and / or writes data to the buffer for transmission over Bluetooth to another device.

+
bluetooth.startUartService();
+

Example: Starting the Bluetooth UART service

+

The following code shows the Bluetooth UART service being started:

+
bluetooth.startUartService();
+

Video - UART service guessing game

+ +
+
+
+
+
+ +

Advanced

+

For more advanced information on the Calliope mini Bluetooth UART service including information on using a smartphone, see the Lancaster University Calliope mini runtime technical documentation

+

See also

+

About Bluetooth, Calliope mini Bluetooth profile overview , Calliope mini Bluetooth profile reference, Bluetooth on Calliope mini resources, Bluetooth SIG

+
bluetooth
+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/bluetooth/uart-read-until.html b/docs/reference/bluetooth/uart-read-until.html new file mode 100644 index 00000000..90549282 --- /dev/null +++ b/docs/reference/bluetooth/uart-read-until.html @@ -0,0 +1,240 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

UART Read

+ +
+
+ +

+

For another device like a smartphone to use any of the Bluetooth “services” which the Calliope mini has, it must first be paired with the Calliope mini. Once paired, the other device may connect to the Calliope mini and exchange data relating to many of the Calliope mini’s features.

+ +
+
+ +

The Bluetooth UART service allows another device such as a smartphone to exchange any data it wants to with the Calliope mini, in small chunks.

+

With the Bluetooth UART service running, this block allows a Calliope mini to read data which has been received from a Bluetooth connected device, terminating reading and returning the value obtained as soon as a specified delimiter character is encountered. This means that connected devices can send data to the Calliope mini and indicate that the complete message has been sent by appending the message with the delimiter character.

+
bluetooth.uartReadUntil("");
+

Example: Starting the Bluetooth UART service and then reading data received from another device which is terminated by “:” character and then displaying it

+
let uartData = "";
+let connected = 0;
+basic.showString("UART");
+bluetooth.onBluetoothConnected(() => {
+    basic.showString("C");
+    connected = 1;
+    while (connected == 1) {
+        uartData = bluetooth.uartReadUntil(":");
+        basic.showString(uartData);
+    }
+});
+bluetooth.onBluetoothDisconnected(() => {
+    basic.showString("D");
+});
+

Video - UART service guessing game

+ +
+
+
+
+
+ +

Advanced

+

For more advanced information on the Calliope mini Bluetooth UART service including information on using a smartphone, see the Lancaster University Calliope mini runtime technical documentation

+

See also

+

About Bluetooth, Calliope mini Bluetooth profile overview , Calliope mini Bluetooth profile reference, Bluetooth on Calliope mini resources, Bluetooth SIG

+
bluetooth
+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/bluetooth/uart-write-number.html b/docs/reference/bluetooth/uart-write-number.html new file mode 100644 index 00000000..ed40ccd5 --- /dev/null +++ b/docs/reference/bluetooth/uart-write-number.html @@ -0,0 +1,217 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

UART Write Number

+ +
+
+ +

+

For another device like a smartphone to use any of the Bluetooth “services” which the Calliope mini has, it must first be paired with the Calliope mini. Once paired, the other device may connect to the Calliope mini and exchange data relating to many of the Calliope mini’s features.

+ +
+
+ +

The Bluetooth UART service allows another device such as a smartphone to exchange any data it wants to with the Calliope mini, in small chunks.

+

With the Bluetooth UART service running, this block allows a Calliope mini to send data to a Bluetooth connected device.

+
bluetooth.uartWriteNumber(42);
+

Advanced

+

For more advanced information on the Calliope mini Bluetooth UART service including information on using a smartphone, see the Lancaster University Calliope mini runtime technical documentation

+

See also

+

About Bluetooth, Calliope mini Bluetooth profile overview , Calliope mini Bluetooth profile reference, Bluetooth on Calliope mini resources, Bluetooth SIG

+
bluetooth
+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/bluetooth/uart-write-string.html b/docs/reference/bluetooth/uart-write-string.html new file mode 100644 index 00000000..5dd6156e --- /dev/null +++ b/docs/reference/bluetooth/uart-write-string.html @@ -0,0 +1,240 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

UART Write String

+ +
+
+ +

+

For another device like a smartphone to use any of the Bluetooth “services” which the Calliope mini has, it must first be paired with the Calliope mini. Once paired, the other device may connect to the Calliope mini and exchange data relating to many of the Calliope mini’s features.

+ +
+
+ +

The Bluetooth UART service allows another device such as a smartphone to exchange any data it wants to with the Calliope mini, in small chunks.

+

With the Bluetooth UART service running, this block allows a Calliope mini to send data to a Bluetooth connected device.

+
bluetooth.uartWriteString("");
+

Example: Starting the Bluetooth UART service and then sending “HELLO” whenever button A is pressed and another device has connected over Bluetooth

+
let connected = 0;
+bluetooth.onBluetoothConnected(() => {
+    basic.showString("C");
+    connected = 1;
+});
+bluetooth.onBluetoothDisconnected(() => {
+    basic.showString("D");
+    connected = 0;
+});
+input.onButtonPressed(Button.A, () => {
+    if (connected == 1) {
+        bluetooth.uartWriteString("HELLO");
+    }
+});
+

Video - UART service guessing game

+ +
+
+
+
+
+ +

Advanced

+

For more advanced information on the Calliope mini Bluetooth UART service including information on using a smartphone, see the Lancaster University Calliope mini runtime technical documentation

+

See also

+

About Bluetooth, Calliope mini Bluetooth profile overview , Calliope mini Bluetooth profile reference, Bluetooth on Calliope mini resources, Bluetooth SIG

+
bluetooth
+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/bluetooth/uart-write-value.html b/docs/reference/bluetooth/uart-write-value.html new file mode 100644 index 00000000..32d0ec94 --- /dev/null +++ b/docs/reference/bluetooth/uart-write-value.html @@ -0,0 +1,217 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

UART Write Value

+ +
+
+ +

+

For another device like a smartphone to use any of the Bluetooth “services” which the Calliope mini has, it must first be paired with the Calliope mini. Once paired, the other device may connect to the Calliope mini and exchange data relating to many of the Calliope mini’s features.

+ +
+
+ +

The Bluetooth UART service allows another device such as a smartphone to exchange any data it wants to with the Calliope mini, in small chunks.

+

With the Bluetooth UART service running, this block allows a Calliope mini to send data to a Bluetooth connected device.

+
bluetooth.uartWriteValue("x", 42);
+

Advanced

+

For more advanced information on the Calliope mini Bluetooth UART service including information on using a smartphone, see the Lancaster University Calliope mini runtime technical documentation

+

See also

+

About Bluetooth, Calliope mini Bluetooth profile overview , Calliope mini Bluetooth profile reference, Bluetooth on Calliope mini resources, Bluetooth SIG

+
bluetooth
+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/control.html b/docs/reference/control.html new file mode 100644 index 00000000..ff4fcdb1 --- /dev/null +++ b/docs/reference/control.html @@ -0,0 +1,206 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

Control

+

Runtime and event utilities.

+
control.inBackground(() => {
+
+});
+control.reset();
+control.waitMicros(4);
+

See Also

+

inBackground, reset, wait-micros

+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/control/device-name.html b/docs/reference/control/device-name.html new file mode 100644 index 00000000..b08e5326 --- /dev/null +++ b/docs/reference/control/device-name.html @@ -0,0 +1,203 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

Device Name

+

Gets a friendly name for the device derived from the its serial number.

+
control.deviceName();
+

This is an advanced API. For more information, see the +Calliope mini runtime messageBus documentation.

+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/control/device-serial-number.html b/docs/reference/control/device-serial-number.html new file mode 100644 index 00000000..b83632c3 --- /dev/null +++ b/docs/reference/control/device-serial-number.html @@ -0,0 +1,203 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

Device Serial Number

+

Derive a unique, consistent serial number of this device from internal data.

+
control.deviceSerialNumber();
+

This is an advanced API. For more information, see the +Calliope mini runtime messageBus documentation.

+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/control/event-source-id.html b/docs/reference/control/event-source-id.html new file mode 100644 index 00000000..60579670 --- /dev/null +++ b/docs/reference/control/event-source-id.html @@ -0,0 +1,203 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

Event Source ID

+

Return a code representing the origin of the event on the bus (button, pin, radio, and so on).

+
control.eventSourceId(EventBusSource.MICROBIT_ID_BUTTON_A);
+

This is an advanced API. For more information, see the +Calliope mini runtime messageBus documentation

+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/control/event-timestamp.html b/docs/reference/control/event-timestamp.html new file mode 100644 index 00000000..370521b1 --- /dev/null +++ b/docs/reference/control/event-timestamp.html @@ -0,0 +1,203 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

Event Timestamp

+

Get the timestamp of the last event executed on the bus

+
control.eventTimestamp();
+

This is an advanced API. For more information, see the +Calliope mini runtime messageBus documentation.

+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/control/event-value-id.html b/docs/reference/control/event-value-id.html new file mode 100644 index 00000000..9eb12d4f --- /dev/null +++ b/docs/reference/control/event-value-id.html @@ -0,0 +1,203 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

Event Value ID

+

Return a code representing the type of the event (button click, device gesture, and so on).

+
control.eventValueId(EventBusValue.MICROBIT_EVT_ANY);
+

This is an advanced API. For more information, see the +Calliope mini runtime messageBus documentation.

+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/control/event-value.html b/docs/reference/control/event-value.html new file mode 100644 index 00000000..4c7c2ed0 --- /dev/null +++ b/docs/reference/control/event-value.html @@ -0,0 +1,203 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

Event Value

+

Get the value of the last event executed on the bus.

+
control.eventValue();
+

This is an advanced API. For more information, see the +Calliope mini runtime messageBus documentation.

+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/control/in-background.html b/docs/reference/control/in-background.html new file mode 100644 index 00000000..4a2f3a93 --- /dev/null +++ b/docs/reference/control/in-background.html @@ -0,0 +1,239 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

Run In Background

+

Run part of a program while the rest of it is doing something else.

+
control.inBackground(() => {
+})
+ +
+
+ +

For more information, read +The Calliope mini - a reactive system. +It is pretty advanced!

+ +
+
+ +

Example

+

This program shows how running in the background can say what is +stored in a variable like num, while another part (on button pressed) +changes what is stored there.

+
let num = 0
+control.inBackground(() => {
+    while (true) {
+        basic.showNumber(num, 150)
+        basic.pause(100)
+    }
+})
+input.onButtonPressed(Button.A, () => {
+    num++;
+})
+

This program does the same thing, but in a more usual way, +with a forever loop.

+
let num = 0
+basic.forever(() => {
+    basic.showNumber(num, 150)
+})
+input.onButtonPressed(Button.A, () => {
+    num++;
+})
+

See also

+

while, forever, +on button pressed

+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/control/on-event.html b/docs/reference/control/on-event.html new file mode 100644 index 00000000..3fac8234 --- /dev/null +++ b/docs/reference/control/on-event.html @@ -0,0 +1,203 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

On Event

+

Raise an event in the event bus.

+
control.onEvent(control.eventSourceId(EventBusSource.MICROBIT_ID_BUTTON_A), control.eventValueId(EventBusValue.MICROBIT_EVT_ANY), () => { });
+

This is an advanced API. For more information, see the +Calliope mini runtime messageBus documentation.

+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/control/raise-event.html b/docs/reference/control/raise-event.html new file mode 100644 index 00000000..a1127834 --- /dev/null +++ b/docs/reference/control/raise-event.html @@ -0,0 +1,203 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

Raise Event

+

Raise an event in the event bus.

+
control.raiseEvent(control.eventSourceId(EventBusSource.MICROBIT_ID_BUTTON_A), control.eventValueId(EventBusValue.MICROBIT_EVT_ANY));
+

This is an advanced API. For more information, see the +Calliope mini runtime messageBus documentation

+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/control/reset.html b/docs/reference/control/reset.html new file mode 100644 index 00000000..fbe0ebde --- /dev/null +++ b/docs/reference/control/reset.html @@ -0,0 +1,226 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

Reset

+

Reset the Calliope mini and start the program again.

+

This function is like pressing the reset button on the back of the Calliope mini.

+
control.reset()
+

Example

+

This program will count as high as you like when you press button A. +When you get tired of counting, press button B to reset the +Calliope mini and start the program over.

+
let item = 0;
+basic.showNumber(item);
+input.onButtonPressed(Button.A, () => {
+    item = item + 1;
+    basic.showNumber(item);
+});
+input.onButtonPressed(Button.B, () => {
+    control.reset();
+});
+ +
+
+ +

This program works better on a real Calliope mini than in the simulator.

+ +
+
+ +

See Also

+

clear screen, game over

+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/control/wait-micros.html b/docs/reference/control/wait-micros.html new file mode 100644 index 00000000..8482f7bf --- /dev/null +++ b/docs/reference/control/wait-micros.html @@ -0,0 +1,222 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

WaitMicros

+

Blocks the current fiber for the given amount of micro-seconds.

+
control.waitMicros(4)
+

Example

+

This program sends a 10 micro-second HIGH pulse through pin P0.

+
// ensure pin is low to send a clean pulse
+pins.digitalWritePin(DigitalPin.P0, 0)
+control.waitMicros(2)
+// set pin to 1 and wait 10 micros
+pins.digitalWritePin(DigitalPin.P0, 1)
+control.waitMicros(10)
+// finish pulse
+pins.digitalWritePin(DigitalPin.P0, 0)
+ +
+
+ +

This function is not supported in the simulator.

+ +
+
+ +

See Also

+

pause

+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/devices.html b/docs/reference/devices.html new file mode 100644 index 00000000..18c4c822 --- /dev/null +++ b/docs/reference/devices.html @@ -0,0 +1,215 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

Devices

+

Control a phone with the Calliope mini via Bluetooth.

+
devices.tellCameraTo(MesCameraEvent.TakePhoto);
+devices.tellRemoteControlTo(MesRemoteControlEvent.play);
+devices.raiseAlertTo(MesAlertEvent.DisplayToast);
+devices.onNotified(MesDeviceInfo.IncomingCall, () => {
+
+});
+devices.onGamepadButton(MesDpadButtonInfo.ADown, () => {
+
+});
+devices.signalStrength();
+devices.onSignalStrengthChanged(() => {
+
+});
+
devices
+

See Also

+

tellCameraTo, tellRemoteControlTo, raiseAlertTo, onNotified, onGamepadButton, signalStrength, onSignalStrengthChanged

+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/devices/on-gamepad-button.html b/docs/reference/devices/on-gamepad-button.html new file mode 100644 index 00000000..4a6e79ac --- /dev/null +++ b/docs/reference/devices/on-gamepad-button.html @@ -0,0 +1,219 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

On Gamepad Button

+

Register code to run when the Calliope mini receives a command from the paired gamepad.

+ +
+
+ +

The functions in the devices namespace allow the Calliope mini to communicate with a separate (remote) device, +such as a smartphone, over Bluetooth (Smart). +The set of supported events will depend on the remote device and the Calliope mini apps available for the remote device.

+ +
+
+ +
devices.onGamepadButton(MesDpadButtonInfo.ADown, () => {})
+

Parameters

+
    +
  • body: Action code to run when the the Calliope mini receives a command from the paired gamepad.
  • +
+

See Also

+

tell remote control to, raise alert to, signal strength, on signal strength changed

+
devices
+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/devices/on-notified.html b/docs/reference/devices/on-notified.html new file mode 100644 index 00000000..04ad70d1 --- /dev/null +++ b/docs/reference/devices/on-notified.html @@ -0,0 +1,224 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

On Signal Strength Changed

+

Register code to run when the signal strength of the paired device changes.

+ +
+
+ +

The functions in the devices namespace allow the Calliope mini to communicate with a separate (remote) device, +such as a smartphone, over Bluetooth (Smart). +The set of supported events will depend on the remote device and the Calliope mini apps available for the remote device.

+ +
+
+ +
devices.onNotified(MesDeviceInfo.IncomingCall, () => {})
+

Parameters

+
    +
  • body: code to run when the signal strength changes.
  • +
+

Examples

+

Display the signal strength on screen:

+
devices.onNotified(MesDeviceInfo.IncomingCall, () => {
+    basic.showString("RING RING")
+})
+

See Also

+

tell remote control to, raise alert to, signal strength

+
devices
+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/devices/on-signal-strength-changed.html b/docs/reference/devices/on-signal-strength-changed.html new file mode 100644 index 00000000..79a12ee9 --- /dev/null +++ b/docs/reference/devices/on-signal-strength-changed.html @@ -0,0 +1,224 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

On Signal Strength Changed

+

Register code to run when the signal strength of the paired device changes.

+ +
+
+ +

The functions in the devices namespace allow the Calliope mini to communicate with a separate (remote) device, +such as a smartphone, over Bluetooth (Smart). +The set of supported events will depend on the remote device and the Calliope mini apps available for the remote device.

+ +
+
+ +
devices.onSignalStrengthChanged(() => {})
+

Parameters

+
    +
  • body: code to run when the signal strength changes.
  • +
+

Examples

+

Display the signal strength on screen:

+
devices.onSignalStrengthChanged(() => {
+    basic.showNumber(devices.signalStrength(), 150)
+})
+

See Also

+

tell remote control to, raise alert to, signal strength

+
devices
+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/devices/raise-alert-to.html b/docs/reference/devices/raise-alert-to.html new file mode 100644 index 00000000..7c23d4e4 --- /dev/null +++ b/docs/reference/devices/raise-alert-to.html @@ -0,0 +1,232 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

raise alert to

+

Raise an alert on a remote device.

+ +
+
+ +

The functions in the devices namespace allow the Calliope mini to communicate with a separate (remote) device, +such as a smartphone, over Bluetooth (Smart). +The set of supported events will depend on the remote device and the Calliope mini apps available for the remote device.

+ +
+
+ +
export function raiseAlertTo(event: string)
+

Parameters

+
    +
  • event - an event identifier
  • +
+

Examples

+

To tell the connected device to display toast

+
devices.raiseAlertTo("display toast")
+

To tell the connected device to vibrate

+
devices.raiseAlertTo("vibrate")
+

To tell the connected device to play a sound

+
devices.raiseAlertTo("play sound")
+

To tell the connected device to play a ringtone

+
devices.raiseAlertTo("play ringtone")
+

To tell the connected device to find my phone

+
devices.raiseAlertTo("find my phone")
+

To tell the connected device to ring alarm

+
devices.raiseAlertTo("ring alarm")
+

See also

+

tell remote control to, tell camera to

+
devices
+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/devices/signal-strength.html b/docs/reference/devices/signal-strength.html new file mode 100644 index 00000000..9ec4d593 --- /dev/null +++ b/docs/reference/devices/signal-strength.html @@ -0,0 +1,224 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

Signal Strength

+

Returns the signal strength reported by the paired device from 0 (no signal) to 4 (full strength).

+ +
+
+ +

The functions in the devices namespace allow the Calliope mini to communicate with a separate (remote) device, +such as a smartphone, over Bluetooth (Smart). +The set of supported events will depend on the remote device and the Calliope mini apps available for the remote device.

+ +
+
+ +
devices.signalStrength();
+

Returns

+
    +
  • the signal strength from 0 (no signal) to 4 (full strength).
  • +
+

Examples

+

Display the signal strength on screen:

+
devices.onSignalStrengthChanged(() => {
+    basic.showNumber(devices.signalStrength(), 150)
+})
+

See Also

+

tell remote control to, raise alert to, on signal strength changed

+
devices
+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/devices/tell-camera-to.html b/docs/reference/devices/tell-camera-to.html new file mode 100644 index 00000000..43b54e26 --- /dev/null +++ b/docs/reference/devices/tell-camera-to.html @@ -0,0 +1,236 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

tell camera to

+

Access the photo/video-taking functionality of a remote device using the tell camera to function.

+ +
+
+ +

The functions in the devices namespace allow the Calliope mini to communicate with a separate (remote) device, +such as a smartphone, over Bluetooth (Smart). +The set of supported events will depend on the remote device and the Calliope mini apps available for the remote device.

+ +
+
+ +
devices.tellCameraTo()
+

Parameters

+
    +
  • event - an event identifier
  • +
+

Examples

+

To tell the connected device to take a picture:

+
devices.tellCameraTo("take photo")
+

To tell the connected device to start recording a video

+
devices.tellCameraTo("start video capture")
+

To tell the connected device to stop recording a video

+
devices.tellCameraTo("stop video capture")
+

To tell the connected device to toggle front-rear

+
devices.tellCameraTo("toggle front-rear")
+

To tell the connected device to launch photo mode

+
devices.tellCameraTo("launch photo mode")
+

To tell the connected device to launch video mode

+
devices.tellCameraTo("launch video mode")
+

To tell the connected device to stop photo mode

+
devices.tellCameraTo("stop photo mode")
+

To tell the connected device to stop video mode

+
devices.tellCameraTo("stop video mode")
+

See Also

+

tell remote control to, raise alert to

+
devices
+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/devices/tell-remote-control-to.html b/docs/reference/devices/tell-remote-control-to.html new file mode 100644 index 00000000..d583d1c9 --- /dev/null +++ b/docs/reference/devices/tell-remote-control-to.html @@ -0,0 +1,248 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

tell remote control to

+

Control the presentation of media content available on a remote device using the tell remote control to function.

+ +
+
+ +

The functions in the devices namespace allow the Calliope mini to communicate with a separate (remote) device, +such as a smartphone, over Bluetooth (Smart). +The set of supported events will depend on the remote device and the Calliope mini apps available for the remote device.

+ +
+
+ +
devices.tellRemoteControlTo(event: string)
+

Parameters

+
    +
  • event - an event identifier
  • +
+

Event values

+
    +
  • play
  • +
  • stop
  • +
  • pause
  • +
  • forward
  • +
  • rewind
  • +
  • volume up
  • +
  • volume down
  • +
  • previous track
  • +
  • next track
  • +
+

Examples

+

To tell the connected device to start playing:

+
devices.tellRemoteControlTo("play")
+

To tell the connected device to stop playing

+
devices.tellRemoteControlTo("stop")
+

To tell the connected device to go to next track

+
devices.tellRemoteControlTo("next track")
+

To tell the connected device to go to previous track

+
devices.tellRemoteControlTo("previous track")
+

To tell the connected device to go forward

+
devices.tellRemoteControlTo("forward")
+

To tell the connected device to rewind

+
devices.tellRemoteControlTo("rewind")
+

To tell the connected device volume up

+
devices.tellRemoteControlTo("volume up")
+

To tell the connected device volume down

+
devices.tellRemoteControlTo("volume down")
+

See also

+

tell camera to, raise alert to

+
devices
+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/event-handler.html b/docs/reference/event-handler.html new file mode 100644 index 00000000..ea445913 --- /dev/null +++ b/docs/reference/event-handler.html @@ -0,0 +1,228 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

event handler

+

Event handlers - how they work.

+

An event handler is code that is associated with a particular event, such as “button A pressed”. You create (or register) the association between an event and an event handler by calling a function named “on <event>“. After registering an event handler with an event, then whenever that event occurs, the event handler code executes.

+

Registering an event handler

+

Functions named “on <event>“ create an association between an event and the event handler code. For example, the following code registers the event handler (the code between the do and end keywords) with the event of a press of button A:

+
input.onButtonPressed(Button.A, () => {
+    basic.showString("hello", 150)
+})
+

After this code executes, then whenever button A is pressed in the future, the string “hello” will be printed.

+

Event handlers are active for the entire program execution

+

Once you have registered an event handler for an event, like above, that event handler is active for the rest of the program execution. If you want to stop the string “hello” from printing each time button A is pressed then you need to arrange for the following code to execute:

+
input.onButtonPressed(Button.A, () => {
+})
+

The above code associated an event handler that does nothing with the event of a press of button A.

+

There is only one event handler per event

+

The above example also illustrates that there is only one event handler for each event. What is the result of the following code?

+
input.onButtonPressed(Button.A, () => {
+    basic.showString("hello", 150)
+})
+input.onButtonPressed(Button.A, () => {
+    basic.showString("goodbye", 150)
+})
+

The answer is that whenever button A is pressed, the string “goodbye” will be printed. If you want both the strings “hello” and “goodbye” to be printed, you need to write the code like this:

+
input.onButtonPressed(Button.A, () => {
+    basic.showString("hello", 150)
+    basic.showString("goodbye", 150)
+})
+

To learn more

+

To learn more about how the Calliope mini queues up and schedules event handlers, see the Calliope mini - a reactive system

+

see also

+

on button pressed, on pin up, on shake

+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/game.html b/docs/reference/game.html new file mode 100644 index 00000000..87fb1eb2 --- /dev/null +++ b/docs/reference/game.html @@ -0,0 +1,206 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

Game

+

A single-LED sprite game engine

+
game.addScore(1);
+game.score();
+game.startCountdown(10000);
+game.gameOver();
+game.setScore(0);
+

See Also

+

addScore, score, startCountdown, gameOver, setScore

+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/game/change-score-by.html b/docs/reference/game/change-score-by.html new file mode 100644 index 00000000..65071086 --- /dev/null +++ b/docs/reference/game/change-score-by.html @@ -0,0 +1,215 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

Change Score By

+

Add the amount you say to the score for the game.

+
game.addScore(1)
+

Parameters

+
    +
  • a number that means how much to add to the score. A negative number means to subtract from the score.
  • +
+

Examples

+

This program is a simple game. +Press button A as much as possible. +At the end of 10 seconds, the program will show your score.

+
input.onButtonPressed(Button.A, () => {
+    game.addScore(1)
+})
+game.startCountdown(10000)
+

See Also

+

score, start countdown

+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/game/change-sprite-property.html b/docs/reference/game/change-sprite-property.html new file mode 100644 index 00000000..a06b1c5f --- /dev/null +++ b/docs/reference/game/change-sprite-property.html @@ -0,0 +1,226 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

Get Sprite Property

+

Change the kind of number you say for a sprite.

+
let item: game.LedSprite = null;
+item.set(LedSpriteProperty.X, 0);
+

Parameters

+
    +
  • the sprite you want to change
  • +
  • the kind of number you want to change for the sprite, like
      +
    • x, how far up or down the sprite is on the screen (0-4)
    • +
    • y, how far left or right the sprite is on the screen (0-4)
    • +
    • direction, which way the sprite is pointing (this works the same way as the turn function)
    • +
    • brightness, how bright the LED sprite is (this works the same way as the brightness function)
    • +
    • blink, how fast the sprite is blinking (the bigger the number is, the faster the sprite is blinking)
    • +
    +
  • +
+

Example

+

This program makes a sprite on the left side of the screen, +waits two seconds (2000 milliseconds), +and then moves it to the middle of the screen.

+
let ball = game.createSprite(0, 2);
+basic.pause(2000);
+ball.change(LedSpriteProperty.X, 2);
+

See also

+

turn, +brightness, +get sprite property, +set sprite property

+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/game/clear.html b/docs/reference/game/clear.html new file mode 100644 index 00000000..177988d5 --- /dev/null +++ b/docs/reference/game/clear.html @@ -0,0 +1,223 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

Clear

+

The clear function for images.

+

Turn off all the pixels in an Image.

+

JavaScript

+
export function clear(img: micro_bit.Image)
+

Parameters

+
    +
  • none
  • +
+

Example

+

The following example turns off the pixels of img when the A input button is pressed:

+
let img = images.createImage(`
+. . . . .
+. # # # .
+. # # # .
+. # # # .
+. . . . .
+`)
+img.showImage(0)
+input.onButtonPressed(Button.A, () => {
+    img.clear()
+    img.showImage(0)
+})
+

See also

+

Image, show animation, show image, scroll image, create image

+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/game/create-sprite.html b/docs/reference/game/create-sprite.html new file mode 100644 index 00000000..bd58234f --- /dev/null +++ b/docs/reference/game/create-sprite.html @@ -0,0 +1,221 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

Create Sprite

+

Create a new LED sprite pointing to the right.

+

A sprite is like a little LED creature you can tell what to do. +You can tell it to move, turn, and check whether it has bumped +into another sprite.

+
game.createSprite(2, 2);
+

Parameters

+
    +
  • x: The left-to-right place on the LED screen where the sprite will start out.
  • +
  • y: The top-to-bottom place on the LED screen where the sprite will start out.
  • +
+

0 and 4 mean the edges of the screen, and 2 means in the middle.

+

Example

+

This program starts a sprite in the middle of the screen. +Next, the sprite turns toward the lower-right corner. +Finally, it moves two LEDs away to the corner.

+
let item = game.createSprite(2, 2);
+item.turn(Direction.Right, 45);
+item.move(2);
+

See also

+

move, +turn, +touching

+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/game/game-over.html b/docs/reference/game/game-over.html new file mode 100644 index 00000000..44339b09 --- /dev/null +++ b/docs/reference/game/game-over.html @@ -0,0 +1,215 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

Game Over

+

End the game and show the score.

+
game.gameOver();
+

Example

+

This program asks you to pick a button. +If you press button A, the program says YOU WIN!. +If you press button B, it shows an animation and ends the game.

+
basic.showString("PICK A BUTTON");
+input.onButtonPressed(Button.A, () => {
+    basic.showString("YOU WIN!");
+});
+input.onButtonPressed(Button.B, () => {
+    game.gameOver();
+});
+

See Also

+

score, +change score by, start countdown

+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/game/get-sprite-property.html b/docs/reference/game/get-sprite-property.html new file mode 100644 index 00000000..1464692f --- /dev/null +++ b/docs/reference/game/get-sprite-property.html @@ -0,0 +1,225 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

Get Sprite Property

+

Find something out about a sprite.

+
let item: game.LedSprite = null;
+item.get(LedSpriteProperty.X);
+

Parameters

+
    +
  • the sprite you want to know something about
  • +
  • the kind of number you want to know about the sprite, like
      +
    • x, how far up or down the sprite is on the screen (0-4)
    • +
    • y, how far left or right the sprite is on the screen (0-4)
    • +
    • direction, which way the sprite is pointing (this works the same way as the turn function)
    • +
    • brightness, how bright the LED sprite is (this works the same way as the brightness function)
    • +
    • blink, how fast the sprite is blinking (the bigger the number is, the faster the sprite is blinking)
    • +
    +
  • +
+

Returns

+

The number you asked for.

+

Example

+

This program makes a sprite and shows the number of its brightness on the screen.

+
let ball = game.createSprite(0, 2);
+basic.showNumber(ball.get(LedSpriteProperty.Brightness));
+

See also

+

turn, +brightness, +change sprite property, +set sprite property

+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/game/if-on-edge-bounce.html b/docs/reference/game/if-on-edge-bounce.html new file mode 100644 index 00000000..3e416fd4 --- /dev/null +++ b/docs/reference/game/if-on-edge-bounce.html @@ -0,0 +1,221 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

If On Edge, Bounce

+

Make a sprite on the edge of the +LED screen bounce away.

+
let item = game.createSprite(0, 2);
+item.ifOnEdgeBounce();
+

Parameters

+
    +
  • a sprite that might be on the edge of the LED screen.
  • +
+

Example

+

This program makes a sprite on the right edge of the screen with a +direction of 90 degrees, and bounces it so it has a direction of -90 +degrees – exactly the opposite direction.

+
let ball = game.createSprite(4, 2);
+basic.showNumber(ball.get(LedSpriteProperty.Direction));
+input.onButtonPressed(Button.B, () => {
+    ball.ifOnEdgeBounce();
+    basic.showNumber(ball.get(LedSpriteProperty.Direction));
+});
+

See also

+

create sprite, +touching, +touching edge

+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/game/move.html b/docs/reference/game/move.html new file mode 100644 index 00000000..caa067d8 --- /dev/null +++ b/docs/reference/game/move.html @@ -0,0 +1,216 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

Move

+

Move the sprite the number of LEDs you say.

+
let item: game.LedSprite = null;
+item.move(1);
+

Parameters

+
    +
  • a number that means how many LEDs the sprite should move
  • +
+

Example

+

This program starts a sprite in the middle of the screen. +Next, the sprite turns toward the lower-right corner. +Finally, it moves two LEDs away to the corner.

+
let item = game.createSprite(2, 2);
+item.turn(Direction.Right, 45);
+item.move(2);
+

See also

+

turn, +create sprite

+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/game/position.html b/docs/reference/game/position.html new file mode 100644 index 00000000..8a1c7b6a --- /dev/null +++ b/docs/reference/game/position.html @@ -0,0 +1,203 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

Position

+

Reports the x position of a sprite on the LED screen

+
export function x(_this: micro_bitSprites.LedSprite) : number
+

Reports the y position of a sprite on the LED screen

+
export function y(_this: micro_bitSprites.LedSprite) : number
+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/game/reports.html b/docs/reference/game/reports.html new file mode 100644 index 00000000..ec63b63b --- /dev/null +++ b/docs/reference/game/reports.html @@ -0,0 +1,208 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

Reports

+

Reports the x or y position, the current direction of a sprite, or the brightness of a sprite on the LED screen

+

Reports the x position of a sprite on the LED screen

+
export function x(_this: micro_bitSprites.LedSprite) : number
+

Reports the y position of a sprite on the LED screen

+
export function y(_this: micro_bitSprites.LedSprite) : number
+

Reports the brightness of a sprite on the LED screen

+
export function brightness(_this: micro_bitSprites.LedSprite) : number
+

Reports the current direction of a sprite on the LED screen

+
export function direction(_this: micro_bitSprites.LedSprite) : number
+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/game/score.html b/docs/reference/game/score.html new file mode 100644 index 00000000..fcbbc7a4 --- /dev/null +++ b/docs/reference/game/score.html @@ -0,0 +1,212 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

Score

+

Find the number of points scored in your game.

+
game.score()
+

Example

+

This program adds one point to your score every time you press button +A, and shows an animation. Then it waits 500 milliseconds (half a +second) and shows your score.

+
input.onButtonPressed(Button.A, () => {
+    game.addScore(1);
+    basic.pause(500);
+    basic.showNumber(game.score());
+    });
+

See Also

+

change score by, start countdown

+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/game/set-score.html b/docs/reference/game/set-score.html new file mode 100644 index 00000000..5d8b619d --- /dev/null +++ b/docs/reference/game/set-score.html @@ -0,0 +1,218 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

Set Score

+

Sets the current score.

+
game.setScore(1)
+

Parameters

+
    +
  • a number that represents the new score.
  • +
+

Examples

+

This program is a simple game. +Press button A as much as possible to increase the score. +Press B to display the score and reset the score.

+
input.onButtonPressed(Button.B, () => {
+    basic.showNumber(game.score())
+    game.setScore(0)
+})
+input.onButtonPressed(Button.A, () => {
+    game.addScore(1)
+})
+

See Also

+

score, start countdown

+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/game/set-sprite-property.html b/docs/reference/game/set-sprite-property.html new file mode 100644 index 00000000..f9487323 --- /dev/null +++ b/docs/reference/game/set-sprite-property.html @@ -0,0 +1,226 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

Set Sprite Property

+

Make a sprite store the kind of number you say.

+
let item: game.LedSprite = null;
+item.set(LedSpriteProperty.X, 0);
+

Parameters

+
    +
  • the sprite you want to make store the number you say
  • +
  • the kind of number you want to store in the sprite, like
      +
    • x, how far up or down the sprite is on the screen (0-4)
    • +
    • y, how far left or right the sprite is on the screen (0-4)
    • +
    • direction, which way the sprite is pointing (this works the same way as the turn function)
    • +
    • brightness, how bright the LED sprite is (this works the same way as the brightness function)
    • +
    • blink, how fast the sprite is blinking (the bigger the number is, the faster the sprite is blinking)
    • +
    +
  • +
+

Example

+

This program makes a sprite on the left side of the screen, +waits two seconds (2000 milliseconds), +and then moves it to the right side of the screen.

+
let ball = game.createSprite(0, 2);
+basic.pause(2000);
+ball.set(LedSpriteProperty.X, 4);
+

See also

+

turn, +brightness, +change sprite property, +get sprite property

+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/game/start-countdown.html b/docs/reference/game/start-countdown.html new file mode 100644 index 00000000..5ef18721 --- /dev/null +++ b/docs/reference/game/start-countdown.html @@ -0,0 +1,215 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

Start Countdown

+

Start counting down time from the number of milliseconds you say.

+
game.startCountdown(1000)
+

Parameters

+
    +
  • ms is a number that says how many milliseconds to count down (one second is 1000 milliseconds)
  • +
+

Examples

+

This program is a simple game. +Press button A as much as possible. +At the end of 10 seconds, the program will show your score.

+
input.onButtonPressed(Button.A, () => {
+    game.addScore(1)
+})
+game.startCountdown(10000)
+

See Also

+

score, change score by

+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/game/touching-edge.html b/docs/reference/game/touching-edge.html new file mode 100644 index 00000000..b7d9d7b1 --- /dev/null +++ b/docs/reference/game/touching-edge.html @@ -0,0 +1,224 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

Touching Edge

+

Find whether the sprite is touching the edge of the LED screen.

+

Sprites are touching the edge if they overlap with an LED on the edge +of the screen.

+
let item: game.LedSprite = null;
+item.isTouchingEdge();
+

Parameters

+
    +
  • a sprite that might be touching the edge of the screen
  • +
+

Returns

+

true if the sprite is touching the edge of the screen

+

Example

+

This program makes a sprite in the middle of the left edge of the LED screen. +Then it says EDGY! if it’s on the edge (which it is!), and SAFE! if it’s +not on the edge.

+
let item = game.createSprite(0, 2);
+if (item.isTouchingEdge()) {
+    basic.showString("EDGY!");
+} else {
+    basic.showString("SAFE!");
+}
+

See also

+

create sprite, +touching, +if on edge, bounce

+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/game/touching.html b/docs/reference/game/touching.html new file mode 100644 index 00000000..db266f62 --- /dev/null +++ b/docs/reference/game/touching.html @@ -0,0 +1,225 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

Touching

+

Find whether the sprite is touching another sprite you say.

+

Sprites are touching if they share the same LED.

+
let item: game.LedSprite = null;
+item.isTouching(null);
+

Parameters

+
    +
  • a sprite you are checking
  • +
  • another sprite that might be touching the one you are checking
  • +
+

Returns

+

true if the two sprites are touching.

+

Example

+

This program creates two sprites called matter and antimatter, +and then checks whether they are touching. If they are, there is an +explosion.

+
let matter = game.createSprite(2, 2);
+let antimatter = game.createSprite(2, 2);
+if (matter.isTouching(antimatter)) {
+    basic.pause(500);
+    basic.clearScreen();
+    basic.showString("BOOM!");
+}
+

See also

+

create sprite, +touching edge, +if on edge, bounce

+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/game/turn.html b/docs/reference/game/turn.html new file mode 100644 index 00000000..1ae50b63 --- /dev/null +++ b/docs/reference/game/turn.html @@ -0,0 +1,218 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

Turn

+

Turn the sprite as much as you say in the direction you say.

+
let item: game.LedSprite = null;
+item.turn(Direction.Right, 45);
+

Parameters

+
    +
  • a choice whether the sprite should turn left or right
  • +
  • a number that means how much the sprite should turn. +This number is in degrees, so a straight left or right turn is 90 degrees.
  • +
+

Example

+

This program starts a sprite in the middle of the screen. +Next, the sprite turns toward the lower-right corner. +Finally, it moves two LEDs away to the corner.

+
let item = game.createSprite(2, 2);
+item.turn(Direction.Right, 45);
+item.move(2);
+

See also

+

move, +create sprite

+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/images.html b/docs/reference/images.html new file mode 100644 index 00000000..d602859a --- /dev/null +++ b/docs/reference/images.html @@ -0,0 +1,215 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

Images

+

Creation, manipulation and display of LED images.

+
images.createImage(`
+. . . . .
+. . . . .
+. . # . .
+. . . . .
+. . . . .
+`);
+images.createBigImage(`
+. . . . .
+. . . . .
+. . # . .
+. . . . .
+. . . . .
+`);
+

See Also

+

createImage, createBigImage

+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/images/create-big-image.html b/docs/reference/images/create-big-image.html new file mode 100644 index 00000000..213f7d63 --- /dev/null +++ b/docs/reference/images/create-big-image.html @@ -0,0 +1,238 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

Create Big Image

+

Make a big image (picture) for the Calliope mini +LED screen. The big image made of two squares. +Each of the squares is five LEDs on a side, like a regular image.

+
images.createBigImage(`
+    . . # . .   . . # . .
+    . # # # .   . . # . .
+    # . # . #   # . # . #
+    . . # . .   . # # # .
+    . . # . .   . . # . .
+    `);
+

Parameters

+
    +
  • leds is a string that says which LEDs +on the screen should be on and which should be off.
  • +
+

Example: Flip-flopping arrow

+

This program makes a big image with a picture of an arrow pointing up, +and an arrow pointing down. If you press button A, the program will +show the arrow pointing up, which starts 0 LEDs from the left in the +big image. If you press button B, the program will show the arrow +pointing down, which starts 5 LEDs from the left.

+
let arrows = images.createBigImage(`
+    . . # . .   . . # . .
+    . # # # .   . . # . .
+    # . # . #   # . # . #
+    . . # . .   . # # # .
+    . . # . .   . . # . .
+    `);
+input.onButtonPressed(Button.A, () => {
+    arrows.showImage(0);
+});
+input.onButtonPressed(Button.B, () => {
+    arrows.showImage(5);
+});
+

See also

+

Getting Started, image, +create image, +show image, +scroll image, show animation

+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/images/create-image.html b/docs/reference/images/create-image.html new file mode 100644 index 00000000..213563cf --- /dev/null +++ b/docs/reference/images/create-image.html @@ -0,0 +1,240 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

Create Image

+

Make an image (picture) for the Calliope mini +LED screen.

+
images.createImage(`
+. . # . .
+. # # # .
+# # # # #
+. # # # .
+. . # . .
+`)
+

Parameters

+
    +
  • leds is a string that says which LEDs +on the screen should be on and which should be off.
  • +
+

Example: Flip-flopping arrow

+

If you press button A, this program will make a picture of an +arrow and show it on the LED screen. If you press button B, the +program will show a picture of the arrow upside-down.

+
input.onButtonPressed(Button.A, () => {
+    images.createImage(`
+        . . # . .
+        . # # # .
+        # . # . #
+        . . # . .
+        . . # . .
+        `).showImage(0);
+});
+input.onButtonPressed(Button.B, () => {
+    images.createImage(`
+        . . # . .
+        . . # . .
+        # . # . #
+        . # # # .
+        . . # . .
+        `).showImage(0);
+});
+

See also

+

Getting Started, image, +create big image, +show image, +scroll image, show animation

+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/images/image.html b/docs/reference/images/image.html new file mode 100644 index 00000000..ad6728eb --- /dev/null +++ b/docs/reference/images/image.html @@ -0,0 +1,239 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

Image

+

An image for the Calliope mini screen.

+ +

An Image is a matrix of pixels to show on the LED screen

+

Block Editor: Show LEDs

+

To display an image:

+
    +
  • click Basic , Show LEDs, and tap on the LEDs`
  • +
+
basic.showLeds(`
+    . . . . .
+    . # . # .
+    . . . . .
+    # . . . #
+    . # # # .
+    `)
+

Creating an image

+

To create an image that you can later modify, see the create image function.

+
    +
  1. Click the Images category on the left.

    +
  2. +
  3. Drag and drop the show image block into your code.

    +
  4. +
  5. Drag and drop the create image or create big image block onto the show image block so that they connect.

    +
  6. +
  7. Make an image on the create image block by clicking on the squares.

    +
  8. +
+

You should see code similar to this:

+

+

Image functions

+
    +
  • create image: create an image from a series of on/off LED states
  • +
  • clear: turn off all the pixels in an image
  • +
  • pixel: get the state of a pixel in an image
  • +
  • show-leds: show a single-frame image on the LED screen
  • +
  • show image: show an image on the screen
  • +
  • scroll image: scroll an image on the screen
  • +
+

See also

+

Show LEDs, create image, show image, LED screen

+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/images/pixel.html b/docs/reference/images/pixel.html new file mode 100644 index 00000000..412b61f7 --- /dev/null +++ b/docs/reference/images/pixel.html @@ -0,0 +1,232 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

Pixel

+

The pixel function.

+

Get the state of a pixel in an Image.

+

JavaScript

+
export function pixel(_this: micro_bit.Image, x: number, y: number) : boolean
+

Parameters

+
    +
  • x - Number; the x coordinate or horizontal position of a pixel in an image
  • +
  • y - Number; the y coordinate or vertical position of a pixel in an image
  • +
+

x, y coordinates?

+

To figure out the x, y coordinates, see LED screen.

+

Returns

+
    +
  • Boolean - true for on and false for off
  • +
+

Example

+

This example gets the state of pixel 0, 0 in the img variable:

+ +
+ +
let img = images.createImage(`
+. . # . . . . . . .
+. # . # . . . # . .
+. . # . . . . . . .
+. # . # . . . # . .
+. . # . . . . . . .
+`)
+ +
+ +
let state = img.pixel(0, 0)
+

See also

+

set pixel, show image, image, create image, scroll image

+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/images/plot-frame.html b/docs/reference/images/plot-frame.html new file mode 100644 index 00000000..b68a9e08 --- /dev/null +++ b/docs/reference/images/plot-frame.html @@ -0,0 +1,220 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

Plot Frame

+

The plot frame function.

+

Display an Image on the Calliope mini’s LED screen

+

JavaScript

+
export function plotFrame(_this: micro_bit.Image, index: number)
+

Parameters

+
    +
  • index - Number; which frame of the image to display
  • +
+

Difference from plot image

+

The plot frame function takes the index of the frame (if there are two frames, then the possible indices are 0 and 1), whereas plot image accepts an offset (if there are two frames, the offset would range between 0 and 9).

+

Example

+
let img = images.createImage(`
+# . . . # # . . . #
+. # . # . . # # # .
+. . # . . . # # # .
+. # . # . . # # # .
+# . . . # # . . . #
+`)
+img.plotFrame(1)
+

See also

+

create image, show animation, image, show image, scroll image

+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/images/plot-image.html b/docs/reference/images/plot-image.html new file mode 100644 index 00000000..cec95c9d --- /dev/null +++ b/docs/reference/images/plot-image.html @@ -0,0 +1,220 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

Plot Image

+

The plot image function.

+

Display an Image on the Calliope mini’s LED screen

+

JavaScript

+
export function plotImage(_this: micro_bit.Image, xOffset: number)
+

Parameters

+
    +
  • x offset - Number; the horizontal starting point of an image; use 0 for the first frame of the image, 5 for the second frame of the image, 10 for the third frame and so on.
  • +
+

Difference from show image

+

The show image function has a built in delay of 400ms after display of the image, whereas plot image has no built-in delay.

+

Example

+
let img = images.createImage(`
+# . . . # # . . . #
+. # . # . . # # # .
+. . # . . . # # # .
+. # . # . . # # # .
+# . . . # # . . . #
+`)
+img.plotImage(0)
+

See also

+

create image, show animation, image, show image, scroll image

+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/images/scroll-image.html b/docs/reference/images/scroll-image.html new file mode 100644 index 00000000..7a43866b --- /dev/null +++ b/docs/reference/images/scroll-image.html @@ -0,0 +1,239 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

Scroll Image

+

Scroll (slide) an image (picture) from one +side to the other of the LED screen.

+
let item: Image = null;
+item.scrollImage(5, 200);
+

Parameters

+
    +
  • a number that means +how many LEDs to scroll at a time, from right to left or +left to right. If you use a positive number like 2, the image +will scroll from the right side of the screen to the left. +If you use a negative number like -2, the image will scroll +in the other direction. If you use 5 or -5, the image +will scroll one frame at a time. (A frame is a part of the +image. It is a square with five LEDs on a side). This is +useful for animation.

    +
  • +
  • a number that means +how many milliseconds to wait before scrolling the amount that +offset says. (1000 milliseconds is one second.) The bigger you +make this number, the slower the image will scroll.

    +
  • +
+

Example

+

This program scrolls an image of two arrows five LEDs at a time, +with a pause of 200 milliseconds between each time it scrolls. +Because each frame is five LEDs wide, that means this program +will look like it’s animating one arrow flipping and flopping. +Of course, you can use any two frames you want instead.

+
let arrows = images.createBigImage(`
+    . . # . .   . . # . .
+    . # # # .   . . # . .
+    # . # . #   # . # . #
+    . . # . .   . # # # .
+    . . # . .   . . # . .
+    `);
+basic.forever(() => {
+    arrows.scrollImage(5, 200);
+});
+

See also

+

show image, image, create image, show animation

+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/images/set-pixel.html b/docs/reference/images/set-pixel.html new file mode 100644 index 00000000..f3080b73 --- /dev/null +++ b/docs/reference/images/set-pixel.html @@ -0,0 +1,224 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

Set Pixel

+

The set pixel function. #set pixel.

+

Set the on/off state of pixel in an Image.

+

JavaScript

+
export function setPixel(_this: micro_bit.Image, x: number, y: number, value: boolean)
+

Parameters

+
    +
  • x - Number; the x coordinate or horizontal position of a pixel in an image
  • +
  • x - Number; the y coordinate or vertical position of a pixel in an image
  • +
  • value -Boolean; the on/off state of a pixel; true for on, false for off
  • +
+

x, y coordinates?

+

To figure out the x, y coordinates, see LED screen.

+

Example

+

The following example creates an image and stores it in the img variable. The set pixel function sets the centre pixel off, before img is shown using show image.

+
let img = images.createImage(`
+. . # . .
+. # . # .
+. . # . .
+. # . # .
+. . # . .
+`)
+img.setPixel(2, 2, false)
+img.showImage(0)
+

See also

+

pixel, show image, image, create image, scroll image

+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/images/show-frame.html b/docs/reference/images/show-frame.html new file mode 100644 index 00000000..f685a8ea --- /dev/null +++ b/docs/reference/images/show-frame.html @@ -0,0 +1,220 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

Show Frame

+

The show frame function.

+

Display an Image on the Calliope mini’s LED screen

+

JavaScript

+
export function showFrame(img: micro_bit.Image, frame: number)
+

Parameters

+
    +
  • index - Number; which frame of the image to display
  • +
+

Difference from plot frame

+

The show frame function is the same as plot frame, but contains a built-in delay after the LED screen has been updated (whereas plot frame has no built-in delay)

+

Example

+
let img = images.createImage(`
+# . . . # # . . . #
+. # . # . . # # # .
+. . # . . . # # # .
+. # . # . . # # # .
+# . . . # # . . . #
+`)
+img.showFrame(1)
+

See also

+

create image, show animation, image, show image, scroll image

+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/images/show-image.html b/docs/reference/images/show-image.html new file mode 100644 index 00000000..83b35f18 --- /dev/null +++ b/docs/reference/images/show-image.html @@ -0,0 +1,234 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

Show Image

+

Show an image (picture) on the +LED screen. After the Calliope mini shows an image, it +will pause for 400 milliseconds (1000 milliseconds is one second).

+
let item: Image = null;
+item.showImage(0);
+

Parameters

+
    +
  • an image (picture). It is usually a square with five LEDs on a side, but it might be wider.
  • +
  • a number that says how many LEDs from the left of the picture the Calliope mini should start. 0 means start at the first frame of the picture, 5 means start at the second frame, 10 means start at the third, and so on.
  • +
+

Example: Flip-flopping arrow

+

This program makes a big image with a frame of an arrow pointing up, +and a frame of an arrow pointing down. If you press button A, the +program will use show image to show the arrow pointing up. (It +starts 0 LEDs from the left in the big image.) If you press button +B, the program will use show image to show the arrow pointing +down, which starts 5 LEDs from the left.

+
let arrows = images.createBigImage(`
+    . . # . .   . . # . .
+    . # # # .   . . # . .
+    # . # . #   # . # . #
+    . . # . .   . # # # .
+    . . # . .   . . # . .
+    `);
+input.onButtonPressed(Button.A, () => {
+    arrows.showImage(0);
+});
+input.onButtonPressed(Button.B, () => {
+    arrows.showImage(5);
+});
+

See also

+

Getting Started, image, +create image, +create big image, +scroll image, show animation

+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/images/width.html b/docs/reference/images/width.html new file mode 100644 index 00000000..9ca3fc3b --- /dev/null +++ b/docs/reference/images/width.html @@ -0,0 +1,240 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

Width

+

The width function.

+

Get the width of an Image in columns.

+
images.createImage().width();
+

Parameters

+
    +
  • none
  • +
+

Returns

+
    +
  • Number - the number of columns in a image. This function returns 5 if the image has 1 frame, 10 for 2 frames, 15 for 3 frames and so on. Divide the number of columns by 5 to find out how many frames an image has (see example below).
  • +
+

The following example gets the width of img and stores it in the w variable:

+ +
+ +
let img = images.createImage(`
+. . # . . . . . . .
+. # . # . . . # . .
+. . # . . . . . . .
+. # . # . . . # . .
+. . # . . . . . . .
+`)
+ +
+ +
let w = img.width()
+

Example: show each frame

+

The following example uses the width function with a for loop to show each image frame on the screen:

+
let img2 = images.createImage(`
+. . # . . . # # # # . # # # .
+. # # . . . . . . # . . . # .
+. . # . . . . . # . . . # . .
+. . # . . . . # . . . . . # .
+. . # . . . # # # # . # # # .
+`)
+for (let i = 0; i < img2.width() / 5; i++) {
+    img2.showImage(i * 5)
+    basic.pause(1000)
+}
+

See also

+

show image, image, create image, scroll image, show animation

+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/input.html b/docs/reference/input.html new file mode 100644 index 00000000..71fb4358 --- /dev/null +++ b/docs/reference/input.html @@ -0,0 +1,236 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

Input

+

Events and data from sensors

+
input.onButtonPressed(Button.A, () => {
+
+});
+input.onGesture(Gesture.Shake, () => {
+
+});
+input.onPinPressed(TouchPin.P0, () => {
+
+});
+input.buttonIsPressed(Button.A);
+input.compassHeading();
+input.pinIsPressed(TouchPin.P0);
+input.temperature();
+input.acceleration(Dimension.X);
+input.lightLevel();
+input.rotation(Rotation.Pitch);
+input.magneticForce(Dimension.X);
+input.runningTime();
+input.setAccelerometerRange(AcceleratorRange.OneG);
+input.calibrate();
+input.onLogoDown(() => {
+
+});
+input.onLogoUp(() => {
+
+});
+input.onScreenDown(() => {
+
+});
+input.onScreenUp(() => {
+
+});
+input.onShake(() => {
+
+});
+

See Also

+

onButtonPressed, onGesture, onPinPressed, buttonIsPressed, compassHeading, pinIsPressed, temperature, acceleration, lightLevel, rotation, magneticForce, runningTime, setAccelerometerRange

+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/input/acceleration.html b/docs/reference/input/acceleration.html new file mode 100644 index 00000000..0ecd1d88 --- /dev/null +++ b/docs/reference/input/acceleration.html @@ -0,0 +1,229 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

Acceleration

+

Get the acceleration value (milli g-force), in one of three specified dimensions.

+

Find the acceleration of the Calliope mini (how fast it is speeding up or slowing down).

+
input.acceleration(Dimension.X);
+ +
+
+ +

You measure acceleration with the milli-g, which is 1/1000 of a g. +A g is as much acceleration as you get from Earth’s gravity.

+ +
+
+ +

Parameters

+
    +
  • dimension means which direction you are checking for acceleration, either Dimension.X (left and right), Dimension.Y (forward and backward), or Dimension.Z (up and down)
  • +
+

Returns

+
    +
  • a number that means the amount of acceleration. When the Calliope mini is lying flat on a surface with the screen pointing up, x is 0, y is 0, and z is -1023.
  • +
+

Example: bar chart

+

This example shows the acceleration of the Calliope mini with a bar graph.

+
basic.forever(() => {
+    led.plotBarGraph(input.acceleration(Dimension.X), 1023)
+})
+

See also

+

set accelerometer range, +compass heading, +light level

+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/input/button-is-pressed.html b/docs/reference/input/button-is-pressed.html new file mode 100644 index 00000000..9e60a8d5 --- /dev/null +++ b/docs/reference/input/button-is-pressed.html @@ -0,0 +1,225 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

Button Is Pressed

+

Check whether a button is pressed right now. The Calliope mini has two buttons: button A and button B.

+
input.buttonIsPressed(Button.A);
+

Parameters

+
    +
  • button is a String. You should store A in it to check the left button, B to check the right button, or A+B to check both at the same time.
  • +
+

Returns

+
    +
  • Boolean that is true if the button you are checking is pressed, false if it is not pressed.
  • +
+

Example

+

This program uses an if to run +one part of the program if the A button is pressed, and +another part if it is not pressed.

+
basic.forever(() => {
+    let pressed = input.buttonIsPressed(Button.A)
+    if (pressed) {
+        // this part runs if the A button is pressed
+        basic.showNumber(1, 150)
+    } else {
+        // this part runs if the A button is *not* pressed
+        basic.showNumber(0, 150)
+    }
+})
+

See also

+

on button pressed, if, forever

+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/input/compass-heading.html b/docs/reference/input/compass-heading.html new file mode 100644 index 00000000..4ff87acb --- /dev/null +++ b/docs/reference/input/compass-heading.html @@ -0,0 +1,245 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

Compass Heading

+

Find which direction on a compass the Calliope mini is facing.

+

The Calliope mini measures the compass heading from 0 to 360 +degrees with its magnetometer chip. Different numbers mean north, +east, south, and west.

+
input.compassHeading();
+

Returns

+
    +
  • a number from 0 to 360 degrees, which means the compass heading. If the compass isn’t ready, it returns -1003.
  • +
+

Example

+

This program finds the compass heading and stores it in the +degrees variable.

+
let degrees = input.compassHeading()
+ +
+
+ +

When you run a program that uses this function in a browser, click and drag +the compass needle on the screen to change the compass heading.

+ +
+
+ +

Example: compass

+

This program finds the compass heading and then shows a letter +that means whether the Calliope mini is facing north (N), south (S), +east (E), or west (W).

+
basic.forever(() => {
+    let degrees = input.compassHeading()
+    if (degrees < 45)
+        basic.showString("N")
+    else if (degrees < 135)
+        basic.showString("E")
+    else if (degrees < 225)
+        basic.showString("S")
+    else basic.showString("W")
+})
+

Calibration

+

Every time you start to use the compass (for example, if you have just +turned the Calliope mini on), the Calliope mini will start to calibrate +(adjust itself). It will ask you to draw a circle by tilting the +Calliope mini.

+

If you are calibrating or using the compass near metal, it might +confuse the Calliope mini.

+

See also

+

acceleration

+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/input/light-level.html b/docs/reference/input/light-level.html new file mode 100644 index 00000000..b1c79304 --- /dev/null +++ b/docs/reference/input/light-level.html @@ -0,0 +1,229 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

Light Level

+

Find the light level (how bright or dark it is) where you are. +The light level 0 means darkness and 255 means bright light. +The Calliope mini measures the light around it by using some of the +LEDs on the LED screen.

+

The first time you use it, this function will say 0. +After that, it will say the real light level. +This is because the light sensor (the part that can find the light level) +has to be turned on first.

+
input.lightLevel();
+

Returns

+
    +
  • a Number that means a light level from 0 (dark) to 255 (bright).
  • +
+

Example: show light level

+

When you press button B on the microbit, this +program shows the light level +on the LED screen.

+
input.onButtonPressed(Button.B, () => {
+    let level = input.lightLevel()
+    basic.showNumber(level)
+})
+

Example: chart light level

+

This program shows the light level with a bar chart on the Calliope mini screen. +If you carry the Calliope mini around to different places with different light levels, +the bar chart will change.

+
basic.forever(() => {
+    led.plotBarGraph(input.lightLevel(), 255)
+})
+

See also

+

acceleration, compass-heading

+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/input/magnetic-force.html b/docs/reference/input/magnetic-force.html new file mode 100644 index 00000000..9bae7248 --- /dev/null +++ b/docs/reference/input/magnetic-force.html @@ -0,0 +1,231 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

Magnetic Force

+

Find the amount of magnetic force (the strength of a magnet) in the direction you say.

+
input.magneticForce(Dimension.X);
+ +
+
+ +

The Calliope mini measures magnetic force with microteslas.

+ +
+
+ +

Parameters

+
    +
  • dimension means which direction the Calliope mini should measure +magnetic force in: either Dimension.X (the left-right direction), +Dimension.Y (the forward/backward direction), or Dimension.Z +(the up/down direction)
  • +
+

Returns

+
    +
  • a number of microteslas that means the strength of the magnet
  • +
+

Example: metal detector

+

This program makes the center LED of the Calliope mini get brighter when +the magnetic force is stronger, and dimmer when it is weaker.

+
led.plot(2, 2)
+basic.forever(() => {
+    let f = input.magneticForce(Dimension.X)
+    led.setBrightness(f / 2000)
+})
+

See also

+

compass heading

+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/input/on-button-pressed.html b/docs/reference/input/on-button-pressed.html new file mode 100644 index 00000000..a811fa2c --- /dev/null +++ b/docs/reference/input/on-button-pressed.html @@ -0,0 +1,231 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

On Button Pressed

+

Start an event handler (part of the program that will run when something happens, like when a button is pressed). +This handler works when button A or B is pressed, or A and B together. +When you are using this function in a web browser, click the buttons on the screen instead of the ones +on the Calliope mini.

+
input.onButtonPressed(Button.A, () => {})
+

Example: count button clicks

+

This example counts how many times you press the A button. +Each time you press the button, the LED screen shows the count variable getting bigger.

+
let count = 0
+basic.showNumber(count)
+input.onButtonPressed(Button.A, () => {
+    count++;
+    basic.showNumber(count);
+})
+

Example: roll dice

+

This example shows a number from 1 to 6 when you press the B button.

+
input.onButtonPressed(Button.B, () => {
+    let dice = Math.random(6) + 1
+    basic.showNumber(dice)
+})
+ +
+
+ +

This program adds a 1 to random(6) so the numbers on the dice will come out right. +Otherwise, sometimes they would show a 0.

+ +
+
+ +

See also

+

button is pressed, forever, random

+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/input/on-gesture.html b/docs/reference/input/on-gesture.html new file mode 100644 index 00000000..43a6bfba --- /dev/null +++ b/docs/reference/input/on-gesture.html @@ -0,0 +1,214 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

On Gesture

+

Start an event handler (part of the +program that will run when something happens) This handler works when +you do a gesture (like shaking the Calliope mini).

+
input.onGesture(Gesture.Shake,() => {
+})
+

Parameters

+
    +
  • gesture means the way you hold or move the Calliope mini. This can be shake, logo up, logo down, screen up, screen down, tilt left, tilt right, free fall, 3g, or 6g.
  • +
+

Example: random number

+

This program shows a number from 0 to 9 when you shake the Calliope mini.

+
input.onGesture(Gesture.Shake,() => {
+    let x = Math.random(10)
+    basic.showNumber(x, 100)
+})
+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/input/on-pin-pressed.html b/docs/reference/input/on-pin-pressed.html new file mode 100644 index 00000000..26d0b042 --- /dev/null +++ b/docs/reference/input/on-pin-pressed.html @@ -0,0 +1,236 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

On Pin Pressed

+

Start an event handler (part of the +program that will run when something happens, like when a button is +pressed). This handler works when you press pin 0, 1, or 2 +together with GND. When you are using this function in a web +browser, click the pins on the screen instead of the ones on the +Calliope mini.

+

If you hold the GND pin with one hand and touch pin 0, 1, or 2 +with the other, a very small (safe) amount of electricity will flow +through your body and back into the Calliope mini. This is called +completing a circuit. It’s like you’re a big wire!

+
input.onPinPressed(TouchPin.P0, () => {
+})
+ +
+
+ +

This function works best when the Calliope mini is using batteries for power, +instead of the USB cable.

+ +
+
+ +

Parameters

+
    +
  • name means the pin that is being pressed, either P0, P1, or P2
  • +
+

Example: pin pressed counter

+

This program counts how many times you press the P0 pin. +Every time you press the pin, the program shows the number of times on the screen.

+
let count = 0
+basic.showNumber(count, 100)
+input.onPinPressed(TouchPin.P0, () => {
+    count = count + 1
+    basic.showNumber(count, 100)
+})
+

See also

+

Calliope mini pins, pin is pressed, analog read pin, analog write pin, digital read pin, digital write pin

+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/input/on-pin-released.html b/docs/reference/input/on-pin-released.html new file mode 100644 index 00000000..af407869 --- /dev/null +++ b/docs/reference/input/on-pin-released.html @@ -0,0 +1,236 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

On Pin Released

+

Start an event handler (part of the +program that will run when something happens, like when a button is +pressed). This handler works when you release pin 0, 1, or 2 +together with GND. When you are using this function in a web +browser, click and release the pins on the screen instead of the ones on the +Calliope mini.

+

If you hold the GND pin with one hand and touch pin 0, 1, or 2 +with the other, a very small (safe) amount of electricity will flow +through your body and back into the Calliope mini. This is called +completing a circuit. It’s like you’re a big wire!

+
input.onPinReleased(TouchPin.P0, () => {
+})
+ +
+
+ +

This function works best when the Calliope mini is using batteries for power, +instead of the USB cable.

+ +
+
+ +

Parameters

+
    +
  • name means the pin that is being released, either P0, P1, or P2
  • +
+

Example: pin pressed counter

+

This program counts how many times you release the P0 pin. +Every time you release the pin, the program shows the number of times on the screen.

+
let count = 0
+basic.showNumber(count, 100)
+input.onPinReleased(TouchPin.P0, () => {
+    count = count + 1
+    basic.showNumber(count, 100)
+})
+

See also

+

Calliope mini pins, pin is pressed, analog read pin, analog write pin, digital read pin, digital write pin

+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/input/pin-is-pressed.html b/docs/reference/input/pin-is-pressed.html new file mode 100644 index 00000000..09ec990d --- /dev/null +++ b/docs/reference/input/pin-is-pressed.html @@ -0,0 +1,233 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

Pin Is Pressed

+

Find whether the pin you say is pressed or not pressed.

+

If you hold the GND pin with one hand and touch pin 0, 1, or 2 with the other, +a very small (safe) amount of electricity will flow through your body and back into +the Calliope mini. This is called completing a circuit. It’s like you’re a big wire!

+
input.pinIsPressed(TouchPin.P0);
+ +
+
+ +

This function works best when the Calliope mini is using batteries for power, +instead of the USB cable.

+ +
+
+ +

Parameters

+
    +
  • a string that holds the pin name (P0, P1, or P2)
  • +
+

returns

+
    +
  • a boolean that means whether the pin you say is pressed (true or false)
  • +
+

Example

+

This program shows 1 if P0 is pressed, and 0 if P0 is not pressed:

+
basic.forever(() => {
+    if (input.pinIsPressed(TouchPin.P0)) {
+        basic.showNumber(1, 150)
+    } else {
+        basic.showNumber(0, 150)
+    }
+})
+

See also

+

Calliope mini pins, on pin pressed, analog read pin, analog write pin, digital read pin, digital write pin

+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/input/rotation.html b/docs/reference/input/rotation.html new file mode 100644 index 00000000..114a4401 --- /dev/null +++ b/docs/reference/input/rotation.html @@ -0,0 +1,248 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

Rotation

+

Find how much the Calliope mini is tilted in different directions.

+
input.rotation(Rotation.Roll);
+ +
+
+ +

The Calliope mini has a part called the accelerometer that can +check how the Calliope mini is moving.

+ +
+
+ +

Parameters

+
    +
  • kind means which direction you are checking: Rotation.Pitch (up and down) or Rotation.Roll (left and right)
  • +
+

Returns

+
    +
  • a number that means how much the microbit is tilted in the direction you say, from 0 to 360 degrees
  • +
+

Example: Calliope mini leveler

+

This program helps you move the Calliope mini until it is level. When +it is level, the Calliope mini shows a smiley.

+

If you are running this program in a browser, you can tilt the +Calliope mini with your mouse.

+
let pitch = 0;
+basic.forever(() => {
+    pitch = input.rotation(Rotation.Pitch);
+    let roll = input.rotation(Rotation.Roll);
+    if (Math.abs(pitch) < 10 && Math.abs(roll) < 10) {
+        basic.showLeds(`
+            . # . # .
+            . . . . .
+            . . . . .
+            # . . . #
+            . # # # .
+            `);
+    } else {
+        basic.showLeds(`
+            # . . . #
+            . # . # .
+            . . # . .
+            . # . # .
+            # . . . #
+            `);
+        }
+    });
+

See also

+

acceleration, compass-heading

+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/input/running-time.html b/docs/reference/input/running-time.html new file mode 100644 index 00000000..ebf6faa6 --- /dev/null +++ b/docs/reference/input/running-time.html @@ -0,0 +1,216 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

Running Time

+

Find how long it has been since the program started.

+
input.runningTime();
+

Returns

+
    +
  • the Number of milliseconds since the program started. +(One second is 1000 milliseconds.)
  • +
+

Example: elapsed time

+

When you press button B on the microbit, this +program finds the number of milliseconds since the program started +and shows it on the LED screen.

+
input.onButtonPressed(Button.B, () => {
+    let now = input.runningTime()
+    basic.showNumber(now)
+})
+

See also

+

show number, pause

+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/input/set-accelerometer-range.html b/docs/reference/input/set-accelerometer-range.html new file mode 100644 index 00000000..2b0d970a --- /dev/null +++ b/docs/reference/input/set-accelerometer-range.html @@ -0,0 +1,231 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

Set Accelerometer Range

+

Set up the part of the Calliope mini that measures +acceleration (how much the microbit +is speeding up or slowing down), in case you need to measure high +or low acceleration.

+
input.setAccelerometerRange(AcceleratorRange.OneG);
+

Parameters

+
    +
  • range means the biggest number of gravities of acceleration you +will be measuring (either 1g, 2g, 4g, or 8g). Any bigger numbers +will be ignored by your Calliope mini, both when you are picking a +number of gravities, and when you are measuring acceleration.
  • +
+

Example

+

This program says the highest acceleration that your Calliope mini +will measure is 4G. Then it measures acceleration from side to side +until you stop the program.

+
input.setAccelerometerRange(AcceleratorRange.FourG);
+basic.forever(() => {
+    basic.showNumber(input.acceleration(Dimension.X));
+});
+ +
+
+ +

This program does not work in the simulator, only in a Calliope mini.

+ +
+
+ +

See Also

+

compass heading, +light level

+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/input/temperature.html b/docs/reference/input/temperature.html new file mode 100644 index 00000000..206a3391 --- /dev/null +++ b/docs/reference/input/temperature.html @@ -0,0 +1,241 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

Temperature

+

Find the temperature where you are. The temperature is measured in Celsius (metric). +The Calliope mini can find the temperature nearby by checking how hot its computer chips are.

+
input.temperature();
+

Returns

+
    +
  • a Number that means the Celsius temperature.
  • +
+

How does it work?

+

The Calliope mini checks how hot its CPU (main computer chip) is. +Because the Calliope mini does not usually get very hot, the temperature of the CPU +is usually close to the temperature of wherever you are. +The Calliope mini might warm up a little if you make it work hard, though!

+

Example: Calliope mini thermometer

+

The following example uses temperature and show number to show the temperature of the room.

+
basic.forever(() => {
+    let temp = input.temperature()
+    basic.showNumber(temp)
+})
+

Example: Fahrenheit thermometer

+

This program measures the temperature using Fahrenheit degrees. +Fahrenheit is a way of measuring temperature that is commonly used in the United States. +To make a Celsius temperature into a Fahrenheit one, multiply the Celsius temperature by +18, divide by 10 and add 32.

+
basic.forever(() => {
+    let c = input.temperature()
+    let f = (c * 18) / 10 + 32
+    basic.showNumber(f)
+})
+ +
+
+ +

Try comparing the temperature your Calliope mini shows to a real thermometer in the same place. +You might be able to figure out how much to subtract from the number the Calliope mini +shows to get the real temperature. Then you can change your program so the Calliope mini is a +better thermometer.

+ +
+
+ +

See also

+

compass-heading, acceleration

+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/led.html b/docs/reference/led.html new file mode 100644 index 00000000..b9ac09d3 --- /dev/null +++ b/docs/reference/led.html @@ -0,0 +1,216 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

Led

+

Control of the LED screen.

+
led.plot(0, 0);
+led.unplot(0, 0);
+led.point(0, 0);
+led.toggle(0, 0);
+led.brightness();
+led.setBrightness(255);
+led.stopAnimation();
+led.plotBarGraph(0, 0);
+led.fadeIn();
+led.fadeOut();
+led.plotAll();
+led.screenshot();
+led.toggleAll();
+led.setDisplayMode(DisplayMode.BackAndWhite);
+led.enable(false)
+

See Also

+

plot, unplot, point, brightness, setBrightness, stopAnimation, plotBarGraph, fadeIn, fadeOut, plotAll, screenshot, toggle, toggleAll, setDisplayMode, enabled

+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/led/brightness.html b/docs/reference/led/brightness.html new file mode 100644 index 00000000..09562dfd --- /dev/null +++ b/docs/reference/led/brightness.html @@ -0,0 +1,220 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

Brightness

+

Find how bright the LED screen is when it is turned on.

+
led.brightness();
+

Returns

+
    +
  • a number that means how bright the screen is when it is turned on, from 0 (darkest) to 255 (brightest). For example, the number 127 means the screen is halfway bright when it is turned on.
  • +
+

Example: highest brightness

+

This program makes the screen completely bright when it is turned on (if it is not that way already):

+
if (led.brightness() < 255) {
+    led.setBrightness(255)
+}
+

Example: change brightness

+

This program makes the screen brightness 100% (255). Then it turns on +the center LED (2, 2), waits for one second and then sets the screen +brightness to 50% (128):

+
led.setBrightness(255)
+led.plot(2, 2)
+basic.pause(1000)
+led.setBrightness(led.brightness() / 2)
+

See also

+

set brightness, fade in, fade out

+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/led/enable.html b/docs/reference/led/enable.html new file mode 100644 index 00000000..5496413f --- /dev/null +++ b/docs/reference/led/enable.html @@ -0,0 +1,217 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

Enable

+

Turns the LED screen on and off

+
led.enable(false);
+

Parameters

+
    +
  • on is a boolean that defines the on/off state of the screen
  • +
+

Example: Turning off the screen

+

This program turns off the screen when pressing button B

+
input.onButtonPressed(Button.B, () => {
+    led.enable(false)
+});
+

Pins: P3, P4, P6, P7, P9, P10

+

These pins are coupled to the LED matrix display, and also it’s associated ambient light sensing mode. +To disable the display driver feature (which will automatically disable the light sensing feature) call the DAL function led.enable(false). +To turn the display driver back on again later, call led.enable(true).

+

More information at http://tech.microbit.org/hardware/edgeconnector_ds/ .

+

See also

+

unplot, point, LED screen

+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/led/fade-in.html b/docs/reference/led/fade-in.html new file mode 100644 index 00000000..53e60b6d --- /dev/null +++ b/docs/reference/led/fade-in.html @@ -0,0 +1,216 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

Fade in

+

Gradually increase the LED screen brightness until the LED lights are at full brightness.

+
led.fadeIn(700);
+

Parameters

+
    +
  • ms - Number; the speed by which the screen brightness is increased, expressed in milliseconds (1,000 milliseconds = 1 second). The smaller the number the faster the screen brightness increased.
  • +
+

Example: fading dot

+

The following code turns on centre LED and then gradually increases and decreases the screen brightness (the centre LED pulses 5 times):

+
led.plot(2, 2)
+for (let i = 0; i < 5; i++) {
+    led.setBrightness(0)
+    led.fadeIn(100)
+    basic.pause(100)
+    led.fadeOut(100)
+}
+

See also

+

brightness, fade out, set brightness

+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/led/fade-out.html b/docs/reference/led/fade-out.html new file mode 100644 index 00000000..00097f7b --- /dev/null +++ b/docs/reference/led/fade-out.html @@ -0,0 +1,212 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

Fade out

+

Gradually decrease the LED screen brightness until the LED lights are turned off.

+
led.fadeOut(700);
+

Parameters

+
    +
  • ms - Number; the speed that the screen brightness is decreased, expressed in milliseconds (1,000 milliseconds = 1 second). The smaller the number the faster the screen brightness decreased.
  • +
+

Example: fade away letter A

+

The following example sets the screen brightness to the maximum brightness, displays the letter A, and then gradually fades the letter away:

+
led.setBrightness(255)
+basic.showString("A", 1000)
+led.fadeOut(1000)
+

See also

+

brightness, fade in, set brightness

+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/led/plot-all.html b/docs/reference/led/plot-all.html new file mode 100644 index 00000000..1219625e --- /dev/null +++ b/docs/reference/led/plot-all.html @@ -0,0 +1,203 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

Plot All

+

Turn on all the 25 LEDs on the LED screen.

+
led.plotAll()
+

See also

+

LED screen, clear screen

+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/led/plot-bar-graph.html b/docs/reference/led/plot-bar-graph.html new file mode 100644 index 00000000..2a37d7d9 --- /dev/null +++ b/docs/reference/led/plot-bar-graph.html @@ -0,0 +1,225 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

Plot Bar Graph

+

Displays a bar graph of the numbers you say. +A bar graph is a kind of chart that shows numbers as lines with different lengths.

+
led.plotBarGraph(2, 20);
+

Parameters

+
    +
  • value is a number that means what you +are measuring or trying to show. For example, if you are measuring +the temperature of ice with the Calliope mini, value might be 0 +because the temperature might be 0 degrees centigrade.
  • +
  • high is a number that means the highest +possible number that the value parameter can be. This number is +also the tallest that the lines in the bar chart can be.
  • +
+

Example: chart acceleration

+

This program shows a bar graph of the acceleration +in the x direction of the Calliope mini. +The Calliope mini’s x direction is from left to right (or right to left). +The more you speed up moving the Calliope mini in this direction, +the taller the lines in the bar graph will be, +until they are as tall as the parameter high says they can be.

+
basic.forever(() => {
+    let a = input.acceleration(Dimension.X);
+    led.plotBarGraph(a, 1023)
+})
+

See also

+

brightness, fade in, fade out, LED screen, stop animation

+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/led/plot-leds.html b/docs/reference/led/plot-leds.html new file mode 100644 index 00000000..088b5ef9 --- /dev/null +++ b/docs/reference/led/plot-leds.html @@ -0,0 +1,221 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

Plot LEDs

+

Display an Image on the Calliope mini’s LED screen. NOTE: basic -> plot image has been replaced by basic -> show leds.

+
basic.showLeds(`
+. . . . .
+. # . # .
+. . # . .
+# . . . #
+. # # # .
+`)
+

Parameters

+
    +
  • leds - a series of LED on/off states that form an image (see steps below)
  • +
+

Example: smiley

+
basic.showLeds(`
+. . . . .
+. # . # .
+. . # . .
+# . . . #
+. # # # .
+`)
+

See also

+

show animation, image, show image, scroll image

+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/led/plot.html b/docs/reference/led/plot.html new file mode 100644 index 00000000..a8eaec54 --- /dev/null +++ b/docs/reference/led/plot.html @@ -0,0 +1,257 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

Plot

+

Turn on the LED light you say on the LED screen.

+
led.plot(0,0);
+ +
+
+ +

Use unplot to turn off an LED.

+ +
+
+ +

Parameters

+
    +
  • x is a number that means the +horizontal spot on the LED screen (from left to right: 0, 1, 2, 3, +or 4)
  • +
  • y is a number that means the vertical +spot on the LED screen (from top to bottom: 0, 1, 2, 3, or 4)
  • +
+

If a parameter is out of bounds (a value +other than 0 to 4), then this function will do nothing.

+ +
+
+ +

The LED screen is a solid square of LEDs with five LEDs on each side. +To learn more about how you number the LEDs with x and y +coordinates, see LED screen.

+ +
+
+ +

Example: One LED

+

This program turns on the bottom right LED.

+
led.plot(4, 4)
+

Example: Square

+

This program uses a for loop +and the plot function +to make a square around the edges of the LED screen.

+
for (let i = 0; i < 5; i++) {
+    led.plot(0, i)
+    led.plot(4, i)
+    led.plot(i, 0)
+    led.plot(i, 4)
+    basic.pause(500)
+}
+ +
+
+ +

Use the point function to find out if an LED is +on or off.

+ +
+
+ +

See also

+

unplot, point, LED screen

+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/led/point.html b/docs/reference/led/point.html new file mode 100644 index 00000000..36fa4de0 --- /dev/null +++ b/docs/reference/led/point.html @@ -0,0 +1,235 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

Point

+

Find whether the LED you say on the +LED screen is on or off.

+
led.point(0,0);
+

Parameters

+
    +
  • x is a number that means the +horizontal spot on the LED screen (from left to right: 0, 1, 2, 3, +or 4)
  • +
  • y is a number that means the vertical +spot on the LED screen (from top to bottom: 0, 1, 2, 3, or 4)
  • +
+

If a parameter is out of bounds (a value +other than 0 to 4), this function will return false.

+

Returns

+
    +
  • a boolean. If it is true, that means the LED is on. If it is false, that means the LED is off.
  • +
+ +
+
+ +

The LED screen is a solid square of LEDs with five LEDs on each side. +To learn more about how you number the LEDs with x and y +coordinates, see LED screen.

+ +
+
+ +

Example: Toggle off

+

This program turns the center LED (2, 2) off if it is already on. (If +it is already off, this program leaves it off.)

+
if (led.point(2, 2)) {
+    led.unplot(2, 2)
+}
+

See also

+

unplot, plot, LED screen

+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/led/screenshot.html b/docs/reference/led/screenshot.html new file mode 100644 index 00000000..7dd6534b --- /dev/null +++ b/docs/reference/led/screenshot.html @@ -0,0 +1,211 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

Screenshot

+

Make an Image out of the current state of the LED screen.

+
led.screenshot();
+

Parameters

+
    +
  • none
  • +
+

Returns

+ +

See also

+

create image, LED screen,

+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/led/set-brightness.html b/docs/reference/led/set-brightness.html new file mode 100644 index 00000000..8425b378 --- /dev/null +++ b/docs/reference/led/set-brightness.html @@ -0,0 +1,219 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

Set Brightness

+

Make the LED screen as bright as you say when it is +turned on.

+
led.setBrightness(121)
+

Parameters

+
    +
  • value is a number that means how +bright the screen is when it is turned on, from 0 (darkest) to +255 (brightest). For example, the number 127 means the screen is +halfway bright when it is turned on.
  • +
+

Example: change brightness

+

This program makes the screen brightness 100% (255). Then it turns on +the center LED (2, 2), waits for one second, and then sets the screen +brightness to 50% (128):

+
led.setBrightness(255)
+led.plot(2, 2)
+basic.pause(1000)
+led.setBrightness(led.brightness() / 2)
+

See also

+

brightness, fade in, fade out, LED screen

+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/led/set-display-mode.html b/docs/reference/led/set-display-mode.html new file mode 100644 index 00000000..afbdc9d8 --- /dev/null +++ b/docs/reference/led/set-display-mode.html @@ -0,0 +1,201 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

Set Display Mode

+

Sets the display mode between black and white and greyscale for rendering LEDs.

+
led.setDisplayMode(DisplayMode.Greyscale)
+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/led/stop-animation.html b/docs/reference/led/stop-animation.html new file mode 100644 index 00000000..63da5ab8 --- /dev/null +++ b/docs/reference/led/stop-animation.html @@ -0,0 +1,222 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

Stop Animation

+

Stop the animation that is playing and any animations that are waiting to +play.

+
led.stopAnimation()
+

Example

+

This program sets up the stop animation part of the program, +and then shows a string that you can stop with button B.

+
input.onButtonPressed(Button.B, () => {
+    led.stopAnimation();
+});
+basic.showString("STOP ME! STOP ME! PLEASE, WON'T SOMEBODY STOP ME?");
+ +
+
+ +

It’s important to set up stop animation before showing the +animation, so the stop animation part of the program will be ready +to go.

+ +
+
+ +

See Also

+

show animation

+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/led/toggle-all.html b/docs/reference/led/toggle-all.html new file mode 100644 index 00000000..c2c105c8 --- /dev/null +++ b/docs/reference/led/toggle-all.html @@ -0,0 +1,215 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

Toggle All

+

Toggle all the 25 LEDs on the LED screen - if an LED is on before the function is called, it will be off after; if an LED is off before the function is called, it will be on after.

+
led.toggleAll()
+

Parameters

+
    +
  • none
  • +
+

Example

+

The following code will result in every LED being on except for the LED at coordinate (2,2)

+
basic.clearScreen()
+led.plot(2, 2)
+led.toggleAll()
+
basic.clearScreen()
+led.plot(2, 2)
+led.toggleAll()
+

See also

+

toggle, LED screen, clear screen

+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/led/toggle.html b/docs/reference/led/toggle.html new file mode 100644 index 00000000..d0fcdcc5 --- /dev/null +++ b/docs/reference/led/toggle.html @@ -0,0 +1,214 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

Toggle

+

Toggle a LED light on the LED screen, meaning to turn it on (off) if it is off (on). Specify which LED using x, y coordinates.

+
led.toggle(0,0)
+

Parameters

+
    +
  • x - Number; the x coordinate or horizontal position (0, 1, 2, 3, 4)
  • +
  • y - Number; the y coordinate or vertical position (0, 1, 2, 3, 4)
  • +
+

If a parameter is out of bounds (a value other than 0-4), then this function will do nothing.

+

x, y coordinates?

+

The LED screen is made up of 25 LEDs arranged in a 5x5 grid. To figure out the x, y coordinates, see LED screen.

+

Example

+

This code toggles the centre LED:

+
led.toggle(2, 2)
+

See also

+

toggle all, plot, unplot, point, LED screen,

+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/led/unplot.html b/docs/reference/led/unplot.html new file mode 100644 index 00000000..bc6a34ac --- /dev/null +++ b/docs/reference/led/unplot.html @@ -0,0 +1,254 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

Unplot

+

Turn off the LED light you say on the LED screen.

+
led.unplot(0,0)
+ +
+
+ +

Use plot to turn on an LED.

+ +
+
+ +

Parameters

+
    +
  • x is a number that means the +horizontal spot on the LED screen (from left to right: 0, 1, 2, 3, +or 4)
  • +
  • y is a number that means the vertical +spot on the LED screen (from top to bottom: 0, 1, 2, 3, or 4)
  • +
+

If a parameter is out of bounds (a value +other than 0 to 4), then this function will do nothing.

+ +
+
+ +

The LED screen is a solid square of LEDs with five LEDs on each side. +To learn more about how you number the LEDs with x and y +coordinates, see LED screen.

+ +
+
+ +

Example: Center off

+

This program shows a picture on the LED screen, and then turns off the center LED with unplot.

+
basic.showLeds(`
+. . # . .
+. . # . .
+# # # # #
+. . # . .
+. . # . .
+`)
+basic.pause(500)
+led.unplot(2, 2)
+ +
+
+ +

Use the point function to find out if an LED is +on or off.

+ +
+
+ +

See also

+

plot, point, LED screen

+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/music.html b/docs/reference/music.html new file mode 100644 index 00000000..2cd403c5 --- /dev/null +++ b/docs/reference/music.html @@ -0,0 +1,208 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

Music

+

Generation of music tones through pin P0.

+
music.playTone(0, 0);
+music.ringTone(0);
+music.rest(0);
+music.beat(BeatFraction.Whole);
+music.tempo();
+music.changeTempoBy(20);
+music.setTempo(120);
+

See Also

+

playTone, ringTone, rest, beat, tempo, changeTempoBy, setTempo

+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/music/beat.html b/docs/reference/music/beat.html new file mode 100644 index 00000000..f82b7605 --- /dev/null +++ b/docs/reference/music/beat.html @@ -0,0 +1,215 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

Beat

+

Returns the duration of a beat in milli-seconds

+

Simulator

+

This function only works on the Calliope mini and in some browsers.

+
music.beat(BeatFraction.Whole)
+

Parameters

+
    +
  • BeatFraction means fraction of a beat (BeatFraction.Whole, BeatFraction.Sixteenth etc)
  • +
+

Returns

+
    +
  • a number that means the amount of milli-seconds a beat fraction represents.
  • +
+

Example

+
music.playTone(Note.C, music.beat(BeatFraction.Quarter))
+

See also

+

play tone, ring tone, rest, set tempo, change tempo by

+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/music/change-tempo-by.html b/docs/reference/music/change-tempo-by.html new file mode 100644 index 00000000..97cd89c6 --- /dev/null +++ b/docs/reference/music/change-tempo-by.html @@ -0,0 +1,217 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

Change Tempo By

+

Makes the tempo (speed of a piece of music) +faster or slower by the amount you say.

+

Simulator

+

This function only works on the Calliope mini and in some browsers.

+
music.changeTempoBy(20)
+

Parameters

+
    +
  • bpm is a number that says how much to +change the bpm (beats per minute, or number of beats in a minute of +the music that the Calliope mini is playing).
  • +
+

Examples

+

This program makes the music faster by 12 bpm.

+
music.changeTempoBy(12)
+

This program makes the music slower by 12 bpm.

+
music.changeTempoBy(-12)
+

See also

+

play tone, ring tone

+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/music/play-tone.html b/docs/reference/music/play-tone.html new file mode 100644 index 00000000..2a91d163 --- /dev/null +++ b/docs/reference/music/play-tone.html @@ -0,0 +1,216 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

Play Tone

+

Play a musical tone through pin P0 of the Calliope mini for as long as you say.

+

Simulator

+

This function only works on the Calliope mini and in some browsers.

+
music.playTone(440, 120)
+

Parameters

+
    +
  • frequency is the number of Hertz (how high or low the tone is).
  • +
  • ms is the number of milliseconds that the tone lasts
  • +
+

Example

+

This example stores the musical note C in the variable freq. +Next, it plays that note for 1000 milliseconds (one second).

+
let freq = music.noteFrequency(Note.C)
+music.playTone(freq, 1000)
+

See also

+

rest, ring tone , tempo, set tempo, +change tempo by

+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/music/rest.html b/docs/reference/music/rest.html new file mode 100644 index 00000000..0e0a8ad6 --- /dev/null +++ b/docs/reference/music/rest.html @@ -0,0 +1,215 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

Rest

+

Rest (play no sound) through pin PO for the amount of time you say.

+

Simulator

+

This function only works on the Calliope mini and in some browsers.

+
music.rest(400)
+

Parameters

+
    +
  • ms is a number saying how many +milliseconds the Calliope mini should rest. One second is 1000 +milliseconds.
  • +
+

Example

+
let frequency = music.noteFrequency(Note.C)
+music.playTone(frequency, 1000)
+music.rest(1000)
+

See also

+

play tone, ring tone , tempo, set tempo, change tempo by

+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/music/ring-tone.html b/docs/reference/music/ring-tone.html new file mode 100644 index 00000000..7d816ddb --- /dev/null +++ b/docs/reference/music/ring-tone.html @@ -0,0 +1,224 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

Ring Tone

+

Play a musical tone through pin P0 with the pitch as high or low as you say. +The tone will keep playing until you tell it not to.

+

Simulator

+

This function only works on the Calliope mini and in some browsers.

+
music.ringTone(440)
+

Parameters

+
    +
  • frequency is a number that says +how high-pitched or low-pitched the tone is. This +number is in Hz (Hertz), which is a measurement of frequency +or pitch.
  • +
+

Example

+

This program checks the accelerometer for the Calliope mini’s +acceleration (how much the Calliope mini is speeding up or slowing +down). Then it uses that acceleration to make a tone. If the Calliope mini +speeds up, the tone’s pitch gets higher, and if it slows down, the +tone’s pitch gets lower. It’s fun – try it!

+
basic.forever(() => {
+    music.ringTone(input.acceleration(Dimension.X))
+})
+

See also

+

rest, play tone, +tempo, set tempo, +change tempo by

+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/music/set-tempo.html b/docs/reference/music/set-tempo.html new file mode 100644 index 00000000..af4a1a21 --- /dev/null +++ b/docs/reference/music/set-tempo.html @@ -0,0 +1,209 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

Set Tempo

+

Makes the tempo (speed of a piece of music) as fast or slow as you say.

+
music.setTempo(60)
+

Simulator

+

This function only works on the Calliope mini and in some browsers.

+

Parameters

+
    +
  • bpm is a number that means the beats per minute you want (the number of beats in a minute of the music that the Calliope mini is playing).
  • +
+

See also

+

play tone, ring tone , rest, tempo, change tempo by

+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/music/tempo.html b/docs/reference/music/tempo.html new file mode 100644 index 00000000..e351b99c --- /dev/null +++ b/docs/reference/music/tempo.html @@ -0,0 +1,208 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

Tempo

+

Finds the tempo (speed of a piece of music).

+
music.tempo()
+

Returns

+
    +
  • a number that means the beats per minute (number of +beats in a minute of the music that the Calliope mini is playing).
  • +
+

See also

+

play tone, ring tone, rest, set tempo, change tempo by

+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/out-of-bounds.html b/docs/reference/out-of-bounds.html new file mode 100644 index 00000000..d199c4ed --- /dev/null +++ b/docs/reference/out-of-bounds.html @@ -0,0 +1,216 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

out of bounds

+

The behavior of functions whose parameter values are out of bounds.

+

Many of the Calliope mini functions have parameters. If a parameter is an unexpected value, the parameter is considered out of bounds.

+

For example, the plot function has two parameters:

+

syntax

+
led.plot(0,0)
+

parameters

+
    +
  • x - the x coordinate or horizontal position (0, 1, 2, 3, 4)
  • +
  • y - the y coordinate or vertical position (0, 1, 2, 3, 4)
  • +
+

out of bounds

+

here’s an example of code with an out of bounds parameter (the x and y parameters are outside the expected range of 0-4):

+
led.plot(9, -21)
+

what happens?

+

Typically, when a parameter supplied to a function is out of bounds that function does nothing (as if the function never executed). So, in the above case, the LED screen will not change.

+

return value

+

If you call the point function with an out of bounds parameter, the function returns false:

+
let on = led.point(5, -5)
+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/pins.html b/docs/reference/pins.html new file mode 100644 index 00000000..65552420 --- /dev/null +++ b/docs/reference/pins.html @@ -0,0 +1,220 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

Pins

+

Control currents in Pins for analog/digital signals, servos, i2c, …

+
pins.digitalReadPin(DigitalPin.P0);
+pins.digitalWritePin(DigitalPin.P0, 0);
+pins.analogReadPin(AnalogPin.P1);
+pins.analogWritePin(AnalogPin.P1, 1023);
+pins.analogSetPeriod(AnalogPin.P1, 20000);
+pins.map(0, 0, 1023, 0, 4);
+pins.onPulsed(DigitalPin.P0, PulseValue.High, () => {
+
+});
+pins.pulseDuration();
+pins.pulseIn(DigitalPin.P0, PulseValue.High);
+pins.servoWritePin(AnalogPin.P1, 180);
+pins.servoSetPulse(AnalogPin.P1, 1500);
+pins.i2cReadNumber(0, NumberFormat.Int8LE);
+pins.i2cWriteNumber(0, 0, NumberFormat.Int8LE);
+pins.spiWrite(0);
+pins.setPull(DigitalPin.P0, PinPullMode.PullDown);
+pins.analogPitch(0, 0);
+pins.analogSetPitchPin(AnalogPin.P1);
+

See Also

+

digitalReadPin, digitalWritePin, analogReadPin, analogWritePin, analogSetPeriod, map, onPulsed, pulseDuration, pulseIn, servoWritePin, servoSetPulse, i2cReadNumber, i2cWriteNumber, setPull, analogPitch, analogSetPitchPin, spiWrite

+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/pins/analog-pitch.html b/docs/reference/pins/analog-pitch.html new file mode 100644 index 00000000..398b82a2 --- /dev/null +++ b/docs/reference/pins/analog-pitch.html @@ -0,0 +1,218 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

Analog Pitch

+

Emits a Pulse With Modulation (PWM) signal to the current pitch pin. Use analog set pitch pin to set the current pitch pin.

+
pins.analogPitch(440, 300)
+

Parameters

+ +

Example

+
pins.analogSetPitchPin("P0")
+let frequency1 = 440
+let duration = 1000
+pins.analogPitch(frequency1, duration)
+

Some common notes

+ +

See also

+

Calliope mini pins, analog set period, analog set pitch pin

+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/pins/analog-read-pin.html b/docs/reference/pins/analog-read-pin.html new file mode 100644 index 00000000..a775b4f6 --- /dev/null +++ b/docs/reference/pins/analog-read-pin.html @@ -0,0 +1,232 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

Analog Read Pin

+

Read an analog signal (0 through 1023) from the +pin you say.

+
pins.analogReadPin(AnalogPin.P1)
+

Parameters

+
    +
  • name is a string with the name of the pin +you say (P0 through P4, or P10)
  • +
+

Returns

+
    +
  • a number from 0 through 1023
  • +
+

This program reads pin P1 and shows the number +on the LED screen.

+
basic.forever(() => {
+    let value = pins.analogReadPin(AnalogPin.P1)
+    basic.showNumber(value)
+});
+ +
+
+ +

If you are using analog read pin with another Calliope mini running analog write pin, then things can get tricky. Remember that the Calliope mini that runs analog set pin writes 0’s and 1’s at a very high frequency to achieve an average of the desired value. Sadly, if you try to read that average from another Calliope mini, then the Calliope mini will either read 0 or 1023. You could try to read a higher number of values (e.g. a million) in a loop, then computer then average. Alternatively, you can plug in a capacitor in-between the two Calliope minis.

+ +
+
+ +

See also

+

Calliope mini pins, +on pin pressed, +analog write pin, +digital read pin, +digital write pin

+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/pins/analog-set-period.html b/docs/reference/pins/analog-set-period.html new file mode 100644 index 00000000..01b6e600 --- /dev/null +++ b/docs/reference/pins/analog-set-period.html @@ -0,0 +1,219 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

Analog Set Period

+

Configure the period of Pulse Width Modulation (PWM) on the specified +analog pin. +Before you call this function, you should set the specified pin as analog.

+
pins.analogSetPeriod(AnalogPin.P1, 20000)
+

Parameters

+
    +
  • name: a string that specifies the pin to configure (P0 through P4, or P10)
  • +
  • micros: a number that specifies the analog period in microseconds.
  • +
+

The following code first sets P0 to analog with analog write +pin, and then sets the PWM period of P0 to 20,000 microseconds.

+
pins.analogWritePin(AnalogPin.P1, 512)
+pins.analogSetPeriod(AnalogPin.P1, 20000)
+

See also

+

Calliope mini pins, +on pin pressed, +analog read pin, +analog write pin, +digital read pin, +digital write pin

+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/pins/analog-set-pitch-pin.html b/docs/reference/pins/analog-set-pitch-pin.html new file mode 100644 index 00000000..3208ccec --- /dev/null +++ b/docs/reference/pins/analog-set-pitch-pin.html @@ -0,0 +1,217 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

Analog Set Pitch Pin

+

Specify which pin (P0, P1, P2) is used to generate tones.

+
pins.analogSetPitchPin(AnalogPin.P1)
+

Parameters

+
    +
  • name - String; the pin name (“P0”, “P1”, or “P2”)
  • +
+

Example

+
pins.analogSetPitchPin(AnalogPin.P1)
+let frequency = 440
+let duration = 1000
+pins.analogPitch(frequency, duration)
+

Some common notes

+ +

See also

+

Calliope mini pins, analog set period, analog pitch

+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/pins/analog-write-pin.html b/docs/reference/pins/analog-write-pin.html new file mode 100644 index 00000000..6ffb93bd --- /dev/null +++ b/docs/reference/pins/analog-write-pin.html @@ -0,0 +1,223 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

Analog Write Pin

+

Write an analog signal (0 through 1023) to the +pin you say.

+
pins.analogWritePin(AnalogPin.P1, 400)
+

Parameters

+
    +
  • name is a string that is the pin name you say (P0 through P4, or P10)
  • +
  • value is a number from 0 through 1023
  • +
+

Example

+

This program writes 1023 to pin P0.

+
pins.analogWritePin(AnalogPin.P1, 1023)
+ +
+
+ +

When you tell it to write 256 (for example), this function does not +really write 256. Instead, it writes a lot of different numbers, +and their average is 256.

+ +
+
+ +

See also

+

Calliope mini pins, on pin pressed, analog read pin, digital read pin, digital write pin

+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/pins/digital-read-pin.html b/docs/reference/pins/digital-read-pin.html new file mode 100644 index 00000000..f81c18c9 --- /dev/null +++ b/docs/reference/pins/digital-read-pin.html @@ -0,0 +1,261 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

Digital Read Pin

+

Read a digital (0 or 1) signal from a pin on +the Calliope mini board.

+
pins.digitalReadPin(DigitalPin.P3)
+ +
+
+
+ +

Some pins are also used by the LED screen. +Please read the page about pins carefully.

+ +
+
+ +

Parameters

+
    +
  • name is a string that stores the name of the pin (P0, P1, or P2, up through P20)
  • +
+

Returns

+
    +
  • a number that can be 0 or 1
  • +
+

Example: football score keeper

+

This program reads pin P0 to find when a goal is scored. When P0 +is 1, the program makes the score bigger and plays a buzzer sound +through P2 with digital write pin.

+
let score = 0
+basic.showNumber(score)
+basic.forever(() => {
+    if (pins.digitalReadPin(DigitalPin.P0) == 1) {
+        score++;
+        pins.digitalWritePin(DigitalPin.P2, 1)
+        basic.showNumber(score)
+        basic.pause(1000)
+        pins.digitalWritePin(DigitalPin.P2, 0)
+    }
+})
+

This program is a remote control for the score keeper program. If you +connect P1 on the remote control Calliope mini to P0 on the score +keeper Calliope mini, you can press button B on the remote to buzz and +make the score bigger on the other Calliope mini.

+
input.onButtonPressed(Button.B, () => {
+    pins.digitalWritePin(DigitalPin.P1, 1);
+    basic.pause(500);
+    pins.digitalWritePin(DigitalPin.P1, 0);
+});
+ +
+
+ +

Remember to connect GND on both Calliope minis together!

+ +
+
+ +

See also

+

Calliope mini pins, +digital write pin, +analog read pin, +analog write pin, +on pin pressed, +pin is pressed

+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/pins/digital-write-pin.html b/docs/reference/pins/digital-write-pin.html new file mode 100644 index 00000000..79ebd309 --- /dev/null +++ b/docs/reference/pins/digital-write-pin.html @@ -0,0 +1,249 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

Digital Write Pin

+

Write a digital (0 or 1) signal to a pin on +the Calliope mini board.

+
pins.digitalWritePin(DigitalPin.P1, 1)
+ +
+
+
+ +

Some pins are also used by the LED screen. +Please read the page about pins carefully.

+ +
+
+ +

Parameters

+
    +
  • name is a string that stores the name of the pin (P0, P1, or P2, up through P20)
  • +
  • value is a number that can be either 0 or 1
  • +
+

Example: football score keeper

+

This program reads pin P0 to find when a goal is scored. When P0 +is 1, the program makes the score bigger and plays a buzzer sound +through P2 with digital write pin.

+
let score = 0
+basic.showNumber(score)
+basic.forever(() => {
+    if (pins.digitalReadPin(DigitalPin.P0) == 1) {
+        score++;
+        pins.digitalWritePin(DigitalPin.P2, 1)
+        basic.showNumber(score)
+        basic.pause(1000)
+        pins.digitalWritePin(DigitalPin.P2, 0)
+    }
+})
+

This program is a remote control for the score keeper program. If you +connect P1 on the remote control Calliope mini to P0 on the score +keeper Calliope mini, you can press button B on the remote. This program +will use digital write pin to make the other Calliope mini buzz and +make the score bigger.

+
input.onButtonPressed(Button.B, () => {
+    pins.digitalWritePin(DigitalPin.P1, 1);
+    basic.pause(500);
+    pins.digitalWritePin(DigitalPin.P1, 0);
+});
+

See also

+

Calliope mini pins, +digital read pin, +analog read pin, +analog write pin, +on pin pressed

+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/pins/i2c-read-number.html b/docs/reference/pins/i2c-read-number.html new file mode 100644 index 00000000..54aa1946 --- /dev/null +++ b/docs/reference/pins/i2c-read-number.html @@ -0,0 +1,230 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

I2C Read Number

+

Read one number from the specified 7-bit I2C address, in the specified +number format.

+
pins.i2cReadNumber(0, NumberFormat.Int8LE);
+

Parameters

+
    +
  • address: the 7-bit I2C address from which to read the number.
  • +
  • format: the number format. Formats include +Int8LE, UInt8LE, Int16LE, UInt16LE, Int32LE, +Int8BE, UInt8BE, Int16BE, UInt16BE, and +Int32BE.
      +
    • Int stands for “integer”, and UInt stands for “unsigned integer”.
    • +
    • LE stands for “little-endian” and BE stands for “big-endian”.
    • +
    • The number in each format name stands for the number of bits in the format.
    • +
    +
  • +
+

Example

+

The following example reads a number in big-endian, 16-bit, unsigned integer +format from the 7-bit I2C address 32.

+
pins.i2cReadNumber(32, NumberFormat.UInt16BE);
+ +
+
+ +

This function is not supported in the simulator.

+ +
+
+ +

See also

+

I2C

+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/pins/i2c-write-number.html b/docs/reference/pins/i2c-write-number.html new file mode 100644 index 00000000..8819d87f --- /dev/null +++ b/docs/reference/pins/i2c-write-number.html @@ -0,0 +1,231 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

I2C Write Number

+

Write the specified number to the specified 7-bit I2C address in the +specified number format.

+
pins.i2cWriteNumber(0, 0, NumberFormat.Int8LE);
+

Parameters

+
    +
  • address: the 7-bit I2C address to which to send value
  • +
  • value: the number to send to address
  • +
  • format: the number format for value. Formats include +Int8LE, UInt8LE, Int16LE, UInt16LE, Int32LE, +Int8BE, UInt8BE, Int16BE, UInt16BE, and +Int32BE.
      +
    • Int stands for “integer”, and UInt stands for “unsigned integer”.
    • +
    • LE stands for “little-endian” and BE stands for “big-endian”.
    • +
    • The number in each format name stands for the number of bits in the format.
    • +
    +
  • +
+

Example

+

The following example sends the value 2055 to the 7-bit I2C +address 32 in big-endian 32-bit integer format.

+
pins.i2cWriteNumber(32, 2055, NumberFormat.Int32BE);
+ +
+
+ +

This function is not supported in the simulator.

+ +
+
+ +

See also

+

I2C

+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/pins/map.html b/docs/reference/pins/map.html new file mode 100644 index 00000000..06b2fb91 --- /dev/null +++ b/docs/reference/pins/map.html @@ -0,0 +1,224 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

Map

+

Remaps the specified value from one range to another. This function +maps the value of from low to the value of to low, the value +of from high to the value of to high, and intermediate values +to intermediate values.

+

This function does not constrain values to the ranges, because +out-of-range values are sometimes intended and useful. If you need to +limit a range, you can use the Math.clamp function before or after +calling this function.

+
pins.map(0, 0, 4, 0, 1023);
+

Parameters

+
    +
  • value: a number that specifies the value to map
  • +
  • fromLow: a number that specifies the lower bound of the origin interval
  • +
  • fromHigh: a number that specifies the upper bound of the origin interval
  • +
  • toLow: a number that specifies the lower bound of the target interval
  • +
  • toHigh: a number that specifies the upper bound of the target interval
  • +
+

Example

+

This example maps the value read from the analog pin P0 to an LED +coordinate between 0 and 4.

+
let value1 = pins.analogReadPin(AnalogPin.P1)
+let index = pins.map(value1, 0, 1023, 0, 4)
+led.plot(0, index)
+

See also

+

analog read pin

+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/pins/on-pulsed.html b/docs/reference/pins/on-pulsed.html new file mode 100644 index 00000000..827f86d1 --- /dev/null +++ b/docs/reference/pins/on-pulsed.html @@ -0,0 +1,218 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

On Pulsed

+

Configure the specified pin for digital input, and then +execute the associated code block whenever the pin +pulses High or Low (as specified).

+
pins.onPulsed(DigitalPin.P0, PulseValue.High, () => { });
+

Parameters

+
    +
  • name: The Calliope mini hardware pin to configure (P0 through P20)
  • +
  • pulse: Which state will cause the associated block to execute (High or Low)
  • +
+

Example

+

The following example configures pin P2 for digital input, +and then displays the string LOW whenever P2 pulses low.

+
pins.onPulsed(DigitalPin.P2, PulseValue.Low, () => {
+    basic.showString("LOW");
+});
+

See also

+

servo set pulse, +pulse duration, +digital read pin

+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/pins/pulse-duration.html b/docs/reference/pins/pulse-duration.html new file mode 100644 index 00000000..b256ce66 --- /dev/null +++ b/docs/reference/pins/pulse-duration.html @@ -0,0 +1,214 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

Pulse Duration

+

Gets the duration of the last pulse in microseconds.

+

This function should be called from an on pulsed handler.

+
pins.pulseDuration();
+

Returns

+

The duration of the last pulse, measured in microseconds.

+

Example

+

The following example waits for pin P0 to be pulsed high, and then +displays the duration of the pulse in microseconds on the LED screen.

+
pins.onPulsed(DigitalPin.P0, PulseValue.High, () => {
+    basic.showNumber(pins.pulseDuration());
+});
+

See also

+

servo set pulse, +on pulsed, +digital read pin

+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/pins/pulse-in.html b/docs/reference/pins/pulse-in.html new file mode 100644 index 00000000..99ca0ad3 --- /dev/null +++ b/docs/reference/pins/pulse-in.html @@ -0,0 +1,248 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

Pulse In

+

Returns the duration of a pulse (high or low) from a pin on +the Calliope mini board in microseconds.

+
pins.pulseIn(DigitalPin.P0, PulseValue.High)
+ +
+
+
+ +

Some pins are also used by the LED screen. +Please read the page about pins carefully.

+ +
+
+ +

Parameters

+
    +
  • name is a string that stores the name of the pin (P0, P1, or P2, up through P20)
  • +
  • value is the value of the pulse, high or low
  • +
  • maxDuration, maximum duration in micro-seconds. If no pulse is received
  • +
+

Returns

+
    +
  • a number that represents the pulse duration in micro-seconds
  • +
+

Example: Measuring distance with a sonar

+

The following script sends a pulse on P0 and reads the pulse returned by a HC-SR04 sonar to determine the distance of the object in front of the sensor.

+
basic.forever(() => {
+    // send pulse
+    pins.digitalWritePin(DigitalPin.P0, 0)
+    control.waitMicros(2)
+    pins.digitalWritePin(DigitalPin.P0, 1)
+    control.waitMicros(10)
+    pins.digitalWritePin(DigitalPin.P0, 0)
+
+    // read pulse
+    led.plotBarGraph(pins.pulseIn(DigitalPin.P1, PulseValue.High) / 58, 0)
+    basic.pause(100)
+})
+ +
+
+ +

This function is not supported in the simulator.

+ +
+
+ +

See also

+

digital write pin,

+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/pins/servo-set-pulse.html b/docs/reference/pins/servo-set-pulse.html new file mode 100644 index 00000000..6997ccb9 --- /dev/null +++ b/docs/reference/pins/servo-set-pulse.html @@ -0,0 +1,216 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

Servo Set Pulse

+

Configure the specified pin as analog output, set the period to 20 +ms, and set the pulse width to the specified value.

+
pins.servoSetPulse(AnalogPin.P1, 1500)
+

Parameters

+
    +
  • name: a string that specifies the pin to configure (P0 through P4, or P10)
  • +
  • micros: a number that specifies the analog period in microseconds.
  • +
+

Example

+

The following code sets the servo pulse to 1000 microseconds.

+
pins.servoSetPulse(AnalogPin.P1, 1000)
+

See also

+

Calliope mini pins, +on pin pressed, +analog read pin, +digital read pin, +digital write pin

+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/pins/servo-write-pin.html b/docs/reference/pins/servo-write-pin.html new file mode 100644 index 00000000..d58483de --- /dev/null +++ b/docs/reference/pins/servo-write-pin.html @@ -0,0 +1,225 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

Servo Write Pin

+

Write a value to the servo on the specified pin +and control the shaft.

+

This function will move the shaft of a standard servo to the specified +angle, or set the speed of a continuous rotation servo. (0 specifies +full speed in one direction, 180 specifies full speed in the other, +and approximately 90 specifies no movement.)

+
pins.servoWritePin(AnalogPin.P1, 180)
+

Parameters

+
    +
  • name: a string that specifies the pin name (P0 through P4, or P10)
  • +
  • value: a number from 0 through 180
  • +
+

Examples

+

Setting the shaft angle to midpoint on a servo

+
pins.servoWritePin(AnalogPin.P1, 90)
+

Controlling the shaft by using the tilt information of the accelerometer

+
basic.forever(() => {
+    let millig = input.acceleration(Dimension.X)
+    // map accelerometer readings to angle
+    let angle = pins.map(millig, -1023, 1023, 0, 180)
+    pins.servoWritePin(AnalogPin.P1, angle)
+})
+

Setting the full speed on a continuous servo

+
pins.servoWritePin(AnalogPin.P1, 0)
+

See also

+

Calliope mini pins, servo set pulse

+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/pins/set-events.html b/docs/reference/pins/set-events.html new file mode 100644 index 00000000..c95bd9a5 --- /dev/null +++ b/docs/reference/pins/set-events.html @@ -0,0 +1,218 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

Set Events

+

Configure the type of events emitted by a given pin.

+
pins.setEvents(DigitalPin.P0, PinEventType.Edge);
+

Parameters

+
    +
  • name: The Calliope mini hardware pin to configure (P0 through P20)
  • +
  • type: The type of events this pin should emit
  • +
+

Example

+

The following example configures pin P0 and then +subscribes to the rise and fall events.

+
control.onEvent(control.eventSourceId(EventBusSource.MICROBIT_ID_IO_P0),  control.eventValueId(EventBusValue.MICROBIT_PIN_EVT_RISE), () => {
+    basic.showString("Rise")
+})
+control.onEvent(control.eventSourceId(EventBusSource.MICROBIT_ID_IO_P0),  control.eventValueId(EventBusValue.MICROBIT_PIN_EVT_FALL), () => {
+    basic.showString("Fall")
+})
+pins.setEvents(DigitalPin.P0, PinEventType.Edge)
+

This is an advanced API. For more information, see the +Calliope mini runtime messageBus documentation

+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/pins/set-pull.html b/docs/reference/pins/set-pull.html new file mode 100644 index 00000000..d8e220e8 --- /dev/null +++ b/docs/reference/pins/set-pull.html @@ -0,0 +1,218 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

Set Pull

+

Configure the electrical pull of the specified pin.

+

Many Calliope mini pins can be configured as pull-ups. For example, a +pull-up can set a pin’s voltage to high (3.3 volts, or 1 when +calling digital read pin). If one +end of a button is connected to P0 (set to high) and the other end +is connected to GND (0 volts), then when you press the button, +P0 is driven to 0 volts, and the Calliope mini software can detect a +button press.

+
pins.setPull(DigitalPin.P9, PinPullMode.PullDown);
+

Parameters

+
    +
  • name: The Calliope mini hardware pin to configure (P0-P20)
  • +
  • pull: The pull to which to set the pin (down, up, or none)
  • +
+

Example

+

The following example sets the pull of pin P0 to up (high).

+
pins.setPull(DigitalPin.P0, PinPullMode.PullUp);
+

See also

+

Calliope mini | mbed

+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/pins/spi-write.html b/docs/reference/pins/spi-write.html new file mode 100644 index 00000000..c0457c03 --- /dev/null +++ b/docs/reference/pins/spi-write.html @@ -0,0 +1,211 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

SPI Write

+

Write to the SPI Slave and return the response.

+
pins.spiWrite(0);
+

Parameters

+
    +
  • value: value Data to be sent to the SPI slave
  • +
+

Returns

+
    +
  • a number Response from the SPI slave
  • +
+

See also

+

SPI

+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/radio.html b/docs/reference/radio.html new file mode 100644 index 00000000..79ac0156 --- /dev/null +++ b/docs/reference/radio.html @@ -0,0 +1,219 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

Radio

+

Communicate data using radio packets

+
radio.sendNumber(0);
+radio.sendValue("name", 0);
+radio.sendString("");
+radio.onDataPacketReceived(() => {
+
+});
+radio.setGroup(0);
+radio.setTransmitPower(7);
+radio.setTransmitSerialNumber(false);
+radio.writeReceivedPacketToSerial();
+
radio
+

See Also

+

sendNumber, +sendValue, +sendString, +onDataPacketReceived, +setGroup, +setTransmitPower, +setTransmitSerialNumber, +writeReceivedPacketToSerial

+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/radio/on-data-packet-received.html b/docs/reference/radio/on-data-packet-received.html new file mode 100644 index 00000000..c28e9c43 --- /dev/null +++ b/docs/reference/radio/on-data-packet-received.html @@ -0,0 +1,239 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

On Data Packet Received

+

Run part of a program when the Calliope mini receives a +number or string over radio.

+
radio.onDataPacketReceived(({receivedNumber, receivedString, time, serial, signal}) => { });
+ +
+
+ +

To add or remove the parts of the packet from the block, try clicking the blue gear in the corner!

+ +
+
+ +

Callback Parameters

+
    +
  • packet - the packet that was received by the radio. The packet has the following properties:
      +
    • receivedNumber - The number that was sent in this packet or 0 if this packet did not contain a number. See send number and send value
    • +
    • receivedString - The string that was sent in this packet or the empty string if this packet did not contain a string. See send string and send value
    • +
    • time - The system time of the Calliope mini that sent this packet at the time the packet was sent.
    • +
    • serial - The serial number of the Calliope mini that sent this packet or 0 if the Calliope mini did not include its serial number.
    • +
    • signal - How strong the radio signal is from 255 (weak) to 0 (strong).
    • +
    +
  • +
+

Example

+

This program keeps sending numbers that says how fast the Calliope mini is +slowing down or speeding up. It also receives numbers for the same +thing from nearby Calliope minis. It shows these numbers as a +bar graph.

+
basic.forever(() => {
+    radio.sendNumber(input.acceleration(Dimension.X));
+})
+radio.onDataPacketReceived(({ receivedNumber }) => {
+    led.plotBarGraph(receivedNumber, 1023);
+})
+

See also

+

send number, +send string, +send value, +set group

+
radio
+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/radio/on-data-received.html b/docs/reference/radio/on-data-received.html new file mode 100644 index 00000000..a27db30f --- /dev/null +++ b/docs/reference/radio/on-data-received.html @@ -0,0 +1,220 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

On Data Received

+
+

Note: This API has been deprecated! Use on data packet received instead.

+
+

Run part of a program when the Calliope mini receives a +number or string over radio.

+
radio.onDataReceived(() => { });
+

Example

+

This program keeps sending numbers that says how fast the Calliope mini is +slowing down or speeding up. It also receives numbers for the same +thing from nearby Calliope minis. It shows these numbers as a +bar graph.

+
basic.forever(() => {
+    radio.sendNumber(input.acceleration(Dimension.X));
+})
+radio.onDataReceived(() => {
+    led.plotBarGraph(radio.receiveNumber(), 1023);
+})
+

See also

+

on data packet received, +send number, set group

+
radio
+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/radio/packet.html b/docs/reference/radio/packet.html new file mode 100644 index 00000000..f3b38754 --- /dev/null +++ b/docs/reference/radio/packet.html @@ -0,0 +1,211 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

Packet

+

A packet that was received by the radio.

+

Properties

+
    +
  • receivedNumber - The number that was sent in this packet or 0 if this packet did not contain a number. See send number and send value
  • +
  • receivedString - The string that was sent in this packet or the empty string if this packet did not contain a string. See send string and send value
  • +
  • time - The system time of the Calliope mini that sent this packet at the time the packet was sent.
  • +
  • serial - The serial number of the Calliope mini that sent this packet or 0 if the Calliope mini did not include its serial number.
  • +
  • signal - How strong the radio signal is from 255 (weak) to 0 (strong).
  • +
+

See also

+

on data packet received,

+
radio
+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/radio/receive-number.html b/docs/reference/radio/receive-number.html new file mode 100644 index 00000000..507da189 --- /dev/null +++ b/docs/reference/radio/receive-number.html @@ -0,0 +1,242 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

Receive Number

+
+

Note: This API has been deprecated! Use on data packet received instead.

+
+

Receives the next number sent by a Calliope mini in the same radio group.

+
radio.receiveNumber();
+

Returns

+
    +
  • the first number that the Calliope mini received. If it did not receive any numbers, this function will return 0.
  • +
+

Example: Simple number receiver

+

This example receives the number broadcasted another Calliope mini and shows it +as a bar graph.

+
radio.onDataReceived(() => {
+    led.plotBarGraph(radio.receiveNumber(), 1023);
+})
+

Example: Light level receiver

+

This example shows the light level from the light level sender example +as a number.

+
radio.setGroup(99)
+basic.forever(() => {
+    let level = radio.receiveNumber()
+    basic.showNumber(level)
+})
+

Example: Mailbot

+

This example receives the light level from the light level sender example +and shows a text string like ALERT if the light level becomes much brighter. +To find when the mail arrives, you can put the light level sender in your mailbox and it will +tell you when someone opens the box. You can try this with a normal +box too, like a present for a friend.

+
radio.setGroup(99)
+let max = 0
+basic.forever(() => {
+    let level = radio.receiveNumber()
+    if (level > max) {
+        max = level
+    }
+    if (max > 10) {
+        basic.showString("ALERT")
+    }
+})
+

See also

+

send number, on data received

+
radio
+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/radio/receive-string.html b/docs/reference/radio/receive-string.html new file mode 100644 index 00000000..f095e7fb --- /dev/null +++ b/docs/reference/radio/receive-string.html @@ -0,0 +1,270 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

Receive String

+
+

Note: This API has been deprecated! Use on data packet received instead.

+
+

Find the next string sent by radio from another Calliope mini.

+
radio.receiveString()
+

Returns

+
    +
  • the first string that was sent. If no +string was sent, then this function returns an empty (blank) string.
  • +
+

Example: Simple receiver

+

Show the string sent by another Calliope mini.

+
radio.onDataReceived(() => {
+    basic.showString(radio.receiveString());
+});
+

Example: Two-way radio

+

If you load this program onto two or more Calliope minis, you can send a code word from one of them to the others by pressing button A. +The other Calliope minis will receive the code word and then show it.

+
input.onButtonPressed(Button.A, () => {
+    radio.sendString("Codeword: TRIMARAN")
+    basic.showString("SENT");
+})
+
+radio.onDataReceived(() => {
+    basic.showString(radio.receiveString());
+});
+ +
+
+ +

A radio that can both transmit and receive is called a transceiver.

+ +
+
+ +

Example: Mood radio

+

This is a simple program to send whether you are happy or sad over radio. +Use the A or B button to select an emotion.

+

This program will also receive your friend’s mood.

+
let data: string = "";
+input.onButtonPressed(Button.A, () => {
+    radio.sendString("H");
+});
+input.onButtonPressed(Button.B, () => {
+    radio.sendString("S");
+});
+radio.onDataReceived(() => {
+    data = radio.receiveString();
+    if ("H" == data) {
+        basic.showLeds(`
+            . . . . .
+            . # . # .
+            . . . . .
+            # . . . #
+            . # # # .
+            `);
+    } else if ("S" == data) {
+        basic.showLeds(`
+            . . . . .
+            . # . # .
+            . . . . .
+            . # # # .
+            # . . . #
+            `);
+    } else {
+        basic.showString("?");
+    }
+});
+

See also

+

send string, on data received

+
radio
+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/radio/received-signal-strength.html b/docs/reference/radio/received-signal-strength.html new file mode 100644 index 00000000..0f300bac --- /dev/null +++ b/docs/reference/radio/received-signal-strength.html @@ -0,0 +1,228 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

Received Signal Strength

+
+

Note: This API has been deprecated! Use on data packet received instead.

+
+

Find how strong the radio signal is, from 255 to 0. +(255 means a weak signal and 0 means a strong one.)

+

The Calliope mini finds the signal strength by checking how strong it was +the last time it ran the +on data packet received function. That means +it needs to run receive number first.

+
radio.receivedSignalStrength();
+

Returns

+
    +
  • a number between 255 and 0 that means +how strong the signal is.
  • +
+

Simulator

+

This function only works on the Calliope mini, not in browsers.

+

Example

+

This example shows how strong the radio signal of the +light level sender example is.

+
let x = 0;
+radio.setGroup(99);
+basic.forever(() => {
+    x = radio.receiveNumber();
+    basic.showNumber(radio.receivedSignalStrength());
+});
+

See also

+

on data packet received, send number, on data received

+
radio
+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/radio/send-number.html b/docs/reference/radio/send-number.html new file mode 100644 index 00000000..d3d0c126 --- /dev/null +++ b/docs/reference/radio/send-number.html @@ -0,0 +1,224 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

Send Number

+

Broadcast a number to other Calliope minis connected via radio.

+
radio.sendNumber(0);
+

Parameters

+ +

Example: Broadcasting acceleration

+

This example broadcasts the value of your Calliope mini’s acceleration +in the x direction (left and right) to other Calliope minis. This kind +of program might be useful in a model car or model rocket.

+
input.onButtonPressed(Button.A, () => {
+    radio.sendNumber(input.acceleration(Dimension.X))
+})
+

Light level sender

+

This example broadcasts the level of the light around it. +You can do some interesting things with it if you use it along with the +on data packet received example.

+
radio.setGroup(99)
+basic.forever(() => {
+    let level = input.lightLevel()
+    radio.sendNumber(level)
+})
+

See also

+

on data packet received

+
radio
+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/radio/send-string.html b/docs/reference/radio/send-string.html new file mode 100644 index 00000000..f084e0cc --- /dev/null +++ b/docs/reference/radio/send-string.html @@ -0,0 +1,230 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

Send String

+

Sends a string to other Calliope minis in the area connected by radio. The +maximum string length is 19 characters.

+
radio.sendString("Hello!")
+

Parameters

+
    +
  • msg is a string to send by radio.
  • +
+

Example: Two-way radio

+

If you load this program onto two or more Calliope minis, you can send a +code word from one of them to the others by pressing button A. The +other Calliope minis will receive the code word and then show it.

+
input.onButtonPressed(Button.A, () => {
+    radio.sendString("Codeword: TRIMARAN")
+    basic.showString("SENT");
+})
+
+radio.onDataPacketReceived(({ receivedString }) => {
+    basic.showString(receivedString);
+});
+ +
+
+ +

A radio that can both transmit and receive is called a transceiver.

+ +
+
+ +

See also

+

on data packet received

+
radio
+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/radio/send-value.html b/docs/reference/radio/send-value.html new file mode 100644 index 00000000..b2b35339 --- /dev/null +++ b/docs/reference/radio/send-value.html @@ -0,0 +1,226 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

Send Value

+

Send a string and number together by radio to other Calliope minis. +The maximum string length is 12 characters.

+
radio.sendValue("name", 0);
+

Parameters

+
    +
  • name is a string to send by radio
  • +
  • value a number to send by radio
  • +
+

Example: Broadcasting acceleration

+

This program sends your Calliope mini’s acceleration (amount it is +speeding up or slowing down) in the x direction (left and right) to +other Calliope minis. This kind of program might be useful in a model car +or model rocket.

+
radio.setGroup(99)
+input.onButtonPressed(Button.A, () => {
+    radio.sendValue("acc", input.acceleration(Dimension.X))
+})
+

This program receives the string and number sent by the last program. +Then it shows them on the LED screen.

+
radio.setGroup(99)
+radio.onDataPacketReceived(({ receivedString, receivedNumber }) => {
+    basic.showString(receivedString);
+    basic.showNumber(receivedNumber);
+});
+

See also

+

on data packet received

+
radio
+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/radio/set-group.html b/docs/reference/radio/set-group.html new file mode 100644 index 00000000..5bf194e5 --- /dev/null +++ b/docs/reference/radio/set-group.html @@ -0,0 +1,223 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

Set Group

+

Make a program have the group ID you tell it for sending and receiving +with radio. A group is like a cable channel (a Calliope mini can only +send or receive in one group at a time). A group ID is like the cable +channel number.

+

If you do not tell your program which group ID to use with this +function, it will figure out its own group ID by itself. If you load +the very same program onto two different Calliope minis, they will be able +to talk to each other because they will have the same group ID.

+
radio.setGroup(0);
+

Parameters

+
    +
  • id is a number from 0 to 255.
  • +
+

Simulator

+

This function only works on the Calliope mini, not in browsers.

+

Example

+

This program makes the group ID equal 128.

+
radio.setGroup(128)
+

See also

+

on data packet received, +send number, +send value, +send string

+
radio
+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/radio/set-transmit-power.html b/docs/reference/radio/set-transmit-power.html new file mode 100644 index 00000000..4f1595f9 --- /dev/null +++ b/docs/reference/radio/set-transmit-power.html @@ -0,0 +1,226 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

Set Transmit Power

+

Make the radio signal of the Calliope mini stronger or weaker. +It can be as weak as 0 and as strong as 7.

+

The scientific name for the strength of the radio signal is +dBm, or decibel-milliwatts. A signal strength of 0 +can be measured as -30 dBm, and a strength of 7 can be +measured as +4 dBm.

+
radio.setTransmitPower(7);
+

Range

+

If your Calliope mini is sending with a strength of 7, and you are in +an open area without many other computers around, the Calliope mini signal +can reach as far as 70 meters (about 230 feet).

+

Parameters

+
    +
  • power is a number between 0 and 7 that +means how strong the signal is.
  • +
+

Simulator

+

This function only works on the Calliope mini, not in browsers.

+

Example

+

This program makes the radio send at full strength.

+
radio.setTransmitPower(7)
+

See also

+

on data packet received, +send number, +send value, +send string

+
radio
+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/radio/set-transmit-serial-number.html b/docs/reference/radio/set-transmit-serial-number.html new file mode 100644 index 00000000..823f3328 --- /dev/null +++ b/docs/reference/radio/set-transmit-serial-number.html @@ -0,0 +1,214 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

Set Transmit Serial Number

+

Make the radio packet embed the board serial number with each packet of data.

+
radio.setTransmitSerialNumber(true);
+

Parameters

+
    +
  • transmit is a boolean that represents whether the serial number needs to be transmitted.
  • +
+

Example

+

This program makes the radio send the serial number in each packet.

+
radio.setTransmitSerialNumber(true);
+

See also

+

on data packet received, +send number, +send value, +send string

+
radio
+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/radio/write-received-packet-to-serial.html b/docs/reference/radio/write-received-packet-to-serial.html new file mode 100644 index 00000000..752607d6 --- /dev/null +++ b/docs/reference/radio/write-received-packet-to-serial.html @@ -0,0 +1,228 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

Write Received Packet To Serial

+

Writes the last packet received by the radio to serial in JSON format. +Should be called within a callback to +on data packet received.

+
radio.writeReceivedPacketToSerial();
+

Data received format

+

The format for received data printed to serial is as follows:

+
    +
  • send number: {v:ValueSent,t:MicrobitTimeAlive,s:SerialNumber}
  • +
  • send value: {v:ValueSent,t:MicrobitTimeAlive,s:SerialNumber,n:"Name"}
  • +
  • send string: {t:MicrobitTimeAlive,s:SerialNumber,n:"Text"}
  • +
+

Examples

+

When radio data is received (after pressing the A button on +the second Calliope mini), this program sends temperature data to +serial.

+
input.onButtonPressed(Button.A, () => {
+    radio.sendNumber(input.temperature());
+});
+radio.onDataPacketReceived(() => {
+    radio.writeReceivedPacketToSerial();
+});
+

Sample output to serial when A button pressed:

+
{v:27,t:323,s:0}
+

See also

+

send number, +send value, +send string, +on data packet received

+
radio
+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/radio/write-value-to-serial.html b/docs/reference/radio/write-value-to-serial.html new file mode 100644 index 00000000..f1c0bbfb --- /dev/null +++ b/docs/reference/radio/write-value-to-serial.html @@ -0,0 +1,229 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

Write Value To Serial

+
+

Note: This API has been deprecated! Use write received packet to serial instead.

+
+

Writes the data received by radio to serial in JSON format.

+
radio.writeValueToSerial();
+

Data received format

+

The format for received data printed to serial is as follows:

+
    +
  • send number: {v:ValueSent,t:MicrobitTimeAlive,s:SerialNumber}
  • +
  • send value: {v:ValueSent,t:MicrobitTimeAlive,s:SerialNumber,n:"Name"}
  • +
  • send string: {t:MicrobitTimeAlive,s:SerialNumber,n:"Text"}
  • +
+

Examples

+

When radio data is received (after pressing the A button on +the second Calliope mini), this program sends temperature data to +serial.

+
input.onButtonPressed(Button.A, () => {
+    radio.sendNumber(input.temperature());
+});
+radio.onDataReceived(() => {
+    radio.writeValueToSerial();
+});
+

Sample output to serial when A button pressed:

+
{v:27,t:323,s:0}
+

See also

+

send number, +send value, +send string, +on data packet received

+
radio
+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/serial.html b/docs/reference/serial.html new file mode 100644 index 00000000..8be65154 --- /dev/null +++ b/docs/reference/serial.html @@ -0,0 +1,210 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

Serial

+

Reading and writing data over a serial connection.

+
serial.writeLine("");
+serial.writeNumber(0);
+serial.writeValue("x", 0);
+serial.writeString("");
+serial.readUntil(",");
+serial.readLine();
+serial.readString();
+serial.redirect(SerialPin.P0, SerialPin.P0, BaudRate.BaudRate115200);
+serial.onDataReceived(",", () => {})
+

See Also

+

writeLine, writeNumber, writeValue, writeString, readLine, redirect

+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/serial/on-data-received.html b/docs/reference/serial/on-data-received.html new file mode 100644 index 00000000..5362d053 --- /dev/null +++ b/docs/reference/serial/on-data-received.html @@ -0,0 +1,214 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

Serial On Data Received

+

Registers an event to be fired when one of the delimiter is matched.

+
serial.onDataReceived(",", () => {})
+

Parameters

+
    +
  • delimiters is a string containing any of the character to match
  • +
+

Example

+

Read values separated by ,:

+
serial.onDataReceived(serial.delimiters(Delimiters.Comma), () => {
+    basic.showString(serial.readUntil(serial.delimiters(Delimiters.Comma)))
+})
+

See also

+

serial, +serial write line, +serial write value

+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/serial/read-line.html b/docs/reference/serial/read-line.html new file mode 100644 index 00000000..ef70ee8c --- /dev/null +++ b/docs/reference/serial/read-line.html @@ -0,0 +1,228 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

Serial Read Line

+

Read a line of text from the serial port.

+
serial.readLine();
+ +
+
+ +

This function expects the line it reads to be terminated with the \r +character. If your terminal software does not terminate lines with +\r, this function will probably never return a value.

+ +
+
+ +

Returns

+
    +
  • a string containing input from the serial port, such as a response typed by a user
  • +
+

Example

+

The following example requests the user’s name, then repeats it to greet the user.

+
basic.forever(() => {
+    serial.writeLine("What is your name?");
+    let answer = serial.readLine();
+    serial.writeString("Hello,");
+    serial.writeLine(answer);
+});
+

See also

+

serial, +serial write line, +serial write value

+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/serial/read-string.html b/docs/reference/serial/read-string.html new file mode 100644 index 00000000..bca02665 --- /dev/null +++ b/docs/reference/serial/read-string.html @@ -0,0 +1,214 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

Serial Read String

+

Read the buffered serial data as a string

+
serial.readString();
+

Returns

+
    +
  • a string containing input from the serial port. Empty if no data available.
  • +
+

Example

+

The following program scrolls text on the screen as it arrives from serial.

+
basic.forever(() => {
+    basic.showString(serial.readString());
+});
+

See also

+

serial, +serial write line, +serial write value

+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/serial/redirect-to.html b/docs/reference/serial/redirect-to.html new file mode 100644 index 00000000..009cd37d --- /dev/null +++ b/docs/reference/serial/redirect-to.html @@ -0,0 +1,217 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

Serial Redirect To

+

Dynamically configure the serial instance to use pins other than +USBTX and USBRX.

+
serial.redirect(SerialPin.P0, SerialPin.P0, BaudRate.BaudRate115200);
+

Parameters

+
    +
  • tx: the serial pin on which to transmit data
  • +
  • rx: the serial pin on which to receive data
  • +
  • rate: the baud rate at which to transmit and receive data (either 9600 or 115200)
  • +
+

Example

+

When button A is pressed, the following example reconfigures the +serial instance. The new configuration uses pin P1 to transmit and +P2 to receive, at a baud rate of 9600.

+
input.onButtonPressed(Button.A, () => {
+    serial.redirect(SerialPin.P1, SerialPin.P2, BaudRate.BaudRate9600);
+});
+

See also

+

serial

+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/serial/write-line.html b/docs/reference/serial/write-line.html new file mode 100644 index 00000000..6aaeacd5 --- /dev/null +++ b/docs/reference/serial/write-line.html @@ -0,0 +1,235 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

Serial Write Line

+

Write a string to the serial port and start a new line of text +by writing \r\n.

+
serial.writeLine("");
+

Parameters

+
    +
  • text is the string to write to the serial port
  • +
+

Example: simple serial

+

This program writes the word BOFFO to the serial port repeatedly.

+
basic.forever(() => {
+    serial.writeLine("BOFFO");
+    basic.pause(5000);
+});
+

Example: streaming data

+

This program checks the +compass heading and sends the +direction to the serial port repeatedly.

+
basic.forever(() => {
+    let heading = input.compassHeading()
+    if (heading < 45) {
+        serial.writeLine("N");
+    } else if (heading < 135) {
+        serial.writeLine("E");
+    }
+    else if (heading < 225) {
+        serial.writeLine("S");
+    }
+    else {
+        serial.writeLine("W");
+    }
+})
+

See also

+

serial, +serial write number, +serial write string, +serial write value

+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/serial/write-number.html b/docs/reference/serial/write-number.html new file mode 100644 index 00000000..e5f622c2 --- /dev/null +++ b/docs/reference/serial/write-number.html @@ -0,0 +1,222 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

Serial Write Number

+

Write a number to the serial port.

+
serial.writeNumber(0);
+

Parameters

+
    +
  • value is the number to write to the serial port
  • +
+

Example: one through ten

+

This program repeatedly writes a 10-digit number to the serial port.

+
basic.forever(() => {
+    serial.writeNumber(1234567890);
+    basic.pause(5000);
+});
+

Example: plot bar graph does serial

+

If you use the led.plotBarGraph function, it writes the number +being plotted to the serial port too.

+
basic.forever(() => {
+    led.plotBarGraph(input.lightLevel(), 255)
+    basic.pause(10000);
+})
+

See also

+

serial, +serial write line, +serial write value

+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/serial/write-string.html b/docs/reference/serial/write-string.html new file mode 100644 index 00000000..8100d6ed --- /dev/null +++ b/docs/reference/serial/write-string.html @@ -0,0 +1,218 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

Serial Write String

+

Write a string to the serial port, +without starting a new line afterward.

+
serial.writeString("");
+

Parameters

+
    +
  • text is the string to write to the serial port
  • +
+

Example: simple serial

+

This program writes the word JUMBO to the serial port repeatedly, +without any new lines.

+
basic.forever(() => {
+    serial.writeString("JUMBO");
+    basic.pause(1000);
+});
+

See also

+

serial, +serial write line, +serial write number, +serial write value

+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/serial/write-value.html b/docs/reference/serial/write-value.html new file mode 100644 index 00000000..dd466280 --- /dev/null +++ b/docs/reference/serial/write-value.html @@ -0,0 +1,230 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

Write Value

+

Write a name/value pair and a newline character (\r\n) to the serial port.

+
serial.writeValue("x", 0);
+

Parameters

+
    +
  • name is the string to write to the serial port
  • +
  • value is the number to write to the serial port
  • +
+

Example: streaming data

+

Every 10 seconds, the example below sends the temperature and light level +to the serial port.

+
basic.forever(() => {
+    serial.writeValue("temp", input.temperature())
+    serial.writeValue("light", input.lightLevel())
+    basic.pause(10000);
+})
+ +
+
+ +

The send value function broadcasts +string/number pairs. You can use a second Calliope mini to receive them, +and then send them directly to the serial port with write value.

+ +
+
+ +

See also

+

serial, +serial write line, +serial write number, +send value

+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/toc.html b/docs/reference/toc.html new file mode 100644 index 00000000..56f8c0c5 --- /dev/null +++ b/docs/reference/toc.html @@ -0,0 +1,295 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

acceleration

+

analog-pitch

+

analog-read-pin

+

analog-set-period

+

analog-set-pitch-pin

+

analog-write-pin

+

assign

+

boolean

+

brightness

+

button-is-pressed

+

change

+

change-score-by

+

change-tempo-by

+

change-var

+

clear

+

clear-screen

+

compass-heading

+

create-image

+

digital-read-pin

+

digital-write-pin

+

fade-in

+

fade-out

+

for

+

forever

+

game-over

+

if

+

image

+

in-background

+

light-level

+

magnetic-force

+

map

+

math

+

move

+

number

+

on button pressed

+

on-data-received

+

on-gamepad-button

+

on-gesture

+

on-pin-pressed

+

on-signal-strength-changed

+

pause

+

pin-is-pressed

+

pixel

+

play-tone

+

plot

+

plot-all

+

plot-bar-graph

+

plot-frame

+

plot-image

+

plot-leds

+

point

+

position

+

raise-alert-to

+

receive-number

+

receive-number

+

repeat

+

reports

+

reset

+

rest

+

ring-tone

+

rotation

+

running-time

+

score

+

screenshot

+

scroll-image

+

send-number

+

servo-set-pulse

+

servo-write-pin

+

set-brightness

+

set-display-mode

+

set-group

+

set-pixel

+

set-tempo

+

show-animation

+

show-frame

+

show-image

+

show-leds

+

show-number

+

show-string

+

signal-strength

+

start-countdown

+

stop-animation

+

string

+

tell-camera-to

+

tell-microphone-to

+

tell-remote-control-to

+

temperature

+

tempo

+

toggle

+

toggle-all

+

touching

+

turn

+

unplot

+

var

+

while

+

width

+

write-line

+

write-value

+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/types.html b/docs/reference/types.html new file mode 100644 index 00000000..ffac060e --- /dev/null +++ b/docs/reference/types.html @@ -0,0 +1,207 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

types

+

A type refers to a class of data and the operations permitted on that class of data. +The following built-in types are supported for the Calliope mini:

+ +

TypeScript allows you to create user-defined classes of data.

+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/types/boolean.html b/docs/reference/types/boolean.html new file mode 100644 index 00000000..6d4ee900 --- /dev/null +++ b/docs/reference/types/boolean.html @@ -0,0 +1,206 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

Boolean

+

true or false.

+

A Boolean has one of two possible values: true; false. Boolean (logical) operators (and, or, not) take Boolean inputs and yields a Boolean value. Comparison operators on other types (numbers, strings yields a Boolean value.

+

The following blocks represent the true and false Boolean values, which can be plugged in anywhere a Boolean value is expected:

+
true;
+false;
+

See Also

+

boolean (blocks)

+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/types/number.html b/docs/reference/types/number.html new file mode 100644 index 00000000..5739e9e7 --- /dev/null +++ b/docs/reference/types/number.html @@ -0,0 +1,241 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

Number

+

An integer number.

+ +

A Number is an integer such as 42 or -42. More precisely, a Number is a signed 32-bit integer (two’s complement).

+

Declare a number variable

+

You can assign a number to a variable:

+
let num = 42;
+basic.showNumber(42);
+

Arithmetic operators

+

The following arithmetic operators work on numbers and return a Number:

+
    +
  • addition: 1 + 3
  • +
  • subtraction: 1 - 3
  • +
  • multiplication: 3 * 2
  • +
  • integer division: 7 / 3
  • +
  • modulo is available through the math library
  • +
+

Relational operators

+

The following relational operators work on numbers and return a Boolean:

+
    +
  • equality: (3 + 1) = 4
  • +
  • inequality: 3 != 4
  • +
  • less or equal than: 3 <= 4
  • +
  • less than: 3 < 4
  • +
  • greater or equal than : 4 >= 3
  • +
  • greater than: 4 > 3
  • +
+

Show number

+

The show number function displays a number on the LED screen. +For example, this code displays the number 42:

+
basic.showNumber(42);
+

Functions that return a number

+

Some functions return a number, which you can store in a variable. +For example the following code gets the display brightness +(using the brightness function) and stores the value in a variable named brightness:

+
let brightness = led.brightness()
+

Math functions

+

The math library includes math related functions. +For example, the absolute function returns the returns the absolute value of input parameter x:

+
let abs = Math.abs(-42);
+basic.showNumber(abs);
+

See also

+

math, var, Boolean, show number

+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/types/string-functions.html b/docs/reference/types/string-functions.html new file mode 100644 index 00000000..fa40f25e --- /dev/null +++ b/docs/reference/types/string-functions.html @@ -0,0 +1,200 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

String functions

+

TBD

+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/reference/types/string.html b/docs/reference/types/string.html new file mode 100644 index 00000000..f4dcae1e --- /dev/null +++ b/docs/reference/types/string.html @@ -0,0 +1,224 @@ + + + + + + calliope mini - Blocks / Javascript editor - calliope + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+

String

+

a piece of text.

+ +

A String is a sequence of characters. For the Calliope mini, ASCII character codes 32 to 126 are supported; letters, digits, punctuation marks, and a few symbols. All other character codes appear as a ? on the LED screen.

+

Create a string variable

+
let salutation = "Hello";
+

To create a variable that holds a string:

+
    +
  1. Click Variables (in the Block drawer).

    +
  2. +
  3. Type a name for your new string variable by clicking the down arrow, then click New Variable. Then type the variable name “salutation”

    +
  4. +
  5. Drag a string block on the right side of the operator.

    +
  6. +
  7. Click "Hello" and then type a string like hello.

    +
  8. +
+

Your code should look something like this:

+
let salutation = "Hello";
+

The function show string

+

Use show string to display a string on the LED screen. +If the string is multiple characters, the string scrolls right to left. The following example displays Hello world! on the Calliope mini screen:

+
basic.showString("Hello world!");
+

The parameter of show string specifies the string

+

See also

+

string functions, Number, show string

+ +
+ +

Edit this page on GitHub

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/static/Calliope_mini_v1.0.svg b/docs/static/Calliope_mini_v1.0.svg new file mode 100644 index 00000000..9fb60da8 --- /dev/null +++ b/docs/static/Calliope_mini_v1.0.svg @@ -0,0 +1,616 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/static/Calliopeminieditor.svg b/docs/static/Calliopeminieditor.svg new file mode 100644 index 00000000..aee5cc74 --- /dev/null +++ b/docs/static/Calliopeminieditor.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/static/Logo_Calliope_Woman.svg b/docs/static/Logo_Calliope_Woman.svg new file mode 100644 index 00000000..f3011103 --- /dev/null +++ b/docs/static/Logo_Calliope_Woman.svg @@ -0,0 +1,145 @@ + + + +image/svg+xml \ No newline at end of file diff --git a/docs/static/Logo_Calliope_lang.svg b/docs/static/Logo_Calliope_lang.svg new file mode 100644 index 00000000..ac5a0b69 --- /dev/null +++ b/docs/static/Logo_Calliope_lang.svg @@ -0,0 +1,179 @@ + + + +image/svg+xml \ No newline at end of file diff --git a/docs/static/Logo_Calliope_norm.svg b/docs/static/Logo_Calliope_norm.svg new file mode 100644 index 00000000..5a3da18b --- /dev/null +++ b/docs/static/Logo_Calliope_norm.svg @@ -0,0 +1,228 @@ + + + +image/svg+xml \ No newline at end of file diff --git a/docs/static/Microsoft-logo_rgb_c-gray-square.png b/docs/static/Microsoft-logo_rgb_c-gray-square.png new file mode 100644 index 00000000..f5f83b8c Binary files /dev/null and b/docs/static/Microsoft-logo_rgb_c-gray-square.png differ diff --git a/docs/static/Microsoft-logo_rgb_c-gray.png b/docs/static/Microsoft-logo_rgb_c-gray.png new file mode 100644 index 00000000..6b77415e Binary files /dev/null and b/docs/static/Microsoft-logo_rgb_c-gray.png differ diff --git a/docs/static/Microsoft-logo_rgb_c-white.png b/docs/static/Microsoft-logo_rgb_c-white.png new file mode 100644 index 00000000..e0a49fdb Binary files /dev/null and b/docs/static/Microsoft-logo_rgb_c-white.png differ diff --git a/docs/static/avatar.svg b/docs/static/avatar.svg new file mode 100644 index 00000000..f3011103 --- /dev/null +++ b/docs/static/avatar.svg @@ -0,0 +1,145 @@ + + + +image/svg+xml \ No newline at end of file diff --git a/docs/static/bluetooth/Bluetooth_SIG.png b/docs/static/bluetooth/Bluetooth_SIG.png new file mode 100644 index 00000000..5479e652 Binary files /dev/null and b/docs/static/bluetooth/Bluetooth_SIG.png differ diff --git a/docs/static/bluetooth/gatt_hierarchy.png b/docs/static/bluetooth/gatt_hierarchy.png new file mode 100644 index 00000000..d5171d3a Binary files /dev/null and b/docs/static/bluetooth/gatt_hierarchy.png differ diff --git a/docs/static/bluetooth/microbit_accelerometer.png b/docs/static/bluetooth/microbit_accelerometer.png new file mode 100644 index 00000000..47de394b Binary files /dev/null and b/docs/static/bluetooth/microbit_accelerometer.png differ diff --git a/docs/static/bluetooth/microbit_button.png b/docs/static/bluetooth/microbit_button.png new file mode 100644 index 00000000..c43675a8 Binary files /dev/null and b/docs/static/bluetooth/microbit_button.png differ diff --git a/docs/static/bluetooth/microbit_led.png b/docs/static/bluetooth/microbit_led.png new file mode 100644 index 00000000..4b5c57cd Binary files /dev/null and b/docs/static/bluetooth/microbit_led.png differ diff --git a/docs/static/bluetooth/microbit_magnetometer.png b/docs/static/bluetooth/microbit_magnetometer.png new file mode 100644 index 00000000..662424ed Binary files /dev/null and b/docs/static/bluetooth/microbit_magnetometer.png differ diff --git a/docs/static/bluetooth/microbit_on_connected.png b/docs/static/bluetooth/microbit_on_connected.png new file mode 100644 index 00000000..2a409f54 Binary files /dev/null and b/docs/static/bluetooth/microbit_on_connected.png differ diff --git a/docs/static/bluetooth/microbit_on_disconnected.png b/docs/static/bluetooth/microbit_on_disconnected.png new file mode 100644 index 00000000..47ea81ee Binary files /dev/null and b/docs/static/bluetooth/microbit_on_disconnected.png differ diff --git a/docs/static/bluetooth/microbit_pin_io.png b/docs/static/bluetooth/microbit_pin_io.png new file mode 100644 index 00000000..e262587f Binary files /dev/null and b/docs/static/bluetooth/microbit_pin_io.png differ diff --git a/docs/static/bluetooth/microbit_temperature.png b/docs/static/bluetooth/microbit_temperature.png new file mode 100644 index 00000000..dda6488f Binary files /dev/null and b/docs/static/bluetooth/microbit_temperature.png differ diff --git a/docs/static/bluetooth/services_and_GATT.png b/docs/static/bluetooth/services_and_GATT.png new file mode 100644 index 00000000..7fd212d0 Binary files /dev/null and b/docs/static/bluetooth/services_and_GATT.png differ diff --git a/docs/static/calliope.simplified.svg b/docs/static/calliope.simplified.svg new file mode 100644 index 00000000..0bd01f41 --- /dev/null +++ b/docs/static/calliope.simplified.svg @@ -0,0 +1,921 @@ + + + +image/svg+xml \ No newline at end of file diff --git a/docs/static/calliope.svg b/docs/static/calliope.svg new file mode 100644 index 00000000..85447b14 --- /dev/null +++ b/docs/static/calliope.svg @@ -0,0 +1,134 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/static/calliope_mini_front_V03_1110_1120_pins.svg b/docs/static/calliope_mini_front_V03_1110_1120_pins.svg new file mode 100644 index 00000000..1ec586ab --- /dev/null +++ b/docs/static/calliope_mini_front_V03_1110_1120_pins.svg @@ -0,0 +1,821 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/static/configurations/chrome-version.png b/docs/static/configurations/chrome-version.png new file mode 100644 index 00000000..b7a4db67 Binary files /dev/null and b/docs/static/configurations/chrome-version.png differ diff --git a/docs/static/configurations/edge-version.png b/docs/static/configurations/edge-version.png new file mode 100644 index 00000000..f9c9095a Binary files /dev/null and b/docs/static/configurations/edge-version.png differ diff --git a/docs/static/configurations/firefox-version.png b/docs/static/configurations/firefox-version.png new file mode 100644 index 00000000..d9b5684c Binary files /dev/null and b/docs/static/configurations/firefox-version.png differ diff --git a/docs/static/configurations/ie-version.png b/docs/static/configurations/ie-version.png new file mode 100644 index 00000000..3fbc6e7c Binary files /dev/null and b/docs/static/configurations/ie-version.png differ diff --git a/docs/static/configurations/osx-version.png b/docs/static/configurations/osx-version.png new file mode 100644 index 00000000..9457d7e4 Binary files /dev/null and b/docs/static/configurations/osx-version.png differ diff --git a/docs/static/configurations/safari-version.png b/docs/static/configurations/safari-version.png new file mode 100644 index 00000000..70d1d871 Binary files /dev/null and b/docs/static/configurations/safari-version.png differ diff --git a/docs/static/configurations/windows-version.png b/docs/static/configurations/windows-version.png new file mode 100644 index 00000000..06847ede Binary files /dev/null and b/docs/static/configurations/windows-version.png differ diff --git a/docs/static/embed/blogger.png b/docs/static/embed/blogger.png new file mode 100644 index 00000000..80e6e60b Binary files /dev/null and b/docs/static/embed/blogger.png differ diff --git a/docs/static/embed/embed-info.png b/docs/static/embed/embed-info.png new file mode 100644 index 00000000..6cd32872 Binary files /dev/null and b/docs/static/embed/embed-info.png differ diff --git a/docs/static/embed/project-page.png b/docs/static/embed/project-page.png new file mode 100644 index 00000000..31037d05 Binary files /dev/null and b/docs/static/embed/project-page.png differ diff --git a/docs/static/embed/publish.png b/docs/static/embed/publish.png new file mode 100644 index 00000000..cc9dd0b8 Binary files /dev/null and b/docs/static/embed/publish.png differ diff --git a/docs/static/embed/squarespace-code.png b/docs/static/embed/squarespace-code.png new file mode 100644 index 00000000..d377b112 Binary files /dev/null and b/docs/static/embed/squarespace-code.png differ diff --git a/docs/static/embed/squarespace-insert.png b/docs/static/embed/squarespace-insert.png new file mode 100644 index 00000000..f7ac999c Binary files /dev/null and b/docs/static/embed/squarespace-insert.png differ diff --git a/docs/static/extract-ids.xslt b/docs/static/extract-ids.xslt new file mode 100644 index 00000000..29819ed5 --- /dev/null +++ b/docs/static/extract-ids.xslt @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/docs/static/faviconData.json b/docs/static/faviconData.json new file mode 100644 index 00000000..23b6c991 --- /dev/null +++ b/docs/static/faviconData.json @@ -0,0 +1 @@ +{"result":{"status":"success"},"favicon":{"package_url":"https://realfavicongenerator.net/files/6e512fc4d4de6b9651de965b0c65c53f09b0540f/favicons.zip","files_urls":["https://realfavicongenerator.net/files/6e512fc4d4de6b9651de965b0c65c53f09b0540f/package_files/android-chrome-144x144.png","https://realfavicongenerator.net/files/6e512fc4d4de6b9651de965b0c65c53f09b0540f/package_files/android-chrome-192x192.png","https://realfavicongenerator.net/files/6e512fc4d4de6b9651de965b0c65c53f09b0540f/package_files/android-chrome-256x256.png","https://realfavicongenerator.net/files/6e512fc4d4de6b9651de965b0c65c53f09b0540f/package_files/android-chrome-36x36.png","https://realfavicongenerator.net/files/6e512fc4d4de6b9651de965b0c65c53f09b0540f/package_files/android-chrome-384x384.png","https://realfavicongenerator.net/files/6e512fc4d4de6b9651de965b0c65c53f09b0540f/package_files/android-chrome-48x48.png","https://realfavicongenerator.net/files/6e512fc4d4de6b9651de965b0c65c53f09b0540f/package_files/android-chrome-512x512.png","https://realfavicongenerator.net/files/6e512fc4d4de6b9651de965b0c65c53f09b0540f/package_files/android-chrome-72x72.png","https://realfavicongenerator.net/files/6e512fc4d4de6b9651de965b0c65c53f09b0540f/package_files/android-chrome-96x96.png","https://realfavicongenerator.net/files/6e512fc4d4de6b9651de965b0c65c53f09b0540f/package_files/apple-touch-icon-114x114-precomposed.png","https://realfavicongenerator.net/files/6e512fc4d4de6b9651de965b0c65c53f09b0540f/package_files/apple-touch-icon-114x114.png","https://realfavicongenerator.net/files/6e512fc4d4de6b9651de965b0c65c53f09b0540f/package_files/apple-touch-icon-120x120-precomposed.png","https://realfavicongenerator.net/files/6e512fc4d4de6b9651de965b0c65c53f09b0540f/package_files/apple-touch-icon-120x120.png","https://realfavicongenerator.net/files/6e512fc4d4de6b9651de965b0c65c53f09b0540f/package_files/apple-touch-icon-144x144-precomposed.png","https://realfavicongenerator.net/files/6e512fc4d4de6b9651de965b0c65c53f09b0540f/package_files/apple-touch-icon-144x144.png","https://realfavicongenerator.net/files/6e512fc4d4de6b9651de965b0c65c53f09b0540f/package_files/apple-touch-icon-152x152-precomposed.png","https://realfavicongenerator.net/files/6e512fc4d4de6b9651de965b0c65c53f09b0540f/package_files/apple-touch-icon-152x152.png","https://realfavicongenerator.net/files/6e512fc4d4de6b9651de965b0c65c53f09b0540f/package_files/apple-touch-icon-180x180-precomposed.png","https://realfavicongenerator.net/files/6e512fc4d4de6b9651de965b0c65c53f09b0540f/package_files/apple-touch-icon-180x180.png","https://realfavicongenerator.net/files/6e512fc4d4de6b9651de965b0c65c53f09b0540f/package_files/apple-touch-icon-57x57-precomposed.png","https://realfavicongenerator.net/files/6e512fc4d4de6b9651de965b0c65c53f09b0540f/package_files/apple-touch-icon-57x57.png","https://realfavicongenerator.net/files/6e512fc4d4de6b9651de965b0c65c53f09b0540f/package_files/apple-touch-icon-60x60-precomposed.png","https://realfavicongenerator.net/files/6e512fc4d4de6b9651de965b0c65c53f09b0540f/package_files/apple-touch-icon-60x60.png","https://realfavicongenerator.net/files/6e512fc4d4de6b9651de965b0c65c53f09b0540f/package_files/apple-touch-icon-72x72-precomposed.png","https://realfavicongenerator.net/files/6e512fc4d4de6b9651de965b0c65c53f09b0540f/package_files/apple-touch-icon-72x72.png","https://realfavicongenerator.net/files/6e512fc4d4de6b9651de965b0c65c53f09b0540f/package_files/apple-touch-icon-76x76-precomposed.png","https://realfavicongenerator.net/files/6e512fc4d4de6b9651de965b0c65c53f09b0540f/package_files/apple-touch-icon-76x76.png","https://realfavicongenerator.net/files/6e512fc4d4de6b9651de965b0c65c53f09b0540f/package_files/apple-touch-icon-precomposed.png","https://realfavicongenerator.net/files/6e512fc4d4de6b9651de965b0c65c53f09b0540f/package_files/apple-touch-icon.png","https://realfavicongenerator.net/files/6e512fc4d4de6b9651de965b0c65c53f09b0540f/package_files/browserconfig.xml","https://realfavicongenerator.net/files/6e512fc4d4de6b9651de965b0c65c53f09b0540f/package_files/favicon-16x16.png","https://realfavicongenerator.net/files/6e512fc4d4de6b9651de965b0c65c53f09b0540f/package_files/favicon-32x32.png","https://realfavicongenerator.net/files/6e512fc4d4de6b9651de965b0c65c53f09b0540f/package_files/favicon.ico","https://realfavicongenerator.net/files/6e512fc4d4de6b9651de965b0c65c53f09b0540f/package_files/manifest.json","https://realfavicongenerator.net/files/6e512fc4d4de6b9651de965b0c65c53f09b0540f/package_files/mstile-144x144.png","https://realfavicongenerator.net/files/6e512fc4d4de6b9651de965b0c65c53f09b0540f/package_files/mstile-150x150.png","https://realfavicongenerator.net/files/6e512fc4d4de6b9651de965b0c65c53f09b0540f/package_files/mstile-310x150.png","https://realfavicongenerator.net/files/6e512fc4d4de6b9651de965b0c65c53f09b0540f/package_files/mstile-310x310.png","https://realfavicongenerator.net/files/6e512fc4d4de6b9651de965b0c65c53f09b0540f/package_files/mstile-70x70.png","https://realfavicongenerator.net/files/6e512fc4d4de6b9651de965b0c65c53f09b0540f/package_files/safari-pinned-tab.svg"],"html_code":"\n\n\n\n\n\n\n\n","compression":"false","overlapping_markups":["link[rel=\"apple-touch-icon\"]","link[rel=\"shortcut\"]","link[rel=\"shortcut icon\"]","link[rel=\"icon\",sizes=\"16x16\"]","link[rel=\"icon\",sizes=\"32x32\"]","meta[name=\"msapplication-TileColor\"]","meta[name=\"msapplication-TileImage\"]","link[rel=\"manifest\"]","meta[name=\"theme-color\"]","link[rel=\"icon\",sizes=\"192x192\"]","link[rel=\"mask-icon\"]"]},"files_location":{"type":"path","path":"/"},"preview_picture_url":"https://realfavicongenerator.net/files/6e512fc4d4de6b9651de965b0c65c53f09b0540f/favicon_preview.png","version":"0.13"} \ No newline at end of file diff --git a/docs/static/faviconDescription.json b/docs/static/faviconDescription.json new file mode 100644 index 00000000..069f9bb7 --- /dev/null +++ b/docs/static/faviconDescription.json @@ -0,0 +1,56 @@ + +{ + "masterPicture": "Logo_Calliope_Woman.svg", + "iconsPath": "/", + "design": { + "ios": { + "pictureAspect": "backgroundAndMargin", + "backgroundColor": "#ffffff", + "margin": "14%", + "assets": { + "ios6AndPriorIcons": true, + "ios7AndLaterIcons": true, + "precomposedIcons": true, + "declareOnlyDefaultIcon": true + } + }, + "desktopBrowser": {}, + "windows": { + "pictureAspect": "noChange", + "backgroundColor": "#da532c", + "onConflict": "override", + "assets": { + "windows80Ie10Tile": true, + "windows10Ie11EdgeTiles": { + "small": true, + "medium": true, + "big": true, + "rectangle": true + } + } + }, + "androidChrome": { + "pictureAspect": "noChange", + "themeColor": "#ffffff", + "manifest": { + "name": "Calliope mini", + "display": "standalone", + "orientation": "notSet", + "onConflict": "override", + "declared": true + }, + "assets": { + "legacyIcon": true, + "lowResolutionIcons": true + } + }, + "safariPinnedTab": { + "pictureAspect": "silhouette", + "themeColor": "#5bbad5" + } + }, + "settings": { + "scalingAlgorithm": "Mitchell", + "errorOnImageTooSmall": false + } +} \ No newline at end of file diff --git a/docs/static/icons/android-chrome-144x144.png b/docs/static/icons/android-chrome-144x144.png new file mode 100644 index 00000000..4f21365d Binary files /dev/null and b/docs/static/icons/android-chrome-144x144.png differ diff --git a/docs/static/icons/android-chrome-192x192.png b/docs/static/icons/android-chrome-192x192.png new file mode 100644 index 00000000..38c59f87 Binary files /dev/null and b/docs/static/icons/android-chrome-192x192.png differ diff --git a/docs/static/icons/android-chrome-256x256.png b/docs/static/icons/android-chrome-256x256.png new file mode 100644 index 00000000..1d717fb0 Binary files /dev/null and b/docs/static/icons/android-chrome-256x256.png differ diff --git a/docs/static/icons/android-chrome-36x36.png b/docs/static/icons/android-chrome-36x36.png new file mode 100644 index 00000000..c0b0cfc3 Binary files /dev/null and b/docs/static/icons/android-chrome-36x36.png differ diff --git a/docs/static/icons/android-chrome-384x384.png b/docs/static/icons/android-chrome-384x384.png new file mode 100644 index 00000000..0136026b Binary files /dev/null and b/docs/static/icons/android-chrome-384x384.png differ diff --git a/docs/static/icons/android-chrome-48x48.png b/docs/static/icons/android-chrome-48x48.png new file mode 100644 index 00000000..292b7308 Binary files /dev/null and b/docs/static/icons/android-chrome-48x48.png differ diff --git a/docs/static/icons/android-chrome-512x512.png b/docs/static/icons/android-chrome-512x512.png new file mode 100644 index 00000000..cf5dc1f6 Binary files /dev/null and b/docs/static/icons/android-chrome-512x512.png differ diff --git a/docs/static/icons/android-chrome-72x72.png b/docs/static/icons/android-chrome-72x72.png new file mode 100644 index 00000000..9e4e5087 Binary files /dev/null and b/docs/static/icons/android-chrome-72x72.png differ diff --git a/docs/static/icons/android-chrome-96x96.png b/docs/static/icons/android-chrome-96x96.png new file mode 100644 index 00000000..fe761e5e Binary files /dev/null and b/docs/static/icons/android-chrome-96x96.png differ diff --git a/docs/static/icons/apple-touch-icon-114x114-precomposed.png b/docs/static/icons/apple-touch-icon-114x114-precomposed.png new file mode 100644 index 00000000..7288a4b8 Binary files /dev/null and b/docs/static/icons/apple-touch-icon-114x114-precomposed.png differ diff --git a/docs/static/icons/apple-touch-icon-114x114.png b/docs/static/icons/apple-touch-icon-114x114.png new file mode 100644 index 00000000..ca342a66 Binary files /dev/null and b/docs/static/icons/apple-touch-icon-114x114.png differ diff --git a/docs/static/icons/apple-touch-icon-120x120-precomposed.png b/docs/static/icons/apple-touch-icon-120x120-precomposed.png new file mode 100644 index 00000000..42283d9a Binary files /dev/null and b/docs/static/icons/apple-touch-icon-120x120-precomposed.png differ diff --git a/docs/static/icons/apple-touch-icon-120x120.png b/docs/static/icons/apple-touch-icon-120x120.png new file mode 100644 index 00000000..16f23115 Binary files /dev/null and b/docs/static/icons/apple-touch-icon-120x120.png differ diff --git a/docs/static/icons/apple-touch-icon-144x144-precomposed.png b/docs/static/icons/apple-touch-icon-144x144-precomposed.png new file mode 100644 index 00000000..29ee8f57 Binary files /dev/null and b/docs/static/icons/apple-touch-icon-144x144-precomposed.png differ diff --git a/docs/static/icons/apple-touch-icon-144x144.png b/docs/static/icons/apple-touch-icon-144x144.png new file mode 100644 index 00000000..4329adfd Binary files /dev/null and b/docs/static/icons/apple-touch-icon-144x144.png differ diff --git a/docs/static/icons/apple-touch-icon-152x152-precomposed.png b/docs/static/icons/apple-touch-icon-152x152-precomposed.png new file mode 100644 index 00000000..01ff569c Binary files /dev/null and b/docs/static/icons/apple-touch-icon-152x152-precomposed.png differ diff --git a/docs/static/icons/apple-touch-icon-152x152.png b/docs/static/icons/apple-touch-icon-152x152.png new file mode 100644 index 00000000..04a2bf01 Binary files /dev/null and b/docs/static/icons/apple-touch-icon-152x152.png differ diff --git a/docs/static/icons/apple-touch-icon-180x180-precomposed.png b/docs/static/icons/apple-touch-icon-180x180-precomposed.png new file mode 100644 index 00000000..e7b313c8 Binary files /dev/null and b/docs/static/icons/apple-touch-icon-180x180-precomposed.png differ diff --git a/docs/static/icons/apple-touch-icon-180x180.png b/docs/static/icons/apple-touch-icon-180x180.png new file mode 100644 index 00000000..caa027e5 Binary files /dev/null and b/docs/static/icons/apple-touch-icon-180x180.png differ diff --git a/docs/static/icons/apple-touch-icon-57x57-precomposed.png b/docs/static/icons/apple-touch-icon-57x57-precomposed.png new file mode 100644 index 00000000..3029d3bc Binary files /dev/null and b/docs/static/icons/apple-touch-icon-57x57-precomposed.png differ diff --git a/docs/static/icons/apple-touch-icon-57x57.png b/docs/static/icons/apple-touch-icon-57x57.png new file mode 100644 index 00000000..dea8718f Binary files /dev/null and b/docs/static/icons/apple-touch-icon-57x57.png differ diff --git a/docs/static/icons/apple-touch-icon-60x60-precomposed.png b/docs/static/icons/apple-touch-icon-60x60-precomposed.png new file mode 100644 index 00000000..a8a601e7 Binary files /dev/null and b/docs/static/icons/apple-touch-icon-60x60-precomposed.png differ diff --git a/docs/static/icons/apple-touch-icon-60x60.png b/docs/static/icons/apple-touch-icon-60x60.png new file mode 100644 index 00000000..fa7cf816 Binary files /dev/null and b/docs/static/icons/apple-touch-icon-60x60.png differ diff --git a/docs/static/icons/apple-touch-icon-72x72-precomposed.png b/docs/static/icons/apple-touch-icon-72x72-precomposed.png new file mode 100644 index 00000000..f2f4ba79 Binary files /dev/null and b/docs/static/icons/apple-touch-icon-72x72-precomposed.png differ diff --git a/docs/static/icons/apple-touch-icon-72x72.png b/docs/static/icons/apple-touch-icon-72x72.png new file mode 100644 index 00000000..b339cc46 Binary files /dev/null and b/docs/static/icons/apple-touch-icon-72x72.png differ diff --git a/docs/static/icons/apple-touch-icon-76x76-precomposed.png b/docs/static/icons/apple-touch-icon-76x76-precomposed.png new file mode 100644 index 00000000..5ce8c3ad Binary files /dev/null and b/docs/static/icons/apple-touch-icon-76x76-precomposed.png differ diff --git a/docs/static/icons/apple-touch-icon-76x76.png b/docs/static/icons/apple-touch-icon-76x76.png new file mode 100644 index 00000000..79616b48 Binary files /dev/null and b/docs/static/icons/apple-touch-icon-76x76.png differ diff --git a/docs/static/icons/apple-touch-icon-precomposed.png b/docs/static/icons/apple-touch-icon-precomposed.png new file mode 100644 index 00000000..dc606f5a Binary files /dev/null and b/docs/static/icons/apple-touch-icon-precomposed.png differ diff --git a/docs/static/icons/apple-touch-icon.png b/docs/static/icons/apple-touch-icon.png new file mode 100644 index 00000000..298a5419 Binary files /dev/null and b/docs/static/icons/apple-touch-icon.png differ diff --git a/docs/static/icons/browserconfig.xml b/docs/static/icons/browserconfig.xml new file mode 100644 index 00000000..7e8a26a6 --- /dev/null +++ b/docs/static/icons/browserconfig.xml @@ -0,0 +1,16 @@ + + + + + + + + +<<<<<<< HEAD + #da532c +======= + #9f00a7 +>>>>>>> microbit/master + + + diff --git a/docs/static/icons/favicon-16x16.png b/docs/static/icons/favicon-16x16.png new file mode 100644 index 00000000..28caab92 Binary files /dev/null and b/docs/static/icons/favicon-16x16.png differ diff --git a/docs/static/icons/favicon-32x32.png b/docs/static/icons/favicon-32x32.png new file mode 100644 index 00000000..909e8ff1 Binary files /dev/null and b/docs/static/icons/favicon-32x32.png differ diff --git a/docs/static/icons/favicon.ico b/docs/static/icons/favicon.ico new file mode 100644 index 00000000..16625b1f Binary files /dev/null and b/docs/static/icons/favicon.ico differ diff --git a/docs/static/icons/manifest.json b/docs/static/icons/manifest.json new file mode 100644 index 00000000..659f2f9a --- /dev/null +++ b/docs/static/icons/manifest.json @@ -0,0 +1,52 @@ +{ + "name": "Calliope mini", + "icons": [ + { + "src": "\/android-chrome-36x36.png", + "sizes": "36x36", + "type": "image\/png" + }, + { + "src": "\/android-chrome-48x48.png", + "sizes": "48x48", + "type": "image\/png" + }, + { + "src": "\/android-chrome-72x72.png", + "sizes": "72x72", + "type": "image\/png" + }, + { + "src": "\/android-chrome-96x96.png", + "sizes": "96x96", + "type": "image\/png" + }, + { + "src": "\/android-chrome-144x144.png", + "sizes": "144x144", + "type": "image\/png" + }, + { + "src": "\/android-chrome-192x192.png", + "sizes": "192x192", + "type": "image\/png" + }, + { + "src": "\/android-chrome-256x256.png", + "sizes": "256x256", + "type": "image\/png" + }, + { + "src": "\/android-chrome-384x384.png", + "sizes": "384x384", + "type": "image\/png" + }, + { + "src": "\/android-chrome-512x512.png", + "sizes": "512x512", + "type": "image\/png" + } + ], + "theme_color": "#ffffff", + "display": "standalone" +} diff --git a/docs/static/icons/mstile-144x144.png b/docs/static/icons/mstile-144x144.png new file mode 100644 index 00000000..e7999906 Binary files /dev/null and b/docs/static/icons/mstile-144x144.png differ diff --git a/docs/static/icons/mstile-150x150.png b/docs/static/icons/mstile-150x150.png new file mode 100644 index 00000000..f7396c3b Binary files /dev/null and b/docs/static/icons/mstile-150x150.png differ diff --git a/docs/static/icons/mstile-310x150.png b/docs/static/icons/mstile-310x150.png new file mode 100644 index 00000000..b246769f Binary files /dev/null and b/docs/static/icons/mstile-310x150.png differ diff --git a/docs/static/icons/mstile-310x310.png b/docs/static/icons/mstile-310x310.png new file mode 100644 index 00000000..5cc42c85 Binary files /dev/null and b/docs/static/icons/mstile-310x310.png differ diff --git a/docs/static/icons/mstile-70x70.png b/docs/static/icons/mstile-70x70.png new file mode 100644 index 00000000..bfe97023 Binary files /dev/null and b/docs/static/icons/mstile-70x70.png differ diff --git a/docs/static/icons/safari-pinned-tab.svg b/docs/static/icons/safari-pinned-tab.svg new file mode 100644 index 00000000..3a988d95 --- /dev/null +++ b/docs/static/icons/safari-pinned-tab.svg @@ -0,0 +1,43 @@ + + + + +Created by potrace 1.11, written by Peter Selinger 2001-2013 + + + + + diff --git a/docs/static/loader.svg b/docs/static/loader.svg new file mode 100644 index 00000000..f3011103 --- /dev/null +++ b/docs/static/loader.svg @@ -0,0 +1,145 @@ + + + +image/svg+xml \ No newline at end of file diff --git a/docs/static/mb/acc.png b/docs/static/mb/acc.png new file mode 100644 index 00000000..7e4310e5 Binary files /dev/null and b/docs/static/mb/acc.png differ diff --git a/docs/static/mb/acc2.png b/docs/static/mb/acc2.png new file mode 100644 index 00000000..07c68713 Binary files /dev/null and b/docs/static/mb/acc2.png differ diff --git a/docs/static/mb/analyze1.png b/docs/static/mb/analyze1.png new file mode 100644 index 00000000..4c5b6ba3 Binary files /dev/null and b/docs/static/mb/analyze1.png differ diff --git a/docs/static/mb/analyze3.png b/docs/static/mb/analyze3.png new file mode 100644 index 00000000..fac50a40 Binary files /dev/null and b/docs/static/mb/analyze3.png differ diff --git a/docs/static/mb/blocks/contents-0.png b/docs/static/mb/blocks/contents-0.png new file mode 100644 index 00000000..5dd3fe48 Binary files /dev/null and b/docs/static/mb/blocks/contents-0.png differ diff --git a/docs/static/mb/blocks/image-0.png b/docs/static/mb/blocks/image-0.png new file mode 100644 index 00000000..53fc0fbb Binary files /dev/null and b/docs/static/mb/blocks/image-0.png differ diff --git a/docs/static/mb/blocks/lessons/graphics-0.png b/docs/static/mb/blocks/lessons/graphics-0.png new file mode 100644 index 00000000..577c6478 Binary files /dev/null and b/docs/static/mb/blocks/lessons/graphics-0.png differ diff --git a/docs/static/mb/blocks/lessons/graphics-4.png b/docs/static/mb/blocks/lessons/graphics-4.png new file mode 100644 index 00000000..89175a07 Binary files /dev/null and b/docs/static/mb/blocks/lessons/graphics-4.png differ diff --git a/docs/static/mb/blocks/lessons/loops-0.png b/docs/static/mb/blocks/lessons/loops-0.png new file mode 100644 index 00000000..f2f02da1 Binary files /dev/null and b/docs/static/mb/blocks/lessons/loops-0.png differ diff --git a/docs/static/mb/blocks/lessons/loops-1.png b/docs/static/mb/blocks/lessons/loops-1.png new file mode 100644 index 00000000..bd455405 Binary files /dev/null and b/docs/static/mb/blocks/lessons/loops-1.png differ diff --git a/docs/static/mb/blocks/lessons/loops-2.png b/docs/static/mb/blocks/lessons/loops-2.png new file mode 100644 index 00000000..8a9fe3ab Binary files /dev/null and b/docs/static/mb/blocks/lessons/loops-2.png differ diff --git a/docs/static/mb/blocks/lessons/loops-3.png b/docs/static/mb/blocks/lessons/loops-3.png new file mode 100644 index 00000000..0fe89bc0 Binary files /dev/null and b/docs/static/mb/blocks/lessons/loops-3.png differ diff --git a/docs/static/mb/blocks/lessons/screen-wipe-4.png b/docs/static/mb/blocks/lessons/screen-wipe-4.png new file mode 100644 index 00000000..d4602738 Binary files /dev/null and b/docs/static/mb/blocks/lessons/screen-wipe-4.png differ diff --git a/docs/static/mb/blocks/lessons/smiley-4.png b/docs/static/mb/blocks/lessons/smiley-4.png new file mode 100644 index 00000000..81644a43 Binary files /dev/null and b/docs/static/mb/blocks/lessons/smiley-4.png differ diff --git a/docs/static/mb/blocks/lessons/smiley-6.png b/docs/static/mb/blocks/lessons/smiley-6.png new file mode 100644 index 00000000..c773cc86 Binary files /dev/null and b/docs/static/mb/blocks/lessons/smiley-6.png differ diff --git a/docs/static/mb/blocks/lessons/variables-0.png b/docs/static/mb/blocks/lessons/variables-0.png new file mode 100644 index 00000000..d6c398bf Binary files /dev/null and b/docs/static/mb/blocks/lessons/variables-0.png differ diff --git a/docs/static/mb/blocks/lessons/variables-1.png b/docs/static/mb/blocks/lessons/variables-1.png new file mode 100644 index 00000000..2be74cb7 Binary files /dev/null and b/docs/static/mb/blocks/lessons/variables-1.png differ diff --git a/docs/static/mb/chart_title.png b/docs/static/mb/chart_title.png new file mode 100644 index 00000000..25dba72b Binary files /dev/null and b/docs/static/mb/chart_title.png differ diff --git a/docs/static/mb/crocodile-clips-2.jpg b/docs/static/mb/crocodile-clips-2.jpg new file mode 100644 index 00000000..633738dd Binary files /dev/null and b/docs/static/mb/crocodile-clips-2.jpg differ diff --git a/docs/static/mb/csv.png b/docs/static/mb/csv.png new file mode 100644 index 00000000..b54464e4 Binary files /dev/null and b/docs/static/mb/csv.png differ diff --git a/docs/static/mb/data-0.png b/docs/static/mb/data-0.png new file mode 100644 index 00000000..b47e728c Binary files /dev/null and b/docs/static/mb/data-0.png differ diff --git a/docs/static/mb/data2.png b/docs/static/mb/data2.png new file mode 100644 index 00000000..32ef1ca5 Binary files /dev/null and b/docs/static/mb/data2.png differ diff --git a/docs/static/mb/data3.png b/docs/static/mb/data3.png new file mode 100644 index 00000000..c312cf1c Binary files /dev/null and b/docs/static/mb/data3.png differ diff --git a/docs/static/mb/data4.png b/docs/static/mb/data4.png new file mode 100644 index 00000000..e9923003 Binary files /dev/null and b/docs/static/mb/data4.png differ diff --git a/docs/static/mb/data7.png b/docs/static/mb/data7.png new file mode 100644 index 00000000..c13f8474 Binary files /dev/null and b/docs/static/mb/data7.png differ diff --git a/docs/static/mb/device-0.png b/docs/static/mb/device-0.png new file mode 100644 index 00000000..b7c7358b Binary files /dev/null and b/docs/static/mb/device-0.png differ diff --git a/docs/static/mb/device-1.jpg b/docs/static/mb/device-1.jpg new file mode 100644 index 00000000..ae9f8ec6 Binary files /dev/null and b/docs/static/mb/device-1.jpg differ diff --git a/docs/static/mb/device/croc-clips/badclamp.jpg b/docs/static/mb/device/croc-clips/badclamp.jpg new file mode 100644 index 00000000..315d4efe Binary files /dev/null and b/docs/static/mb/device/croc-clips/badclamp.jpg differ diff --git a/docs/static/mb/device/croc-clips/crocclipsclamped.jpg b/docs/static/mb/device/croc-clips/crocclipsclamped.jpg new file mode 100644 index 00000000..97c0a42a Binary files /dev/null and b/docs/static/mb/device/croc-clips/crocclipsclamped.jpg differ diff --git a/docs/static/mb/device/croc-clips/foilcircuit.jpg b/docs/static/mb/device/croc-clips/foilcircuit.jpg new file mode 100644 index 00000000..a2f8a1af Binary files /dev/null and b/docs/static/mb/device/croc-clips/foilcircuit.jpg differ diff --git a/docs/static/mb/device/croc-clips/foilcut.jpg b/docs/static/mb/device/croc-clips/foilcut.jpg new file mode 100644 index 00000000..ea6dc2f0 Binary files /dev/null and b/docs/static/mb/device/croc-clips/foilcut.jpg differ diff --git a/docs/static/mb/device/croc-clips/frontclamp.jpg b/docs/static/mb/device/croc-clips/frontclamp.jpg new file mode 100644 index 00000000..eca31b20 Binary files /dev/null and b/docs/static/mb/device/croc-clips/frontclamp.jpg differ diff --git a/docs/static/mb/device/croc-clips/groundconnected.jpg b/docs/static/mb/device/croc-clips/groundconnected.jpg new file mode 100644 index 00000000..43f64c9a Binary files /dev/null and b/docs/static/mb/device/croc-clips/groundconnected.jpg differ diff --git a/docs/static/mb/device/croc-clips/jackconnect.jpg b/docs/static/mb/device/croc-clips/jackconnect.jpg new file mode 100644 index 00000000..ac84336b Binary files /dev/null and b/docs/static/mb/device/croc-clips/jackconnect.jpg differ diff --git a/docs/static/mb/device/croc-clips/jackground.jpg b/docs/static/mb/device/croc-clips/jackground.jpg new file mode 100644 index 00000000..b791178b Binary files /dev/null and b/docs/static/mb/device/croc-clips/jackground.jpg differ diff --git a/docs/static/mb/device/croc-clips/microbitattached.jpg b/docs/static/mb/device/croc-clips/microbitattached.jpg new file mode 100644 index 00000000..35c88ecf Binary files /dev/null and b/docs/static/mb/device/croc-clips/microbitattached.jpg differ diff --git a/docs/static/mb/device/croc-clips/microbitconnect.jpg b/docs/static/mb/device/croc-clips/microbitconnect.jpg new file mode 100644 index 00000000..5c7532df Binary files /dev/null and b/docs/static/mb/device/croc-clips/microbitconnect.jpg differ diff --git a/docs/static/mb/device/croc-clips/sideclamp.jpg b/docs/static/mb/device/croc-clips/sideclamp.jpg new file mode 100644 index 00000000..24db12cc Binary files /dev/null and b/docs/static/mb/device/croc-clips/sideclamp.jpg differ diff --git a/docs/static/mb/device/pano.jpg b/docs/static/mb/device/pano.jpg new file mode 100644 index 00000000..df4c95a1 Binary files /dev/null and b/docs/static/mb/device/pano.jpg differ diff --git a/docs/static/mb/device/pins-0.png b/docs/static/mb/device/pins-0.png new file mode 100644 index 00000000..64c6ccff Binary files /dev/null and b/docs/static/mb/device/pins-0.png differ diff --git a/docs/static/mb/device/reactive-0.png b/docs/static/mb/device/reactive-0.png new file mode 100644 index 00000000..ca6fdf5d Binary files /dev/null and b/docs/static/mb/device/reactive-0.png differ diff --git a/docs/static/mb/device/reactive-1.png b/docs/static/mb/device/reactive-1.png new file mode 100644 index 00000000..724cf676 Binary files /dev/null and b/docs/static/mb/device/reactive-1.png differ diff --git a/docs/static/mb/device/reactive-3.png b/docs/static/mb/device/reactive-3.png new file mode 100644 index 00000000..163122fb Binary files /dev/null and b/docs/static/mb/device/reactive-3.png differ diff --git a/docs/static/mb/device/usb-generic.jpg b/docs/static/mb/device/usb-generic.jpg new file mode 100644 index 00000000..e605c8d9 Binary files /dev/null and b/docs/static/mb/device/usb-generic.jpg differ diff --git a/docs/static/mb/device/usb-mac.jpg b/docs/static/mb/device/usb-mac.jpg new file mode 100644 index 00000000..48570d3e Binary files /dev/null and b/docs/static/mb/device/usb-mac.jpg differ diff --git a/docs/static/mb/device/usb-osx-chrome.png b/docs/static/mb/device/usb-osx-chrome.png new file mode 100644 index 00000000..b4533195 Binary files /dev/null and b/docs/static/mb/device/usb-osx-chrome.png differ diff --git a/docs/static/mb/device/usb-osx-copy-file-error.png b/docs/static/mb/device/usb-osx-copy-file-error.png new file mode 100644 index 00000000..7e20ec90 Binary files /dev/null and b/docs/static/mb/device/usb-osx-copy-file-error.png differ diff --git a/docs/static/mb/device/usb-osx-device.png b/docs/static/mb/device/usb-osx-device.png new file mode 100644 index 00000000..16ee59aa Binary files /dev/null and b/docs/static/mb/device/usb-osx-device.png differ diff --git a/docs/static/mb/device/usb-osx-dnd.png b/docs/static/mb/device/usb-osx-dnd.png new file mode 100644 index 00000000..cd213349 Binary files /dev/null and b/docs/static/mb/device/usb-osx-dnd.png differ diff --git a/docs/static/mb/device/usb-osx-firefox-1.jpg b/docs/static/mb/device/usb-osx-firefox-1.jpg new file mode 100644 index 00000000..eea0fad3 Binary files /dev/null and b/docs/static/mb/device/usb-osx-firefox-1.jpg differ diff --git a/docs/static/mb/device/usb-osx-firefox-2.png b/docs/static/mb/device/usb-osx-firefox-2.png new file mode 100644 index 00000000..97c38a68 Binary files /dev/null and b/docs/static/mb/device/usb-osx-firefox-2.png differ diff --git a/docs/static/mb/device/usb-thin.jpg b/docs/static/mb/device/usb-thin.jpg new file mode 100644 index 00000000..051cb493 Binary files /dev/null and b/docs/static/mb/device/usb-thin.jpg differ diff --git a/docs/static/mb/device/usb-windows-chrome.png b/docs/static/mb/device/usb-windows-chrome.png new file mode 100644 index 00000000..89eb9a94 Binary files /dev/null and b/docs/static/mb/device/usb-windows-chrome.png differ diff --git a/docs/static/mb/device/usb-windows-copy-file-error.jpg b/docs/static/mb/device/usb-windows-copy-file-error.jpg new file mode 100644 index 00000000..05a55a1f Binary files /dev/null and b/docs/static/mb/device/usb-windows-copy-file-error.jpg differ diff --git a/docs/static/mb/device/usb-windows-device.jpg b/docs/static/mb/device/usb-windows-device.jpg new file mode 100644 index 00000000..ea3c2d68 Binary files /dev/null and b/docs/static/mb/device/usb-windows-device.jpg differ diff --git a/docs/static/mb/device/usb-windows-edge-1.png b/docs/static/mb/device/usb-windows-edge-1.png new file mode 100644 index 00000000..07831fdc Binary files /dev/null and b/docs/static/mb/device/usb-windows-edge-1.png differ diff --git a/docs/static/mb/device/usb-windows-edge-2.png b/docs/static/mb/device/usb-windows-edge-2.png new file mode 100644 index 00000000..aad1cae9 Binary files /dev/null and b/docs/static/mb/device/usb-windows-edge-2.png differ diff --git a/docs/static/mb/device/usb-windows-firefox-1.png b/docs/static/mb/device/usb-windows-firefox-1.png new file mode 100644 index 00000000..83a7c17d Binary files /dev/null and b/docs/static/mb/device/usb-windows-firefox-1.png differ diff --git a/docs/static/mb/device/usb-windows-firefox-2.jpg b/docs/static/mb/device/usb-windows-firefox-2.jpg new file mode 100644 index 00000000..416e42ed Binary files /dev/null and b/docs/static/mb/device/usb-windows-firefox-2.jpg differ diff --git a/docs/static/mb/device/usb-windows-ie11-1.png b/docs/static/mb/device/usb-windows-ie11-1.png new file mode 100644 index 00000000..5a3e3bfd Binary files /dev/null and b/docs/static/mb/device/usb-windows-ie11-1.png differ diff --git a/docs/static/mb/device/usb-windows-ie11-2.png b/docs/static/mb/device/usb-windows-ie11-2.png new file mode 100644 index 00000000..d18c8dbe Binary files /dev/null and b/docs/static/mb/device/usb-windows-ie11-2.png differ diff --git a/docs/static/mb/device/usb-windows-sendto.jpg b/docs/static/mb/device/usb-windows-sendto.jpg new file mode 100644 index 00000000..5ffb02b4 Binary files /dev/null and b/docs/static/mb/device/usb-windows-sendto.jpg differ diff --git a/docs/static/mb/elements_styles_filters.png b/docs/static/mb/elements_styles_filters.png new file mode 100644 index 00000000..f1ea55d5 Binary files /dev/null and b/docs/static/mb/elements_styles_filters.png differ diff --git a/docs/static/mb/empty-microbit.png b/docs/static/mb/empty-microbit.png new file mode 100644 index 00000000..18299903 Binary files /dev/null and b/docs/static/mb/empty-microbit.png differ diff --git a/docs/static/mb/image-0.png b/docs/static/mb/image-0.png new file mode 100644 index 00000000..07759140 Binary files /dev/null and b/docs/static/mb/image-0.png differ diff --git a/docs/static/mb/js/basicFuns.png b/docs/static/mb/js/basicFuns.png new file mode 100644 index 00000000..c5bc257c Binary files /dev/null and b/docs/static/mb/js/basicFuns.png differ diff --git a/docs/static/mb/js/basicIntell.png b/docs/static/mb/js/basicIntell.png new file mode 100644 index 00000000..67d095d1 Binary files /dev/null and b/docs/static/mb/js/basicIntell.png differ diff --git a/docs/static/mb/js/forIntell.png b/docs/static/mb/js/forIntell.png new file mode 100644 index 00000000..687e55e3 Binary files /dev/null and b/docs/static/mb/js/forIntell.png differ diff --git a/docs/static/mb/lessons/analyze.png b/docs/static/mb/lessons/analyze.png new file mode 100644 index 00000000..0d97742a Binary files /dev/null and b/docs/static/mb/lessons/analyze.png differ diff --git a/docs/static/mb/lessons/analyze1.png b/docs/static/mb/lessons/analyze1.png new file mode 100644 index 00000000..4c5b6ba3 Binary files /dev/null and b/docs/static/mb/lessons/analyze1.png differ diff --git a/docs/static/mb/lessons/analyze16.png b/docs/static/mb/lessons/analyze16.png new file mode 100644 index 00000000..83125563 Binary files /dev/null and b/docs/static/mb/lessons/analyze16.png differ diff --git a/docs/static/mb/lessons/analyze19.png b/docs/static/mb/lessons/analyze19.png new file mode 100644 index 00000000..ddfc06be Binary files /dev/null and b/docs/static/mb/lessons/analyze19.png differ diff --git a/docs/static/mb/lessons/analyze2.png b/docs/static/mb/lessons/analyze2.png new file mode 100644 index 00000000..4634507e Binary files /dev/null and b/docs/static/mb/lessons/analyze2.png differ diff --git a/docs/static/mb/lessons/analyze20.png b/docs/static/mb/lessons/analyze20.png new file mode 100644 index 00000000..e51f66d6 Binary files /dev/null and b/docs/static/mb/lessons/analyze20.png differ diff --git a/docs/static/mb/lessons/analyze3.png b/docs/static/mb/lessons/analyze3.png new file mode 100644 index 00000000..fac50a40 Binary files /dev/null and b/docs/static/mb/lessons/analyze3.png differ diff --git a/docs/static/mb/lessons/analyze5.png b/docs/static/mb/lessons/analyze5.png new file mode 100644 index 00000000..dc11a8af Binary files /dev/null and b/docs/static/mb/lessons/analyze5.png differ diff --git a/docs/static/mb/lessons/analyze6.png b/docs/static/mb/lessons/analyze6.png new file mode 100644 index 00000000..83125563 Binary files /dev/null and b/docs/static/mb/lessons/analyze6.png differ diff --git a/docs/static/mb/lessons/analyze7.png b/docs/static/mb/lessons/analyze7.png new file mode 100644 index 00000000..1b612c4d Binary files /dev/null and b/docs/static/mb/lessons/analyze7.png differ diff --git a/docs/static/mb/lessons/analyze8.png b/docs/static/mb/lessons/analyze8.png new file mode 100644 index 00000000..446b68c8 Binary files /dev/null and b/docs/static/mb/lessons/analyze8.png differ diff --git a/docs/static/mb/lessons/analyze9.png b/docs/static/mb/lessons/analyze9.png new file mode 100644 index 00000000..7aba0082 Binary files /dev/null and b/docs/static/mb/lessons/analyze9.png differ diff --git a/docs/static/mb/lessons/answering-machine-0.png b/docs/static/mb/lessons/answering-machine-0.png new file mode 100644 index 00000000..d29260a0 Binary files /dev/null and b/docs/static/mb/lessons/answering-machine-0.png differ diff --git a/docs/static/mb/lessons/answering-machine-1.png b/docs/static/mb/lessons/answering-machine-1.png new file mode 100644 index 00000000..10c8f632 Binary files /dev/null and b/docs/static/mb/lessons/answering-machine-1.png differ diff --git a/docs/static/mb/lessons/answering-machine-2.png b/docs/static/mb/lessons/answering-machine-2.png new file mode 100644 index 00000000..30a82735 Binary files /dev/null and b/docs/static/mb/lessons/answering-machine-2.png differ diff --git a/docs/static/mb/lessons/answering-machine-4.png b/docs/static/mb/lessons/answering-machine-4.png new file mode 100644 index 00000000..15fa4c34 Binary files /dev/null and b/docs/static/mb/lessons/answering-machine-4.png differ diff --git a/docs/static/mb/lessons/banana-keyboard-0.png b/docs/static/mb/lessons/banana-keyboard-0.png new file mode 100644 index 00000000..a9b218ee Binary files /dev/null and b/docs/static/mb/lessons/banana-keyboard-0.png differ diff --git a/docs/static/mb/lessons/banana-keyboard-1.png b/docs/static/mb/lessons/banana-keyboard-1.png new file mode 100644 index 00000000..9ddb8832 Binary files /dev/null and b/docs/static/mb/lessons/banana-keyboard-1.png differ diff --git a/docs/static/mb/lessons/banana-keyboard-10.png b/docs/static/mb/lessons/banana-keyboard-10.png new file mode 100644 index 00000000..9e982914 Binary files /dev/null and b/docs/static/mb/lessons/banana-keyboard-10.png differ diff --git a/docs/static/mb/lessons/banana-keyboard-11.png b/docs/static/mb/lessons/banana-keyboard-11.png new file mode 100644 index 00000000..bb6ae2cd Binary files /dev/null and b/docs/static/mb/lessons/banana-keyboard-11.png differ diff --git a/docs/static/mb/lessons/banana-keyboard-12.png b/docs/static/mb/lessons/banana-keyboard-12.png new file mode 100644 index 00000000..020a11bd Binary files /dev/null and b/docs/static/mb/lessons/banana-keyboard-12.png differ diff --git a/docs/static/mb/lessons/banana-keyboard-2.png b/docs/static/mb/lessons/banana-keyboard-2.png new file mode 100644 index 00000000..e3983d0b Binary files /dev/null and b/docs/static/mb/lessons/banana-keyboard-2.png differ diff --git a/docs/static/mb/lessons/banana-keyboard-3.png b/docs/static/mb/lessons/banana-keyboard-3.png new file mode 100644 index 00000000..4c261f3b Binary files /dev/null and b/docs/static/mb/lessons/banana-keyboard-3.png differ diff --git a/docs/static/mb/lessons/banana-keyboard-4.png b/docs/static/mb/lessons/banana-keyboard-4.png new file mode 100644 index 00000000..c1be8631 Binary files /dev/null and b/docs/static/mb/lessons/banana-keyboard-4.png differ diff --git a/docs/static/mb/lessons/banana-keyboard-5.png b/docs/static/mb/lessons/banana-keyboard-5.png new file mode 100644 index 00000000..c20ea3b3 Binary files /dev/null and b/docs/static/mb/lessons/banana-keyboard-5.png differ diff --git a/docs/static/mb/lessons/banana-keyboard-6.png b/docs/static/mb/lessons/banana-keyboard-6.png new file mode 100644 index 00000000..f5edaeed Binary files /dev/null and b/docs/static/mb/lessons/banana-keyboard-6.png differ diff --git a/docs/static/mb/lessons/banana-keyboard-7.png b/docs/static/mb/lessons/banana-keyboard-7.png new file mode 100644 index 00000000..54793044 Binary files /dev/null and b/docs/static/mb/lessons/banana-keyboard-7.png differ diff --git a/docs/static/mb/lessons/banana-keyboard-8.png b/docs/static/mb/lessons/banana-keyboard-8.png new file mode 100644 index 00000000..14739ed6 Binary files /dev/null and b/docs/static/mb/lessons/banana-keyboard-8.png differ diff --git a/docs/static/mb/lessons/banana-keyboard-9.png b/docs/static/mb/lessons/banana-keyboard-9.png new file mode 100644 index 00000000..ba760b3e Binary files /dev/null and b/docs/static/mb/lessons/banana-keyboard-9.png differ diff --git a/docs/static/mb/lessons/blink-0.png b/docs/static/mb/lessons/blink-0.png new file mode 100644 index 00000000..4e1c4aeb Binary files /dev/null and b/docs/static/mb/lessons/blink-0.png differ diff --git a/docs/static/mb/lessons/blink-1.png b/docs/static/mb/lessons/blink-1.png new file mode 100644 index 00000000..1639a3fd Binary files /dev/null and b/docs/static/mb/lessons/blink-1.png differ diff --git a/docs/static/mb/lessons/blink-2.png b/docs/static/mb/lessons/blink-2.png new file mode 100644 index 00000000..b0222961 Binary files /dev/null and b/docs/static/mb/lessons/blink-2.png differ diff --git a/docs/static/mb/lessons/cascade-0.png b/docs/static/mb/lessons/cascade-0.png new file mode 100644 index 00000000..bd8fe973 Binary files /dev/null and b/docs/static/mb/lessons/cascade-0.png differ diff --git a/docs/static/mb/lessons/cascade-1.png b/docs/static/mb/lessons/cascade-1.png new file mode 100644 index 00000000..eecf6536 Binary files /dev/null and b/docs/static/mb/lessons/cascade-1.png differ diff --git a/docs/static/mb/lessons/cascade-2.png b/docs/static/mb/lessons/cascade-2.png new file mode 100644 index 00000000..37ba14c7 Binary files /dev/null and b/docs/static/mb/lessons/cascade-2.png differ diff --git a/docs/static/mb/lessons/catch-the-egg-game-0.png b/docs/static/mb/lessons/catch-the-egg-game-0.png new file mode 100644 index 00000000..54129445 Binary files /dev/null and b/docs/static/mb/lessons/catch-the-egg-game-0.png differ diff --git a/docs/static/mb/lessons/chart1.png b/docs/static/mb/lessons/chart1.png new file mode 100644 index 00000000..26f43c4e Binary files /dev/null and b/docs/static/mb/lessons/chart1.png differ diff --git a/docs/static/mb/lessons/column-0.png b/docs/static/mb/lessons/column-0.png new file mode 100644 index 00000000..67ff1a07 Binary files /dev/null and b/docs/static/mb/lessons/column-0.png differ diff --git a/docs/static/mb/lessons/column-1.png b/docs/static/mb/lessons/column-1.png new file mode 100644 index 00000000..6323a67e Binary files /dev/null and b/docs/static/mb/lessons/column-1.png differ diff --git a/docs/static/mb/lessons/counter-0.png b/docs/static/mb/lessons/counter-0.png new file mode 100644 index 00000000..c2abb0f6 Binary files /dev/null and b/docs/static/mb/lessons/counter-0.png differ diff --git a/docs/static/mb/lessons/counter-1.png b/docs/static/mb/lessons/counter-1.png new file mode 100644 index 00000000..29448958 Binary files /dev/null and b/docs/static/mb/lessons/counter-1.png differ diff --git a/docs/static/mb/lessons/counter-2.png b/docs/static/mb/lessons/counter-2.png new file mode 100644 index 00000000..b924b9fd Binary files /dev/null and b/docs/static/mb/lessons/counter-2.png differ diff --git a/docs/static/mb/lessons/data3.png b/docs/static/mb/lessons/data3.png new file mode 100644 index 00000000..c312cf1c Binary files /dev/null and b/docs/static/mb/lessons/data3.png differ diff --git a/docs/static/mb/lessons/die-roll-0.png b/docs/static/mb/lessons/die-roll-0.png new file mode 100644 index 00000000..472d18bb Binary files /dev/null and b/docs/static/mb/lessons/die-roll-0.png differ diff --git a/docs/static/mb/lessons/die-roll-1.png b/docs/static/mb/lessons/die-roll-1.png new file mode 100644 index 00000000..532bd452 Binary files /dev/null and b/docs/static/mb/lessons/die-roll-1.png differ diff --git a/docs/static/mb/lessons/die-roll-2.png b/docs/static/mb/lessons/die-roll-2.png new file mode 100644 index 00000000..f6594952 Binary files /dev/null and b/docs/static/mb/lessons/die-roll-2.png differ diff --git a/docs/static/mb/lessons/die-roll-3.png b/docs/static/mb/lessons/die-roll-3.png new file mode 100644 index 00000000..1e582cac Binary files /dev/null and b/docs/static/mb/lessons/die-roll-3.png differ diff --git a/docs/static/mb/lessons/digi-yoyo-0.png b/docs/static/mb/lessons/digi-yoyo-0.png new file mode 100644 index 00000000..917ce0e7 Binary files /dev/null and b/docs/static/mb/lessons/digi-yoyo-0.png differ diff --git a/docs/static/mb/lessons/flashing-heart-0.png b/docs/static/mb/lessons/flashing-heart-0.png new file mode 100644 index 00000000..a8e04a87 Binary files /dev/null and b/docs/static/mb/lessons/flashing-heart-0.png differ diff --git a/docs/static/mb/lessons/flipping-bird-0.png b/docs/static/mb/lessons/flipping-bird-0.png new file mode 100644 index 00000000..a28b2ea6 Binary files /dev/null and b/docs/static/mb/lessons/flipping-bird-0.png differ diff --git a/docs/static/mb/lessons/flipping-bird-1.png b/docs/static/mb/lessons/flipping-bird-1.png new file mode 100644 index 00000000..44abf050 Binary files /dev/null and b/docs/static/mb/lessons/flipping-bird-1.png differ diff --git a/docs/static/mb/lessons/glowing-pendulum-0.jpg b/docs/static/mb/lessons/glowing-pendulum-0.jpg new file mode 100644 index 00000000..b5ad4ee4 Binary files /dev/null and b/docs/static/mb/lessons/glowing-pendulum-0.jpg differ diff --git a/docs/static/mb/lessons/glowing-pendulum-1.png b/docs/static/mb/lessons/glowing-pendulum-1.png new file mode 100644 index 00000000..fc30a4df Binary files /dev/null and b/docs/static/mb/lessons/glowing-pendulum-1.png differ diff --git a/docs/static/mb/lessons/guess-the-number-0.png b/docs/static/mb/lessons/guess-the-number-0.png new file mode 100644 index 00000000..979f06f6 Binary files /dev/null and b/docs/static/mb/lessons/guess-the-number-0.png differ diff --git a/docs/static/mb/lessons/hack-your-headphones-0.png b/docs/static/mb/lessons/hack-your-headphones-0.png new file mode 100644 index 00000000..ba58df5a Binary files /dev/null and b/docs/static/mb/lessons/hack-your-headphones-0.png differ diff --git a/docs/static/mb/lessons/hack-your-headphones-1.png b/docs/static/mb/lessons/hack-your-headphones-1.png new file mode 100644 index 00000000..42a68449 Binary files /dev/null and b/docs/static/mb/lessons/hack-your-headphones-1.png differ diff --git a/docs/static/mb/lessons/looper-0.png b/docs/static/mb/lessons/looper-0.png new file mode 100644 index 00000000..eaf37d0d Binary files /dev/null and b/docs/static/mb/lessons/looper-0.png differ diff --git a/docs/static/mb/lessons/looper-1.png b/docs/static/mb/lessons/looper-1.png new file mode 100644 index 00000000..4c832c21 Binary files /dev/null and b/docs/static/mb/lessons/looper-1.png differ diff --git a/docs/static/mb/lessons/looper-2.png b/docs/static/mb/lessons/looper-2.png new file mode 100644 index 00000000..3ae90577 Binary files /dev/null and b/docs/static/mb/lessons/looper-2.png differ diff --git a/docs/static/mb/lessons/looper-3.png b/docs/static/mb/lessons/looper-3.png new file mode 100644 index 00000000..701c0d3e Binary files /dev/null and b/docs/static/mb/lessons/looper-3.png differ diff --git a/docs/static/mb/lessons/lucky-7-0.png b/docs/static/mb/lessons/lucky-7-0.png new file mode 100644 index 00000000..e9c20c68 Binary files /dev/null and b/docs/static/mb/lessons/lucky-7-0.png differ diff --git a/docs/static/mb/lessons/lucky-7-1.png b/docs/static/mb/lessons/lucky-7-1.png new file mode 100644 index 00000000..05ed459f Binary files /dev/null and b/docs/static/mb/lessons/lucky-7-1.png differ diff --git a/docs/static/mb/lessons/lucky-7-2.png b/docs/static/mb/lessons/lucky-7-2.png new file mode 100644 index 00000000..51bd9d80 Binary files /dev/null and b/docs/static/mb/lessons/lucky-7-2.png differ diff --git a/docs/static/mb/lessons/lucky-7-3.png b/docs/static/mb/lessons/lucky-7-3.png new file mode 100644 index 00000000..609e1895 Binary files /dev/null and b/docs/static/mb/lessons/lucky-7-3.png differ diff --git a/docs/static/mb/lessons/magic-logo-0.png b/docs/static/mb/lessons/magic-logo-0.png new file mode 100644 index 00000000..67bb4841 Binary files /dev/null and b/docs/static/mb/lessons/magic-logo-0.png differ diff --git a/docs/static/mb/lessons/night-light-0.png b/docs/static/mb/lessons/night-light-0.png new file mode 100644 index 00000000..8803fb65 Binary files /dev/null and b/docs/static/mb/lessons/night-light-0.png differ diff --git a/docs/static/mb/lessons/night-light-1.png b/docs/static/mb/lessons/night-light-1.png new file mode 100644 index 00000000..348e0382 Binary files /dev/null and b/docs/static/mb/lessons/night-light-1.png differ diff --git a/docs/static/mb/lessons/night-light-2.png b/docs/static/mb/lessons/night-light-2.png new file mode 100644 index 00000000..18299903 Binary files /dev/null and b/docs/static/mb/lessons/night-light-2.png differ diff --git a/docs/static/mb/lessons/offset-image-0.png b/docs/static/mb/lessons/offset-image-0.png new file mode 100644 index 00000000..ba2a9afe Binary files /dev/null and b/docs/static/mb/lessons/offset-image-0.png differ diff --git a/docs/static/mb/lessons/offset-image-1.png b/docs/static/mb/lessons/offset-image-1.png new file mode 100644 index 00000000..9c1827b8 Binary files /dev/null and b/docs/static/mb/lessons/offset-image-1.png differ diff --git a/docs/static/mb/lessons/ornament-chain-0.jpg b/docs/static/mb/lessons/ornament-chain-0.jpg new file mode 100644 index 00000000..45b7a1d5 Binary files /dev/null and b/docs/static/mb/lessons/ornament-chain-0.jpg differ diff --git a/docs/static/mb/lessons/ornament-chain-1.jpg b/docs/static/mb/lessons/ornament-chain-1.jpg new file mode 100644 index 00000000..dd9242cf Binary files /dev/null and b/docs/static/mb/lessons/ornament-chain-1.jpg differ diff --git a/docs/static/mb/lessons/ornament-chain-2.png b/docs/static/mb/lessons/ornament-chain-2.png new file mode 100644 index 00000000..07ce9637 Binary files /dev/null and b/docs/static/mb/lessons/ornament-chain-2.png differ diff --git a/docs/static/mb/lessons/ornament-chain-3.png b/docs/static/mb/lessons/ornament-chain-3.png new file mode 100644 index 00000000..fe2ed067 Binary files /dev/null and b/docs/static/mb/lessons/ornament-chain-3.png differ diff --git a/docs/static/mb/lessons/ornament-chain-4.png b/docs/static/mb/lessons/ornament-chain-4.png new file mode 100644 index 00000000..fb4d9882 Binary files /dev/null and b/docs/static/mb/lessons/ornament-chain-4.png differ diff --git a/docs/static/mb/lessons/ornament-chain-5.png b/docs/static/mb/lessons/ornament-chain-5.png new file mode 100644 index 00000000..c9739202 Binary files /dev/null and b/docs/static/mb/lessons/ornament-chain-5.png differ diff --git a/docs/static/mb/lessons/ornament-chain-6.png b/docs/static/mb/lessons/ornament-chain-6.png new file mode 100644 index 00000000..24d1442c Binary files /dev/null and b/docs/static/mb/lessons/ornament-chain-6.png differ diff --git a/docs/static/mb/lessons/ornament-chain-7.png b/docs/static/mb/lessons/ornament-chain-7.png new file mode 100644 index 00000000..707cb208 Binary files /dev/null and b/docs/static/mb/lessons/ornament-chain-7.png differ diff --git a/docs/static/mb/lessons/ornament-chain-8.png b/docs/static/mb/lessons/ornament-chain-8.png new file mode 100644 index 00000000..b8537355 Binary files /dev/null and b/docs/static/mb/lessons/ornament-chain-8.png differ diff --git a/docs/static/mb/lessons/prank-wifi-0.png b/docs/static/mb/lessons/prank-wifi-0.png new file mode 100644 index 00000000..dbdbe244 Binary files /dev/null and b/docs/static/mb/lessons/prank-wifi-0.png differ diff --git a/docs/static/mb/lessons/rotation-animation-0.png b/docs/static/mb/lessons/rotation-animation-0.png new file mode 100644 index 00000000..96352e44 Binary files /dev/null and b/docs/static/mb/lessons/rotation-animation-0.png differ diff --git a/docs/static/mb/lessons/rotation-animation-1.png b/docs/static/mb/lessons/rotation-animation-1.png new file mode 100644 index 00000000..ba98236a Binary files /dev/null and b/docs/static/mb/lessons/rotation-animation-1.png differ diff --git a/docs/static/mb/lessons/rotation-animation-2.png b/docs/static/mb/lessons/rotation-animation-2.png new file mode 100644 index 00000000..3953500c Binary files /dev/null and b/docs/static/mb/lessons/rotation-animation-2.png differ diff --git a/docs/static/mb/lessons/rotation-animation-3.png b/docs/static/mb/lessons/rotation-animation-3.png new file mode 100644 index 00000000..488b3b02 Binary files /dev/null and b/docs/static/mb/lessons/rotation-animation-3.png differ diff --git a/docs/static/mb/lessons/screen-wipe-0.png b/docs/static/mb/lessons/screen-wipe-0.png new file mode 100644 index 00000000..a1f7855c Binary files /dev/null and b/docs/static/mb/lessons/screen-wipe-0.png differ diff --git a/docs/static/mb/lessons/seis_challenge01.png b/docs/static/mb/lessons/seis_challenge01.png new file mode 100644 index 00000000..0168a79f Binary files /dev/null and b/docs/static/mb/lessons/seis_challenge01.png differ diff --git a/docs/static/mb/lessons/seis_challenge02.png b/docs/static/mb/lessons/seis_challenge02.png new file mode 100644 index 00000000..a06111be Binary files /dev/null and b/docs/static/mb/lessons/seis_challenge02.png differ diff --git a/docs/static/mb/lessons/seis_challenge04.png b/docs/static/mb/lessons/seis_challenge04.png new file mode 100644 index 00000000..3373604c Binary files /dev/null and b/docs/static/mb/lessons/seis_challenge04.png differ diff --git a/docs/static/mb/lessons/seis_challenge05.png b/docs/static/mb/lessons/seis_challenge05.png new file mode 100644 index 00000000..47e2c79d Binary files /dev/null and b/docs/static/mb/lessons/seis_challenge05.png differ diff --git a/docs/static/mb/lessons/seis_challenge06.png b/docs/static/mb/lessons/seis_challenge06.png new file mode 100644 index 00000000..c0f69793 Binary files /dev/null and b/docs/static/mb/lessons/seis_challenge06.png differ diff --git a/docs/static/mb/lessons/seis_challenge07.png b/docs/static/mb/lessons/seis_challenge07.png new file mode 100644 index 00000000..c9b233ad Binary files /dev/null and b/docs/static/mb/lessons/seis_challenge07.png differ diff --git a/docs/static/mb/lessons/seismograph0.png b/docs/static/mb/lessons/seismograph0.png new file mode 100644 index 00000000..35b8ce7d Binary files /dev/null and b/docs/static/mb/lessons/seismograph0.png differ diff --git a/docs/static/mb/lessons/seismograph1.png b/docs/static/mb/lessons/seismograph1.png new file mode 100644 index 00000000..45dba342 Binary files /dev/null and b/docs/static/mb/lessons/seismograph1.png differ diff --git a/docs/static/mb/lessons/seismograph10.png b/docs/static/mb/lessons/seismograph10.png new file mode 100644 index 00000000..322fd6a4 Binary files /dev/null and b/docs/static/mb/lessons/seismograph10.png differ diff --git a/docs/static/mb/lessons/seismograph11.png b/docs/static/mb/lessons/seismograph11.png new file mode 100644 index 00000000..5eafa75d Binary files /dev/null and b/docs/static/mb/lessons/seismograph11.png differ diff --git a/docs/static/mb/lessons/seismograph22.png b/docs/static/mb/lessons/seismograph22.png new file mode 100644 index 00000000..6730eedf Binary files /dev/null and b/docs/static/mb/lessons/seismograph22.png differ diff --git a/docs/static/mb/lessons/seismograph3.png b/docs/static/mb/lessons/seismograph3.png new file mode 100644 index 00000000..1208a67a Binary files /dev/null and b/docs/static/mb/lessons/seismograph3.png differ diff --git a/docs/static/mb/lessons/seismograph32.png b/docs/static/mb/lessons/seismograph32.png new file mode 100644 index 00000000..6730eedf Binary files /dev/null and b/docs/static/mb/lessons/seismograph32.png differ diff --git a/docs/static/mb/lessons/seismograph33.png b/docs/static/mb/lessons/seismograph33.png new file mode 100644 index 00000000..1208a67a Binary files /dev/null and b/docs/static/mb/lessons/seismograph33.png differ diff --git a/docs/static/mb/lessons/seismograph5.png b/docs/static/mb/lessons/seismograph5.png new file mode 100644 index 00000000..f5b0b98d Binary files /dev/null and b/docs/static/mb/lessons/seismograph5.png differ diff --git a/docs/static/mb/lessons/seismograph6.png b/docs/static/mb/lessons/seismograph6.png new file mode 100644 index 00000000..b26b8e22 Binary files /dev/null and b/docs/static/mb/lessons/seismograph6.png differ diff --git a/docs/static/mb/lessons/seismograph7.png b/docs/static/mb/lessons/seismograph7.png new file mode 100644 index 00000000..884c0c2d Binary files /dev/null and b/docs/static/mb/lessons/seismograph7.png differ diff --git a/docs/static/mb/lessons/seismograph8.png b/docs/static/mb/lessons/seismograph8.png new file mode 100644 index 00000000..efdb7d78 Binary files /dev/null and b/docs/static/mb/lessons/seismograph8.png differ diff --git a/docs/static/mb/lessons/seismograph9.png b/docs/static/mb/lessons/seismograph9.png new file mode 100644 index 00000000..322fd6a4 Binary files /dev/null and b/docs/static/mb/lessons/seismograph9.png differ diff --git a/docs/static/mb/lessons/smiley-0.png b/docs/static/mb/lessons/smiley-0.png new file mode 100644 index 00000000..b2c5452f Binary files /dev/null and b/docs/static/mb/lessons/smiley-0.png differ diff --git a/docs/static/mb/lessons/snowflake-fall-0.png b/docs/static/mb/lessons/snowflake-fall-0.png new file mode 100644 index 00000000..9c295dee Binary files /dev/null and b/docs/static/mb/lessons/snowflake-fall-0.png differ diff --git a/docs/static/mb/lessons/snowflake-fall-1.png b/docs/static/mb/lessons/snowflake-fall-1.png new file mode 100644 index 00000000..92467302 Binary files /dev/null and b/docs/static/mb/lessons/snowflake-fall-1.png differ diff --git a/docs/static/mb/lessons/snowflake-fall-2.png b/docs/static/mb/lessons/snowflake-fall-2.png new file mode 100644 index 00000000..005c2da5 Binary files /dev/null and b/docs/static/mb/lessons/snowflake-fall-2.png differ diff --git a/docs/static/mb/lessons/speed-button-0.png b/docs/static/mb/lessons/speed-button-0.png new file mode 100644 index 00000000..b98310ba Binary files /dev/null and b/docs/static/mb/lessons/speed-button-0.png differ diff --git a/docs/static/mb/lessons/speed-button-1.png b/docs/static/mb/lessons/speed-button-1.png new file mode 100644 index 00000000..44abf050 Binary files /dev/null and b/docs/static/mb/lessons/speed-button-1.png differ diff --git a/docs/static/mb/lessons/speed-button-2.png b/docs/static/mb/lessons/speed-button-2.png new file mode 100644 index 00000000..b00ec1eb Binary files /dev/null and b/docs/static/mb/lessons/speed-button-2.png differ diff --git a/docs/static/mb/lessons/spinner-0.png b/docs/static/mb/lessons/spinner-0.png new file mode 100644 index 00000000..9c0b9390 Binary files /dev/null and b/docs/static/mb/lessons/spinner-0.png differ diff --git a/docs/static/mb/lessons/spinner-1.png b/docs/static/mb/lessons/spinner-1.png new file mode 100644 index 00000000..17c121d3 Binary files /dev/null and b/docs/static/mb/lessons/spinner-1.png differ diff --git a/docs/static/mb/lessons/telegraph-0.png b/docs/static/mb/lessons/telegraph-0.png new file mode 100644 index 00000000..d5ebfdc5 Binary files /dev/null and b/docs/static/mb/lessons/telegraph-0.png differ diff --git a/docs/static/mb/lessons/the-watch-0.png b/docs/static/mb/lessons/the-watch-0.png new file mode 100644 index 00000000..177037e1 Binary files /dev/null and b/docs/static/mb/lessons/the-watch-0.png differ diff --git a/docs/static/mb/lessons/the-watch-1.png b/docs/static/mb/lessons/the-watch-1.png new file mode 100644 index 00000000..d017662f Binary files /dev/null and b/docs/static/mb/lessons/the-watch-1.png differ diff --git a/docs/static/mb/lessons/the-watch-10.png b/docs/static/mb/lessons/the-watch-10.png new file mode 100644 index 00000000..c61ca460 Binary files /dev/null and b/docs/static/mb/lessons/the-watch-10.png differ diff --git a/docs/static/mb/lessons/the-watch-11.png b/docs/static/mb/lessons/the-watch-11.png new file mode 100644 index 00000000..c8481af4 Binary files /dev/null and b/docs/static/mb/lessons/the-watch-11.png differ diff --git a/docs/static/mb/lessons/the-watch-12.png b/docs/static/mb/lessons/the-watch-12.png new file mode 100644 index 00000000..3d6a1f6b Binary files /dev/null and b/docs/static/mb/lessons/the-watch-12.png differ diff --git a/docs/static/mb/lessons/the-watch-13.png b/docs/static/mb/lessons/the-watch-13.png new file mode 100644 index 00000000..1203b54f Binary files /dev/null and b/docs/static/mb/lessons/the-watch-13.png differ diff --git a/docs/static/mb/lessons/the-watch-14.png b/docs/static/mb/lessons/the-watch-14.png new file mode 100644 index 00000000..6e810b19 Binary files /dev/null and b/docs/static/mb/lessons/the-watch-14.png differ diff --git a/docs/static/mb/lessons/the-watch-15.png b/docs/static/mb/lessons/the-watch-15.png new file mode 100644 index 00000000..96d036ec Binary files /dev/null and b/docs/static/mb/lessons/the-watch-15.png differ diff --git a/docs/static/mb/lessons/the-watch-16.png b/docs/static/mb/lessons/the-watch-16.png new file mode 100644 index 00000000..9f7cbbde Binary files /dev/null and b/docs/static/mb/lessons/the-watch-16.png differ diff --git a/docs/static/mb/lessons/the-watch-17.png b/docs/static/mb/lessons/the-watch-17.png new file mode 100644 index 00000000..e0832e26 Binary files /dev/null and b/docs/static/mb/lessons/the-watch-17.png differ diff --git a/docs/static/mb/lessons/the-watch-18.png b/docs/static/mb/lessons/the-watch-18.png new file mode 100644 index 00000000..5af57520 Binary files /dev/null and b/docs/static/mb/lessons/the-watch-18.png differ diff --git a/docs/static/mb/lessons/the-watch-19.png b/docs/static/mb/lessons/the-watch-19.png new file mode 100644 index 00000000..ad5e73bc Binary files /dev/null and b/docs/static/mb/lessons/the-watch-19.png differ diff --git a/docs/static/mb/lessons/the-watch-2.png b/docs/static/mb/lessons/the-watch-2.png new file mode 100644 index 00000000..4cf5127c Binary files /dev/null and b/docs/static/mb/lessons/the-watch-2.png differ diff --git a/docs/static/mb/lessons/the-watch-20.png b/docs/static/mb/lessons/the-watch-20.png new file mode 100644 index 00000000..8be6874f Binary files /dev/null and b/docs/static/mb/lessons/the-watch-20.png differ diff --git a/docs/static/mb/lessons/the-watch-21.png b/docs/static/mb/lessons/the-watch-21.png new file mode 100644 index 00000000..e241b25f Binary files /dev/null and b/docs/static/mb/lessons/the-watch-21.png differ diff --git a/docs/static/mb/lessons/the-watch-22.png b/docs/static/mb/lessons/the-watch-22.png new file mode 100644 index 00000000..a9e28360 Binary files /dev/null and b/docs/static/mb/lessons/the-watch-22.png differ diff --git a/docs/static/mb/lessons/the-watch-23.png b/docs/static/mb/lessons/the-watch-23.png new file mode 100644 index 00000000..b2705794 Binary files /dev/null and b/docs/static/mb/lessons/the-watch-23.png differ diff --git a/docs/static/mb/lessons/the-watch-3.png b/docs/static/mb/lessons/the-watch-3.png new file mode 100644 index 00000000..f8072ef2 Binary files /dev/null and b/docs/static/mb/lessons/the-watch-3.png differ diff --git a/docs/static/mb/lessons/the-watch-4.png b/docs/static/mb/lessons/the-watch-4.png new file mode 100644 index 00000000..86c539e1 Binary files /dev/null and b/docs/static/mb/lessons/the-watch-4.png differ diff --git a/docs/static/mb/lessons/the-watch-5.png b/docs/static/mb/lessons/the-watch-5.png new file mode 100644 index 00000000..0681a2db Binary files /dev/null and b/docs/static/mb/lessons/the-watch-5.png differ diff --git a/docs/static/mb/lessons/the-watch-6.png b/docs/static/mb/lessons/the-watch-6.png new file mode 100644 index 00000000..1fd6c191 Binary files /dev/null and b/docs/static/mb/lessons/the-watch-6.png differ diff --git a/docs/static/mb/lessons/the-watch-7.png b/docs/static/mb/lessons/the-watch-7.png new file mode 100644 index 00000000..3ef7ec9a Binary files /dev/null and b/docs/static/mb/lessons/the-watch-7.png differ diff --git a/docs/static/mb/lessons/the-watch-8.png b/docs/static/mb/lessons/the-watch-8.png new file mode 100644 index 00000000..6614bf5b Binary files /dev/null and b/docs/static/mb/lessons/the-watch-8.png differ diff --git a/docs/static/mb/lessons/the-watch-9.png b/docs/static/mb/lessons/the-watch-9.png new file mode 100644 index 00000000..44aa930e Binary files /dev/null and b/docs/static/mb/lessons/the-watch-9.png differ diff --git a/docs/static/mb/lessons/truth-or-dare-0.png b/docs/static/mb/lessons/truth-or-dare-0.png new file mode 100644 index 00000000..7a01002a Binary files /dev/null and b/docs/static/mb/lessons/truth-or-dare-0.png differ diff --git a/docs/static/mb/line_chart.png b/docs/static/mb/line_chart.png new file mode 100644 index 00000000..05c14ef2 Binary files /dev/null and b/docs/static/mb/line_chart.png differ diff --git a/docs/static/mb/offline-2.png b/docs/static/mb/offline-2.png new file mode 100644 index 00000000..e5a18bda Binary files /dev/null and b/docs/static/mb/offline-2.png differ diff --git a/docs/static/mb/projects/a1-display.png b/docs/static/mb/projects/a1-display.png new file mode 100644 index 00000000..bd3236c8 Binary files /dev/null and b/docs/static/mb/projects/a1-display.png differ diff --git a/docs/static/mb/projects/a10-watch.png b/docs/static/mb/projects/a10-watch.png new file mode 100644 index 00000000..9781b759 Binary files /dev/null and b/docs/static/mb/projects/a10-watch.png differ diff --git a/docs/static/mb/projects/a2-buttons.png b/docs/static/mb/projects/a2-buttons.png new file mode 100644 index 00000000..668a5a46 Binary files /dev/null and b/docs/static/mb/projects/a2-buttons.png differ diff --git a/docs/static/mb/projects/a3-pins.png b/docs/static/mb/projects/a3-pins.png new file mode 100644 index 00000000..5e811541 Binary files /dev/null and b/docs/static/mb/projects/a3-pins.png differ diff --git a/docs/static/mb/projects/a4-motion.png b/docs/static/mb/projects/a4-motion.png new file mode 100644 index 00000000..49b5a6cb Binary files /dev/null and b/docs/static/mb/projects/a4-motion.png differ diff --git a/docs/static/mb/projects/a5-compass.png b/docs/static/mb/projects/a5-compass.png new file mode 100644 index 00000000..d3e34ce8 Binary files /dev/null and b/docs/static/mb/projects/a5-compass.png differ diff --git a/docs/static/mb/projects/a6-music.png b/docs/static/mb/projects/a6-music.png new file mode 100644 index 00000000..6a1e39f1 Binary files /dev/null and b/docs/static/mb/projects/a6-music.png differ diff --git a/docs/static/mb/projects/a7-conductive.png b/docs/static/mb/projects/a7-conductive.png new file mode 100644 index 00000000..1c3ab640 Binary files /dev/null and b/docs/static/mb/projects/a7-conductive.png differ diff --git a/docs/static/mb/projects/a8-network.png b/docs/static/mb/projects/a8-network.png new file mode 100644 index 00000000..de76df32 Binary files /dev/null and b/docs/static/mb/projects/a8-network.png differ diff --git a/docs/static/mb/projects/a9-radio.png b/docs/static/mb/projects/a9-radio.png new file mode 100644 index 00000000..d8cf0f40 Binary files /dev/null and b/docs/static/mb/projects/a9-radio.png differ diff --git a/docs/static/mb/projects/all10.png b/docs/static/mb/projects/all10.png new file mode 100644 index 00000000..e2aa6663 Binary files /dev/null and b/docs/static/mb/projects/all10.png differ diff --git a/docs/static/mb/projects/guitar.png b/docs/static/mb/projects/guitar.png new file mode 100644 index 00000000..6866549b Binary files /dev/null and b/docs/static/mb/projects/guitar.png differ diff --git a/docs/static/mb/projects/guitar/accelleration_axis.png b/docs/static/mb/projects/guitar/accelleration_axis.png new file mode 100644 index 00000000..9e620d6b Binary files /dev/null and b/docs/static/mb/projects/guitar/accelleration_axis.png differ diff --git a/docs/static/mb/projects/guitar/connectmicrobit.jpg b/docs/static/mb/projects/guitar/connectmicrobit.jpg new file mode 100644 index 00000000..8f22e8e5 Binary files /dev/null and b/docs/static/mb/projects/guitar/connectmicrobit.jpg differ diff --git a/docs/static/mb/projects/guitar/crocclipintoboard.jpg b/docs/static/mb/projects/guitar/crocclipintoboard.jpg new file mode 100644 index 00000000..23f46b69 Binary files /dev/null and b/docs/static/mb/projects/guitar/crocclipintoboard.jpg differ diff --git a/docs/static/mb/projects/guitar/crocclips.jpg b/docs/static/mb/projects/guitar/crocclips.jpg new file mode 100644 index 00000000..7acdd656 Binary files /dev/null and b/docs/static/mb/projects/guitar/crocclips.jpg differ diff --git a/docs/static/mb/projects/guitar/headphones.jpg b/docs/static/mb/projects/guitar/headphones.jpg new file mode 100644 index 00000000..9b05f0b4 Binary files /dev/null and b/docs/static/mb/projects/guitar/headphones.jpg differ diff --git a/docs/static/mb/projects/guitar/jacktocrocs.jpg b/docs/static/mb/projects/guitar/jacktocrocs.jpg new file mode 100644 index 00000000..4f6520f1 Binary files /dev/null and b/docs/static/mb/projects/guitar/jacktocrocs.jpg differ diff --git a/docs/static/mb/projects/guitar/map_analogy.png b/docs/static/mb/projects/guitar/map_analogy.png new file mode 100644 index 00000000..1235e679 Binary files /dev/null and b/docs/static/mb/projects/guitar/map_analogy.png differ diff --git a/docs/static/mb/projects/guitar/mapanalogy.JPG b/docs/static/mb/projects/guitar/mapanalogy.JPG new file mode 100644 index 00000000..53b2c65e Binary files /dev/null and b/docs/static/mb/projects/guitar/mapanalogy.JPG differ diff --git a/docs/static/mb/projects/guitar/materials.jpg b/docs/static/mb/projects/guitar/materials.jpg new file mode 100644 index 00000000..9df09e04 Binary files /dev/null and b/docs/static/mb/projects/guitar/materials.jpg differ diff --git a/docs/static/mb/projects/guitar/microbit.jpg b/docs/static/mb/projects/guitar/microbit.jpg new file mode 100644 index 00000000..4d4b0495 Binary files /dev/null and b/docs/static/mb/projects/guitar/microbit.jpg differ diff --git a/docs/static/mb/projects/guitar/otherdesigns.jpg b/docs/static/mb/projects/guitar/otherdesigns.jpg new file mode 100644 index 00000000..7bc0d3a1 Binary files /dev/null and b/docs/static/mb/projects/guitar/otherdesigns.jpg differ diff --git a/docs/static/mb/projects/guitar/usbcable.jpg b/docs/static/mb/projects/guitar/usbcable.jpg new file mode 100644 index 00000000..4ec68d1a Binary files /dev/null and b/docs/static/mb/projects/guitar/usbcable.jpg differ diff --git a/docs/static/mb/projects/magic-button-trick.png b/docs/static/mb/projects/magic-button-trick.png new file mode 100644 index 00000000..6e19d321 Binary files /dev/null and b/docs/static/mb/projects/magic-button-trick.png differ diff --git a/docs/static/mb/projects/magic-button-trick/magnets.jpg b/docs/static/mb/projects/magic-button-trick/magnets.jpg new file mode 100644 index 00000000..4b146bef Binary files /dev/null and b/docs/static/mb/projects/magic-button-trick/magnets.jpg differ diff --git a/docs/static/mb/projects/timing-gates.jpg b/docs/static/mb/projects/timing-gates.jpg new file mode 100644 index 00000000..a299040b Binary files /dev/null and b/docs/static/mb/projects/timing-gates.jpg differ diff --git a/docs/static/mb/projects/timing-gates/carfoil.jpg b/docs/static/mb/projects/timing-gates/carfoil.jpg new file mode 100644 index 00000000..6365abfd Binary files /dev/null and b/docs/static/mb/projects/timing-gates/carfoil.jpg differ diff --git a/docs/static/mb/projects/timing-gates/connectcrocs.jpg b/docs/static/mb/projects/timing-gates/connectcrocs.jpg new file mode 100644 index 00000000..69eec45d Binary files /dev/null and b/docs/static/mb/projects/timing-gates/connectcrocs.jpg differ diff --git a/docs/static/mb/projects/timing-gates/connectsensor.jpg b/docs/static/mb/projects/timing-gates/connectsensor.jpg new file mode 100644 index 00000000..637a0b0b Binary files /dev/null and b/docs/static/mb/projects/timing-gates/connectsensor.jpg differ diff --git a/docs/static/mb/projects/timing-gates/materials.jpg b/docs/static/mb/projects/timing-gates/materials.jpg new file mode 100644 index 00000000..b2c22a27 Binary files /dev/null and b/docs/static/mb/projects/timing-gates/materials.jpg differ diff --git a/docs/static/mb/projects/timing-gates/sensor2.jpg b/docs/static/mb/projects/timing-gates/sensor2.jpg new file mode 100644 index 00000000..2a27a5ef Binary files /dev/null and b/docs/static/mb/projects/timing-gates/sensor2.jpg differ diff --git a/docs/static/mb/projects/timing-gates/sensordone.jpg b/docs/static/mb/projects/timing-gates/sensordone.jpg new file mode 100644 index 00000000..519dc0b2 Binary files /dev/null and b/docs/static/mb/projects/timing-gates/sensordone.jpg differ diff --git a/docs/static/mb/projects/timing-gates/sensormicrobit2.jpg b/docs/static/mb/projects/timing-gates/sensormicrobit2.jpg new file mode 100644 index 00000000..d95c33fc Binary files /dev/null and b/docs/static/mb/projects/timing-gates/sensormicrobit2.jpg differ diff --git a/docs/static/mb/projects/timing-gates/sketchgate1.jpg b/docs/static/mb/projects/timing-gates/sketchgate1.jpg new file mode 100644 index 00000000..9c841577 Binary files /dev/null and b/docs/static/mb/projects/timing-gates/sketchgate1.jpg differ diff --git a/docs/static/mb/projects/timing-gates/sketchgate2.jpg b/docs/static/mb/projects/timing-gates/sketchgate2.jpg new file mode 100644 index 00000000..5b9878f9 Binary files /dev/null and b/docs/static/mb/projects/timing-gates/sketchgate2.jpg differ diff --git a/docs/static/mb/projects/timing-gates/sketchgates.jpg b/docs/static/mb/projects/timing-gates/sketchgates.jpg new file mode 100644 index 00000000..7e8383e6 Binary files /dev/null and b/docs/static/mb/projects/timing-gates/sketchgates.jpg differ diff --git a/docs/static/mb/projects/timing-gates/sketchmath.jpg b/docs/static/mb/projects/timing-gates/sketchmath.jpg new file mode 100644 index 00000000..947d1236 Binary files /dev/null and b/docs/static/mb/projects/timing-gates/sketchmath.jpg differ diff --git a/docs/static/mb/projects/timing-gates/spreadfoil.jpg b/docs/static/mb/projects/timing-gates/spreadfoil.jpg new file mode 100644 index 00000000..2e4042c3 Binary files /dev/null and b/docs/static/mb/projects/timing-gates/spreadfoil.jpg differ diff --git a/docs/static/mb/projects/timing-gates/stickfoil.jpg b/docs/static/mb/projects/timing-gates/stickfoil.jpg new file mode 100644 index 00000000..001eb38e Binary files /dev/null and b/docs/static/mb/projects/timing-gates/stickfoil.jpg differ diff --git a/docs/static/mb/projects/timing-gates/tape.jpg b/docs/static/mb/projects/timing-gates/tape.jpg new file mode 100644 index 00000000..ea5449af Binary files /dev/null and b/docs/static/mb/projects/timing-gates/tape.jpg differ diff --git a/docs/static/mb/projects/wallet.png b/docs/static/mb/projects/wallet.png new file mode 100644 index 00000000..02f34ed7 Binary files /dev/null and b/docs/static/mb/projects/wallet.png differ diff --git a/docs/static/mb/projects/wallet/fold1.jpg b/docs/static/mb/projects/wallet/fold1.jpg new file mode 100644 index 00000000..ac54a1c3 Binary files /dev/null and b/docs/static/mb/projects/wallet/fold1.jpg differ diff --git a/docs/static/mb/projects/wallet/fold2.jpg b/docs/static/mb/projects/wallet/fold2.jpg new file mode 100644 index 00000000..caeab3aa Binary files /dev/null and b/docs/static/mb/projects/wallet/fold2.jpg differ diff --git a/docs/static/mb/projects/wallet/fold3.jpg b/docs/static/mb/projects/wallet/fold3.jpg new file mode 100644 index 00000000..75bbe52f Binary files /dev/null and b/docs/static/mb/projects/wallet/fold3.jpg differ diff --git a/docs/static/mb/projects/wallet/fold4.jpg b/docs/static/mb/projects/wallet/fold4.jpg new file mode 100644 index 00000000..69db16eb Binary files /dev/null and b/docs/static/mb/projects/wallet/fold4.jpg differ diff --git a/docs/static/mb/projects/wallet/fold5.jpg b/docs/static/mb/projects/wallet/fold5.jpg new file mode 100644 index 00000000..d85aa2ec Binary files /dev/null and b/docs/static/mb/projects/wallet/fold5.jpg differ diff --git a/docs/static/mb/projects/wallet/fold6.jpg b/docs/static/mb/projects/wallet/fold6.jpg new file mode 100644 index 00000000..0bc5e64a Binary files /dev/null and b/docs/static/mb/projects/wallet/fold6.jpg differ diff --git a/docs/static/mb/projects/wallet/fold7.jpg b/docs/static/mb/projects/wallet/fold7.jpg new file mode 100644 index 00000000..8472a7f8 Binary files /dev/null and b/docs/static/mb/projects/wallet/fold7.jpg differ diff --git a/docs/static/mb/projects/wallet/hole1.jpg b/docs/static/mb/projects/wallet/hole1.jpg new file mode 100644 index 00000000..261848b3 Binary files /dev/null and b/docs/static/mb/projects/wallet/hole1.jpg differ diff --git a/docs/static/mb/projects/wallet/hole2.jpg b/docs/static/mb/projects/wallet/hole2.jpg new file mode 100644 index 00000000..1bfd33c2 Binary files /dev/null and b/docs/static/mb/projects/wallet/hole2.jpg differ diff --git a/docs/static/mb/projects/wallet/hole3.jpg b/docs/static/mb/projects/wallet/hole3.jpg new file mode 100644 index 00000000..863efdf1 Binary files /dev/null and b/docs/static/mb/projects/wallet/hole3.jpg differ diff --git a/docs/static/mb/projects/wallet/hole4.jpg b/docs/static/mb/projects/wallet/hole4.jpg new file mode 100644 index 00000000..15523a21 Binary files /dev/null and b/docs/static/mb/projects/wallet/hole4.jpg differ diff --git a/docs/static/mb/projects/wallet/hole5.jpg b/docs/static/mb/projects/wallet/hole5.jpg new file mode 100644 index 00000000..e3ec9aa4 Binary files /dev/null and b/docs/static/mb/projects/wallet/hole5.jpg differ diff --git a/docs/static/mb/projects/wallet/hole6.jpg b/docs/static/mb/projects/wallet/hole6.jpg new file mode 100644 index 00000000..322f09ab Binary files /dev/null and b/docs/static/mb/projects/wallet/hole6.jpg differ diff --git a/docs/static/mb/projects/wallet/materials.jpg b/docs/static/mb/projects/wallet/materials.jpg new file mode 100644 index 00000000..66d6702f Binary files /dev/null and b/docs/static/mb/projects/wallet/materials.jpg differ diff --git a/docs/static/mb/projects/wallet/mbhole1.jpg b/docs/static/mb/projects/wallet/mbhole1.jpg new file mode 100644 index 00000000..735715bb Binary files /dev/null and b/docs/static/mb/projects/wallet/mbhole1.jpg differ diff --git a/docs/static/mb/projects/wallet/mbhole10.jpg b/docs/static/mb/projects/wallet/mbhole10.jpg new file mode 100644 index 00000000..e50e449b Binary files /dev/null and b/docs/static/mb/projects/wallet/mbhole10.jpg differ diff --git a/docs/static/mb/projects/wallet/mbhole11.jpg b/docs/static/mb/projects/wallet/mbhole11.jpg new file mode 100644 index 00000000..1b7db863 Binary files /dev/null and b/docs/static/mb/projects/wallet/mbhole11.jpg differ diff --git a/docs/static/mb/projects/wallet/mbhole12.jpg b/docs/static/mb/projects/wallet/mbhole12.jpg new file mode 100644 index 00000000..4e1b1aab Binary files /dev/null and b/docs/static/mb/projects/wallet/mbhole12.jpg differ diff --git a/docs/static/mb/projects/wallet/mbhole13.jpg b/docs/static/mb/projects/wallet/mbhole13.jpg new file mode 100644 index 00000000..e85a2c42 Binary files /dev/null and b/docs/static/mb/projects/wallet/mbhole13.jpg differ diff --git a/docs/static/mb/projects/wallet/mbhole14.jpg b/docs/static/mb/projects/wallet/mbhole14.jpg new file mode 100644 index 00000000..9118ad4e Binary files /dev/null and b/docs/static/mb/projects/wallet/mbhole14.jpg differ diff --git a/docs/static/mb/projects/wallet/mbhole2.jpg b/docs/static/mb/projects/wallet/mbhole2.jpg new file mode 100644 index 00000000..7f969653 Binary files /dev/null and b/docs/static/mb/projects/wallet/mbhole2.jpg differ diff --git a/docs/static/mb/projects/wallet/mbhole3.jpg b/docs/static/mb/projects/wallet/mbhole3.jpg new file mode 100644 index 00000000..f99cdf3b Binary files /dev/null and b/docs/static/mb/projects/wallet/mbhole3.jpg differ diff --git a/docs/static/mb/projects/wallet/mbhole4.jpg b/docs/static/mb/projects/wallet/mbhole4.jpg new file mode 100644 index 00000000..9fe28a8d Binary files /dev/null and b/docs/static/mb/projects/wallet/mbhole4.jpg differ diff --git a/docs/static/mb/projects/wallet/mbhole5.jpg b/docs/static/mb/projects/wallet/mbhole5.jpg new file mode 100644 index 00000000..69dd7159 Binary files /dev/null and b/docs/static/mb/projects/wallet/mbhole5.jpg differ diff --git a/docs/static/mb/projects/wallet/mbhole6.jpg b/docs/static/mb/projects/wallet/mbhole6.jpg new file mode 100644 index 00000000..35f03fbb Binary files /dev/null and b/docs/static/mb/projects/wallet/mbhole6.jpg differ diff --git a/docs/static/mb/projects/wallet/mbhole7.jpg b/docs/static/mb/projects/wallet/mbhole7.jpg new file mode 100644 index 00000000..5da85874 Binary files /dev/null and b/docs/static/mb/projects/wallet/mbhole7.jpg differ diff --git a/docs/static/mb/projects/wallet/mbhole8.jpg b/docs/static/mb/projects/wallet/mbhole8.jpg new file mode 100644 index 00000000..2aeca562 Binary files /dev/null and b/docs/static/mb/projects/wallet/mbhole8.jpg differ diff --git a/docs/static/mb/projects/wallet/mbhole9.jpg b/docs/static/mb/projects/wallet/mbhole9.jpg new file mode 100644 index 00000000..0befb9e3 Binary files /dev/null and b/docs/static/mb/projects/wallet/mbhole9.jpg differ diff --git a/docs/static/mb/projects/wallet/rug1.jpg b/docs/static/mb/projects/wallet/rug1.jpg new file mode 100644 index 00000000..ff0083f5 Binary files /dev/null and b/docs/static/mb/projects/wallet/rug1.jpg differ diff --git a/docs/static/mb/projects/wallet/rug2.jpg b/docs/static/mb/projects/wallet/rug2.jpg new file mode 100644 index 00000000..93053062 Binary files /dev/null and b/docs/static/mb/projects/wallet/rug2.jpg differ diff --git a/docs/static/mb/projects/wallet/sheet1.jpg b/docs/static/mb/projects/wallet/sheet1.jpg new file mode 100644 index 00000000..805e995a Binary files /dev/null and b/docs/static/mb/projects/wallet/sheet1.jpg differ diff --git a/docs/static/mb/projects/wallet/sheet2.jpg b/docs/static/mb/projects/wallet/sheet2.jpg new file mode 100644 index 00000000..575527db Binary files /dev/null and b/docs/static/mb/projects/wallet/sheet2.jpg differ diff --git a/docs/static/mb/projects/wallet/sheet3.jpg b/docs/static/mb/projects/wallet/sheet3.jpg new file mode 100644 index 00000000..c1759197 Binary files /dev/null and b/docs/static/mb/projects/wallet/sheet3.jpg differ diff --git a/docs/static/mb/projects/wallet/sheet4.jpg b/docs/static/mb/projects/wallet/sheet4.jpg new file mode 100644 index 00000000..8092bb3a Binary files /dev/null and b/docs/static/mb/projects/wallet/sheet4.jpg differ diff --git a/docs/static/mb/projects/wallet/sheet5.jpg b/docs/static/mb/projects/wallet/sheet5.jpg new file mode 100644 index 00000000..c373b61b Binary files /dev/null and b/docs/static/mb/projects/wallet/sheet5.jpg differ diff --git a/docs/static/mb/projects/wallet/sheet6.jpg b/docs/static/mb/projects/wallet/sheet6.jpg new file mode 100644 index 00000000..bb6b45a0 Binary files /dev/null and b/docs/static/mb/projects/wallet/sheet6.jpg differ diff --git a/docs/static/mb/projects/wallet/wallet.jpg b/docs/static/mb/projects/wallet/wallet.jpg new file mode 100644 index 00000000..714618d6 Binary files /dev/null and b/docs/static/mb/projects/wallet/wallet.jpg differ diff --git a/docs/static/mb/quick-start-0.png b/docs/static/mb/quick-start-0.png new file mode 100644 index 00000000..223a9cec Binary files /dev/null and b/docs/static/mb/quick-start-0.png differ diff --git a/docs/static/mb/seismograph9.png b/docs/static/mb/seismograph9.png new file mode 100644 index 00000000..322fd6a4 Binary files /dev/null and b/docs/static/mb/seismograph9.png differ diff --git a/docs/static/mb/serial-library-0.png b/docs/static/mb/serial-library-0.png new file mode 100644 index 00000000..c00882ab Binary files /dev/null and b/docs/static/mb/serial-library-0.png differ diff --git a/docs/static/mb/serial-library-1.png b/docs/static/mb/serial-library-1.png new file mode 100644 index 00000000..86cc6596 Binary files /dev/null and b/docs/static/mb/serial-library-1.png differ diff --git a/docs/static/mb/show-leds-1.png b/docs/static/mb/show-leds-1.png new file mode 100644 index 00000000..f8ba3c12 Binary files /dev/null and b/docs/static/mb/show-leds-1.png differ diff --git a/docs/static/mb/vscode.png b/docs/static/mb/vscode.png new file mode 100644 index 00000000..035686f8 Binary files /dev/null and b/docs/static/mb/vscode.png differ diff --git a/docs/static/uploader/screenshot.png b/docs/static/uploader/screenshot.png new file mode 100644 index 00000000..4fb518d6 Binary files /dev/null and b/docs/static/uploader/screenshot.png differ diff --git a/docs/static/uploader/tooltip.png b/docs/static/uploader/tooltip.png new file mode 100644 index 00000000..ee623bd0 Binary files /dev/null and b/docs/static/uploader/tooltip.png differ diff --git a/embed.js b/embed.js new file mode 100644 index 00000000..8136c14d --- /dev/null +++ b/embed.js @@ -0,0 +1,70 @@ +(function() { + if (window.ksRunnerInit) return; + + // This line gets patched up by the cloud + var pxtConfig = { + "relprefix": "/pxt-calliope/", + "workerjs": "/pxt-calliope/worker.js", + "tdworkerjs": "/pxt-calliope/tdworker.js", + "monacoworkerjs": "/pxt-calliope/monacoworker.js", + "pxtVersion": "1.0.20", + "pxtRelId": "", + "pxtCdnUrl": "/pxt-calliope/", + "targetVersion": "0.0.0", + "targetRelId": "", + "targetCdnUrl": "/pxt-calliope/", + "targetUrl": "", + "simUrl": "/pxt-calliope/simulator.html", + "partsUrl": "/pxt-calliope/siminstructions.html", + "runUrl": "/pxt-calliope/run.html", + "docsUrl": "/pxt-calliope/docs.html", + "isStatic": true +}; + + var appCdnRoot = "/pxt-calliope/"; + var scripts = [ + "highlight.js/highlight.pack.js", + "bluebird.min.js", + "typescript.js", + "semantic.js", + "marked/marked.min.js", + "lzma/lzma_worker-min.js", + "blockly/blockly_compressed.js", + "blockly/blocks_compressed.js", + "blockly/msg/js/en.js", + "pxtlib.js", + "pxtblocks.js", + "pxteditor.js", + "pxtsim.js", + "target.js", + "pxtrunner.js" + ].map(function(s) { return appCdnRoot + s; }) + + if (typeof jQuery == "undefined") + scripts.unshift(appCdnRoot + "jquery.js") + + var pxtCallbacks = [] + + window.ksRunnerReady = function(f) { + if (pxtCallbacks == null) f() + else pxtCallbacks.push(f) + } + + window.ksRunnerWhenLoaded = function() { + pxt.docs.requireHighlightJs = function() { return hljs; } + pxt.setupWebConfig(pxtConfig || window.pxtWebConfig) + pxt.runner.initCallbacks = pxtCallbacks + pxtCallbacks.push(function() { + pxtCallbacks = null + }) + pxt.runner.init(); + } + + scripts.forEach(function(src) { + var script = document.createElement('script'); + script.src = src; + script.async = false; + document.head.appendChild(script); + }) + +} ()) diff --git a/favicon.ico b/favicon.ico new file mode 100644 index 00000000..e169ff28 Binary files /dev/null and b/favicon.ico differ diff --git a/fonts/icons.eot b/fonts/icons.eot new file mode 100644 index 00000000..c7b00d2b Binary files /dev/null and b/fonts/icons.eot differ diff --git a/fonts/icons.svg b/fonts/icons.svg new file mode 100644 index 00000000..8b66187f --- /dev/null +++ b/fonts/icons.svg @@ -0,0 +1,685 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/fonts/icons.ttf b/fonts/icons.ttf new file mode 100644 index 00000000..f221e50a Binary files /dev/null and b/fonts/icons.ttf differ diff --git a/fonts/icons.woff b/fonts/icons.woff new file mode 100644 index 00000000..6e7483cf Binary files /dev/null and b/fonts/icons.woff differ diff --git a/fonts/icons.woff2 b/fonts/icons.woff2 new file mode 100644 index 00000000..7eb74fd1 Binary files /dev/null and b/fonts/icons.woff2 differ diff --git a/fuse.min.js b/fuse.min.js new file mode 100644 index 00000000..32116128 --- /dev/null +++ b/fuse.min.js @@ -0,0 +1,20 @@ +/** + * @license + * Fuse - Lightweight fuzzy-search + * + * Copyright (c) 2012-2016 Kirollos Risk . + * All Rights Reserved. Apache Software License 2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License") + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +!function(t){"use strict";function e(){console.log.apply(console,arguments)}function s(t,e){var s;this.list=t,this.options=e=e||{};for(s in r)r.hasOwnProperty(s)&&("boolean"==typeof r[s]?this.options[s]=s in e?e[s]:r[s]:this.options[s]=e[s]||r[s])}function n(t,e,s){var o,r,h,a,c,p;if(e){if(h=e.indexOf("."),-1!==h?(o=e.slice(0,h),r=e.slice(h+1)):o=e,a=t[o],null!==a&&void 0!==a)if(r||"string"!=typeof a&&"number"!=typeof a)if(i(a))for(c=0,p=a.length;p>c;c++)n(a[c],r,s);else r&&n(a,r,s);else s.push(a)}else s.push(t);return s}function i(t){return"[object Array]"===Object.prototype.toString.call(t)}function o(t,e){e=e||{},this.options=e,this.options.location=e.location||o.defaultOptions.location,this.options.distance="distance"in e?e.distance:o.defaultOptions.distance,this.options.threshold="threshold"in e?e.threshold:o.defaultOptions.threshold,this.options.maxPatternLength=e.maxPatternLength||o.defaultOptions.maxPatternLength,this.pattern=e.caseSensitive?t:t.toLowerCase(),this.patternLen=t.length,this.patternLen<=this.options.maxPatternLength&&(this.matchmask=1<i;i++)this.tokenSearchers.push(new s(n[i],t));this.fullSeacher=new s(e,t)},s.prototype._startSearch=function(){var t,e,s,n,i=this.options,o=i.getFn,r=this.list,h=r.length,a=this.options.keys,c=a.length,p=null;if("string"==typeof r[0])for(s=0;h>s;s++)this._analyze("",r[s],s,s);else for(this._keyMap={},s=0;h>s;s++)for(p=r[s],n=0;c>n;n++){if(t=a[n],"string"!=typeof t){if(e=1-t.weight||1,this._keyMap[t.name]={weight:e},t.weight<=0||t.weight>1)throw new Error("Key weight has to be > 0 and <= 1");t=t.name}else this._keyMap[t]={weight:1};this._analyze(t,o(p,t,[]),p,s)}},s.prototype._analyze=function(t,s,n,o){var r,h,a,c,p,l,u,f,d,g,m,y,v,k,S,b=this.options,M=!1;if(void 0!==s&&null!==s){h=[];var _=0;if("string"==typeof s){if(r=s.split(b.tokenSeparator),b.verbose&&e("---------\nKey:",t),this.options.tokenize){for(k=0;kk;k++)c+=h[k];c/=l,b.verbose&&e("Token score average:",c)}u=this.fullSeacher.search(s),b.verbose&&e("Full text score:",u.score),p=u.score,void 0!==c&&(p=(p+c)/2),b.verbose&&e("Score average:",p),v=this.options.tokenize&&this.options.matchAllTokens?_>=this.tokenSearchers.length:!0,b.verbose&&e("Check Matches",v),(M||u.isMatch)&&v&&(a=this.resultMap[o],a?a.output.push({key:t,score:p,matchedIndices:u.matchedIndices}):(this.resultMap[o]={item:n,output:[{key:t,score:p,matchedIndices:u.matchedIndices}]},this.results.push(this.resultMap[o])))}else if(i(s))for(k=0;ks;s++)r=i[s].score,h=p?p[i[s].key].weight:1,c=r*h,1!==h?a=Math.min(a,c):(n+=c,i[s].nScore=c);1===a?l[t].score=n/o:l[t].score=a,this.options.verbose&&e(l[t])}},s.prototype._sort=function(){var t=this.options;t.shouldSort&&(t.verbose&&e("\n\nSorting...."),this.results.sort(t.sortFn))},s.prototype._format=function(){var t,s,n,i,o,r=this.options,h=r.getFn,a=[],c=this.results,p=r.include;for(r.verbose&&e("\n\nOutput:\n\n",c),i=r.id?function(t){c[t].item=h(c[t].item,r.id,[])[0]}:function(){},o=function(t){var e,s,n,i,o,r=c[t];if(p.length>0){if(e={item:r.item},-1!==p.indexOf("matches"))for(n=r.output,e.matches=[],s=0;ss;s++)i(s),t=o(s),a.push(t);return a},o.defaultOptions={location:0,distance:100,threshold:.6,maxPatternLength:32},o.prototype._calculatePatternAlphabet=function(){var t={},e=0;for(e=0;eL.maxPatternLength){if(v=t.match(new RegExp(this.pattern.replace(L.tokenSeparator,"|"))),k=!!v)for(b=[],e=0,M=v.length;M>e;e++)_=v[e],b.push([t.indexOf(_),_.length-1]);return{isMatch:k,score:k?.5:1,matchedIndices:b}}for(i=L.findAllMatches,o=L.location,n=t.length,r=L.threshold,h=t.indexOf(this.pattern,o),S=[],e=0;n>e;e++)S[e]=0;for(-1!=h&&(r=Math.min(this._bitapScore(0,h),r),h=t.lastIndexOf(this.pattern,o+this.patternLen),-1!=h&&(r=Math.min(this._bitapScore(0,h),r))),h=-1,m=1,y=[],p=this.patternLen+n,e=0;ea;)this._bitapScore(e,o+c)<=r?a=c:p=c,c=Math.floor((p-a)/2+a);for(p=c,l=Math.max(1,o-c+1),u=i?n:Math.min(o+c,n)+this.patternLen,f=Array(u+2),f[u+1]=(1<=l;s--)if(g=this.patternAlphabet[t.charAt(s-1)],g&&(S[s-1]=1),0===e?f[s]=(f[s+1]<<1|1)&g:f[s]=(f[s+1]<<1|1)&g|((d[s+1]|d[s])<<1|1)|d[s+1],f[s]&this.matchmask&&(m=this._bitapScore(e,s-1),r>=m)){if(r=m,h=s-1,y.push(h),!(h>o))break;l=Math.max(1,2*o-h)}if(this._bitapScore(e+1,o)>r)break;d=f}return b=this._getMatchedIndices(S),{isMatch:h>=0,score:0===m?.001:m,matchedIndices:b}},o.prototype._getMatchedIndices=function(t){for(var e,s=[],n=-1,i=-1,o=0,r=t.length;r>o;o++)e=t[o],e&&-1===n?n=o:e||-1===n||(i=o-1,i-n+1>=this.options.minMatchCharLength&&s.push([n,i]),n=-1);return t[o-1]&&o-1-n+1>=this.options.minMatchCharLength&&s.push([n,o-1]),s},"object"==typeof exports?module.exports=s:"function"==typeof define&&define.amd?define(function(){return s}):t.Fuse=s}(this); \ No newline at end of file diff --git a/highlight.js/highlight.pack.js b/highlight.js/highlight.pack.js new file mode 100644 index 00000000..84bc7c68 --- /dev/null +++ b/highlight.js/highlight.pack.js @@ -0,0 +1,2 @@ +/*! highlight.js v9.7.0 | BSD3 License | git.io/hljslicense */ +!function(e){var n="object"==typeof window&&window||"object"==typeof self&&self;"undefined"!=typeof exports?e(exports):n&&(n.hljs=e({}),"function"==typeof define&&define.amd&&define([],function(){return n.hljs}))}(function(e){function n(e){return e.replace(/[&<>]/gm,function(e){return I[e]})}function t(e){return e.nodeName.toLowerCase()}function r(e,n){var t=e&&e.exec(n);return t&&0===t.index}function a(e){return k.test(e)}function i(e){var n,t,r,i,o=e.className+" ";if(o+=e.parentNode?e.parentNode.className:"",t=B.exec(o))return R(t[1])?t[1]:"no-highlight";for(o=o.split(/\s+/),n=0,r=o.length;r>n;n++)if(i=o[n],a(i)||R(i))return i}function o(e,n){var t,r={};for(t in e)r[t]=e[t];if(n)for(t in n)r[t]=n[t];return r}function u(e){var n=[];return function r(e,a){for(var i=e.firstChild;i;i=i.nextSibling)3===i.nodeType?a+=i.nodeValue.length:1===i.nodeType&&(n.push({event:"start",offset:a,node:i}),a=r(i,a),t(i).match(/br|hr|img|input/)||n.push({event:"stop",offset:a,node:i}));return a}(e,0),n}function c(e,r,a){function i(){return e.length&&r.length?e[0].offset!==r[0].offset?e[0].offset"}function u(e){l+=""}function c(e){("start"===e.event?o:u)(e.node)}for(var s=0,l="",f=[];e.length||r.length;){var g=i();if(l+=n(a.substr(s,g[0].offset-s)),s=g[0].offset,g===e){f.reverse().forEach(u);do c(g.splice(0,1)[0]),g=i();while(g===e&&g.length&&g[0].offset===s);f.reverse().forEach(o)}else"start"===g[0].event?f.push(g[0].node):f.pop(),c(g.splice(0,1)[0])}return l+n(a.substr(s))}function s(e){function n(e){return e&&e.source||e}function t(t,r){return new RegExp(n(t),"m"+(e.cI?"i":"")+(r?"g":""))}function r(a,i){if(!a.compiled){if(a.compiled=!0,a.k=a.k||a.bK,a.k){var u={},c=function(n,t){e.cI&&(t=t.toLowerCase()),t.split(" ").forEach(function(e){var t=e.split("|");u[t[0]]=[n,t[1]?Number(t[1]):1]})};"string"==typeof a.k?c("keyword",a.k):E(a.k).forEach(function(e){c(e,a.k[e])}),a.k=u}a.lR=t(a.l||/\w+/,!0),i&&(a.bK&&(a.b="\\b("+a.bK.split(" ").join("|")+")\\b"),a.b||(a.b=/\B|\b/),a.bR=t(a.b),a.e||a.eW||(a.e=/\B|\b/),a.e&&(a.eR=t(a.e)),a.tE=n(a.e)||"",a.eW&&i.tE&&(a.tE+=(a.e?"|":"")+i.tE)),a.i&&(a.iR=t(a.i)),null==a.r&&(a.r=1),a.c||(a.c=[]);var s=[];a.c.forEach(function(e){e.v?e.v.forEach(function(n){s.push(o(e,n))}):s.push("self"===e?a:e)}),a.c=s,a.c.forEach(function(e){r(e,a)}),a.starts&&r(a.starts,i);var l=a.c.map(function(e){return e.bK?"\\.?("+e.b+")\\.?":e.b}).concat([a.tE,a.i]).map(n).filter(Boolean);a.t=l.length?t(l.join("|"),!0):{exec:function(){return null}}}}r(e)}function l(e,t,a,i){function o(e,n){var t,a;for(t=0,a=n.c.length;a>t;t++)if(r(n.c[t].bR,e))return n.c[t]}function u(e,n){if(r(e.eR,n)){for(;e.endsParent&&e.parent;)e=e.parent;return e}return e.eW?u(e.parent,n):void 0}function c(e,n){return!a&&r(n.iR,e)}function g(e,n){var t=N.cI?n[0].toLowerCase():n[0];return e.k.hasOwnProperty(t)&&e.k[t]}function h(e,n,t,r){var a=r?"":y.classPrefix,i='',i+n+o}function p(){var e,t,r,a;if(!E.k)return n(B);for(a="",t=0,E.lR.lastIndex=0,r=E.lR.exec(B);r;)a+=n(B.substr(t,r.index-t)),e=g(E,r),e?(M+=e[1],a+=h(e[0],n(r[0]))):a+=n(r[0]),t=E.lR.lastIndex,r=E.lR.exec(B);return a+n(B.substr(t))}function d(){var e="string"==typeof E.sL;if(e&&!x[E.sL])return n(B);var t=e?l(E.sL,B,!0,L[E.sL]):f(B,E.sL.length?E.sL:void 0);return E.r>0&&(M+=t.r),e&&(L[E.sL]=t.top),h(t.language,t.value,!1,!0)}function b(){k+=null!=E.sL?d():p(),B=""}function v(e){k+=e.cN?h(e.cN,"",!0):"",E=Object.create(e,{parent:{value:E}})}function m(e,n){if(B+=e,null==n)return b(),0;var t=o(n,E);if(t)return t.skip?B+=n:(t.eB&&(B+=n),b(),t.rB||t.eB||(B=n)),v(t,n),t.rB?0:n.length;var r=u(E,n);if(r){var a=E;a.skip?B+=n:(a.rE||a.eE||(B+=n),b(),a.eE&&(B=n));do E.cN&&(k+=C),E.skip||(M+=E.r),E=E.parent;while(E!==r.parent);return r.starts&&v(r.starts,""),a.rE?0:n.length}if(c(n,E))throw new Error('Illegal lexeme "'+n+'" for mode "'+(E.cN||"")+'"');return B+=n,n.length||1}var N=R(e);if(!N)throw new Error('Unknown language: "'+e+'"');s(N);var w,E=i||N,L={},k="";for(w=E;w!==N;w=w.parent)w.cN&&(k=h(w.cN,"",!0)+k);var B="",M=0;try{for(var I,j,O=0;;){if(E.t.lastIndex=O,I=E.t.exec(t),!I)break;j=m(t.substr(O,I.index-O),I[0]),O=I.index+j}for(m(t.substr(O)),w=E;w.parent;w=w.parent)w.cN&&(k+=C);return{r:M,value:k,language:e,top:E}}catch(T){if(T.message&&-1!==T.message.indexOf("Illegal"))return{r:0,value:n(t)};throw T}}function f(e,t){t=t||y.languages||E(x);var r={r:0,value:n(e)},a=r;return t.filter(R).forEach(function(n){var t=l(n,e,!1);t.language=n,t.r>a.r&&(a=t),t.r>r.r&&(a=r,r=t)}),a.language&&(r.second_best=a),r}function g(e){return y.tabReplace||y.useBR?e.replace(M,function(e,n){return y.useBR&&"\n"===e?"
":y.tabReplace?n.replace(/\t/g,y.tabReplace):void 0}):e}function h(e,n,t){var r=n?L[n]:t,a=[e.trim()];return e.match(/\bhljs\b/)||a.push("hljs"),-1===e.indexOf(r)&&a.push(r),a.join(" ").trim()}function p(e){var n,t,r,o,s,p=i(e);a(p)||(y.useBR?(n=document.createElementNS("http://www.w3.org/1999/xhtml","div"),n.innerHTML=e.innerHTML.replace(/\n/g,"").replace(//g,"\n")):n=e,s=n.textContent,r=p?l(p,s,!0):f(s),t=u(n),t.length&&(o=document.createElementNS("http://www.w3.org/1999/xhtml","div"),o.innerHTML=r.value,r.value=c(t,u(o),s)),r.value=g(r.value),e.innerHTML=r.value,e.className=h(e.className,p,r.language),e.result={language:r.language,re:r.r},r.second_best&&(e.second_best={language:r.second_best.language,re:r.second_best.r}))}function d(e){y=o(y,e)}function b(){if(!b.called){b.called=!0;var e=document.querySelectorAll("pre code");w.forEach.call(e,p)}}function v(){addEventListener("DOMContentLoaded",b,!1),addEventListener("load",b,!1)}function m(n,t){var r=x[n]=t(e);r.aliases&&r.aliases.forEach(function(e){L[e]=n})}function N(){return E(x)}function R(e){return e=(e||"").toLowerCase(),x[e]||x[L[e]]}var w=[],E=Object.keys,x={},L={},k=/^(no-?highlight|plain|text)$/i,B=/\blang(?:uage)?-([\w-]+)\b/i,M=/((^(<[^>]+>|\t|)+|(?:\n)))/gm,C="
",y={classPrefix:"hljs-",tabReplace:null,useBR:!1,languages:void 0},I={"&":"&","<":"<",">":">"};return e.highlight=l,e.highlightAuto=f,e.fixMarkup=g,e.highlightBlock=p,e.configure=d,e.initHighlighting=b,e.initHighlightingOnLoad=v,e.registerLanguage=m,e.listLanguages=N,e.getLanguage=R,e.inherit=o,e.IR="[a-zA-Z]\\w*",e.UIR="[a-zA-Z_]\\w*",e.NR="\\b\\d+(\\.\\d+)?",e.CNR="(-?)(\\b0[xX][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?|\\.\\d+)([eE][-+]?\\d+)?)",e.BNR="\\b(0b[01]+)",e.RSR="!|!=|!==|%|%=|&|&&|&=|\\*|\\*=|\\+|\\+=|,|-|-=|/=|/|:|;|<<|<<=|<=|<|===|==|=|>>>=|>>=|>=|>>>|>>|>|\\?|\\[|\\{|\\(|\\^|\\^=|\\||\\|=|\\|\\||~",e.BE={b:"\\\\[\\s\\S]",r:0},e.ASM={cN:"string",b:"'",e:"'",i:"\\n",c:[e.BE]},e.QSM={cN:"string",b:'"',e:'"',i:"\\n",c:[e.BE]},e.PWM={b:/\b(a|an|the|are|I'm|isn't|don't|doesn't|won't|but|just|should|pretty|simply|enough|gonna|going|wtf|so|such|will|you|your|like)\b/},e.C=function(n,t,r){var a=e.inherit({cN:"comment",b:n,e:t,c:[]},r||{});return a.c.push(e.PWM),a.c.push({cN:"doctag",b:"(?:TODO|FIXME|NOTE|BUG|XXX):",r:0}),a},e.CLCM=e.C("//","$"),e.CBCM=e.C("/\\*","\\*/"),e.HCM=e.C("#","$"),e.NM={cN:"number",b:e.NR,r:0},e.CNM={cN:"number",b:e.CNR,r:0},e.BNM={cN:"number",b:e.BNR,r:0},e.CSSNM={cN:"number",b:e.NR+"(%|em|ex|ch|rem|vw|vh|vmin|vmax|cm|mm|in|pt|pc|px|deg|grad|rad|turn|s|ms|Hz|kHz|dpi|dpcm|dppx)?",r:0},e.RM={cN:"regexp",b:/\//,e:/\/[gimuy]*/,i:/\n/,c:[e.BE,{b:/\[/,e:/\]/,r:0,c:[e.BE]}]},e.TM={cN:"title",b:e.IR,r:0},e.UTM={cN:"title",b:e.UIR,r:0},e.METHOD_GUARD={b:"\\.\\s*"+e.UIR,r:0},e});hljs.registerLanguage("xml",function(s){var e="[A-Za-z0-9\\._:-]+",t={eW:!0,i:/`]+/}]}]}]};return{aliases:["html","xhtml","rss","atom","xjb","xsd","xsl","plist"],cI:!0,c:[{cN:"meta",b:"",r:10,c:[{b:"\\[",e:"\\]"}]},s.C("",{r:10}),{b:"<\\!\\[CDATA\\[",e:"\\]\\]>",r:10},{b:/<\?(php)?/,e:/\?>/,sL:"php",c:[{b:"/\\*",e:"\\*/",skip:!0}]},{cN:"tag",b:"|$)",e:">",k:{name:"style"},c:[t],starts:{e:"",rE:!0,sL:["css","xml"]}},{cN:"tag",b:"|$)",e:">",k:{name:"script"},c:[t],starts:{e:"",rE:!0,sL:["actionscript","javascript","handlebars","xml"]}},{cN:"meta",v:[{b:/<\?xml/,e:/\?>/,r:10},{b:/<\?\w+/,e:/\?>/}]},{cN:"tag",b:"",c:[{cN:"name",b:/[^\/><\s]+/,r:0},t]}]}});hljs.registerLanguage("markdown",function(e){return{aliases:["md","mkdown","mkd"],c:[{cN:"section",v:[{b:"^#{1,6}",e:"$"},{b:"^.+?\\n[=-]{2,}$"}]},{b:"<",e:">",sL:"xml",r:0},{cN:"bullet",b:"^([*+-]|(\\d+\\.))\\s+"},{cN:"strong",b:"[*_]{2}.+?[*_]{2}"},{cN:"emphasis",v:[{b:"\\*.+?\\*"},{b:"_.+?_",r:0}]},{cN:"quote",b:"^>\\s+",e:"$"},{cN:"code",v:[{b:"^```w*s*$",e:"^```s*$"},{b:"`.+?`"},{b:"^( {4}| )",e:"$",r:0}]},{b:"^[-\\*]{3,}",e:"$"},{b:"\\[.+?\\][\\(\\[].*?[\\)\\]]",rB:!0,c:[{cN:"string",b:"\\[",e:"\\]",eB:!0,rE:!0,r:0},{cN:"link",b:"\\]\\(",e:"\\)",eB:!0,eE:!0},{cN:"symbol",b:"\\]\\[",e:"\\]",eB:!0,eE:!0}],r:10},{b:/^\[[^\n]+\]:/,rB:!0,c:[{cN:"symbol",b:/\[/,e:/\]/,eB:!0,eE:!0},{cN:"link",b:/:\s*/,e:/$/,eB:!0}]}]}});hljs.registerLanguage("javascript",function(e){var r="[A-Za-z$_][0-9A-Za-z$_]*",t={keyword:"in of if for while finally var new function do return void else break catch instanceof with throw case default try this switch continue typeof delete let yield const export super debugger as async await static import from as",literal:"true false null undefined NaN Infinity",built_in:"eval isFinite isNaN parseFloat parseInt decodeURI decodeURIComponent encodeURI encodeURIComponent escape unescape Object Function Boolean Error EvalError InternalError RangeError ReferenceError StopIteration SyntaxError TypeError URIError Number Math Date String RegExp Array Float32Array Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array Uint8Array Uint8ClampedArray ArrayBuffer DataView JSON Intl arguments require module console window document Symbol Set Map WeakSet WeakMap Proxy Reflect Promise"},a={cN:"number",v:[{b:"\\b(0[bB][01]+)"},{b:"\\b(0[oO][0-7]+)"},{b:e.CNR}],r:0},n={cN:"subst",b:"\\$\\{",e:"\\}",k:t,c:[]},c={cN:"string",b:"`",e:"`",c:[e.BE,n]};n.c=[e.ASM,e.QSM,c,a,e.RM];var s=n.c.concat([e.CBCM,e.CLCM]);return{aliases:["js","jsx"],k:t,c:[{cN:"meta",r:10,b:/^\s*['"]use (strict|asm)['"]/},{cN:"meta",b:/^#!/,e:/$/},e.ASM,e.QSM,c,e.CLCM,e.CBCM,a,{b:/[{,]\s*/,r:0,c:[{b:r+"\\s*:",rB:!0,r:0,c:[{cN:"attr",b:r,r:0}]}]},{b:"("+e.RSR+"|\\b(case|return|throw)\\b)\\s*",k:"return throw case",c:[e.CLCM,e.CBCM,e.RM,{cN:"function",b:"(\\(.*?\\)|"+r+")\\s*=>",rB:!0,e:"\\s*=>",c:[{cN:"params",v:[{b:r},{b:/\(\s*\)/},{b:/\(/,e:/\)/,eB:!0,eE:!0,k:t,c:s}]}]},{b://,sL:"xml",c:[{b:/<\w+\s*\/>/,skip:!0},{b:/<\w+/,e:/(\/\w+|\w+\/)>/,skip:!0,c:[{b:/<\w+\s*\/>/,skip:!0},"self"]}]}],r:0},{cN:"function",bK:"function",e:/\{/,eE:!0,c:[e.inherit(e.TM,{b:r}),{cN:"params",b:/\(/,e:/\)/,eB:!0,eE:!0,c:s}],i:/\[|%/},{b:/\$[(.]/},e.METHOD_GUARD,{cN:"class",bK:"class",e:/[{;=]/,eE:!0,i:/[:"\[\]]/,c:[{bK:"extends"},e.UTM]},{bK:"constructor",e:/\{/,eE:!0}],i:/#(?!!)/}});hljs.registerLanguage("typescript",function(e){var r={keyword:"in if for while finally var new function do return void else break catch instanceof with throw case default try this switch continue typeof delete let yield const class public private protected get set super static implements enum export import declare type namespace abstract",literal:"true false null undefined NaN Infinity",built_in:"eval isFinite isNaN parseFloat parseInt decodeURI decodeURIComponent encodeURI encodeURIComponent escape unescape Object Function Boolean Error EvalError InternalError RangeError ReferenceError StopIteration SyntaxError TypeError URIError Number Math Date String RegExp Array Float32Array Float64Array Int16Array Int32Array Int8Array Uint16Array Uint32Array Uint8Array Uint8ClampedArray ArrayBuffer DataView JSON Intl arguments require module console window document any number boolean string void"};return{aliases:["ts"],k:r,c:[{cN:"meta",b:/^\s*['"]use strict['"]/},e.ASM,e.QSM,{cN:"string",b:"`",e:"`",c:[e.BE,{cN:"subst",b:"\\$\\{",e:"\\}"}]},e.CLCM,e.CBCM,{cN:"number",v:[{b:"\\b(0[bB][01]+)"},{b:"\\b(0[oO][0-7]+)"},{b:e.CNR}],r:0},{b:"("+e.RSR+"|\\b(case|return|throw)\\b)\\s*",k:"return throw case",c:[e.CLCM,e.CBCM,e.RM],r:0},{cN:"function",b:"function",e:/[\{;]/,eE:!0,k:r,c:["self",e.inherit(e.TM,{b:/[A-Za-z$_][0-9A-Za-z$_]*/}),{cN:"params",b:/\(/,e:/\)/,eB:!0,eE:!0,k:r,c:[e.CLCM,e.CBCM],i:/["'\(]/}],i:/%/,r:0},{bK:"constructor",e:/\{/,eE:!0},{b:/module\./,k:{built_in:"module"},r:0},{bK:"module",e:/\{/,eE:!0},{bK:"interface",e:/\{/,eE:!0,k:"interface extends"},{b:/\$[(.]/},{b:"\\."+e.IR,r:0}]}}); \ No newline at end of file diff --git a/highlight.js/styles/vs.css b/highlight.js/styles/vs.css new file mode 100644 index 00000000..c5d07d31 --- /dev/null +++ b/highlight.js/styles/vs.css @@ -0,0 +1,68 @@ +/* + +Visual Studio-like style based on original C# coloring by Jason Diamond + +*/ +.hljs { + display: block; + overflow-x: auto; + padding: 0.5em; + background: white; + color: black; +} + +.hljs-comment, +.hljs-quote, +.hljs-variable { + color: #008000; +} + +.hljs-keyword, +.hljs-selector-tag, +.hljs-built_in, +.hljs-name, +.hljs-tag { + color: #00f; +} + +.hljs-string, +.hljs-title, +.hljs-section, +.hljs-attribute, +.hljs-literal, +.hljs-template-tag, +.hljs-template-variable, +.hljs-type, +.hljs-addition { + color: #a31515; +} + +.hljs-deletion, +.hljs-selector-attr, +.hljs-selector-pseudo, +.hljs-meta { + color: #2b91af; +} + +.hljs-doctag { + color: #808080; +} + +.hljs-attr { + color: #f00; +} + +.hljs-symbol, +.hljs-bullet, +.hljs-link { + color: #00b0e8; +} + + +.hljs-emphasis { + font-style: italic; +} + +.hljs-strong { + font-weight: bold; +} diff --git a/icons.css b/icons.css new file mode 100644 index 00000000..0bf3dd3b --- /dev/null +++ b/icons.css @@ -0,0 +1,61 @@ +@font-face { + font-family: "xicon"; + src: url(data:application/x-font-woff;charset=utf-8;base64,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) format("woff"); +} + +.xicon { + +} + +.xicon:before { + font-family: xicon !important; + font-style: normal; + font-weight: normal !important; + vertical-align: top; +} + +.xicon.bug:before { + content: "\f101" !important; +} +.xicon.chip:before { + content: "\f102" !important; +} +.xicon.cloudupload:before { + content: "\f103" !important; +} +.xicon.color:before { + content: "\f104" !important; +} +.xicon.commandline:before { + content: "\f105" !important; +} +.xicon.ksempty:before { + content: "\f106" !important; +} +.xicon.ksfull:before { + content: "\f107" !important; +} +.xicon.microchip:before { + content: "\f108" !important; +} +.xicon.plug:before { + content: "\f109" !important; +} +.xicon.stepinto:before { + content: "\f10a" !important; +} +.xicon.stepintolight:before { + content: "\f10b" !important; +} +.xicon.stepout:before { + content: "\f10c" !important; +} +.xicon.stepover:before { + content: "\f10d" !important; +} +.xicon.stepoverlight:before { + content: "\f10e" !important; +} +.xicon.undo:before { + content: "\f10f" !important; +} diff --git a/images/microbit.bw.svg b/images/microbit.bw.svg new file mode 100644 index 00000000..7b878644 --- /dev/null +++ b/images/microbit.bw.svg @@ -0,0 +1,94 @@ +(0,0)(1,0)(2,0)(3,0)(4,0)(0,1)(1,1)(2,1)(3,1)(4,1)(0,2)(1,2)(2,2)(3,2)(4,2)(0,3)(1,3)(2,3)(3,3)(4,3)(0,4)(1,4)(2,4)(3,4)(4,4)P0, ANALOG INP1, ANALOG INP2, ANALOG INP3, ANALOG IN, LED Col 1P4, ANALOG IN, LED Col 2P5, BUTTON AP6, LED Col 9P7, LED Col 8P8P9, LED Col 7P10, ANALOG IN, LED Col 3P11, BUTTON BP12, RESERVED ACCESSIBILITYP13, SPI - SCKP14, SPI - MISOP15, SPI - MOSIP16, SPI - Chip SelectP17, +3v3P18, +3v3P19, I2C - SCLP20, I2C - SDAGNDGND+3v3GNDAB \ No newline at end of file diff --git a/images/newblock.png b/images/newblock.png new file mode 100644 index 00000000..5910d886 Binary files /dev/null and b/images/newblock.png differ diff --git a/images/newblock2.png b/images/newblock2.png new file mode 100644 index 00000000..da9bbf7b Binary files /dev/null and b/images/newblock2.png differ diff --git a/images/newkodu.png b/images/newkodu.png new file mode 100644 index 00000000..48717fdd Binary files /dev/null and b/images/newkodu.png differ diff --git a/images/newtypescript.png b/images/newtypescript.png new file mode 100644 index 00000000..972d293b Binary files /dev/null and b/images/newtypescript.png differ diff --git a/images/newtypescript2.png b/images/newtypescript2.png new file mode 100644 index 00000000..63205569 Binary files /dev/null and b/images/newtypescript2.png differ diff --git a/images/newvisualstudiocode.png b/images/newvisualstudiocode.png new file mode 100644 index 00000000..7d9db6d6 Binary files /dev/null and b/images/newvisualstudiocode.png differ diff --git a/index.html b/index.html index eda0af74..2d34ea82 100644 --- a/index.html +++ b/index.html @@ -1 +1,163 @@ -Under construction. \ No newline at end of file + + + + + + + + + +calliope mini - Blocks / Javascript editor + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+
+ +
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/jquery.js b/jquery.js new file mode 100644 index 00000000..5c3c456a --- /dev/null +++ b/jquery.js @@ -0,0 +1,9814 @@ +/*! + * jQuery JavaScript Library v2.2.4 + * http://jquery.com/ + * + * Includes Sizzle.js + * http://sizzlejs.com/ + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license + * http://jquery.org/license + * + * Date: 2016-05-20T17:23Z + */ + +(function( global, factory ) { + + if ( typeof module === "object" && typeof module.exports === "object" ) { + // For CommonJS and CommonJS-like environments where a proper `window` + // is present, execute the factory and get jQuery. + // For environments that do not have a `window` with a `document` + // (such as Node.js), expose a factory as module.exports. + // This accentuates the need for the creation of a real `window`. + // e.g. var jQuery = require("jquery")(window); + // See ticket #14549 for more info. + module.exports = global.document ? + factory( global, true ) : + function( w ) { + if ( !w.document ) { + throw new Error( "jQuery requires a window with a document" ); + } + return factory( w ); + }; + } else { + factory( global ); + } + +// Pass this if window is not defined yet +}(typeof window !== "undefined" ? window : this, function( window, noGlobal ) { + +// Support: Firefox 18+ +// Can't be in strict mode, several libs including ASP.NET trace +// the stack via arguments.caller.callee and Firefox dies if +// you try to trace through "use strict" call chains. (#13335) +//"use strict"; +var arr = []; + +var document = window.document; + +var slice = arr.slice; + +var concat = arr.concat; + +var push = arr.push; + +var indexOf = arr.indexOf; + +var class2type = {}; + +var toString = class2type.toString; + +var hasOwn = class2type.hasOwnProperty; + +var support = {}; + + + +var + version = "2.2.4", + + // Define a local copy of jQuery + jQuery = function( selector, context ) { + + // The jQuery object is actually just the init constructor 'enhanced' + // Need init if jQuery is called (just allow error to be thrown if not included) + return new jQuery.fn.init( selector, context ); + }, + + // Support: Android<4.1 + // Make sure we trim BOM and NBSP + rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, + + // Matches dashed string for camelizing + rmsPrefix = /^-ms-/, + rdashAlpha = /-([\da-z])/gi, + + // Used by jQuery.camelCase as callback to replace() + fcamelCase = function( all, letter ) { + return letter.toUpperCase(); + }; + +jQuery.fn = jQuery.prototype = { + + // The current version of jQuery being used + jquery: version, + + constructor: jQuery, + + // Start with an empty selector + selector: "", + + // The default length of a jQuery object is 0 + length: 0, + + toArray: function() { + return slice.call( this ); + }, + + // Get the Nth element in the matched element set OR + // Get the whole matched element set as a clean array + get: function( num ) { + return num != null ? + + // Return just the one element from the set + ( num < 0 ? this[ num + this.length ] : this[ num ] ) : + + // Return all the elements in a clean array + slice.call( this ); + }, + + // Take an array of elements and push it onto the stack + // (returning the new matched element set) + pushStack: function( elems ) { + + // Build a new jQuery matched element set + var ret = jQuery.merge( this.constructor(), elems ); + + // Add the old object onto the stack (as a reference) + ret.prevObject = this; + ret.context = this.context; + + // Return the newly-formed element set + return ret; + }, + + // Execute a callback for every element in the matched set. + each: function( callback ) { + return jQuery.each( this, callback ); + }, + + map: function( callback ) { + return this.pushStack( jQuery.map( this, function( elem, i ) { + return callback.call( elem, i, elem ); + } ) ); + }, + + slice: function() { + return this.pushStack( slice.apply( this, arguments ) ); + }, + + first: function() { + return this.eq( 0 ); + }, + + last: function() { + return this.eq( -1 ); + }, + + eq: function( i ) { + var len = this.length, + j = +i + ( i < 0 ? len : 0 ); + return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] ); + }, + + end: function() { + return this.prevObject || this.constructor(); + }, + + // For internal use only. + // Behaves like an Array's method, not like a jQuery method. + push: push, + sort: arr.sort, + splice: arr.splice +}; + +jQuery.extend = jQuery.fn.extend = function() { + var options, name, src, copy, copyIsArray, clone, + target = arguments[ 0 ] || {}, + i = 1, + length = arguments.length, + deep = false; + + // Handle a deep copy situation + if ( typeof target === "boolean" ) { + deep = target; + + // Skip the boolean and the target + target = arguments[ i ] || {}; + i++; + } + + // Handle case when target is a string or something (possible in deep copy) + if ( typeof target !== "object" && !jQuery.isFunction( target ) ) { + target = {}; + } + + // Extend jQuery itself if only one argument is passed + if ( i === length ) { + target = this; + i--; + } + + for ( ; i < length; i++ ) { + + // Only deal with non-null/undefined values + if ( ( options = arguments[ i ] ) != null ) { + + // Extend the base object + for ( name in options ) { + src = target[ name ]; + copy = options[ name ]; + + // Prevent never-ending loop + if ( target === copy ) { + continue; + } + + // Recurse if we're merging plain objects or arrays + if ( deep && copy && ( jQuery.isPlainObject( copy ) || + ( copyIsArray = jQuery.isArray( copy ) ) ) ) { + + if ( copyIsArray ) { + copyIsArray = false; + clone = src && jQuery.isArray( src ) ? src : []; + + } else { + clone = src && jQuery.isPlainObject( src ) ? src : {}; + } + + // Never move original objects, clone them + target[ name ] = jQuery.extend( deep, clone, copy ); + + // Don't bring in undefined values + } else if ( copy !== undefined ) { + target[ name ] = copy; + } + } + } + } + + // Return the modified object + return target; +}; + +jQuery.extend( { + + // Unique for each copy of jQuery on the page + expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ), + + // Assume jQuery is ready without the ready module + isReady: true, + + error: function( msg ) { + throw new Error( msg ); + }, + + noop: function() {}, + + isFunction: function( obj ) { + return jQuery.type( obj ) === "function"; + }, + + isArray: Array.isArray, + + isWindow: function( obj ) { + return obj != null && obj === obj.window; + }, + + isNumeric: function( obj ) { + + // parseFloat NaNs numeric-cast false positives (null|true|false|"") + // ...but misinterprets leading-number strings, particularly hex literals ("0x...") + // subtraction forces infinities to NaN + // adding 1 corrects loss of precision from parseFloat (#15100) + var realStringObj = obj && obj.toString(); + return !jQuery.isArray( obj ) && ( realStringObj - parseFloat( realStringObj ) + 1 ) >= 0; + }, + + isPlainObject: function( obj ) { + var key; + + // Not plain objects: + // - Any object or value whose internal [[Class]] property is not "[object Object]" + // - DOM nodes + // - window + if ( jQuery.type( obj ) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) { + return false; + } + + // Not own constructor property must be Object + if ( obj.constructor && + !hasOwn.call( obj, "constructor" ) && + !hasOwn.call( obj.constructor.prototype || {}, "isPrototypeOf" ) ) { + return false; + } + + // Own properties are enumerated firstly, so to speed up, + // if last one is own, then all properties are own + for ( key in obj ) {} + + return key === undefined || hasOwn.call( obj, key ); + }, + + isEmptyObject: function( obj ) { + var name; + for ( name in obj ) { + return false; + } + return true; + }, + + type: function( obj ) { + if ( obj == null ) { + return obj + ""; + } + + // Support: Android<4.0, iOS<6 (functionish RegExp) + return typeof obj === "object" || typeof obj === "function" ? + class2type[ toString.call( obj ) ] || "object" : + typeof obj; + }, + + // Evaluates a script in a global context + globalEval: function( code ) { + var script, + indirect = eval; + + code = jQuery.trim( code ); + + if ( code ) { + + // If the code includes a valid, prologue position + // strict mode pragma, execute code by injecting a + // script tag into the document. + if ( code.indexOf( "use strict" ) === 1 ) { + script = document.createElement( "script" ); + script.text = code; + document.head.appendChild( script ).parentNode.removeChild( script ); + } else { + + // Otherwise, avoid the DOM node creation, insertion + // and removal by using an indirect global eval + + indirect( code ); + } + } + }, + + // Convert dashed to camelCase; used by the css and data modules + // Support: IE9-11+ + // Microsoft forgot to hump their vendor prefix (#9572) + camelCase: function( string ) { + return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); + }, + + nodeName: function( elem, name ) { + return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); + }, + + each: function( obj, callback ) { + var length, i = 0; + + if ( isArrayLike( obj ) ) { + length = obj.length; + for ( ; i < length; i++ ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } else { + for ( i in obj ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } + + return obj; + }, + + // Support: Android<4.1 + trim: function( text ) { + return text == null ? + "" : + ( text + "" ).replace( rtrim, "" ); + }, + + // results is for internal usage only + makeArray: function( arr, results ) { + var ret = results || []; + + if ( arr != null ) { + if ( isArrayLike( Object( arr ) ) ) { + jQuery.merge( ret, + typeof arr === "string" ? + [ arr ] : arr + ); + } else { + push.call( ret, arr ); + } + } + + return ret; + }, + + inArray: function( elem, arr, i ) { + return arr == null ? -1 : indexOf.call( arr, elem, i ); + }, + + merge: function( first, second ) { + var len = +second.length, + j = 0, + i = first.length; + + for ( ; j < len; j++ ) { + first[ i++ ] = second[ j ]; + } + + first.length = i; + + return first; + }, + + grep: function( elems, callback, invert ) { + var callbackInverse, + matches = [], + i = 0, + length = elems.length, + callbackExpect = !invert; + + // Go through the array, only saving the items + // that pass the validator function + for ( ; i < length; i++ ) { + callbackInverse = !callback( elems[ i ], i ); + if ( callbackInverse !== callbackExpect ) { + matches.push( elems[ i ] ); + } + } + + return matches; + }, + + // arg is for internal usage only + map: function( elems, callback, arg ) { + var length, value, + i = 0, + ret = []; + + // Go through the array, translating each of the items to their new values + if ( isArrayLike( elems ) ) { + length = elems.length; + for ( ; i < length; i++ ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + + // Go through every key on the object, + } else { + for ( i in elems ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + } + + // Flatten any nested arrays + return concat.apply( [], ret ); + }, + + // A global GUID counter for objects + guid: 1, + + // Bind a function to a context, optionally partially applying any + // arguments. + proxy: function( fn, context ) { + var tmp, args, proxy; + + if ( typeof context === "string" ) { + tmp = fn[ context ]; + context = fn; + fn = tmp; + } + + // Quick check to determine if target is callable, in the spec + // this throws a TypeError, but we will just return undefined. + if ( !jQuery.isFunction( fn ) ) { + return undefined; + } + + // Simulated bind + args = slice.call( arguments, 2 ); + proxy = function() { + return fn.apply( context || this, args.concat( slice.call( arguments ) ) ); + }; + + // Set the guid of unique handler to the same of original handler, so it can be removed + proxy.guid = fn.guid = fn.guid || jQuery.guid++; + + return proxy; + }, + + now: Date.now, + + // jQuery.support is not used in Core but other projects attach their + // properties to it so it needs to exist. + support: support +} ); + +// JSHint would error on this code due to the Symbol not being defined in ES5. +// Defining this global in .jshintrc would create a danger of using the global +// unguarded in another place, it seems safer to just disable JSHint for these +// three lines. +/* jshint ignore: start */ +if ( typeof Symbol === "function" ) { + jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ]; +} +/* jshint ignore: end */ + +// Populate the class2type map +jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ), +function( i, name ) { + class2type[ "[object " + name + "]" ] = name.toLowerCase(); +} ); + +function isArrayLike( obj ) { + + // Support: iOS 8.2 (not reproducible in simulator) + // `in` check used to prevent JIT error (gh-2145) + // hasOwn isn't used here due to false negatives + // regarding Nodelist length in IE + var length = !!obj && "length" in obj && obj.length, + type = jQuery.type( obj ); + + if ( type === "function" || jQuery.isWindow( obj ) ) { + return false; + } + + return type === "array" || length === 0 || + typeof length === "number" && length > 0 && ( length - 1 ) in obj; +} +var Sizzle = +/*! + * Sizzle CSS Selector Engine v2.2.1 + * http://sizzlejs.com/ + * + * Copyright jQuery Foundation and other contributors + * Released under the MIT license + * http://jquery.org/license + * + * Date: 2015-10-17 + */ +(function( window ) { + +var i, + support, + Expr, + getText, + isXML, + tokenize, + compile, + select, + outermostContext, + sortInput, + hasDuplicate, + + // Local document vars + setDocument, + document, + docElem, + documentIsHTML, + rbuggyQSA, + rbuggyMatches, + matches, + contains, + + // Instance-specific data + expando = "sizzle" + 1 * new Date(), + preferredDoc = window.document, + dirruns = 0, + done = 0, + classCache = createCache(), + tokenCache = createCache(), + compilerCache = createCache(), + sortOrder = function( a, b ) { + if ( a === b ) { + hasDuplicate = true; + } + return 0; + }, + + // General-purpose constants + MAX_NEGATIVE = 1 << 31, + + // Instance methods + hasOwn = ({}).hasOwnProperty, + arr = [], + pop = arr.pop, + push_native = arr.push, + push = arr.push, + slice = arr.slice, + // Use a stripped-down indexOf as it's faster than native + // http://jsperf.com/thor-indexof-vs-for/5 + indexOf = function( list, elem ) { + var i = 0, + len = list.length; + for ( ; i < len; i++ ) { + if ( list[i] === elem ) { + return i; + } + } + return -1; + }, + + booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped", + + // Regular expressions + + // http://www.w3.org/TR/css3-selectors/#whitespace + whitespace = "[\\x20\\t\\r\\n\\f]", + + // http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier + identifier = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+", + + // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors + attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace + + // Operator (capture 2) + "*([*^$|!~]?=)" + whitespace + + // "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]" + "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace + + "*\\]", + + pseudos = ":(" + identifier + ")(?:\\((" + + // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments: + // 1. quoted (capture 3; capture 4 or capture 5) + "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + + // 2. simple (capture 6) + "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" + + // 3. anything else (capture 2) + ".*" + + ")\\)|)", + + // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter + rwhitespace = new RegExp( whitespace + "+", "g" ), + rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ), + + rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), + rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ), + + rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*?)" + whitespace + "*\\]", "g" ), + + rpseudo = new RegExp( pseudos ), + ridentifier = new RegExp( "^" + identifier + "$" ), + + matchExpr = { + "ID": new RegExp( "^#(" + identifier + ")" ), + "CLASS": new RegExp( "^\\.(" + identifier + ")" ), + "TAG": new RegExp( "^(" + identifier + "|[*])" ), + "ATTR": new RegExp( "^" + attributes ), + "PSEUDO": new RegExp( "^" + pseudos ), + "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace + + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace + + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), + "bool": new RegExp( "^(?:" + booleans + ")$", "i" ), + // For use in libraries implementing .is() + // We use this for POS matching in `select` + "needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + + whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) + }, + + rinputs = /^(?:input|select|textarea|button)$/i, + rheader = /^h\d$/i, + + rnative = /^[^{]+\{\s*\[native \w/, + + // Easily-parseable/retrievable ID or TAG or CLASS selectors + rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, + + rsibling = /[+~]/, + rescape = /'|\\/g, + + // CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters + runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ), + funescape = function( _, escaped, escapedWhitespace ) { + var high = "0x" + escaped - 0x10000; + // NaN means non-codepoint + // Support: Firefox<24 + // Workaround erroneous numeric interpretation of +"0x" + return high !== high || escapedWhitespace ? + escaped : + high < 0 ? + // BMP codepoint + String.fromCharCode( high + 0x10000 ) : + // Supplemental Plane codepoint (surrogate pair) + String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); + }, + + // Used for iframes + // See setDocument() + // Removing the function wrapper causes a "Permission Denied" + // error in IE + unloadHandler = function() { + setDocument(); + }; + +// Optimize for push.apply( _, NodeList ) +try { + push.apply( + (arr = slice.call( preferredDoc.childNodes )), + preferredDoc.childNodes + ); + // Support: Android<4.0 + // Detect silently failing push.apply + arr[ preferredDoc.childNodes.length ].nodeType; +} catch ( e ) { + push = { apply: arr.length ? + + // Leverage slice if possible + function( target, els ) { + push_native.apply( target, slice.call(els) ); + } : + + // Support: IE<9 + // Otherwise append directly + function( target, els ) { + var j = target.length, + i = 0; + // Can't trust NodeList.length + while ( (target[j++] = els[i++]) ) {} + target.length = j - 1; + } + }; +} + +function Sizzle( selector, context, results, seed ) { + var m, i, elem, nid, nidselect, match, groups, newSelector, + newContext = context && context.ownerDocument, + + // nodeType defaults to 9, since context defaults to document + nodeType = context ? context.nodeType : 9; + + results = results || []; + + // Return early from calls with invalid selector or context + if ( typeof selector !== "string" || !selector || + nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) { + + return results; + } + + // Try to shortcut find operations (as opposed to filters) in HTML documents + if ( !seed ) { + + if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) { + setDocument( context ); + } + context = context || document; + + if ( documentIsHTML ) { + + // If the selector is sufficiently simple, try using a "get*By*" DOM method + // (excepting DocumentFragment context, where the methods don't exist) + if ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) { + + // ID selector + if ( (m = match[1]) ) { + + // Document context + if ( nodeType === 9 ) { + if ( (elem = context.getElementById( m )) ) { + + // Support: IE, Opera, Webkit + // TODO: identify versions + // getElementById can match elements by name instead of ID + if ( elem.id === m ) { + results.push( elem ); + return results; + } + } else { + return results; + } + + // Element context + } else { + + // Support: IE, Opera, Webkit + // TODO: identify versions + // getElementById can match elements by name instead of ID + if ( newContext && (elem = newContext.getElementById( m )) && + contains( context, elem ) && + elem.id === m ) { + + results.push( elem ); + return results; + } + } + + // Type selector + } else if ( match[2] ) { + push.apply( results, context.getElementsByTagName( selector ) ); + return results; + + // Class selector + } else if ( (m = match[3]) && support.getElementsByClassName && + context.getElementsByClassName ) { + + push.apply( results, context.getElementsByClassName( m ) ); + return results; + } + } + + // Take advantage of querySelectorAll + if ( support.qsa && + !compilerCache[ selector + " " ] && + (!rbuggyQSA || !rbuggyQSA.test( selector )) ) { + + if ( nodeType !== 1 ) { + newContext = context; + newSelector = selector; + + // qSA looks outside Element context, which is not what we want + // Thanks to Andrew Dupont for this workaround technique + // Support: IE <=8 + // Exclude object elements + } else if ( context.nodeName.toLowerCase() !== "object" ) { + + // Capture the context ID, setting it first if necessary + if ( (nid = context.getAttribute( "id" )) ) { + nid = nid.replace( rescape, "\\$&" ); + } else { + context.setAttribute( "id", (nid = expando) ); + } + + // Prefix every selector in the list + groups = tokenize( selector ); + i = groups.length; + nidselect = ridentifier.test( nid ) ? "#" + nid : "[id='" + nid + "']"; + while ( i-- ) { + groups[i] = nidselect + " " + toSelector( groups[i] ); + } + newSelector = groups.join( "," ); + + // Expand context for sibling selectors + newContext = rsibling.test( selector ) && testContext( context.parentNode ) || + context; + } + + if ( newSelector ) { + try { + push.apply( results, + newContext.querySelectorAll( newSelector ) + ); + return results; + } catch ( qsaError ) { + } finally { + if ( nid === expando ) { + context.removeAttribute( "id" ); + } + } + } + } + } + } + + // All others + return select( selector.replace( rtrim, "$1" ), context, results, seed ); +} + +/** + * Create key-value caches of limited size + * @returns {function(string, object)} Returns the Object data after storing it on itself with + * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) + * deleting the oldest entry + */ +function createCache() { + var keys = []; + + function cache( key, value ) { + // Use (key + " ") to avoid collision with native prototype properties (see Issue #157) + if ( keys.push( key + " " ) > Expr.cacheLength ) { + // Only keep the most recent entries + delete cache[ keys.shift() ]; + } + return (cache[ key + " " ] = value); + } + return cache; +} + +/** + * Mark a function for special use by Sizzle + * @param {Function} fn The function to mark + */ +function markFunction( fn ) { + fn[ expando ] = true; + return fn; +} + +/** + * Support testing using an element + * @param {Function} fn Passed the created div and expects a boolean result + */ +function assert( fn ) { + var div = document.createElement("div"); + + try { + return !!fn( div ); + } catch (e) { + return false; + } finally { + // Remove from its parent by default + if ( div.parentNode ) { + div.parentNode.removeChild( div ); + } + // release memory in IE + div = null; + } +} + +/** + * Adds the same handler for all of the specified attrs + * @param {String} attrs Pipe-separated list of attributes + * @param {Function} handler The method that will be applied + */ +function addHandle( attrs, handler ) { + var arr = attrs.split("|"), + i = arr.length; + + while ( i-- ) { + Expr.attrHandle[ arr[i] ] = handler; + } +} + +/** + * Checks document order of two siblings + * @param {Element} a + * @param {Element} b + * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b + */ +function siblingCheck( a, b ) { + var cur = b && a, + diff = cur && a.nodeType === 1 && b.nodeType === 1 && + ( ~b.sourceIndex || MAX_NEGATIVE ) - + ( ~a.sourceIndex || MAX_NEGATIVE ); + + // Use IE sourceIndex if available on both nodes + if ( diff ) { + return diff; + } + + // Check if b follows a + if ( cur ) { + while ( (cur = cur.nextSibling) ) { + if ( cur === b ) { + return -1; + } + } + } + + return a ? 1 : -1; +} + +/** + * Returns a function to use in pseudos for input types + * @param {String} type + */ +function createInputPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for buttons + * @param {String} type + */ +function createButtonPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return (name === "input" || name === "button") && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for positionals + * @param {Function} fn + */ +function createPositionalPseudo( fn ) { + return markFunction(function( argument ) { + argument = +argument; + return markFunction(function( seed, matches ) { + var j, + matchIndexes = fn( [], seed.length, argument ), + i = matchIndexes.length; + + // Match elements found at the specified indexes + while ( i-- ) { + if ( seed[ (j = matchIndexes[i]) ] ) { + seed[j] = !(matches[j] = seed[j]); + } + } + }); + }); +} + +/** + * Checks a node for validity as a Sizzle context + * @param {Element|Object=} context + * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value + */ +function testContext( context ) { + return context && typeof context.getElementsByTagName !== "undefined" && context; +} + +// Expose support vars for convenience +support = Sizzle.support = {}; + +/** + * Detects XML nodes + * @param {Element|Object} elem An element or a document + * @returns {Boolean} True iff elem is a non-HTML XML node + */ +isXML = Sizzle.isXML = function( elem ) { + // documentElement is verified for cases where it doesn't yet exist + // (such as loading iframes in IE - #4833) + var documentElement = elem && (elem.ownerDocument || elem).documentElement; + return documentElement ? documentElement.nodeName !== "HTML" : false; +}; + +/** + * Sets document-related variables once based on the current document + * @param {Element|Object} [doc] An element or document object to use to set the document + * @returns {Object} Returns the current document + */ +setDocument = Sizzle.setDocument = function( node ) { + var hasCompare, parent, + doc = node ? node.ownerDocument || node : preferredDoc; + + // Return early if doc is invalid or already selected + if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) { + return document; + } + + // Update global variables + document = doc; + docElem = document.documentElement; + documentIsHTML = !isXML( document ); + + // Support: IE 9-11, Edge + // Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936) + if ( (parent = document.defaultView) && parent.top !== parent ) { + // Support: IE 11 + if ( parent.addEventListener ) { + parent.addEventListener( "unload", unloadHandler, false ); + + // Support: IE 9 - 10 only + } else if ( parent.attachEvent ) { + parent.attachEvent( "onunload", unloadHandler ); + } + } + + /* Attributes + ---------------------------------------------------------------------- */ + + // Support: IE<8 + // Verify that getAttribute really returns attributes and not properties + // (excepting IE8 booleans) + support.attributes = assert(function( div ) { + div.className = "i"; + return !div.getAttribute("className"); + }); + + /* getElement(s)By* + ---------------------------------------------------------------------- */ + + // Check if getElementsByTagName("*") returns only elements + support.getElementsByTagName = assert(function( div ) { + div.appendChild( document.createComment("") ); + return !div.getElementsByTagName("*").length; + }); + + // Support: IE<9 + support.getElementsByClassName = rnative.test( document.getElementsByClassName ); + + // Support: IE<10 + // Check if getElementById returns elements by name + // The broken getElementById methods don't pick up programatically-set names, + // so use a roundabout getElementsByName test + support.getById = assert(function( div ) { + docElem.appendChild( div ).id = expando; + return !document.getElementsByName || !document.getElementsByName( expando ).length; + }); + + // ID find and filter + if ( support.getById ) { + Expr.find["ID"] = function( id, context ) { + if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { + var m = context.getElementById( id ); + return m ? [ m ] : []; + } + }; + Expr.filter["ID"] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + return elem.getAttribute("id") === attrId; + }; + }; + } else { + // Support: IE6/7 + // getElementById is not reliable as a find shortcut + delete Expr.find["ID"]; + + Expr.filter["ID"] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + var node = typeof elem.getAttributeNode !== "undefined" && + elem.getAttributeNode("id"); + return node && node.value === attrId; + }; + }; + } + + // Tag + Expr.find["TAG"] = support.getElementsByTagName ? + function( tag, context ) { + if ( typeof context.getElementsByTagName !== "undefined" ) { + return context.getElementsByTagName( tag ); + + // DocumentFragment nodes don't have gEBTN + } else if ( support.qsa ) { + return context.querySelectorAll( tag ); + } + } : + + function( tag, context ) { + var elem, + tmp = [], + i = 0, + // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too + results = context.getElementsByTagName( tag ); + + // Filter out possible comments + if ( tag === "*" ) { + while ( (elem = results[i++]) ) { + if ( elem.nodeType === 1 ) { + tmp.push( elem ); + } + } + + return tmp; + } + return results; + }; + + // Class + Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) { + if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) { + return context.getElementsByClassName( className ); + } + }; + + /* QSA/matchesSelector + ---------------------------------------------------------------------- */ + + // QSA and matchesSelector support + + // matchesSelector(:active) reports false when true (IE9/Opera 11.5) + rbuggyMatches = []; + + // qSa(:focus) reports false when true (Chrome 21) + // We allow this because of a bug in IE8/9 that throws an error + // whenever `document.activeElement` is accessed on an iframe + // So, we allow :focus to pass through QSA all the time to avoid the IE error + // See http://bugs.jquery.com/ticket/13378 + rbuggyQSA = []; + + if ( (support.qsa = rnative.test( document.querySelectorAll )) ) { + // Build QSA regex + // Regex strategy adopted from Diego Perini + assert(function( div ) { + // Select is set to empty string on purpose + // This is to test IE's treatment of not explicitly + // setting a boolean content attribute, + // since its presence should be enough + // http://bugs.jquery.com/ticket/12359 + docElem.appendChild( div ).innerHTML = "" + + ""; + + // Support: IE8, Opera 11-12.16 + // Nothing should be selected when empty strings follow ^= or $= or *= + // The test attribute must be unknown in Opera but "safe" for WinRT + // http://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section + if ( div.querySelectorAll("[msallowcapture^='']").length ) { + rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" ); + } + + // Support: IE8 + // Boolean attributes and "value" are not treated correctly + if ( !div.querySelectorAll("[selected]").length ) { + rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); + } + + // Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+ + if ( !div.querySelectorAll( "[id~=" + expando + "-]" ).length ) { + rbuggyQSA.push("~="); + } + + // Webkit/Opera - :checked should return selected option elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + // IE8 throws error here and will not see later tests + if ( !div.querySelectorAll(":checked").length ) { + rbuggyQSA.push(":checked"); + } + + // Support: Safari 8+, iOS 8+ + // https://bugs.webkit.org/show_bug.cgi?id=136851 + // In-page `selector#id sibing-combinator selector` fails + if ( !div.querySelectorAll( "a#" + expando + "+*" ).length ) { + rbuggyQSA.push(".#.+[+~]"); + } + }); + + assert(function( div ) { + // Support: Windows 8 Native Apps + // The type and name attributes are restricted during .innerHTML assignment + var input = document.createElement("input"); + input.setAttribute( "type", "hidden" ); + div.appendChild( input ).setAttribute( "name", "D" ); + + // Support: IE8 + // Enforce case-sensitivity of name attribute + if ( div.querySelectorAll("[name=d]").length ) { + rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" ); + } + + // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled) + // IE8 throws error here and will not see later tests + if ( !div.querySelectorAll(":enabled").length ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + // Opera 10-11 does not throw on post-comma invalid pseudos + div.querySelectorAll("*,:x"); + rbuggyQSA.push(",.*:"); + }); + } + + if ( (support.matchesSelector = rnative.test( (matches = docElem.matches || + docElem.webkitMatchesSelector || + docElem.mozMatchesSelector || + docElem.oMatchesSelector || + docElem.msMatchesSelector) )) ) { + + assert(function( div ) { + // Check to see if it's possible to do matchesSelector + // on a disconnected node (IE 9) + support.disconnectedMatch = matches.call( div, "div" ); + + // This should fail with an exception + // Gecko does not error, returns false instead + matches.call( div, "[s!='']:x" ); + rbuggyMatches.push( "!=", pseudos ); + }); + } + + rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") ); + rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") ); + + /* Contains + ---------------------------------------------------------------------- */ + hasCompare = rnative.test( docElem.compareDocumentPosition ); + + // Element contains another + // Purposefully self-exclusive + // As in, an element does not contain itself + contains = hasCompare || rnative.test( docElem.contains ) ? + function( a, b ) { + var adown = a.nodeType === 9 ? a.documentElement : a, + bup = b && b.parentNode; + return a === bup || !!( bup && bup.nodeType === 1 && ( + adown.contains ? + adown.contains( bup ) : + a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 + )); + } : + function( a, b ) { + if ( b ) { + while ( (b = b.parentNode) ) { + if ( b === a ) { + return true; + } + } + } + return false; + }; + + /* Sorting + ---------------------------------------------------------------------- */ + + // Document order sorting + sortOrder = hasCompare ? + function( a, b ) { + + // Flag for duplicate removal + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + // Sort on method existence if only one input has compareDocumentPosition + var compare = !a.compareDocumentPosition - !b.compareDocumentPosition; + if ( compare ) { + return compare; + } + + // Calculate position if both inputs belong to the same document + compare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ? + a.compareDocumentPosition( b ) : + + // Otherwise we know they are disconnected + 1; + + // Disconnected nodes + if ( compare & 1 || + (!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) { + + // Choose the first element that is related to our preferred document + if ( a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) { + return -1; + } + if ( b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) { + return 1; + } + + // Maintain original order + return sortInput ? + ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : + 0; + } + + return compare & 4 ? -1 : 1; + } : + function( a, b ) { + // Exit early if the nodes are identical + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + var cur, + i = 0, + aup = a.parentNode, + bup = b.parentNode, + ap = [ a ], + bp = [ b ]; + + // Parentless nodes are either documents or disconnected + if ( !aup || !bup ) { + return a === document ? -1 : + b === document ? 1 : + aup ? -1 : + bup ? 1 : + sortInput ? + ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : + 0; + + // If the nodes are siblings, we can do a quick check + } else if ( aup === bup ) { + return siblingCheck( a, b ); + } + + // Otherwise we need full lists of their ancestors for comparison + cur = a; + while ( (cur = cur.parentNode) ) { + ap.unshift( cur ); + } + cur = b; + while ( (cur = cur.parentNode) ) { + bp.unshift( cur ); + } + + // Walk down the tree looking for a discrepancy + while ( ap[i] === bp[i] ) { + i++; + } + + return i ? + // Do a sibling check if the nodes have a common ancestor + siblingCheck( ap[i], bp[i] ) : + + // Otherwise nodes in our document sort first + ap[i] === preferredDoc ? -1 : + bp[i] === preferredDoc ? 1 : + 0; + }; + + return document; +}; + +Sizzle.matches = function( expr, elements ) { + return Sizzle( expr, null, null, elements ); +}; + +Sizzle.matchesSelector = function( elem, expr ) { + // Set document vars if needed + if ( ( elem.ownerDocument || elem ) !== document ) { + setDocument( elem ); + } + + // Make sure that attribute selectors are quoted + expr = expr.replace( rattributeQuotes, "='$1']" ); + + if ( support.matchesSelector && documentIsHTML && + !compilerCache[ expr + " " ] && + ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) && + ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) { + + try { + var ret = matches.call( elem, expr ); + + // IE 9's matchesSelector returns false on disconnected nodes + if ( ret || support.disconnectedMatch || + // As well, disconnected nodes are said to be in a document + // fragment in IE 9 + elem.document && elem.document.nodeType !== 11 ) { + return ret; + } + } catch (e) {} + } + + return Sizzle( expr, document, null, [ elem ] ).length > 0; +}; + +Sizzle.contains = function( context, elem ) { + // Set document vars if needed + if ( ( context.ownerDocument || context ) !== document ) { + setDocument( context ); + } + return contains( context, elem ); +}; + +Sizzle.attr = function( elem, name ) { + // Set document vars if needed + if ( ( elem.ownerDocument || elem ) !== document ) { + setDocument( elem ); + } + + var fn = Expr.attrHandle[ name.toLowerCase() ], + // Don't get fooled by Object.prototype properties (jQuery #13807) + val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ? + fn( elem, name, !documentIsHTML ) : + undefined; + + return val !== undefined ? + val : + support.attributes || !documentIsHTML ? + elem.getAttribute( name ) : + (val = elem.getAttributeNode(name)) && val.specified ? + val.value : + null; +}; + +Sizzle.error = function( msg ) { + throw new Error( "Syntax error, unrecognized expression: " + msg ); +}; + +/** + * Document sorting and removing duplicates + * @param {ArrayLike} results + */ +Sizzle.uniqueSort = function( results ) { + var elem, + duplicates = [], + j = 0, + i = 0; + + // Unless we *know* we can detect duplicates, assume their presence + hasDuplicate = !support.detectDuplicates; + sortInput = !support.sortStable && results.slice( 0 ); + results.sort( sortOrder ); + + if ( hasDuplicate ) { + while ( (elem = results[i++]) ) { + if ( elem === results[ i ] ) { + j = duplicates.push( i ); + } + } + while ( j-- ) { + results.splice( duplicates[ j ], 1 ); + } + } + + // Clear input after sorting to release objects + // See https://github.com/jquery/sizzle/pull/225 + sortInput = null; + + return results; +}; + +/** + * Utility function for retrieving the text value of an array of DOM nodes + * @param {Array|Element} elem + */ +getText = Sizzle.getText = function( elem ) { + var node, + ret = "", + i = 0, + nodeType = elem.nodeType; + + if ( !nodeType ) { + // If no nodeType, this is expected to be an array + while ( (node = elem[i++]) ) { + // Do not traverse comment nodes + ret += getText( node ); + } + } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { + // Use textContent for elements + // innerText usage removed for consistency of new lines (jQuery #11153) + if ( typeof elem.textContent === "string" ) { + return elem.textContent; + } else { + // Traverse its children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + ret += getText( elem ); + } + } + } else if ( nodeType === 3 || nodeType === 4 ) { + return elem.nodeValue; + } + // Do not include comment or processing instruction nodes + + return ret; +}; + +Expr = Sizzle.selectors = { + + // Can be adjusted by the user + cacheLength: 50, + + createPseudo: markFunction, + + match: matchExpr, + + attrHandle: {}, + + find: {}, + + relative: { + ">": { dir: "parentNode", first: true }, + " ": { dir: "parentNode" }, + "+": { dir: "previousSibling", first: true }, + "~": { dir: "previousSibling" } + }, + + preFilter: { + "ATTR": function( match ) { + match[1] = match[1].replace( runescape, funescape ); + + // Move the given value to match[3] whether quoted or unquoted + match[3] = ( match[3] || match[4] || match[5] || "" ).replace( runescape, funescape ); + + if ( match[2] === "~=" ) { + match[3] = " " + match[3] + " "; + } + + return match.slice( 0, 4 ); + }, + + "CHILD": function( match ) { + /* matches from matchExpr["CHILD"] + 1 type (only|nth|...) + 2 what (child|of-type) + 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) + 4 xn-component of xn+y argument ([+-]?\d*n|) + 5 sign of xn-component + 6 x of xn-component + 7 sign of y-component + 8 y of y-component + */ + match[1] = match[1].toLowerCase(); + + if ( match[1].slice( 0, 3 ) === "nth" ) { + // nth-* requires argument + if ( !match[3] ) { + Sizzle.error( match[0] ); + } + + // numeric x and y parameters for Expr.filter.CHILD + // remember that false/true cast respectively to 0/1 + match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) ); + match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" ); + + // other types prohibit arguments + } else if ( match[3] ) { + Sizzle.error( match[0] ); + } + + return match; + }, + + "PSEUDO": function( match ) { + var excess, + unquoted = !match[6] && match[2]; + + if ( matchExpr["CHILD"].test( match[0] ) ) { + return null; + } + + // Accept quoted arguments as-is + if ( match[3] ) { + match[2] = match[4] || match[5] || ""; + + // Strip excess characters from unquoted arguments + } else if ( unquoted && rpseudo.test( unquoted ) && + // Get excess from tokenize (recursively) + (excess = tokenize( unquoted, true )) && + // advance to the next closing parenthesis + (excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) { + + // excess is a negative index + match[0] = match[0].slice( 0, excess ); + match[2] = unquoted.slice( 0, excess ); + } + + // Return only captures needed by the pseudo filter method (type and argument) + return match.slice( 0, 3 ); + } + }, + + filter: { + + "TAG": function( nodeNameSelector ) { + var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase(); + return nodeNameSelector === "*" ? + function() { return true; } : + function( elem ) { + return elem.nodeName && elem.nodeName.toLowerCase() === nodeName; + }; + }, + + "CLASS": function( className ) { + var pattern = classCache[ className + " " ]; + + return pattern || + (pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) && + classCache( className, function( elem ) { + return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== "undefined" && elem.getAttribute("class") || "" ); + }); + }, + + "ATTR": function( name, operator, check ) { + return function( elem ) { + var result = Sizzle.attr( elem, name ); + + if ( result == null ) { + return operator === "!="; + } + if ( !operator ) { + return true; + } + + result += ""; + + return operator === "=" ? result === check : + operator === "!=" ? result !== check : + operator === "^=" ? check && result.indexOf( check ) === 0 : + operator === "*=" ? check && result.indexOf( check ) > -1 : + operator === "$=" ? check && result.slice( -check.length ) === check : + operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 : + operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" : + false; + }; + }, + + "CHILD": function( type, what, argument, first, last ) { + var simple = type.slice( 0, 3 ) !== "nth", + forward = type.slice( -4 ) !== "last", + ofType = what === "of-type"; + + return first === 1 && last === 0 ? + + // Shortcut for :nth-*(n) + function( elem ) { + return !!elem.parentNode; + } : + + function( elem, context, xml ) { + var cache, uniqueCache, outerCache, node, nodeIndex, start, + dir = simple !== forward ? "nextSibling" : "previousSibling", + parent = elem.parentNode, + name = ofType && elem.nodeName.toLowerCase(), + useCache = !xml && !ofType, + diff = false; + + if ( parent ) { + + // :(first|last|only)-(child|of-type) + if ( simple ) { + while ( dir ) { + node = elem; + while ( (node = node[ dir ]) ) { + if ( ofType ? + node.nodeName.toLowerCase() === name : + node.nodeType === 1 ) { + + return false; + } + } + // Reverse direction for :only-* (if we haven't yet done so) + start = dir = type === "only" && !start && "nextSibling"; + } + return true; + } + + start = [ forward ? parent.firstChild : parent.lastChild ]; + + // non-xml :nth-child(...) stores cache data on `parent` + if ( forward && useCache ) { + + // Seek `elem` from a previously-cached index + + // ...in a gzip-friendly way + node = parent; + outerCache = node[ expando ] || (node[ expando ] = {}); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + (outerCache[ node.uniqueID ] = {}); + + cache = uniqueCache[ type ] || []; + nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; + diff = nodeIndex && cache[ 2 ]; + node = nodeIndex && parent.childNodes[ nodeIndex ]; + + while ( (node = ++nodeIndex && node && node[ dir ] || + + // Fallback to seeking `elem` from the start + (diff = nodeIndex = 0) || start.pop()) ) { + + // When found, cache indexes on `parent` and break + if ( node.nodeType === 1 && ++diff && node === elem ) { + uniqueCache[ type ] = [ dirruns, nodeIndex, diff ]; + break; + } + } + + } else { + // Use previously-cached element index if available + if ( useCache ) { + // ...in a gzip-friendly way + node = elem; + outerCache = node[ expando ] || (node[ expando ] = {}); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + (outerCache[ node.uniqueID ] = {}); + + cache = uniqueCache[ type ] || []; + nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; + diff = nodeIndex; + } + + // xml :nth-child(...) + // or :nth-last-child(...) or :nth(-last)?-of-type(...) + if ( diff === false ) { + // Use the same loop as above to seek `elem` from the start + while ( (node = ++nodeIndex && node && node[ dir ] || + (diff = nodeIndex = 0) || start.pop()) ) { + + if ( ( ofType ? + node.nodeName.toLowerCase() === name : + node.nodeType === 1 ) && + ++diff ) { + + // Cache the index of each encountered element + if ( useCache ) { + outerCache = node[ expando ] || (node[ expando ] = {}); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + (outerCache[ node.uniqueID ] = {}); + + uniqueCache[ type ] = [ dirruns, diff ]; + } + + if ( node === elem ) { + break; + } + } + } + } + } + + // Incorporate the offset, then check against cycle size + diff -= last; + return diff === first || ( diff % first === 0 && diff / first >= 0 ); + } + }; + }, + + "PSEUDO": function( pseudo, argument ) { + // pseudo-class names are case-insensitive + // http://www.w3.org/TR/selectors/#pseudo-classes + // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters + // Remember that setFilters inherits from pseudos + var args, + fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || + Sizzle.error( "unsupported pseudo: " + pseudo ); + + // The user may use createPseudo to indicate that + // arguments are needed to create the filter function + // just as Sizzle does + if ( fn[ expando ] ) { + return fn( argument ); + } + + // But maintain support for old signatures + if ( fn.length > 1 ) { + args = [ pseudo, pseudo, "", argument ]; + return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? + markFunction(function( seed, matches ) { + var idx, + matched = fn( seed, argument ), + i = matched.length; + while ( i-- ) { + idx = indexOf( seed, matched[i] ); + seed[ idx ] = !( matches[ idx ] = matched[i] ); + } + }) : + function( elem ) { + return fn( elem, 0, args ); + }; + } + + return fn; + } + }, + + pseudos: { + // Potentially complex pseudos + "not": markFunction(function( selector ) { + // Trim the selector passed to compile + // to avoid treating leading and trailing + // spaces as combinators + var input = [], + results = [], + matcher = compile( selector.replace( rtrim, "$1" ) ); + + return matcher[ expando ] ? + markFunction(function( seed, matches, context, xml ) { + var elem, + unmatched = matcher( seed, null, xml, [] ), + i = seed.length; + + // Match elements unmatched by `matcher` + while ( i-- ) { + if ( (elem = unmatched[i]) ) { + seed[i] = !(matches[i] = elem); + } + } + }) : + function( elem, context, xml ) { + input[0] = elem; + matcher( input, null, xml, results ); + // Don't keep the element (issue #299) + input[0] = null; + return !results.pop(); + }; + }), + + "has": markFunction(function( selector ) { + return function( elem ) { + return Sizzle( selector, elem ).length > 0; + }; + }), + + "contains": markFunction(function( text ) { + text = text.replace( runescape, funescape ); + return function( elem ) { + return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1; + }; + }), + + // "Whether an element is represented by a :lang() selector + // is based solely on the element's language value + // being equal to the identifier C, + // or beginning with the identifier C immediately followed by "-". + // The matching of C against the element's language value is performed case-insensitively. + // The identifier C does not have to be a valid language name." + // http://www.w3.org/TR/selectors/#lang-pseudo + "lang": markFunction( function( lang ) { + // lang value must be a valid identifier + if ( !ridentifier.test(lang || "") ) { + Sizzle.error( "unsupported lang: " + lang ); + } + lang = lang.replace( runescape, funescape ).toLowerCase(); + return function( elem ) { + var elemLang; + do { + if ( (elemLang = documentIsHTML ? + elem.lang : + elem.getAttribute("xml:lang") || elem.getAttribute("lang")) ) { + + elemLang = elemLang.toLowerCase(); + return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; + } + } while ( (elem = elem.parentNode) && elem.nodeType === 1 ); + return false; + }; + }), + + // Miscellaneous + "target": function( elem ) { + var hash = window.location && window.location.hash; + return hash && hash.slice( 1 ) === elem.id; + }, + + "root": function( elem ) { + return elem === docElem; + }, + + "focus": function( elem ) { + return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex); + }, + + // Boolean properties + "enabled": function( elem ) { + return elem.disabled === false; + }, + + "disabled": function( elem ) { + return elem.disabled === true; + }, + + "checked": function( elem ) { + // In CSS3, :checked should return both checked and selected elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + var nodeName = elem.nodeName.toLowerCase(); + return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected); + }, + + "selected": function( elem ) { + // Accessing this property makes selected-by-default + // options in Safari work properly + if ( elem.parentNode ) { + elem.parentNode.selectedIndex; + } + + return elem.selected === true; + }, + + // Contents + "empty": function( elem ) { + // http://www.w3.org/TR/selectors/#empty-pseudo + // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5), + // but not by others (comment: 8; processing instruction: 7; etc.) + // nodeType < 6 works because attributes (2) do not appear as children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + if ( elem.nodeType < 6 ) { + return false; + } + } + return true; + }, + + "parent": function( elem ) { + return !Expr.pseudos["empty"]( elem ); + }, + + // Element/input types + "header": function( elem ) { + return rheader.test( elem.nodeName ); + }, + + "input": function( elem ) { + return rinputs.test( elem.nodeName ); + }, + + "button": function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === "button" || name === "button"; + }, + + "text": function( elem ) { + var attr; + return elem.nodeName.toLowerCase() === "input" && + elem.type === "text" && + + // Support: IE<8 + // New HTML5 attribute values (e.g., "search") appear with elem.type === "text" + ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text" ); + }, + + // Position-in-collection + "first": createPositionalPseudo(function() { + return [ 0 ]; + }), + + "last": createPositionalPseudo(function( matchIndexes, length ) { + return [ length - 1 ]; + }), + + "eq": createPositionalPseudo(function( matchIndexes, length, argument ) { + return [ argument < 0 ? argument + length : argument ]; + }), + + "even": createPositionalPseudo(function( matchIndexes, length ) { + var i = 0; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "odd": createPositionalPseudo(function( matchIndexes, length ) { + var i = 1; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "lt": createPositionalPseudo(function( matchIndexes, length, argument ) { + var i = argument < 0 ? argument + length : argument; + for ( ; --i >= 0; ) { + matchIndexes.push( i ); + } + return matchIndexes; + }), + + "gt": createPositionalPseudo(function( matchIndexes, length, argument ) { + var i = argument < 0 ? argument + length : argument; + for ( ; ++i < length; ) { + matchIndexes.push( i ); + } + return matchIndexes; + }) + } +}; + +Expr.pseudos["nth"] = Expr.pseudos["eq"]; + +// Add button/input type pseudos +for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { + Expr.pseudos[ i ] = createInputPseudo( i ); +} +for ( i in { submit: true, reset: true } ) { + Expr.pseudos[ i ] = createButtonPseudo( i ); +} + +// Easy API for creating new setFilters +function setFilters() {} +setFilters.prototype = Expr.filters = Expr.pseudos; +Expr.setFilters = new setFilters(); + +tokenize = Sizzle.tokenize = function( selector, parseOnly ) { + var matched, match, tokens, type, + soFar, groups, preFilters, + cached = tokenCache[ selector + " " ]; + + if ( cached ) { + return parseOnly ? 0 : cached.slice( 0 ); + } + + soFar = selector; + groups = []; + preFilters = Expr.preFilter; + + while ( soFar ) { + + // Comma and first run + if ( !matched || (match = rcomma.exec( soFar )) ) { + if ( match ) { + // Don't consume trailing commas as valid + soFar = soFar.slice( match[0].length ) || soFar; + } + groups.push( (tokens = []) ); + } + + matched = false; + + // Combinators + if ( (match = rcombinators.exec( soFar )) ) { + matched = match.shift(); + tokens.push({ + value: matched, + // Cast descendant combinators to space + type: match[0].replace( rtrim, " " ) + }); + soFar = soFar.slice( matched.length ); + } + + // Filters + for ( type in Expr.filter ) { + if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] || + (match = preFilters[ type ]( match ))) ) { + matched = match.shift(); + tokens.push({ + value: matched, + type: type, + matches: match + }); + soFar = soFar.slice( matched.length ); + } + } + + if ( !matched ) { + break; + } + } + + // Return the length of the invalid excess + // if we're just parsing + // Otherwise, throw an error or return tokens + return parseOnly ? + soFar.length : + soFar ? + Sizzle.error( selector ) : + // Cache the tokens + tokenCache( selector, groups ).slice( 0 ); +}; + +function toSelector( tokens ) { + var i = 0, + len = tokens.length, + selector = ""; + for ( ; i < len; i++ ) { + selector += tokens[i].value; + } + return selector; +} + +function addCombinator( matcher, combinator, base ) { + var dir = combinator.dir, + checkNonElements = base && dir === "parentNode", + doneName = done++; + + return combinator.first ? + // Check against closest ancestor/preceding element + function( elem, context, xml ) { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + return matcher( elem, context, xml ); + } + } + } : + + // Check against all ancestor/preceding elements + function( elem, context, xml ) { + var oldCache, uniqueCache, outerCache, + newCache = [ dirruns, doneName ]; + + // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching + if ( xml ) { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + if ( matcher( elem, context, xml ) ) { + return true; + } + } + } + } else { + while ( (elem = elem[ dir ]) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + outerCache = elem[ expando ] || (elem[ expando ] = {}); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ elem.uniqueID ] || (outerCache[ elem.uniqueID ] = {}); + + if ( (oldCache = uniqueCache[ dir ]) && + oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) { + + // Assign to newCache so results back-propagate to previous elements + return (newCache[ 2 ] = oldCache[ 2 ]); + } else { + // Reuse newcache so results back-propagate to previous elements + uniqueCache[ dir ] = newCache; + + // A match means we're done; a fail means we have to keep checking + if ( (newCache[ 2 ] = matcher( elem, context, xml )) ) { + return true; + } + } + } + } + } + }; +} + +function elementMatcher( matchers ) { + return matchers.length > 1 ? + function( elem, context, xml ) { + var i = matchers.length; + while ( i-- ) { + if ( !matchers[i]( elem, context, xml ) ) { + return false; + } + } + return true; + } : + matchers[0]; +} + +function multipleContexts( selector, contexts, results ) { + var i = 0, + len = contexts.length; + for ( ; i < len; i++ ) { + Sizzle( selector, contexts[i], results ); + } + return results; +} + +function condense( unmatched, map, filter, context, xml ) { + var elem, + newUnmatched = [], + i = 0, + len = unmatched.length, + mapped = map != null; + + for ( ; i < len; i++ ) { + if ( (elem = unmatched[i]) ) { + if ( !filter || filter( elem, context, xml ) ) { + newUnmatched.push( elem ); + if ( mapped ) { + map.push( i ); + } + } + } + } + + return newUnmatched; +} + +function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { + if ( postFilter && !postFilter[ expando ] ) { + postFilter = setMatcher( postFilter ); + } + if ( postFinder && !postFinder[ expando ] ) { + postFinder = setMatcher( postFinder, postSelector ); + } + return markFunction(function( seed, results, context, xml ) { + var temp, i, elem, + preMap = [], + postMap = [], + preexisting = results.length, + + // Get initial elements from seed or context + elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ), + + // Prefilter to get matcher input, preserving a map for seed-results synchronization + matcherIn = preFilter && ( seed || !selector ) ? + condense( elems, preMap, preFilter, context, xml ) : + elems, + + matcherOut = matcher ? + // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results, + postFinder || ( seed ? preFilter : preexisting || postFilter ) ? + + // ...intermediate processing is necessary + [] : + + // ...otherwise use results directly + results : + matcherIn; + + // Find primary matches + if ( matcher ) { + matcher( matcherIn, matcherOut, context, xml ); + } + + // Apply postFilter + if ( postFilter ) { + temp = condense( matcherOut, postMap ); + postFilter( temp, [], context, xml ); + + // Un-match failing elements by moving them back to matcherIn + i = temp.length; + while ( i-- ) { + if ( (elem = temp[i]) ) { + matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem); + } + } + } + + if ( seed ) { + if ( postFinder || preFilter ) { + if ( postFinder ) { + // Get the final matcherOut by condensing this intermediate into postFinder contexts + temp = []; + i = matcherOut.length; + while ( i-- ) { + if ( (elem = matcherOut[i]) ) { + // Restore matcherIn since elem is not yet a final match + temp.push( (matcherIn[i] = elem) ); + } + } + postFinder( null, (matcherOut = []), temp, xml ); + } + + // Move matched elements from seed to results to keep them synchronized + i = matcherOut.length; + while ( i-- ) { + if ( (elem = matcherOut[i]) && + (temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) { + + seed[temp] = !(results[temp] = elem); + } + } + } + + // Add elements to results, through postFinder if defined + } else { + matcherOut = condense( + matcherOut === results ? + matcherOut.splice( preexisting, matcherOut.length ) : + matcherOut + ); + if ( postFinder ) { + postFinder( null, results, matcherOut, xml ); + } else { + push.apply( results, matcherOut ); + } + } + }); +} + +function matcherFromTokens( tokens ) { + var checkContext, matcher, j, + len = tokens.length, + leadingRelative = Expr.relative[ tokens[0].type ], + implicitRelative = leadingRelative || Expr.relative[" "], + i = leadingRelative ? 1 : 0, + + // The foundational matcher ensures that elements are reachable from top-level context(s) + matchContext = addCombinator( function( elem ) { + return elem === checkContext; + }, implicitRelative, true ), + matchAnyContext = addCombinator( function( elem ) { + return indexOf( checkContext, elem ) > -1; + }, implicitRelative, true ), + matchers = [ function( elem, context, xml ) { + var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( + (checkContext = context).nodeType ? + matchContext( elem, context, xml ) : + matchAnyContext( elem, context, xml ) ); + // Avoid hanging onto element (issue #299) + checkContext = null; + return ret; + } ]; + + for ( ; i < len; i++ ) { + if ( (matcher = Expr.relative[ tokens[i].type ]) ) { + matchers = [ addCombinator(elementMatcher( matchers ), matcher) ]; + } else { + matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches ); + + // Return special upon seeing a positional matcher + if ( matcher[ expando ] ) { + // Find the next relative operator (if any) for proper handling + j = ++i; + for ( ; j < len; j++ ) { + if ( Expr.relative[ tokens[j].type ] ) { + break; + } + } + return setMatcher( + i > 1 && elementMatcher( matchers ), + i > 1 && toSelector( + // If the preceding token was a descendant combinator, insert an implicit any-element `*` + tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" }) + ).replace( rtrim, "$1" ), + matcher, + i < j && matcherFromTokens( tokens.slice( i, j ) ), + j < len && matcherFromTokens( (tokens = tokens.slice( j )) ), + j < len && toSelector( tokens ) + ); + } + matchers.push( matcher ); + } + } + + return elementMatcher( matchers ); +} + +function matcherFromGroupMatchers( elementMatchers, setMatchers ) { + var bySet = setMatchers.length > 0, + byElement = elementMatchers.length > 0, + superMatcher = function( seed, context, xml, results, outermost ) { + var elem, j, matcher, + matchedCount = 0, + i = "0", + unmatched = seed && [], + setMatched = [], + contextBackup = outermostContext, + // We must always have either seed elements or outermost context + elems = seed || byElement && Expr.find["TAG"]( "*", outermost ), + // Use integer dirruns iff this is the outermost matcher + dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1), + len = elems.length; + + if ( outermost ) { + outermostContext = context === document || context || outermost; + } + + // Add elements passing elementMatchers directly to results + // Support: IE<9, Safari + // Tolerate NodeList properties (IE: "length"; Safari: ) matching elements by id + for ( ; i !== len && (elem = elems[i]) != null; i++ ) { + if ( byElement && elem ) { + j = 0; + if ( !context && elem.ownerDocument !== document ) { + setDocument( elem ); + xml = !documentIsHTML; + } + while ( (matcher = elementMatchers[j++]) ) { + if ( matcher( elem, context || document, xml) ) { + results.push( elem ); + break; + } + } + if ( outermost ) { + dirruns = dirrunsUnique; + } + } + + // Track unmatched elements for set filters + if ( bySet ) { + // They will have gone through all possible matchers + if ( (elem = !matcher && elem) ) { + matchedCount--; + } + + // Lengthen the array for every element, matched or not + if ( seed ) { + unmatched.push( elem ); + } + } + } + + // `i` is now the count of elements visited above, and adding it to `matchedCount` + // makes the latter nonnegative. + matchedCount += i; + + // Apply set filters to unmatched elements + // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount` + // equals `i`), unless we didn't visit _any_ elements in the above loop because we have + // no element matchers and no seed. + // Incrementing an initially-string "0" `i` allows `i` to remain a string only in that + // case, which will result in a "00" `matchedCount` that differs from `i` but is also + // numerically zero. + if ( bySet && i !== matchedCount ) { + j = 0; + while ( (matcher = setMatchers[j++]) ) { + matcher( unmatched, setMatched, context, xml ); + } + + if ( seed ) { + // Reintegrate element matches to eliminate the need for sorting + if ( matchedCount > 0 ) { + while ( i-- ) { + if ( !(unmatched[i] || setMatched[i]) ) { + setMatched[i] = pop.call( results ); + } + } + } + + // Discard index placeholder values to get only actual matches + setMatched = condense( setMatched ); + } + + // Add matches to results + push.apply( results, setMatched ); + + // Seedless set matches succeeding multiple successful matchers stipulate sorting + if ( outermost && !seed && setMatched.length > 0 && + ( matchedCount + setMatchers.length ) > 1 ) { + + Sizzle.uniqueSort( results ); + } + } + + // Override manipulation of globals by nested matchers + if ( outermost ) { + dirruns = dirrunsUnique; + outermostContext = contextBackup; + } + + return unmatched; + }; + + return bySet ? + markFunction( superMatcher ) : + superMatcher; +} + +compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) { + var i, + setMatchers = [], + elementMatchers = [], + cached = compilerCache[ selector + " " ]; + + if ( !cached ) { + // Generate a function of recursive functions that can be used to check each element + if ( !match ) { + match = tokenize( selector ); + } + i = match.length; + while ( i-- ) { + cached = matcherFromTokens( match[i] ); + if ( cached[ expando ] ) { + setMatchers.push( cached ); + } else { + elementMatchers.push( cached ); + } + } + + // Cache the compiled function + cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) ); + + // Save selector and tokenization + cached.selector = selector; + } + return cached; +}; + +/** + * A low-level selection function that works with Sizzle's compiled + * selector functions + * @param {String|Function} selector A selector or a pre-compiled + * selector function built with Sizzle.compile + * @param {Element} context + * @param {Array} [results] + * @param {Array} [seed] A set of elements to match against + */ +select = Sizzle.select = function( selector, context, results, seed ) { + var i, tokens, token, type, find, + compiled = typeof selector === "function" && selector, + match = !seed && tokenize( (selector = compiled.selector || selector) ); + + results = results || []; + + // Try to minimize operations if there is only one selector in the list and no seed + // (the latter of which guarantees us context) + if ( match.length === 1 ) { + + // Reduce context if the leading compound selector is an ID + tokens = match[0] = match[0].slice( 0 ); + if ( tokens.length > 2 && (token = tokens[0]).type === "ID" && + support.getById && context.nodeType === 9 && documentIsHTML && + Expr.relative[ tokens[1].type ] ) { + + context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0]; + if ( !context ) { + return results; + + // Precompiled matchers will still verify ancestry, so step up a level + } else if ( compiled ) { + context = context.parentNode; + } + + selector = selector.slice( tokens.shift().value.length ); + } + + // Fetch a seed set for right-to-left matching + i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length; + while ( i-- ) { + token = tokens[i]; + + // Abort if we hit a combinator + if ( Expr.relative[ (type = token.type) ] ) { + break; + } + if ( (find = Expr.find[ type ]) ) { + // Search, expanding context for leading sibling combinators + if ( (seed = find( + token.matches[0].replace( runescape, funescape ), + rsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context + )) ) { + + // If seed is empty or no tokens remain, we can return early + tokens.splice( i, 1 ); + selector = seed.length && toSelector( tokens ); + if ( !selector ) { + push.apply( results, seed ); + return results; + } + + break; + } + } + } + } + + // Compile and execute a filtering function if one is not provided + // Provide `match` to avoid retokenization if we modified the selector above + ( compiled || compile( selector, match ) )( + seed, + context, + !documentIsHTML, + results, + !context || rsibling.test( selector ) && testContext( context.parentNode ) || context + ); + return results; +}; + +// One-time assignments + +// Sort stability +support.sortStable = expando.split("").sort( sortOrder ).join("") === expando; + +// Support: Chrome 14-35+ +// Always assume duplicates if they aren't passed to the comparison function +support.detectDuplicates = !!hasDuplicate; + +// Initialize against the default document +setDocument(); + +// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27) +// Detached nodes confoundingly follow *each other* +support.sortDetached = assert(function( div1 ) { + // Should return 1, but returns 4 (following) + return div1.compareDocumentPosition( document.createElement("div") ) & 1; +}); + +// Support: IE<8 +// Prevent attribute/property "interpolation" +// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx +if ( !assert(function( div ) { + div.innerHTML = ""; + return div.firstChild.getAttribute("href") === "#" ; +}) ) { + addHandle( "type|href|height|width", function( elem, name, isXML ) { + if ( !isXML ) { + return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 ); + } + }); +} + +// Support: IE<9 +// Use defaultValue in place of getAttribute("value") +if ( !support.attributes || !assert(function( div ) { + div.innerHTML = ""; + div.firstChild.setAttribute( "value", "" ); + return div.firstChild.getAttribute( "value" ) === ""; +}) ) { + addHandle( "value", function( elem, name, isXML ) { + if ( !isXML && elem.nodeName.toLowerCase() === "input" ) { + return elem.defaultValue; + } + }); +} + +// Support: IE<9 +// Use getAttributeNode to fetch booleans when getAttribute lies +if ( !assert(function( div ) { + return div.getAttribute("disabled") == null; +}) ) { + addHandle( booleans, function( elem, name, isXML ) { + var val; + if ( !isXML ) { + return elem[ name ] === true ? name.toLowerCase() : + (val = elem.getAttributeNode( name )) && val.specified ? + val.value : + null; + } + }); +} + +return Sizzle; + +})( window ); + + + +jQuery.find = Sizzle; +jQuery.expr = Sizzle.selectors; +jQuery.expr[ ":" ] = jQuery.expr.pseudos; +jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort; +jQuery.text = Sizzle.getText; +jQuery.isXMLDoc = Sizzle.isXML; +jQuery.contains = Sizzle.contains; + + + +var dir = function( elem, dir, until ) { + var matched = [], + truncate = until !== undefined; + + while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) { + if ( elem.nodeType === 1 ) { + if ( truncate && jQuery( elem ).is( until ) ) { + break; + } + matched.push( elem ); + } + } + return matched; +}; + + +var siblings = function( n, elem ) { + var matched = []; + + for ( ; n; n = n.nextSibling ) { + if ( n.nodeType === 1 && n !== elem ) { + matched.push( n ); + } + } + + return matched; +}; + + +var rneedsContext = jQuery.expr.match.needsContext; + +var rsingleTag = ( /^<([\w-]+)\s*\/?>(?:<\/\1>|)$/ ); + + + +var risSimple = /^.[^:#\[\.,]*$/; + +// Implement the identical functionality for filter and not +function winnow( elements, qualifier, not ) { + if ( jQuery.isFunction( qualifier ) ) { + return jQuery.grep( elements, function( elem, i ) { + /* jshint -W018 */ + return !!qualifier.call( elem, i, elem ) !== not; + } ); + + } + + if ( qualifier.nodeType ) { + return jQuery.grep( elements, function( elem ) { + return ( elem === qualifier ) !== not; + } ); + + } + + if ( typeof qualifier === "string" ) { + if ( risSimple.test( qualifier ) ) { + return jQuery.filter( qualifier, elements, not ); + } + + qualifier = jQuery.filter( qualifier, elements ); + } + + return jQuery.grep( elements, function( elem ) { + return ( indexOf.call( qualifier, elem ) > -1 ) !== not; + } ); +} + +jQuery.filter = function( expr, elems, not ) { + var elem = elems[ 0 ]; + + if ( not ) { + expr = ":not(" + expr + ")"; + } + + return elems.length === 1 && elem.nodeType === 1 ? + jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [] : + jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) { + return elem.nodeType === 1; + } ) ); +}; + +jQuery.fn.extend( { + find: function( selector ) { + var i, + len = this.length, + ret = [], + self = this; + + if ( typeof selector !== "string" ) { + return this.pushStack( jQuery( selector ).filter( function() { + for ( i = 0; i < len; i++ ) { + if ( jQuery.contains( self[ i ], this ) ) { + return true; + } + } + } ) ); + } + + for ( i = 0; i < len; i++ ) { + jQuery.find( selector, self[ i ], ret ); + } + + // Needed because $( selector, context ) becomes $( context ).find( selector ) + ret = this.pushStack( len > 1 ? jQuery.unique( ret ) : ret ); + ret.selector = this.selector ? this.selector + " " + selector : selector; + return ret; + }, + filter: function( selector ) { + return this.pushStack( winnow( this, selector || [], false ) ); + }, + not: function( selector ) { + return this.pushStack( winnow( this, selector || [], true ) ); + }, + is: function( selector ) { + return !!winnow( + this, + + // If this is a positional/relative selector, check membership in the returned set + // so $("p:first").is("p:last") won't return true for a doc with two "p". + typeof selector === "string" && rneedsContext.test( selector ) ? + jQuery( selector ) : + selector || [], + false + ).length; + } +} ); + + +// Initialize a jQuery object + + +// A central reference to the root jQuery(document) +var rootjQuery, + + // A simple way to check for HTML strings + // Prioritize #id over to avoid XSS via location.hash (#9521) + // Strict HTML recognition (#11290: must start with <) + rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/, + + init = jQuery.fn.init = function( selector, context, root ) { + var match, elem; + + // HANDLE: $(""), $(null), $(undefined), $(false) + if ( !selector ) { + return this; + } + + // Method init() accepts an alternate rootjQuery + // so migrate can support jQuery.sub (gh-2101) + root = root || rootjQuery; + + // Handle HTML strings + if ( typeof selector === "string" ) { + if ( selector[ 0 ] === "<" && + selector[ selector.length - 1 ] === ">" && + selector.length >= 3 ) { + + // Assume that strings that start and end with <> are HTML and skip the regex check + match = [ null, selector, null ]; + + } else { + match = rquickExpr.exec( selector ); + } + + // Match html or make sure no context is specified for #id + if ( match && ( match[ 1 ] || !context ) ) { + + // HANDLE: $(html) -> $(array) + if ( match[ 1 ] ) { + context = context instanceof jQuery ? context[ 0 ] : context; + + // Option to run scripts is true for back-compat + // Intentionally let the error be thrown if parseHTML is not present + jQuery.merge( this, jQuery.parseHTML( + match[ 1 ], + context && context.nodeType ? context.ownerDocument || context : document, + true + ) ); + + // HANDLE: $(html, props) + if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) { + for ( match in context ) { + + // Properties of context are called as methods if possible + if ( jQuery.isFunction( this[ match ] ) ) { + this[ match ]( context[ match ] ); + + // ...and otherwise set as attributes + } else { + this.attr( match, context[ match ] ); + } + } + } + + return this; + + // HANDLE: $(#id) + } else { + elem = document.getElementById( match[ 2 ] ); + + // Support: Blackberry 4.6 + // gEBID returns nodes no longer in the document (#6963) + if ( elem && elem.parentNode ) { + + // Inject the element directly into the jQuery object + this.length = 1; + this[ 0 ] = elem; + } + + this.context = document; + this.selector = selector; + return this; + } + + // HANDLE: $(expr, $(...)) + } else if ( !context || context.jquery ) { + return ( context || root ).find( selector ); + + // HANDLE: $(expr, context) + // (which is just equivalent to: $(context).find(expr) + } else { + return this.constructor( context ).find( selector ); + } + + // HANDLE: $(DOMElement) + } else if ( selector.nodeType ) { + this.context = this[ 0 ] = selector; + this.length = 1; + return this; + + // HANDLE: $(function) + // Shortcut for document ready + } else if ( jQuery.isFunction( selector ) ) { + return root.ready !== undefined ? + root.ready( selector ) : + + // Execute immediately if ready is not present + selector( jQuery ); + } + + if ( selector.selector !== undefined ) { + this.selector = selector.selector; + this.context = selector.context; + } + + return jQuery.makeArray( selector, this ); + }; + +// Give the init function the jQuery prototype for later instantiation +init.prototype = jQuery.fn; + +// Initialize central reference +rootjQuery = jQuery( document ); + + +var rparentsprev = /^(?:parents|prev(?:Until|All))/, + + // Methods guaranteed to produce a unique set when starting from a unique set + guaranteedUnique = { + children: true, + contents: true, + next: true, + prev: true + }; + +jQuery.fn.extend( { + has: function( target ) { + var targets = jQuery( target, this ), + l = targets.length; + + return this.filter( function() { + var i = 0; + for ( ; i < l; i++ ) { + if ( jQuery.contains( this, targets[ i ] ) ) { + return true; + } + } + } ); + }, + + closest: function( selectors, context ) { + var cur, + i = 0, + l = this.length, + matched = [], + pos = rneedsContext.test( selectors ) || typeof selectors !== "string" ? + jQuery( selectors, context || this.context ) : + 0; + + for ( ; i < l; i++ ) { + for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) { + + // Always skip document fragments + if ( cur.nodeType < 11 && ( pos ? + pos.index( cur ) > -1 : + + // Don't pass non-elements to Sizzle + cur.nodeType === 1 && + jQuery.find.matchesSelector( cur, selectors ) ) ) { + + matched.push( cur ); + break; + } + } + } + + return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched ); + }, + + // Determine the position of an element within the set + index: function( elem ) { + + // No argument, return index in parent + if ( !elem ) { + return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1; + } + + // Index in selector + if ( typeof elem === "string" ) { + return indexOf.call( jQuery( elem ), this[ 0 ] ); + } + + // Locate the position of the desired element + return indexOf.call( this, + + // If it receives a jQuery object, the first element is used + elem.jquery ? elem[ 0 ] : elem + ); + }, + + add: function( selector, context ) { + return this.pushStack( + jQuery.uniqueSort( + jQuery.merge( this.get(), jQuery( selector, context ) ) + ) + ); + }, + + addBack: function( selector ) { + return this.add( selector == null ? + this.prevObject : this.prevObject.filter( selector ) + ); + } +} ); + +function sibling( cur, dir ) { + while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {} + return cur; +} + +jQuery.each( { + parent: function( elem ) { + var parent = elem.parentNode; + return parent && parent.nodeType !== 11 ? parent : null; + }, + parents: function( elem ) { + return dir( elem, "parentNode" ); + }, + parentsUntil: function( elem, i, until ) { + return dir( elem, "parentNode", until ); + }, + next: function( elem ) { + return sibling( elem, "nextSibling" ); + }, + prev: function( elem ) { + return sibling( elem, "previousSibling" ); + }, + nextAll: function( elem ) { + return dir( elem, "nextSibling" ); + }, + prevAll: function( elem ) { + return dir( elem, "previousSibling" ); + }, + nextUntil: function( elem, i, until ) { + return dir( elem, "nextSibling", until ); + }, + prevUntil: function( elem, i, until ) { + return dir( elem, "previousSibling", until ); + }, + siblings: function( elem ) { + return siblings( ( elem.parentNode || {} ).firstChild, elem ); + }, + children: function( elem ) { + return siblings( elem.firstChild ); + }, + contents: function( elem ) { + return elem.contentDocument || jQuery.merge( [], elem.childNodes ); + } +}, function( name, fn ) { + jQuery.fn[ name ] = function( until, selector ) { + var matched = jQuery.map( this, fn, until ); + + if ( name.slice( -5 ) !== "Until" ) { + selector = until; + } + + if ( selector && typeof selector === "string" ) { + matched = jQuery.filter( selector, matched ); + } + + if ( this.length > 1 ) { + + // Remove duplicates + if ( !guaranteedUnique[ name ] ) { + jQuery.uniqueSort( matched ); + } + + // Reverse order for parents* and prev-derivatives + if ( rparentsprev.test( name ) ) { + matched.reverse(); + } + } + + return this.pushStack( matched ); + }; +} ); +var rnotwhite = ( /\S+/g ); + + + +// Convert String-formatted options into Object-formatted ones +function createOptions( options ) { + var object = {}; + jQuery.each( options.match( rnotwhite ) || [], function( _, flag ) { + object[ flag ] = true; + } ); + return object; +} + +/* + * Create a callback list using the following parameters: + * + * options: an optional list of space-separated options that will change how + * the callback list behaves or a more traditional option object + * + * By default a callback list will act like an event callback list and can be + * "fired" multiple times. + * + * Possible options: + * + * once: will ensure the callback list can only be fired once (like a Deferred) + * + * memory: will keep track of previous values and will call any callback added + * after the list has been fired right away with the latest "memorized" + * values (like a Deferred) + * + * unique: will ensure a callback can only be added once (no duplicate in the list) + * + * stopOnFalse: interrupt callings when a callback returns false + * + */ +jQuery.Callbacks = function( options ) { + + // Convert options from String-formatted to Object-formatted if needed + // (we check in cache first) + options = typeof options === "string" ? + createOptions( options ) : + jQuery.extend( {}, options ); + + var // Flag to know if list is currently firing + firing, + + // Last fire value for non-forgettable lists + memory, + + // Flag to know if list was already fired + fired, + + // Flag to prevent firing + locked, + + // Actual callback list + list = [], + + // Queue of execution data for repeatable lists + queue = [], + + // Index of currently firing callback (modified by add/remove as needed) + firingIndex = -1, + + // Fire callbacks + fire = function() { + + // Enforce single-firing + locked = options.once; + + // Execute callbacks for all pending executions, + // respecting firingIndex overrides and runtime changes + fired = firing = true; + for ( ; queue.length; firingIndex = -1 ) { + memory = queue.shift(); + while ( ++firingIndex < list.length ) { + + // Run callback and check for early termination + if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false && + options.stopOnFalse ) { + + // Jump to end and forget the data so .add doesn't re-fire + firingIndex = list.length; + memory = false; + } + } + } + + // Forget the data if we're done with it + if ( !options.memory ) { + memory = false; + } + + firing = false; + + // Clean up if we're done firing for good + if ( locked ) { + + // Keep an empty list if we have data for future add calls + if ( memory ) { + list = []; + + // Otherwise, this object is spent + } else { + list = ""; + } + } + }, + + // Actual Callbacks object + self = { + + // Add a callback or a collection of callbacks to the list + add: function() { + if ( list ) { + + // If we have memory from a past run, we should fire after adding + if ( memory && !firing ) { + firingIndex = list.length - 1; + queue.push( memory ); + } + + ( function add( args ) { + jQuery.each( args, function( _, arg ) { + if ( jQuery.isFunction( arg ) ) { + if ( !options.unique || !self.has( arg ) ) { + list.push( arg ); + } + } else if ( arg && arg.length && jQuery.type( arg ) !== "string" ) { + + // Inspect recursively + add( arg ); + } + } ); + } )( arguments ); + + if ( memory && !firing ) { + fire(); + } + } + return this; + }, + + // Remove a callback from the list + remove: function() { + jQuery.each( arguments, function( _, arg ) { + var index; + while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { + list.splice( index, 1 ); + + // Handle firing indexes + if ( index <= firingIndex ) { + firingIndex--; + } + } + } ); + return this; + }, + + // Check if a given callback is in the list. + // If no argument is given, return whether or not list has callbacks attached. + has: function( fn ) { + return fn ? + jQuery.inArray( fn, list ) > -1 : + list.length > 0; + }, + + // Remove all callbacks from the list + empty: function() { + if ( list ) { + list = []; + } + return this; + }, + + // Disable .fire and .add + // Abort any current/pending executions + // Clear all callbacks and values + disable: function() { + locked = queue = []; + list = memory = ""; + return this; + }, + disabled: function() { + return !list; + }, + + // Disable .fire + // Also disable .add unless we have memory (since it would have no effect) + // Abort any pending executions + lock: function() { + locked = queue = []; + if ( !memory ) { + list = memory = ""; + } + return this; + }, + locked: function() { + return !!locked; + }, + + // Call all callbacks with the given context and arguments + fireWith: function( context, args ) { + if ( !locked ) { + args = args || []; + args = [ context, args.slice ? args.slice() : args ]; + queue.push( args ); + if ( !firing ) { + fire(); + } + } + return this; + }, + + // Call all the callbacks with the given arguments + fire: function() { + self.fireWith( this, arguments ); + return this; + }, + + // To know if the callbacks have already been called at least once + fired: function() { + return !!fired; + } + }; + + return self; +}; + + +jQuery.extend( { + + Deferred: function( func ) { + var tuples = [ + + // action, add listener, listener list, final state + [ "resolve", "done", jQuery.Callbacks( "once memory" ), "resolved" ], + [ "reject", "fail", jQuery.Callbacks( "once memory" ), "rejected" ], + [ "notify", "progress", jQuery.Callbacks( "memory" ) ] + ], + state = "pending", + promise = { + state: function() { + return state; + }, + always: function() { + deferred.done( arguments ).fail( arguments ); + return this; + }, + then: function( /* fnDone, fnFail, fnProgress */ ) { + var fns = arguments; + return jQuery.Deferred( function( newDefer ) { + jQuery.each( tuples, function( i, tuple ) { + var fn = jQuery.isFunction( fns[ i ] ) && fns[ i ]; + + // deferred[ done | fail | progress ] for forwarding actions to newDefer + deferred[ tuple[ 1 ] ]( function() { + var returned = fn && fn.apply( this, arguments ); + if ( returned && jQuery.isFunction( returned.promise ) ) { + returned.promise() + .progress( newDefer.notify ) + .done( newDefer.resolve ) + .fail( newDefer.reject ); + } else { + newDefer[ tuple[ 0 ] + "With" ]( + this === promise ? newDefer.promise() : this, + fn ? [ returned ] : arguments + ); + } + } ); + } ); + fns = null; + } ).promise(); + }, + + // Get a promise for this deferred + // If obj is provided, the promise aspect is added to the object + promise: function( obj ) { + return obj != null ? jQuery.extend( obj, promise ) : promise; + } + }, + deferred = {}; + + // Keep pipe for back-compat + promise.pipe = promise.then; + + // Add list-specific methods + jQuery.each( tuples, function( i, tuple ) { + var list = tuple[ 2 ], + stateString = tuple[ 3 ]; + + // promise[ done | fail | progress ] = list.add + promise[ tuple[ 1 ] ] = list.add; + + // Handle state + if ( stateString ) { + list.add( function() { + + // state = [ resolved | rejected ] + state = stateString; + + // [ reject_list | resolve_list ].disable; progress_list.lock + }, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock ); + } + + // deferred[ resolve | reject | notify ] + deferred[ tuple[ 0 ] ] = function() { + deferred[ tuple[ 0 ] + "With" ]( this === deferred ? promise : this, arguments ); + return this; + }; + deferred[ tuple[ 0 ] + "With" ] = list.fireWith; + } ); + + // Make the deferred a promise + promise.promise( deferred ); + + // Call given func if any + if ( func ) { + func.call( deferred, deferred ); + } + + // All done! + return deferred; + }, + + // Deferred helper + when: function( subordinate /* , ..., subordinateN */ ) { + var i = 0, + resolveValues = slice.call( arguments ), + length = resolveValues.length, + + // the count of uncompleted subordinates + remaining = length !== 1 || + ( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0, + + // the master Deferred. + // If resolveValues consist of only a single Deferred, just use that. + deferred = remaining === 1 ? subordinate : jQuery.Deferred(), + + // Update function for both resolve and progress values + updateFunc = function( i, contexts, values ) { + return function( value ) { + contexts[ i ] = this; + values[ i ] = arguments.length > 1 ? slice.call( arguments ) : value; + if ( values === progressValues ) { + deferred.notifyWith( contexts, values ); + } else if ( !( --remaining ) ) { + deferred.resolveWith( contexts, values ); + } + }; + }, + + progressValues, progressContexts, resolveContexts; + + // Add listeners to Deferred subordinates; treat others as resolved + if ( length > 1 ) { + progressValues = new Array( length ); + progressContexts = new Array( length ); + resolveContexts = new Array( length ); + for ( ; i < length; i++ ) { + if ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) { + resolveValues[ i ].promise() + .progress( updateFunc( i, progressContexts, progressValues ) ) + .done( updateFunc( i, resolveContexts, resolveValues ) ) + .fail( deferred.reject ); + } else { + --remaining; + } + } + } + + // If we're not waiting on anything, resolve the master + if ( !remaining ) { + deferred.resolveWith( resolveContexts, resolveValues ); + } + + return deferred.promise(); + } +} ); + + +// The deferred used on DOM ready +var readyList; + +jQuery.fn.ready = function( fn ) { + + // Add the callback + jQuery.ready.promise().done( fn ); + + return this; +}; + +jQuery.extend( { + + // Is the DOM ready to be used? Set to true once it occurs. + isReady: false, + + // A counter to track how many items to wait for before + // the ready event fires. See #6781 + readyWait: 1, + + // Hold (or release) the ready event + holdReady: function( hold ) { + if ( hold ) { + jQuery.readyWait++; + } else { + jQuery.ready( true ); + } + }, + + // Handle when the DOM is ready + ready: function( wait ) { + + // Abort if there are pending holds or we're already ready + if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { + return; + } + + // Remember that the DOM is ready + jQuery.isReady = true; + + // If a normal DOM Ready event fired, decrement, and wait if need be + if ( wait !== true && --jQuery.readyWait > 0 ) { + return; + } + + // If there are functions bound, to execute + readyList.resolveWith( document, [ jQuery ] ); + + // Trigger any bound ready events + if ( jQuery.fn.triggerHandler ) { + jQuery( document ).triggerHandler( "ready" ); + jQuery( document ).off( "ready" ); + } + } +} ); + +/** + * The ready event handler and self cleanup method + */ +function completed() { + document.removeEventListener( "DOMContentLoaded", completed ); + window.removeEventListener( "load", completed ); + jQuery.ready(); +} + +jQuery.ready.promise = function( obj ) { + if ( !readyList ) { + + readyList = jQuery.Deferred(); + + // Catch cases where $(document).ready() is called + // after the browser event has already occurred. + // Support: IE9-10 only + // Older IE sometimes signals "interactive" too soon + if ( document.readyState === "complete" || + ( document.readyState !== "loading" && !document.documentElement.doScroll ) ) { + + // Handle it asynchronously to allow scripts the opportunity to delay ready + window.setTimeout( jQuery.ready ); + + } else { + + // Use the handy event callback + document.addEventListener( "DOMContentLoaded", completed ); + + // A fallback to window.onload, that will always work + window.addEventListener( "load", completed ); + } + } + return readyList.promise( obj ); +}; + +// Kick off the DOM ready check even if the user does not +jQuery.ready.promise(); + + + + +// Multifunctional method to get and set values of a collection +// The value/s can optionally be executed if it's a function +var access = function( elems, fn, key, value, chainable, emptyGet, raw ) { + var i = 0, + len = elems.length, + bulk = key == null; + + // Sets many values + if ( jQuery.type( key ) === "object" ) { + chainable = true; + for ( i in key ) { + access( elems, fn, i, key[ i ], true, emptyGet, raw ); + } + + // Sets one value + } else if ( value !== undefined ) { + chainable = true; + + if ( !jQuery.isFunction( value ) ) { + raw = true; + } + + if ( bulk ) { + + // Bulk operations run against the entire set + if ( raw ) { + fn.call( elems, value ); + fn = null; + + // ...except when executing function values + } else { + bulk = fn; + fn = function( elem, key, value ) { + return bulk.call( jQuery( elem ), value ); + }; + } + } + + if ( fn ) { + for ( ; i < len; i++ ) { + fn( + elems[ i ], key, raw ? + value : + value.call( elems[ i ], i, fn( elems[ i ], key ) ) + ); + } + } + } + + return chainable ? + elems : + + // Gets + bulk ? + fn.call( elems ) : + len ? fn( elems[ 0 ], key ) : emptyGet; +}; +var acceptData = function( owner ) { + + // Accepts only: + // - Node + // - Node.ELEMENT_NODE + // - Node.DOCUMENT_NODE + // - Object + // - Any + /* jshint -W018 */ + return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType ); +}; + + + + +function Data() { + this.expando = jQuery.expando + Data.uid++; +} + +Data.uid = 1; + +Data.prototype = { + + register: function( owner, initial ) { + var value = initial || {}; + + // If it is a node unlikely to be stringify-ed or looped over + // use plain assignment + if ( owner.nodeType ) { + owner[ this.expando ] = value; + + // Otherwise secure it in a non-enumerable, non-writable property + // configurability must be true to allow the property to be + // deleted with the delete operator + } else { + Object.defineProperty( owner, this.expando, { + value: value, + writable: true, + configurable: true + } ); + } + return owner[ this.expando ]; + }, + cache: function( owner ) { + + // We can accept data for non-element nodes in modern browsers, + // but we should not, see #8335. + // Always return an empty object. + if ( !acceptData( owner ) ) { + return {}; + } + + // Check if the owner object already has a cache + var value = owner[ this.expando ]; + + // If not, create one + if ( !value ) { + value = {}; + + // We can accept data for non-element nodes in modern browsers, + // but we should not, see #8335. + // Always return an empty object. + if ( acceptData( owner ) ) { + + // If it is a node unlikely to be stringify-ed or looped over + // use plain assignment + if ( owner.nodeType ) { + owner[ this.expando ] = value; + + // Otherwise secure it in a non-enumerable property + // configurable must be true to allow the property to be + // deleted when data is removed + } else { + Object.defineProperty( owner, this.expando, { + value: value, + configurable: true + } ); + } + } + } + + return value; + }, + set: function( owner, data, value ) { + var prop, + cache = this.cache( owner ); + + // Handle: [ owner, key, value ] args + if ( typeof data === "string" ) { + cache[ data ] = value; + + // Handle: [ owner, { properties } ] args + } else { + + // Copy the properties one-by-one to the cache object + for ( prop in data ) { + cache[ prop ] = data[ prop ]; + } + } + return cache; + }, + get: function( owner, key ) { + return key === undefined ? + this.cache( owner ) : + owner[ this.expando ] && owner[ this.expando ][ key ]; + }, + access: function( owner, key, value ) { + var stored; + + // In cases where either: + // + // 1. No key was specified + // 2. A string key was specified, but no value provided + // + // Take the "read" path and allow the get method to determine + // which value to return, respectively either: + // + // 1. The entire cache object + // 2. The data stored at the key + // + if ( key === undefined || + ( ( key && typeof key === "string" ) && value === undefined ) ) { + + stored = this.get( owner, key ); + + return stored !== undefined ? + stored : this.get( owner, jQuery.camelCase( key ) ); + } + + // When the key is not a string, or both a key and value + // are specified, set or extend (existing objects) with either: + // + // 1. An object of properties + // 2. A key and value + // + this.set( owner, key, value ); + + // Since the "set" path can have two possible entry points + // return the expected data based on which path was taken[*] + return value !== undefined ? value : key; + }, + remove: function( owner, key ) { + var i, name, camel, + cache = owner[ this.expando ]; + + if ( cache === undefined ) { + return; + } + + if ( key === undefined ) { + this.register( owner ); + + } else { + + // Support array or space separated string of keys + if ( jQuery.isArray( key ) ) { + + // If "name" is an array of keys... + // When data is initially created, via ("key", "val") signature, + // keys will be converted to camelCase. + // Since there is no way to tell _how_ a key was added, remove + // both plain key and camelCase key. #12786 + // This will only penalize the array argument path. + name = key.concat( key.map( jQuery.camelCase ) ); + } else { + camel = jQuery.camelCase( key ); + + // Try the string as a key before any manipulation + if ( key in cache ) { + name = [ key, camel ]; + } else { + + // If a key with the spaces exists, use it. + // Otherwise, create an array by matching non-whitespace + name = camel; + name = name in cache ? + [ name ] : ( name.match( rnotwhite ) || [] ); + } + } + + i = name.length; + + while ( i-- ) { + delete cache[ name[ i ] ]; + } + } + + // Remove the expando if there's no more data + if ( key === undefined || jQuery.isEmptyObject( cache ) ) { + + // Support: Chrome <= 35-45+ + // Webkit & Blink performance suffers when deleting properties + // from DOM nodes, so set to undefined instead + // https://code.google.com/p/chromium/issues/detail?id=378607 + if ( owner.nodeType ) { + owner[ this.expando ] = undefined; + } else { + delete owner[ this.expando ]; + } + } + }, + hasData: function( owner ) { + var cache = owner[ this.expando ]; + return cache !== undefined && !jQuery.isEmptyObject( cache ); + } +}; +var dataPriv = new Data(); + +var dataUser = new Data(); + + + +// Implementation Summary +// +// 1. Enforce API surface and semantic compatibility with 1.9.x branch +// 2. Improve the module's maintainability by reducing the storage +// paths to a single mechanism. +// 3. Use the same single mechanism to support "private" and "user" data. +// 4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData) +// 5. Avoid exposing implementation details on user objects (eg. expando properties) +// 6. Provide a clear path for implementation upgrade to WeakMap in 2014 + +var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, + rmultiDash = /[A-Z]/g; + +function dataAttr( elem, key, data ) { + var name; + + // If nothing was found internally, try to fetch any + // data from the HTML5 data-* attribute + if ( data === undefined && elem.nodeType === 1 ) { + name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase(); + data = elem.getAttribute( name ); + + if ( typeof data === "string" ) { + try { + data = data === "true" ? true : + data === "false" ? false : + data === "null" ? null : + + // Only convert to a number if it doesn't change the string + +data + "" === data ? +data : + rbrace.test( data ) ? jQuery.parseJSON( data ) : + data; + } catch ( e ) {} + + // Make sure we set the data so it isn't changed later + dataUser.set( elem, key, data ); + } else { + data = undefined; + } + } + return data; +} + +jQuery.extend( { + hasData: function( elem ) { + return dataUser.hasData( elem ) || dataPriv.hasData( elem ); + }, + + data: function( elem, name, data ) { + return dataUser.access( elem, name, data ); + }, + + removeData: function( elem, name ) { + dataUser.remove( elem, name ); + }, + + // TODO: Now that all calls to _data and _removeData have been replaced + // with direct calls to dataPriv methods, these can be deprecated. + _data: function( elem, name, data ) { + return dataPriv.access( elem, name, data ); + }, + + _removeData: function( elem, name ) { + dataPriv.remove( elem, name ); + } +} ); + +jQuery.fn.extend( { + data: function( key, value ) { + var i, name, data, + elem = this[ 0 ], + attrs = elem && elem.attributes; + + // Gets all values + if ( key === undefined ) { + if ( this.length ) { + data = dataUser.get( elem ); + + if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) { + i = attrs.length; + while ( i-- ) { + + // Support: IE11+ + // The attrs elements can be null (#14894) + if ( attrs[ i ] ) { + name = attrs[ i ].name; + if ( name.indexOf( "data-" ) === 0 ) { + name = jQuery.camelCase( name.slice( 5 ) ); + dataAttr( elem, name, data[ name ] ); + } + } + } + dataPriv.set( elem, "hasDataAttrs", true ); + } + } + + return data; + } + + // Sets multiple values + if ( typeof key === "object" ) { + return this.each( function() { + dataUser.set( this, key ); + } ); + } + + return access( this, function( value ) { + var data, camelKey; + + // The calling jQuery object (element matches) is not empty + // (and therefore has an element appears at this[ 0 ]) and the + // `value` parameter was not undefined. An empty jQuery object + // will result in `undefined` for elem = this[ 0 ] which will + // throw an exception if an attempt to read a data cache is made. + if ( elem && value === undefined ) { + + // Attempt to get data from the cache + // with the key as-is + data = dataUser.get( elem, key ) || + + // Try to find dashed key if it exists (gh-2779) + // This is for 2.2.x only + dataUser.get( elem, key.replace( rmultiDash, "-$&" ).toLowerCase() ); + + if ( data !== undefined ) { + return data; + } + + camelKey = jQuery.camelCase( key ); + + // Attempt to get data from the cache + // with the key camelized + data = dataUser.get( elem, camelKey ); + if ( data !== undefined ) { + return data; + } + + // Attempt to "discover" the data in + // HTML5 custom data-* attrs + data = dataAttr( elem, camelKey, undefined ); + if ( data !== undefined ) { + return data; + } + + // We tried really hard, but the data doesn't exist. + return; + } + + // Set the data... + camelKey = jQuery.camelCase( key ); + this.each( function() { + + // First, attempt to store a copy or reference of any + // data that might've been store with a camelCased key. + var data = dataUser.get( this, camelKey ); + + // For HTML5 data-* attribute interop, we have to + // store property names with dashes in a camelCase form. + // This might not apply to all properties...* + dataUser.set( this, camelKey, value ); + + // *... In the case of properties that might _actually_ + // have dashes, we need to also store a copy of that + // unchanged property. + if ( key.indexOf( "-" ) > -1 && data !== undefined ) { + dataUser.set( this, key, value ); + } + } ); + }, null, value, arguments.length > 1, null, true ); + }, + + removeData: function( key ) { + return this.each( function() { + dataUser.remove( this, key ); + } ); + } +} ); + + +jQuery.extend( { + queue: function( elem, type, data ) { + var queue; + + if ( elem ) { + type = ( type || "fx" ) + "queue"; + queue = dataPriv.get( elem, type ); + + // Speed up dequeue by getting out quickly if this is just a lookup + if ( data ) { + if ( !queue || jQuery.isArray( data ) ) { + queue = dataPriv.access( elem, type, jQuery.makeArray( data ) ); + } else { + queue.push( data ); + } + } + return queue || []; + } + }, + + dequeue: function( elem, type ) { + type = type || "fx"; + + var queue = jQuery.queue( elem, type ), + startLength = queue.length, + fn = queue.shift(), + hooks = jQuery._queueHooks( elem, type ), + next = function() { + jQuery.dequeue( elem, type ); + }; + + // If the fx queue is dequeued, always remove the progress sentinel + if ( fn === "inprogress" ) { + fn = queue.shift(); + startLength--; + } + + if ( fn ) { + + // Add a progress sentinel to prevent the fx queue from being + // automatically dequeued + if ( type === "fx" ) { + queue.unshift( "inprogress" ); + } + + // Clear up the last queue stop function + delete hooks.stop; + fn.call( elem, next, hooks ); + } + + if ( !startLength && hooks ) { + hooks.empty.fire(); + } + }, + + // Not public - generate a queueHooks object, or return the current one + _queueHooks: function( elem, type ) { + var key = type + "queueHooks"; + return dataPriv.get( elem, key ) || dataPriv.access( elem, key, { + empty: jQuery.Callbacks( "once memory" ).add( function() { + dataPriv.remove( elem, [ type + "queue", key ] ); + } ) + } ); + } +} ); + +jQuery.fn.extend( { + queue: function( type, data ) { + var setter = 2; + + if ( typeof type !== "string" ) { + data = type; + type = "fx"; + setter--; + } + + if ( arguments.length < setter ) { + return jQuery.queue( this[ 0 ], type ); + } + + return data === undefined ? + this : + this.each( function() { + var queue = jQuery.queue( this, type, data ); + + // Ensure a hooks for this queue + jQuery._queueHooks( this, type ); + + if ( type === "fx" && queue[ 0 ] !== "inprogress" ) { + jQuery.dequeue( this, type ); + } + } ); + }, + dequeue: function( type ) { + return this.each( function() { + jQuery.dequeue( this, type ); + } ); + }, + clearQueue: function( type ) { + return this.queue( type || "fx", [] ); + }, + + // Get a promise resolved when queues of a certain type + // are emptied (fx is the type by default) + promise: function( type, obj ) { + var tmp, + count = 1, + defer = jQuery.Deferred(), + elements = this, + i = this.length, + resolve = function() { + if ( !( --count ) ) { + defer.resolveWith( elements, [ elements ] ); + } + }; + + if ( typeof type !== "string" ) { + obj = type; + type = undefined; + } + type = type || "fx"; + + while ( i-- ) { + tmp = dataPriv.get( elements[ i ], type + "queueHooks" ); + if ( tmp && tmp.empty ) { + count++; + tmp.empty.add( resolve ); + } + } + resolve(); + return defer.promise( obj ); + } +} ); +var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source; + +var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ); + + +var cssExpand = [ "Top", "Right", "Bottom", "Left" ]; + +var isHidden = function( elem, el ) { + + // isHidden might be called from jQuery#filter function; + // in that case, element will be second argument + elem = el || elem; + return jQuery.css( elem, "display" ) === "none" || + !jQuery.contains( elem.ownerDocument, elem ); + }; + + + +function adjustCSS( elem, prop, valueParts, tween ) { + var adjusted, + scale = 1, + maxIterations = 20, + currentValue = tween ? + function() { return tween.cur(); } : + function() { return jQuery.css( elem, prop, "" ); }, + initial = currentValue(), + unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ), + + // Starting value computation is required for potential unit mismatches + initialInUnit = ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) && + rcssNum.exec( jQuery.css( elem, prop ) ); + + if ( initialInUnit && initialInUnit[ 3 ] !== unit ) { + + // Trust units reported by jQuery.css + unit = unit || initialInUnit[ 3 ]; + + // Make sure we update the tween properties later on + valueParts = valueParts || []; + + // Iteratively approximate from a nonzero starting point + initialInUnit = +initial || 1; + + do { + + // If previous iteration zeroed out, double until we get *something*. + // Use string for doubling so we don't accidentally see scale as unchanged below + scale = scale || ".5"; + + // Adjust and apply + initialInUnit = initialInUnit / scale; + jQuery.style( elem, prop, initialInUnit + unit ); + + // Update scale, tolerating zero or NaN from tween.cur() + // Break the loop if scale is unchanged or perfect, or if we've just had enough. + } while ( + scale !== ( scale = currentValue() / initial ) && scale !== 1 && --maxIterations + ); + } + + if ( valueParts ) { + initialInUnit = +initialInUnit || +initial || 0; + + // Apply relative offset (+=/-=) if specified + adjusted = valueParts[ 1 ] ? + initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] : + +valueParts[ 2 ]; + if ( tween ) { + tween.unit = unit; + tween.start = initialInUnit; + tween.end = adjusted; + } + } + return adjusted; +} +var rcheckableType = ( /^(?:checkbox|radio)$/i ); + +var rtagName = ( /<([\w:-]+)/ ); + +var rscriptType = ( /^$|\/(?:java|ecma)script/i ); + + + +// We have to close these tags to support XHTML (#13200) +var wrapMap = { + + // Support: IE9 + option: [ 1, "" ], + + // XHTML parsers do not magically insert elements in the + // same way that tag soup parsers do. So we cannot shorten + // this by omitting or other required elements. + thead: [ 1, "", "
" ], + col: [ 2, "", "
" ], + tr: [ 2, "", "
" ], + td: [ 3, "", "
" ], + + _default: [ 0, "", "" ] +}; + +// Support: IE9 +wrapMap.optgroup = wrapMap.option; + +wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; +wrapMap.th = wrapMap.td; + + +function getAll( context, tag ) { + + // Support: IE9-11+ + // Use typeof to avoid zero-argument method invocation on host objects (#15151) + var ret = typeof context.getElementsByTagName !== "undefined" ? + context.getElementsByTagName( tag || "*" ) : + typeof context.querySelectorAll !== "undefined" ? + context.querySelectorAll( tag || "*" ) : + []; + + return tag === undefined || tag && jQuery.nodeName( context, tag ) ? + jQuery.merge( [ context ], ret ) : + ret; +} + + +// Mark scripts as having already been evaluated +function setGlobalEval( elems, refElements ) { + var i = 0, + l = elems.length; + + for ( ; i < l; i++ ) { + dataPriv.set( + elems[ i ], + "globalEval", + !refElements || dataPriv.get( refElements[ i ], "globalEval" ) + ); + } +} + + +var rhtml = /<|&#?\w+;/; + +function buildFragment( elems, context, scripts, selection, ignored ) { + var elem, tmp, tag, wrap, contains, j, + fragment = context.createDocumentFragment(), + nodes = [], + i = 0, + l = elems.length; + + for ( ; i < l; i++ ) { + elem = elems[ i ]; + + if ( elem || elem === 0 ) { + + // Add nodes directly + if ( jQuery.type( elem ) === "object" ) { + + // Support: Android<4.1, PhantomJS<2 + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem ); + + // Convert non-html into a text node + } else if ( !rhtml.test( elem ) ) { + nodes.push( context.createTextNode( elem ) ); + + // Convert html into DOM nodes + } else { + tmp = tmp || fragment.appendChild( context.createElement( "div" ) ); + + // Deserialize a standard representation + tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase(); + wrap = wrapMap[ tag ] || wrapMap._default; + tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ]; + + // Descend through wrappers to the right content + j = wrap[ 0 ]; + while ( j-- ) { + tmp = tmp.lastChild; + } + + // Support: Android<4.1, PhantomJS<2 + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( nodes, tmp.childNodes ); + + // Remember the top-level container + tmp = fragment.firstChild; + + // Ensure the created nodes are orphaned (#12392) + tmp.textContent = ""; + } + } + } + + // Remove wrapper from fragment + fragment.textContent = ""; + + i = 0; + while ( ( elem = nodes[ i++ ] ) ) { + + // Skip elements already in the context collection (trac-4087) + if ( selection && jQuery.inArray( elem, selection ) > -1 ) { + if ( ignored ) { + ignored.push( elem ); + } + continue; + } + + contains = jQuery.contains( elem.ownerDocument, elem ); + + // Append to fragment + tmp = getAll( fragment.appendChild( elem ), "script" ); + + // Preserve script evaluation history + if ( contains ) { + setGlobalEval( tmp ); + } + + // Capture executables + if ( scripts ) { + j = 0; + while ( ( elem = tmp[ j++ ] ) ) { + if ( rscriptType.test( elem.type || "" ) ) { + scripts.push( elem ); + } + } + } + } + + return fragment; +} + + +( function() { + var fragment = document.createDocumentFragment(), + div = fragment.appendChild( document.createElement( "div" ) ), + input = document.createElement( "input" ); + + // Support: Android 4.0-4.3, Safari<=5.1 + // Check state lost if the name is set (#11217) + // Support: Windows Web Apps (WWA) + // `name` and `type` must use .setAttribute for WWA (#14901) + input.setAttribute( "type", "radio" ); + input.setAttribute( "checked", "checked" ); + input.setAttribute( "name", "t" ); + + div.appendChild( input ); + + // Support: Safari<=5.1, Android<4.2 + // Older WebKit doesn't clone checked state correctly in fragments + support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked; + + // Support: IE<=11+ + // Make sure textarea (and checkbox) defaultValue is properly cloned + div.innerHTML = ""; + support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; +} )(); + + +var + rkeyEvent = /^key/, + rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/, + rtypenamespace = /^([^.]*)(?:\.(.+)|)/; + +function returnTrue() { + return true; +} + +function returnFalse() { + return false; +} + +// Support: IE9 +// See #13393 for more info +function safeActiveElement() { + try { + return document.activeElement; + } catch ( err ) { } +} + +function on( elem, types, selector, data, fn, one ) { + var origFn, type; + + // Types can be a map of types/handlers + if ( typeof types === "object" ) { + + // ( types-Object, selector, data ) + if ( typeof selector !== "string" ) { + + // ( types-Object, data ) + data = data || selector; + selector = undefined; + } + for ( type in types ) { + on( elem, type, selector, data, types[ type ], one ); + } + return elem; + } + + if ( data == null && fn == null ) { + + // ( types, fn ) + fn = selector; + data = selector = undefined; + } else if ( fn == null ) { + if ( typeof selector === "string" ) { + + // ( types, selector, fn ) + fn = data; + data = undefined; + } else { + + // ( types, data, fn ) + fn = data; + data = selector; + selector = undefined; + } + } + if ( fn === false ) { + fn = returnFalse; + } else if ( !fn ) { + return elem; + } + + if ( one === 1 ) { + origFn = fn; + fn = function( event ) { + + // Can use an empty set, since event contains the info + jQuery().off( event ); + return origFn.apply( this, arguments ); + }; + + // Use same guid so caller can remove using origFn + fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); + } + return elem.each( function() { + jQuery.event.add( this, types, fn, data, selector ); + } ); +} + +/* + * Helper functions for managing events -- not part of the public interface. + * Props to Dean Edwards' addEvent library for many of the ideas. + */ +jQuery.event = { + + global: {}, + + add: function( elem, types, handler, data, selector ) { + + var handleObjIn, eventHandle, tmp, + events, t, handleObj, + special, handlers, type, namespaces, origType, + elemData = dataPriv.get( elem ); + + // Don't attach events to noData or text/comment nodes (but allow plain objects) + if ( !elemData ) { + return; + } + + // Caller can pass in an object of custom data in lieu of the handler + if ( handler.handler ) { + handleObjIn = handler; + handler = handleObjIn.handler; + selector = handleObjIn.selector; + } + + // Make sure that the handler has a unique ID, used to find/remove it later + if ( !handler.guid ) { + handler.guid = jQuery.guid++; + } + + // Init the element's event structure and main handler, if this is the first + if ( !( events = elemData.events ) ) { + events = elemData.events = {}; + } + if ( !( eventHandle = elemData.handle ) ) { + eventHandle = elemData.handle = function( e ) { + + // Discard the second event of a jQuery.event.trigger() and + // when an event is called after a page has unloaded + return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ? + jQuery.event.dispatch.apply( elem, arguments ) : undefined; + }; + } + + // Handle multiple events separated by a space + types = ( types || "" ).match( rnotwhite ) || [ "" ]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[ t ] ) || []; + type = origType = tmp[ 1 ]; + namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); + + // There *must* be a type, no attaching namespace-only handlers + if ( !type ) { + continue; + } + + // If event changes its type, use the special event handlers for the changed type + special = jQuery.event.special[ type ] || {}; + + // If selector defined, determine special event api type, otherwise given type + type = ( selector ? special.delegateType : special.bindType ) || type; + + // Update special based on newly reset type + special = jQuery.event.special[ type ] || {}; + + // handleObj is passed to all event handlers + handleObj = jQuery.extend( { + type: type, + origType: origType, + data: data, + handler: handler, + guid: handler.guid, + selector: selector, + needsContext: selector && jQuery.expr.match.needsContext.test( selector ), + namespace: namespaces.join( "." ) + }, handleObjIn ); + + // Init the event handler queue if we're the first + if ( !( handlers = events[ type ] ) ) { + handlers = events[ type ] = []; + handlers.delegateCount = 0; + + // Only use addEventListener if the special events handler returns false + if ( !special.setup || + special.setup.call( elem, data, namespaces, eventHandle ) === false ) { + + if ( elem.addEventListener ) { + elem.addEventListener( type, eventHandle ); + } + } + } + + if ( special.add ) { + special.add.call( elem, handleObj ); + + if ( !handleObj.handler.guid ) { + handleObj.handler.guid = handler.guid; + } + } + + // Add to the element's handler list, delegates in front + if ( selector ) { + handlers.splice( handlers.delegateCount++, 0, handleObj ); + } else { + handlers.push( handleObj ); + } + + // Keep track of which events have ever been used, for event optimization + jQuery.event.global[ type ] = true; + } + + }, + + // Detach an event or set of events from an element + remove: function( elem, types, handler, selector, mappedTypes ) { + + var j, origCount, tmp, + events, t, handleObj, + special, handlers, type, namespaces, origType, + elemData = dataPriv.hasData( elem ) && dataPriv.get( elem ); + + if ( !elemData || !( events = elemData.events ) ) { + return; + } + + // Once for each type.namespace in types; type may be omitted + types = ( types || "" ).match( rnotwhite ) || [ "" ]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[ t ] ) || []; + type = origType = tmp[ 1 ]; + namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); + + // Unbind all events (on this namespace, if provided) for the element + if ( !type ) { + for ( type in events ) { + jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); + } + continue; + } + + special = jQuery.event.special[ type ] || {}; + type = ( selector ? special.delegateType : special.bindType ) || type; + handlers = events[ type ] || []; + tmp = tmp[ 2 ] && + new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ); + + // Remove matching events + origCount = j = handlers.length; + while ( j-- ) { + handleObj = handlers[ j ]; + + if ( ( mappedTypes || origType === handleObj.origType ) && + ( !handler || handler.guid === handleObj.guid ) && + ( !tmp || tmp.test( handleObj.namespace ) ) && + ( !selector || selector === handleObj.selector || + selector === "**" && handleObj.selector ) ) { + handlers.splice( j, 1 ); + + if ( handleObj.selector ) { + handlers.delegateCount--; + } + if ( special.remove ) { + special.remove.call( elem, handleObj ); + } + } + } + + // Remove generic event handler if we removed something and no more handlers exist + // (avoids potential for endless recursion during removal of special event handlers) + if ( origCount && !handlers.length ) { + if ( !special.teardown || + special.teardown.call( elem, namespaces, elemData.handle ) === false ) { + + jQuery.removeEvent( elem, type, elemData.handle ); + } + + delete events[ type ]; + } + } + + // Remove data and the expando if it's no longer used + if ( jQuery.isEmptyObject( events ) ) { + dataPriv.remove( elem, "handle events" ); + } + }, + + dispatch: function( event ) { + + // Make a writable jQuery.Event from the native event object + event = jQuery.event.fix( event ); + + var i, j, ret, matched, handleObj, + handlerQueue = [], + args = slice.call( arguments ), + handlers = ( dataPriv.get( this, "events" ) || {} )[ event.type ] || [], + special = jQuery.event.special[ event.type ] || {}; + + // Use the fix-ed jQuery.Event rather than the (read-only) native event + args[ 0 ] = event; + event.delegateTarget = this; + + // Call the preDispatch hook for the mapped type, and let it bail if desired + if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { + return; + } + + // Determine handlers + handlerQueue = jQuery.event.handlers.call( this, event, handlers ); + + // Run delegates first; they may want to stop propagation beneath us + i = 0; + while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) { + event.currentTarget = matched.elem; + + j = 0; + while ( ( handleObj = matched.handlers[ j++ ] ) && + !event.isImmediatePropagationStopped() ) { + + // Triggered event must either 1) have no namespace, or 2) have namespace(s) + // a subset or equal to those in the bound event (both can have no namespace). + if ( !event.rnamespace || event.rnamespace.test( handleObj.namespace ) ) { + + event.handleObj = handleObj; + event.data = handleObj.data; + + ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle || + handleObj.handler ).apply( matched.elem, args ); + + if ( ret !== undefined ) { + if ( ( event.result = ret ) === false ) { + event.preventDefault(); + event.stopPropagation(); + } + } + } + } + } + + // Call the postDispatch hook for the mapped type + if ( special.postDispatch ) { + special.postDispatch.call( this, event ); + } + + return event.result; + }, + + handlers: function( event, handlers ) { + var i, matches, sel, handleObj, + handlerQueue = [], + delegateCount = handlers.delegateCount, + cur = event.target; + + // Support (at least): Chrome, IE9 + // Find delegate handlers + // Black-hole SVG instance trees (#13180) + // + // Support: Firefox<=42+ + // Avoid non-left-click in FF but don't block IE radio events (#3861, gh-2343) + if ( delegateCount && cur.nodeType && + ( event.type !== "click" || isNaN( event.button ) || event.button < 1 ) ) { + + for ( ; cur !== this; cur = cur.parentNode || this ) { + + // Don't check non-elements (#13208) + // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764) + if ( cur.nodeType === 1 && ( cur.disabled !== true || event.type !== "click" ) ) { + matches = []; + for ( i = 0; i < delegateCount; i++ ) { + handleObj = handlers[ i ]; + + // Don't conflict with Object.prototype properties (#13203) + sel = handleObj.selector + " "; + + if ( matches[ sel ] === undefined ) { + matches[ sel ] = handleObj.needsContext ? + jQuery( sel, this ).index( cur ) > -1 : + jQuery.find( sel, this, null, [ cur ] ).length; + } + if ( matches[ sel ] ) { + matches.push( handleObj ); + } + } + if ( matches.length ) { + handlerQueue.push( { elem: cur, handlers: matches } ); + } + } + } + } + + // Add the remaining (directly-bound) handlers + if ( delegateCount < handlers.length ) { + handlerQueue.push( { elem: this, handlers: handlers.slice( delegateCount ) } ); + } + + return handlerQueue; + }, + + // Includes some event props shared by KeyEvent and MouseEvent + props: ( "altKey bubbles cancelable ctrlKey currentTarget detail eventPhase " + + "metaKey relatedTarget shiftKey target timeStamp view which" ).split( " " ), + + fixHooks: {}, + + keyHooks: { + props: "char charCode key keyCode".split( " " ), + filter: function( event, original ) { + + // Add which for key events + if ( event.which == null ) { + event.which = original.charCode != null ? original.charCode : original.keyCode; + } + + return event; + } + }, + + mouseHooks: { + props: ( "button buttons clientX clientY offsetX offsetY pageX pageY " + + "screenX screenY toElement" ).split( " " ), + filter: function( event, original ) { + var eventDoc, doc, body, + button = original.button; + + // Calculate pageX/Y if missing and clientX/Y available + if ( event.pageX == null && original.clientX != null ) { + eventDoc = event.target.ownerDocument || document; + doc = eventDoc.documentElement; + body = eventDoc.body; + + event.pageX = original.clientX + + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - + ( doc && doc.clientLeft || body && body.clientLeft || 0 ); + event.pageY = original.clientY + + ( doc && doc.scrollTop || body && body.scrollTop || 0 ) - + ( doc && doc.clientTop || body && body.clientTop || 0 ); + } + + // Add which for click: 1 === left; 2 === middle; 3 === right + // Note: button is not normalized, so don't use it + if ( !event.which && button !== undefined ) { + event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) ); + } + + return event; + } + }, + + fix: function( event ) { + if ( event[ jQuery.expando ] ) { + return event; + } + + // Create a writable copy of the event object and normalize some properties + var i, prop, copy, + type = event.type, + originalEvent = event, + fixHook = this.fixHooks[ type ]; + + if ( !fixHook ) { + this.fixHooks[ type ] = fixHook = + rmouseEvent.test( type ) ? this.mouseHooks : + rkeyEvent.test( type ) ? this.keyHooks : + {}; + } + copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props; + + event = new jQuery.Event( originalEvent ); + + i = copy.length; + while ( i-- ) { + prop = copy[ i ]; + event[ prop ] = originalEvent[ prop ]; + } + + // Support: Cordova 2.5 (WebKit) (#13255) + // All events should have a target; Cordova deviceready doesn't + if ( !event.target ) { + event.target = document; + } + + // Support: Safari 6.0+, Chrome<28 + // Target should not be a text node (#504, #13143) + if ( event.target.nodeType === 3 ) { + event.target = event.target.parentNode; + } + + return fixHook.filter ? fixHook.filter( event, originalEvent ) : event; + }, + + special: { + load: { + + // Prevent triggered image.load events from bubbling to window.load + noBubble: true + }, + focus: { + + // Fire native event if possible so blur/focus sequence is correct + trigger: function() { + if ( this !== safeActiveElement() && this.focus ) { + this.focus(); + return false; + } + }, + delegateType: "focusin" + }, + blur: { + trigger: function() { + if ( this === safeActiveElement() && this.blur ) { + this.blur(); + return false; + } + }, + delegateType: "focusout" + }, + click: { + + // For checkbox, fire native event so checked state will be right + trigger: function() { + if ( this.type === "checkbox" && this.click && jQuery.nodeName( this, "input" ) ) { + this.click(); + return false; + } + }, + + // For cross-browser consistency, don't fire native .click() on links + _default: function( event ) { + return jQuery.nodeName( event.target, "a" ); + } + }, + + beforeunload: { + postDispatch: function( event ) { + + // Support: Firefox 20+ + // Firefox doesn't alert if the returnValue field is not set. + if ( event.result !== undefined && event.originalEvent ) { + event.originalEvent.returnValue = event.result; + } + } + } + } +}; + +jQuery.removeEvent = function( elem, type, handle ) { + + // This "if" is needed for plain objects + if ( elem.removeEventListener ) { + elem.removeEventListener( type, handle ); + } +}; + +jQuery.Event = function( src, props ) { + + // Allow instantiation without the 'new' keyword + if ( !( this instanceof jQuery.Event ) ) { + return new jQuery.Event( src, props ); + } + + // Event object + if ( src && src.type ) { + this.originalEvent = src; + this.type = src.type; + + // Events bubbling up the document may have been marked as prevented + // by a handler lower down the tree; reflect the correct value. + this.isDefaultPrevented = src.defaultPrevented || + src.defaultPrevented === undefined && + + // Support: Android<4.0 + src.returnValue === false ? + returnTrue : + returnFalse; + + // Event type + } else { + this.type = src; + } + + // Put explicitly provided properties onto the event object + if ( props ) { + jQuery.extend( this, props ); + } + + // Create a timestamp if incoming event doesn't have one + this.timeStamp = src && src.timeStamp || jQuery.now(); + + // Mark it as fixed + this[ jQuery.expando ] = true; +}; + +// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding +// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html +jQuery.Event.prototype = { + constructor: jQuery.Event, + isDefaultPrevented: returnFalse, + isPropagationStopped: returnFalse, + isImmediatePropagationStopped: returnFalse, + isSimulated: false, + + preventDefault: function() { + var e = this.originalEvent; + + this.isDefaultPrevented = returnTrue; + + if ( e && !this.isSimulated ) { + e.preventDefault(); + } + }, + stopPropagation: function() { + var e = this.originalEvent; + + this.isPropagationStopped = returnTrue; + + if ( e && !this.isSimulated ) { + e.stopPropagation(); + } + }, + stopImmediatePropagation: function() { + var e = this.originalEvent; + + this.isImmediatePropagationStopped = returnTrue; + + if ( e && !this.isSimulated ) { + e.stopImmediatePropagation(); + } + + this.stopPropagation(); + } +}; + +// Create mouseenter/leave events using mouseover/out and event-time checks +// so that event delegation works in jQuery. +// Do the same for pointerenter/pointerleave and pointerover/pointerout +// +// Support: Safari 7 only +// Safari sends mouseenter too often; see: +// https://code.google.com/p/chromium/issues/detail?id=470258 +// for the description of the bug (it existed in older Chrome versions as well). +jQuery.each( { + mouseenter: "mouseover", + mouseleave: "mouseout", + pointerenter: "pointerover", + pointerleave: "pointerout" +}, function( orig, fix ) { + jQuery.event.special[ orig ] = { + delegateType: fix, + bindType: fix, + + handle: function( event ) { + var ret, + target = this, + related = event.relatedTarget, + handleObj = event.handleObj; + + // For mouseenter/leave call the handler if related is outside the target. + // NB: No relatedTarget if the mouse left/entered the browser window + if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) { + event.type = handleObj.origType; + ret = handleObj.handler.apply( this, arguments ); + event.type = fix; + } + return ret; + } + }; +} ); + +jQuery.fn.extend( { + on: function( types, selector, data, fn ) { + return on( this, types, selector, data, fn ); + }, + one: function( types, selector, data, fn ) { + return on( this, types, selector, data, fn, 1 ); + }, + off: function( types, selector, fn ) { + var handleObj, type; + if ( types && types.preventDefault && types.handleObj ) { + + // ( event ) dispatched jQuery.Event + handleObj = types.handleObj; + jQuery( types.delegateTarget ).off( + handleObj.namespace ? + handleObj.origType + "." + handleObj.namespace : + handleObj.origType, + handleObj.selector, + handleObj.handler + ); + return this; + } + if ( typeof types === "object" ) { + + // ( types-object [, selector] ) + for ( type in types ) { + this.off( type, selector, types[ type ] ); + } + return this; + } + if ( selector === false || typeof selector === "function" ) { + + // ( types [, fn] ) + fn = selector; + selector = undefined; + } + if ( fn === false ) { + fn = returnFalse; + } + return this.each( function() { + jQuery.event.remove( this, types, fn, selector ); + } ); + } +} ); + + +var + rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:-]+)[^>]*)\/>/gi, + + // Support: IE 10-11, Edge 10240+ + // In IE/Edge using regex groups here causes severe slowdowns. + // See https://connect.microsoft.com/IE/feedback/details/1736512/ + rnoInnerhtml = /\s*$/g; + +// Manipulating tables requires a tbody +function manipulationTarget( elem, content ) { + return jQuery.nodeName( elem, "table" ) && + jQuery.nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ? + + elem.getElementsByTagName( "tbody" )[ 0 ] || + elem.appendChild( elem.ownerDocument.createElement( "tbody" ) ) : + elem; +} + +// Replace/restore the type attribute of script elements for safe DOM manipulation +function disableScript( elem ) { + elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type; + return elem; +} +function restoreScript( elem ) { + var match = rscriptTypeMasked.exec( elem.type ); + + if ( match ) { + elem.type = match[ 1 ]; + } else { + elem.removeAttribute( "type" ); + } + + return elem; +} + +function cloneCopyEvent( src, dest ) { + var i, l, type, pdataOld, pdataCur, udataOld, udataCur, events; + + if ( dest.nodeType !== 1 ) { + return; + } + + // 1. Copy private data: events, handlers, etc. + if ( dataPriv.hasData( src ) ) { + pdataOld = dataPriv.access( src ); + pdataCur = dataPriv.set( dest, pdataOld ); + events = pdataOld.events; + + if ( events ) { + delete pdataCur.handle; + pdataCur.events = {}; + + for ( type in events ) { + for ( i = 0, l = events[ type ].length; i < l; i++ ) { + jQuery.event.add( dest, type, events[ type ][ i ] ); + } + } + } + } + + // 2. Copy user data + if ( dataUser.hasData( src ) ) { + udataOld = dataUser.access( src ); + udataCur = jQuery.extend( {}, udataOld ); + + dataUser.set( dest, udataCur ); + } +} + +// Fix IE bugs, see support tests +function fixInput( src, dest ) { + var nodeName = dest.nodeName.toLowerCase(); + + // Fails to persist the checked state of a cloned checkbox or radio button. + if ( nodeName === "input" && rcheckableType.test( src.type ) ) { + dest.checked = src.checked; + + // Fails to return the selected option to the default selected state when cloning options + } else if ( nodeName === "input" || nodeName === "textarea" ) { + dest.defaultValue = src.defaultValue; + } +} + +function domManip( collection, args, callback, ignored ) { + + // Flatten any nested arrays + args = concat.apply( [], args ); + + var fragment, first, scripts, hasScripts, node, doc, + i = 0, + l = collection.length, + iNoClone = l - 1, + value = args[ 0 ], + isFunction = jQuery.isFunction( value ); + + // We can't cloneNode fragments that contain checked, in WebKit + if ( isFunction || + ( l > 1 && typeof value === "string" && + !support.checkClone && rchecked.test( value ) ) ) { + return collection.each( function( index ) { + var self = collection.eq( index ); + if ( isFunction ) { + args[ 0 ] = value.call( this, index, self.html() ); + } + domManip( self, args, callback, ignored ); + } ); + } + + if ( l ) { + fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored ); + first = fragment.firstChild; + + if ( fragment.childNodes.length === 1 ) { + fragment = first; + } + + // Require either new content or an interest in ignored elements to invoke the callback + if ( first || ignored ) { + scripts = jQuery.map( getAll( fragment, "script" ), disableScript ); + hasScripts = scripts.length; + + // Use the original fragment for the last item + // instead of the first because it can end up + // being emptied incorrectly in certain situations (#8070). + for ( ; i < l; i++ ) { + node = fragment; + + if ( i !== iNoClone ) { + node = jQuery.clone( node, true, true ); + + // Keep references to cloned scripts for later restoration + if ( hasScripts ) { + + // Support: Android<4.1, PhantomJS<2 + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( scripts, getAll( node, "script" ) ); + } + } + + callback.call( collection[ i ], node, i ); + } + + if ( hasScripts ) { + doc = scripts[ scripts.length - 1 ].ownerDocument; + + // Reenable scripts + jQuery.map( scripts, restoreScript ); + + // Evaluate executable scripts on first document insertion + for ( i = 0; i < hasScripts; i++ ) { + node = scripts[ i ]; + if ( rscriptType.test( node.type || "" ) && + !dataPriv.access( node, "globalEval" ) && + jQuery.contains( doc, node ) ) { + + if ( node.src ) { + + // Optional AJAX dependency, but won't run scripts if not present + if ( jQuery._evalUrl ) { + jQuery._evalUrl( node.src ); + } + } else { + jQuery.globalEval( node.textContent.replace( rcleanScript, "" ) ); + } + } + } + } + } + } + + return collection; +} + +function remove( elem, selector, keepData ) { + var node, + nodes = selector ? jQuery.filter( selector, elem ) : elem, + i = 0; + + for ( ; ( node = nodes[ i ] ) != null; i++ ) { + if ( !keepData && node.nodeType === 1 ) { + jQuery.cleanData( getAll( node ) ); + } + + if ( node.parentNode ) { + if ( keepData && jQuery.contains( node.ownerDocument, node ) ) { + setGlobalEval( getAll( node, "script" ) ); + } + node.parentNode.removeChild( node ); + } + } + + return elem; +} + +jQuery.extend( { + htmlPrefilter: function( html ) { + return html.replace( rxhtmlTag, "<$1>" ); + }, + + clone: function( elem, dataAndEvents, deepDataAndEvents ) { + var i, l, srcElements, destElements, + clone = elem.cloneNode( true ), + inPage = jQuery.contains( elem.ownerDocument, elem ); + + // Fix IE cloning issues + if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) && + !jQuery.isXMLDoc( elem ) ) { + + // We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2 + destElements = getAll( clone ); + srcElements = getAll( elem ); + + for ( i = 0, l = srcElements.length; i < l; i++ ) { + fixInput( srcElements[ i ], destElements[ i ] ); + } + } + + // Copy the events from the original to the clone + if ( dataAndEvents ) { + if ( deepDataAndEvents ) { + srcElements = srcElements || getAll( elem ); + destElements = destElements || getAll( clone ); + + for ( i = 0, l = srcElements.length; i < l; i++ ) { + cloneCopyEvent( srcElements[ i ], destElements[ i ] ); + } + } else { + cloneCopyEvent( elem, clone ); + } + } + + // Preserve script evaluation history + destElements = getAll( clone, "script" ); + if ( destElements.length > 0 ) { + setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); + } + + // Return the cloned set + return clone; + }, + + cleanData: function( elems ) { + var data, elem, type, + special = jQuery.event.special, + i = 0; + + for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) { + if ( acceptData( elem ) ) { + if ( ( data = elem[ dataPriv.expando ] ) ) { + if ( data.events ) { + for ( type in data.events ) { + if ( special[ type ] ) { + jQuery.event.remove( elem, type ); + + // This is a shortcut to avoid jQuery.event.remove's overhead + } else { + jQuery.removeEvent( elem, type, data.handle ); + } + } + } + + // Support: Chrome <= 35-45+ + // Assign undefined instead of using delete, see Data#remove + elem[ dataPriv.expando ] = undefined; + } + if ( elem[ dataUser.expando ] ) { + + // Support: Chrome <= 35-45+ + // Assign undefined instead of using delete, see Data#remove + elem[ dataUser.expando ] = undefined; + } + } + } + } +} ); + +jQuery.fn.extend( { + + // Keep domManip exposed until 3.0 (gh-2225) + domManip: domManip, + + detach: function( selector ) { + return remove( this, selector, true ); + }, + + remove: function( selector ) { + return remove( this, selector ); + }, + + text: function( value ) { + return access( this, function( value ) { + return value === undefined ? + jQuery.text( this ) : + this.empty().each( function() { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + this.textContent = value; + } + } ); + }, null, value, arguments.length ); + }, + + append: function() { + return domManip( this, arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.appendChild( elem ); + } + } ); + }, + + prepend: function() { + return domManip( this, arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.insertBefore( elem, target.firstChild ); + } + } ); + }, + + before: function() { + return domManip( this, arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this ); + } + } ); + }, + + after: function() { + return domManip( this, arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this.nextSibling ); + } + } ); + }, + + empty: function() { + var elem, + i = 0; + + for ( ; ( elem = this[ i ] ) != null; i++ ) { + if ( elem.nodeType === 1 ) { + + // Prevent memory leaks + jQuery.cleanData( getAll( elem, false ) ); + + // Remove any remaining nodes + elem.textContent = ""; + } + } + + return this; + }, + + clone: function( dataAndEvents, deepDataAndEvents ) { + dataAndEvents = dataAndEvents == null ? false : dataAndEvents; + deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; + + return this.map( function() { + return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); + } ); + }, + + html: function( value ) { + return access( this, function( value ) { + var elem = this[ 0 ] || {}, + i = 0, + l = this.length; + + if ( value === undefined && elem.nodeType === 1 ) { + return elem.innerHTML; + } + + // See if we can take a shortcut and just use innerHTML + if ( typeof value === "string" && !rnoInnerhtml.test( value ) && + !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) { + + value = jQuery.htmlPrefilter( value ); + + try { + for ( ; i < l; i++ ) { + elem = this[ i ] || {}; + + // Remove element nodes and prevent memory leaks + if ( elem.nodeType === 1 ) { + jQuery.cleanData( getAll( elem, false ) ); + elem.innerHTML = value; + } + } + + elem = 0; + + // If using innerHTML throws an exception, use the fallback method + } catch ( e ) {} + } + + if ( elem ) { + this.empty().append( value ); + } + }, null, value, arguments.length ); + }, + + replaceWith: function() { + var ignored = []; + + // Make the changes, replacing each non-ignored context element with the new content + return domManip( this, arguments, function( elem ) { + var parent = this.parentNode; + + if ( jQuery.inArray( this, ignored ) < 0 ) { + jQuery.cleanData( getAll( this ) ); + if ( parent ) { + parent.replaceChild( elem, this ); + } + } + + // Force callback invocation + }, ignored ); + } +} ); + +jQuery.each( { + appendTo: "append", + prependTo: "prepend", + insertBefore: "before", + insertAfter: "after", + replaceAll: "replaceWith" +}, function( name, original ) { + jQuery.fn[ name ] = function( selector ) { + var elems, + ret = [], + insert = jQuery( selector ), + last = insert.length - 1, + i = 0; + + for ( ; i <= last; i++ ) { + elems = i === last ? this : this.clone( true ); + jQuery( insert[ i ] )[ original ]( elems ); + + // Support: QtWebKit + // .get() because push.apply(_, arraylike) throws + push.apply( ret, elems.get() ); + } + + return this.pushStack( ret ); + }; +} ); + + +var iframe, + elemdisplay = { + + // Support: Firefox + // We have to pre-define these values for FF (#10227) + HTML: "block", + BODY: "block" + }; + +/** + * Retrieve the actual display of a element + * @param {String} name nodeName of the element + * @param {Object} doc Document object + */ + +// Called only from within defaultDisplay +function actualDisplay( name, doc ) { + var elem = jQuery( doc.createElement( name ) ).appendTo( doc.body ), + + display = jQuery.css( elem[ 0 ], "display" ); + + // We don't have any data stored on the element, + // so use "detach" method as fast way to get rid of the element + elem.detach(); + + return display; +} + +/** + * Try to determine the default display value of an element + * @param {String} nodeName + */ +function defaultDisplay( nodeName ) { + var doc = document, + display = elemdisplay[ nodeName ]; + + if ( !display ) { + display = actualDisplay( nodeName, doc ); + + // If the simple way fails, read from inside an iframe + if ( display === "none" || !display ) { + + // Use the already-created iframe if possible + iframe = ( iframe || jQuery( ""; + } + docs.embedUrl = embedUrl; + function runUrl(url, padding, id) { + var embed = "
"; + return embed; + } + docs.runUrl = runUrl; + function docsEmbedUrl(rootUrl, id, height) { + var docurl = rootUrl + "--docs?projectid=" + id; + height = Math.ceil(height || 300); + return "
"; + } + docs.docsEmbedUrl = docsEmbedUrl; + var inlineTags = { + b: 1, + strong: 1, + em: 1, + }; + function translate(html, locale) { + var missing = {}; + function translateOne(toTranslate) { + var spm = /^(\s*)([^]*?)(\s*)$/.exec(toTranslate); + var text = spm[2].replace(/\s+/g, " "); + if (text == "" || /^((IE=edge,.*|width=device-width.*|(https?:\/\/|\/)[\w@\/\.]+|@[\-\w]+@|\{[^\{\}]+\}|[^a-zA-Z]*|( )+)\s*)+$/.test(text)) + return null; + var v = U.lookup(locale, text); + if (v) + text = v; + else + missing[text] = ""; + return spm[1] + text + spm[3]; + } + html = html.replace(/<([\/\w]+)([^<>]*)>/g, function (full, tagname, args) { + var key = tagname.replace(/^\//, "").toLowerCase(); + if (inlineTags[key] === 1) + return "&llt;" + tagname + args + "&ggt;"; + return full; + }); + function ungt(s) { + return s.replace(/&llt;/g, "<").replace(/&ggt;/g, ">"); + } + html = "" + html; + html = html.replace(/(<([\/\w]+)([^<>]*)>)([^<>]+)/g, function (full, fullTag, tagname, args, str) { + if (tagname == "script" || tagname == "style") + return ungt(full); + var tr = translateOne(ungt(str)); + if (tr == null) + return ungt(full); + return fullTag + tr; + }); + html = html.replace(/(<[^<>]*)(content|placeholder|alt|title)="([^"]+)"/g, function (full, pref, attr, text) { + var tr = translateOne(text); + if (tr == null) + return full; + return pref + attr + '="' + text.replace(/"/g, "''") + '"'; + }); + html = html.replace(/^/g, ""); + return { + text: html, + missing: missing + }; + } + docs.translate = translate; + })(docs = pxt.docs || (pxt.docs = {})); +})(pxt || (pxt = {})); +var pxt; +(function (pxt) { + var github; + (function (github) { + function listRefsAsync(repopath, namespace) { + if (namespace === void 0) { namespace = "tags"; } + return pxt.U.httpGetJsonAsync("https://api.github.com/repos/" + repopath + "/git/refs/" + namespace + "/?per_page=100") + .then(function (resp) { + var tagnames = resp + .map(function (x) { return x.ref.replace(/^refs\/[^\/]+\//, ""); }); + tagnames.sort(pxt.semver.strcmp); + return tagnames; + }, function (err) { + if (err.statusCode == 404) + return []; + else + return Promise.reject(err); + }); + } + github.listRefsAsync = listRefsAsync; + function resolveRefAsync(r) { + if (r.object.type == "commit") + return Promise.resolve(r.object.sha); + else if (r.object.type == "tag") + return pxt.U.httpGetJsonAsync(r.object.url) + .then(function (r) { + return r.object.type == "commit" ? r.object.sha : + Promise.reject(new Error("Bad type (2nd order) " + r.object.type)); + }); + else + return Promise.reject(new Error("Bad type " + r.object.type)); + } + function tagToShaAsync(repopath, tag) { + if (/^[a-f0-9]{40}$/.test(tag)) + return Promise.resolve(tag); + return pxt.U.httpGetJsonAsync("https://api.github.com/repos/" + repopath + "/git/refs/tags/" + tag) + .then(resolveRefAsync, function (e) { + return pxt.U.httpGetJsonAsync("https://api.github.com/repos/" + repopath + "/git/refs/heads/" + tag) + .then(resolveRefAsync); + }); + } + github.tagToShaAsync = tagToShaAsync; + function pkgConfigAsync(repopath, tag) { + if (tag === void 0) { tag = "master"; } + var url = "https://raw.githubusercontent.com/" + repopath + "/" + tag + "/" + pxt.CONFIG_NAME; + return pxt.U.httpGetTextAsync(url) + .then(function (v) { return JSON.parse(v); }); + } + github.pkgConfigAsync = pkgConfigAsync; + function downloadPackageAsync(repoWithTag, config, current) { + if (current === void 0) { current = null; } + var p = parseRepoId(repoWithTag); + if (!p) { + pxt.log('Unknown github syntax'); + return Promise.resolve(undefined); + } + if (!isRepoApproved(p, config)) { + pxt.tickEvent("github.download.unauthorized"); + pxt.log('Github repo not approved'); + return Promise.resolve(undefined); + } + return tagToShaAsync(p.fullName, p.tag) + .then(function (sha) { + var pref = "https://raw.githubusercontent.com/" + p.fullName + "/" + sha + "/"; + if (!current) + current = { sha: "", files: {} }; + if (current.sha === sha) + return Promise.resolve(current); + else { + console.log("Downloading " + repoWithTag + " -> " + sha); + return pxt.U.httpGetTextAsync(pref + pxt.CONFIG_NAME) + .then(function (pkg) { + current.files = {}; + current.sha = ""; + current.files[pxt.CONFIG_NAME] = pkg; + var cfg = JSON.parse(pkg); + return Promise.map(cfg.files.concat(cfg.testFiles || []), function (fn) { return pxt.U.httpGetTextAsync(pref + fn) + .then(function (text) { + current.files[fn] = text; + }); }) + .then(function () { + current.sha = sha; + return current; + }); + }); + } + }); + } + github.downloadPackageAsync = downloadPackageAsync; + (function (GitRepoStatus) { + GitRepoStatus[GitRepoStatus["Unknown"] = 0] = "Unknown"; + GitRepoStatus[GitRepoStatus["Approved"] = 1] = "Approved"; + GitRepoStatus[GitRepoStatus["Banned"] = 2] = "Banned"; + })(github.GitRepoStatus || (github.GitRepoStatus = {})); + var GitRepoStatus = github.GitRepoStatus; + function mkRepo(r, config, tag) { + if (!r) + return undefined; + var rr = { + owner: r.owner.login.toLowerCase(), + fullName: r.full_name.toLowerCase(), + name: r.name, + description: r.description, + defaultBranch: r.default_branch, + tag: tag + }; + rr.status = repoStatus(rr, config); + return rr; + } + function repoStatus(rr, config) { + return isRepoBanned(rr, config) ? GitRepoStatus.Banned + : isRepoApproved(rr, config) ? GitRepoStatus.Approved + : GitRepoStatus.Unknown; + } + github.repoStatus = repoStatus; + function isOrgBanned(repo, config) { + if (!repo || !config || !repo.owner) + return true; + if (config.bannedOrgs + && config.bannedOrgs.some(function (org) { return org.toLowerCase() == repo.owner.toLowerCase(); })) + return true; + return false; + } + function isRepoBanned(repo, config) { + if (isOrgBanned(repo, config)) + return true; + if (!repo || !config || !repo.fullName) + return true; + if (config.bannedRepos + && config.bannedRepos.some(function (fn) { return fn.toLowerCase() == repo.fullName.toLowerCase(); })) + return true; + return false; + } + function isOrgApproved(repo, config) { + if (!repo || !config) + return false; + if (repo.owner + && config.approvedOrgs + && config.approvedOrgs.some(function (org) { return org.toLowerCase() == repo.owner.toLowerCase(); })) + return true; + return false; + } + function isRepoApproved(repo, config) { + if (isOrgApproved(repo, config)) + return true; + if (!repo || !config) + return false; + if (repo.fullName + && config.approvedRepos + && config.approvedRepos.some(function (fn) { return fn.toLowerCase() == repo.fullName.toLowerCase(); })) + return true; + return false; + } + function repoAsync(id, config) { + var rid = parseRepoId(id); + var status = repoStatus(rid, config); + if (status == GitRepoStatus.Banned) + return Promise.resolve(undefined); + // always use proxy + return pxt.Util.httpGetJsonAsync(pxt.Cloud.apiRoot + "gh/" + rid.fullName) + .then(function (meta) { + if (!meta) + return undefined; + return { + github: true, + owner: rid.owner, + fullName: rid.fullName, + name: meta.name, + description: meta.description, + defaultBranch: "master", + tag: rid.tag, + status: status + }; + }); + } + github.repoAsync = repoAsync; + function searchAsync(query, config) { + if (!config) + return Promise.resolve([]); + var repos = query.split('|').map(parseRepoUrl).filter(function (repo) { return !!repo; }); + if (repos.length > 0) + return Promise.all(repos.map(function (id) { return repoAsync(id.path, config); })) + .then(function (rs) { return rs.filter(function (r) { return r.status == GitRepoStatus.Approved; }); }); + query += " in:name,description,readme \"for PXT/" + pxt.appTarget.id + "\""; + return pxt.U.httpGetJsonAsync("https://api.github.com/search/repositories?q=" + encodeURIComponent(query)) + .then(function (rs) { return rs.items.map(function (item) { return mkRepo(item, config); }).filter(function (r) { return r.status == GitRepoStatus.Approved; }); }); + } + github.searchAsync = searchAsync; + function parseRepoUrl(url) { + if (!url) + return undefined; + var m = /^((https:\/\/)?github.com\/)?([^/]+\/[^/#]+)(#(\w+))?$/i.exec(url.trim()); + if (!m) + return; + var r = { + repo: m ? m[3].toLowerCase() : null, + tag: m ? m[5] : null + }; + r.path = r.repo + (r.tag ? '#' + r.tag : ''); + return r; + } + github.parseRepoUrl = parseRepoUrl; + function parseRepoId(repo) { + if (!repo) + return undefined; + repo = repo.replace(/^github:/i, ""); + var m = /([^#]+)(#(.*))?/.exec(repo); + var owner = m ? m[1].split('/')[0].toLowerCase() : undefined; + return { + owner: owner, + fullName: m ? m[1].toLowerCase() : repo.toLowerCase(), + tag: m ? m[3] : null + }; + } + github.parseRepoId = parseRepoId; + function isGithubId(id) { + return id.slice(0, 7) == "github:"; + } + github.isGithubId = isGithubId; + function stringifyRepo(p) { + return p ? "github:" + p.fullName.toLowerCase() + "#" + (p.tag || "master") : undefined; + } + github.stringifyRepo = stringifyRepo; + function noramlizeRepoId(id) { + return stringifyRepo(parseRepoId(id)); + } + github.noramlizeRepoId = noramlizeRepoId; + function latestVersionAsync(path, config) { + var parsed = parseRepoId(path); + if (!parsed) + return Promise.resolve(null); + return repoAsync(parsed.fullName, config) + .then(function (scr) { + if (!scr) + return undefined; + return listRefsAsync(scr.fullName, "tags") + .then(function (tags) { + tags.sort(pxt.semver.strcmp); + tags.reverse(); + if (tags[0]) + return Promise.resolve(tags[0]); + else + return tagToShaAsync(scr.fullName, scr.defaultBranch); + }); + }); + } + github.latestVersionAsync = latestVersionAsync; + function publishGistAsync(token, forceNew, files, name, currentGistId) { + // Github gist API: https://developer.github.com/v3/gists/ + var data = { + "description": name, + "public": false, + "files": files + }; + var headers = {}; + var method, url = "https://api.github.com/gists"; + if (token) + headers['Authorization'] = "token " + token; + if (currentGistId && token && !forceNew) { + // Patch existing gist + method = 'PATCH'; + url += "/" + currentGistId; + } + else { + // Create new gist + method = 'POST'; + } + return pxt.U.requestAsync({ + url: url, + allowHttpErrors: true, + headers: headers, + method: method, + data: data || {} }) + .then(function (resp) { + if ((resp.statusCode == 200 || resp.statusCode == 201) && resp.json.id) { + return Promise.resolve(resp.json.id); + } + else if (resp.statusCode == 404 && method == 'PATCH') { + return Promise.reject(resp.statusCode); + } + else if (resp.statusCode == 404) { + return Promise.reject("Make sure to add the ``gist`` scope to your token. " + resp.text); + } + return Promise.reject(resp.text); + }); + } + github.publishGistAsync = publishGistAsync; + })(github = pxt.github || (pxt.github = {})); +})(pxt || (pxt = {})); +var pxt; +(function (pxt) { + var HF2; + (function (HF2) { + var HF2_CMD_BININFO = 0x0001; // no arguments + var HF2_MODE_BOOTLOADER = 0x01; + var HF2_MODE_USERSPACE = 0x02; + /* + struct HF2_BININFO_Result { + uint32_t mode; + uint32_t flash_page_size; + uint32_t flash_num_pages; + uint32_t max_message_size; + }; + */ + var HF2_CMD_INFO = 0x0002; + // no arguments + // results is utf8 character array + var HF2_CMD_RESET_INTO_APP = 0x0003; // no arguments, no result + var HF2_CMD_RESET_INTO_BOOTLOADER = 0x0004; // no arguments, no result + var HF2_CMD_START_FLASH = 0x0005; // no arguments, no result + var HF2_CMD_WRITE_FLASH_PAGE = 0x0006; + /* + struct HF2_WRITE_FLASH_PAGE_Command { + uint32_t target_addr; + uint32_t data[flash_page_size]; + }; + */ + // no result + var HF2_CMD_CHKSUM_PAGES = 0x0007; + /* + struct HF2_CHKSUM_PAGES_Command { + uint32_t target_addr; + uint32_t num_pages; + }; + struct HF2_CHKSUM_PAGES_Result { + uint16_t chksums[num_pages]; + }; + */ + var HF2_CMD_READ_WORDS = 0x0008; + /* + struct HF2_READ_WORDS_Command { + uint32_t target_addr; + uint32_t num_words; + }; + struct HF2_READ_WORDS_Result { + uint32_t words[num_words]; + }; + */ + var HF2_CMD_WRITE_WORDS = 0x0009; + /* + struct HF2_WRITE_WORDS_Command { + uint32_t target_addr; + uint32_t num_words; + uint32_t words[num_words]; + }; + */ + // no result + var HF2_FLAG_SERIAL_OUT = 0x80; + var HF2_FLAG_SERIAL_ERR = 0xC0; + var HF2_FLAG_CMDPKT_LAST = 0x40; + var HF2_FLAG_CMDPKT_BODY = 0x00; + var HF2_FLAG_MASK = 0xC0; + var HF2_SIZE_MASK = 63; + var HF2_STATUS_OK = 0x00; + var HF2_STATUS_INVALID_CMD = 0x01; + var HF2_STATUS_EXEC_ERR = 0x02; + function write32(buf, pos, v) { + buf[pos + 0] = (v >> 0) & 0xff; + buf[pos + 1] = (v >> 8) & 0xff; + buf[pos + 2] = (v >> 16) & 0xff; + buf[pos + 3] = (v >> 24) & 0xff; + } + HF2.write32 = write32; + function write16(buf, pos, v) { + buf[pos + 0] = (v >> 0) & 0xff; + buf[pos + 1] = (v >> 8) & 0xff; + } + HF2.write16 = write16; + function read32(buf, pos) { + return (buf[pos] | (buf[pos + 1] << 8) | (buf[pos + 2] << 16) | (buf[pos + 3] << 24)) >>> 0; + } + HF2.read32 = read32; + function read16(buf, pos) { + return buf[pos] | (buf[pos + 1] << 8); + } + HF2.read16 = read16; + function log(msg) { + console.log("HF2: " + msg); + } + var Wrapper = (function () { + function Wrapper(io) { + var _this = this; + this.io = io; + this.cmdSeq = pxt.U.randomUint32(); + this.lock = new pxt.U.PromiseQueue(); + this.maxMsgSize = 63; // when running in forwarding mode, we do not really know + this.bootloaderMode = false; + this.reconnectTries = 0; + this.msgs = new pxt.U.PromiseBuffer(); + this.onSerial = function (buf, isStderr) { }; + var frames = []; + io.onSerial = function (b, e) { return _this.onSerial(b, e); }; + io.onData = function (buf) { + var tp = buf[0] & HF2_FLAG_MASK; + var len = buf[0] & 63; + //console.log(`msg tp=${tp} len=${len}`) + var frame = new Uint8Array(len); + pxt.U.memcpy(frame, 0, buf, 1, len); + if (tp & HF2_FLAG_SERIAL_OUT) { + _this.onSerial(frame, tp == HF2_FLAG_SERIAL_ERR); + return; + } + frames.push(frame); + if (tp == HF2_FLAG_CMDPKT_BODY) { + return; + } + else { + pxt.U.assert(tp == HF2_FLAG_CMDPKT_LAST); + var total = 0; + for (var _i = 0, frames_1 = frames; _i < frames_1.length; _i++) { + var f = frames_1[_i]; + total += f.length; + } + var r = new Uint8Array(total); + var ptr = 0; + for (var _a = 0, frames_2 = frames; _a < frames_2.length; _a++) { + var f = frames_2[_a]; + pxt.U.memcpy(r, ptr, f); + ptr += f.length; + } + frames = []; + _this.msgs.push(r); + } + }; + io.onError = function (err) { + log("recv error: " + err.message); + //this.msgs.pushError(err) + }; + } + Wrapper.prototype.resetState = function () { + this.lock = new pxt.U.PromiseQueue(); + this.info = null; + this.infoRaw = null; + this.pageSize = null; + this.flashSize = null; + this.maxMsgSize = 63; + this.bootloaderMode = false; + this.msgs.drain(); + }; + Wrapper.prototype.reconnectAsync = function (first) { + var _this = this; + if (first === void 0) { first = false; } + this.resetState(); + if (first) + return this.initAsync(); + return this.io.reconnectAsync() + .then(function () { return _this.initAsync(); }) + .catch(function (e) { + if (_this.reconnectTries < 5) { + _this.reconnectTries++; + log("error " + e.message + "; reconnecting attempt #" + _this.reconnectTries); + return Promise.delay(500) + .then(function () { return _this.reconnectAsync(); }); + } + else { + throw e; + } + }); + }; + Wrapper.prototype.error = function (m) { + return this.io.error(m); + }; + Wrapper.prototype.talkAsync = function (cmd, data) { + var _this = this; + if (this.io.talksAsync) + return this.io.talksAsync([{ cmd: cmd, data: data }]) + .then(function (v) { return v[0]; }); + var len = 8; + if (data) + len += data.length; + var pkt = new Uint8Array(len); + var seq = ++this.cmdSeq & 0xffff; + write32(pkt, 0, cmd); + write16(pkt, 4, seq); + write16(pkt, 6, 0); + if (data) + pxt.U.memcpy(pkt, 8, data, 0, data.length); + var numSkipped = 0; + var handleReturnAsync = function () { + return _this.msgs.shiftAsync(1000) // we wait up to a second + .then(function (res) { + if (read16(res, 0) != seq) { + if (numSkipped < 3) { + numSkipped++; + log("message out of sync, (" + seq + " vs " + read16(res, 0) + "); will re-try"); + return handleReturnAsync(); + } + _this.error("out of sync"); + } + var info = ""; + if (res[3]) + info = "; info=" + res[3]; + switch (res[2]) { + case HF2_STATUS_OK: + return res.slice(4); + case HF2_STATUS_INVALID_CMD: + _this.error("invalid command" + info); + break; + case HF2_STATUS_EXEC_ERR: + _this.error("execution error" + info); + break; + default: + _this.error("error " + res[2] + info); + break; + } + return null; + }); + }; + return this.sendMsgAsync(pkt) + .then(handleReturnAsync); + }; + Wrapper.prototype.sendMsgAsync = function (buf) { + return this.sendMsgCoreAsync(buf); + }; + Wrapper.prototype.sendSerialAsync = function (buf, useStdErr) { + if (useStdErr === void 0) { useStdErr = false; } + if (this.io.sendSerialAsync) + return this.io.sendSerialAsync(buf, useStdErr); + return this.sendMsgCoreAsync(buf, useStdErr ? 2 : 1); + }; + Wrapper.prototype.sendMsgCoreAsync = function (buf, serial) { + var _this = this; + if (serial === void 0) { serial = 0; } + // Util.assert(buf.length <= this.maxMsgSize) + var frame = new Uint8Array(64); + var loop = function (pos) { + var len = buf.length - pos; + if (len <= 0) + return Promise.resolve(); + if (len > 63) { + len = 63; + frame[0] = HF2_FLAG_CMDPKT_BODY; + } + else { + frame[0] = HF2_FLAG_CMDPKT_LAST; + } + if (serial) + frame[0] = serial == 1 ? HF2_FLAG_SERIAL_OUT : HF2_FLAG_SERIAL_ERR; + frame[0] |= len; + for (var i = 0; i < len; ++i) + frame[i + 1] = buf[pos + i]; + return _this.io.sendPacketAsync(frame) + .then(function () { return loop(pos + len); }); + }; + return this.lock.enqueue("out", function () { return loop(0); }); + }; + Wrapper.prototype.switchToBootloaderAsync = function () { + var _this = this; + if (this.bootloaderMode) + return Promise.resolve(); + log("Switching into bootloader mode"); + return this.talkAsync(HF2_CMD_START_FLASH) + .then(function () { return _this.initAsync(); }) + .then(function () { + if (!_this.bootloaderMode) + _this.error("cannot switch into bootloader mode"); + }); + }; + Wrapper.prototype.reflashAsync = function (blocks) { + var _this = this; + return this.flashAsync(blocks) + .then(function () { return Promise.delay(100); }) + .then(function () { return _this.reconnectAsync(); }); + }; + Wrapper.prototype.readWordsAsync = function (addr, numwords) { + var args = new Uint8Array(8); + write32(args, 0, addr); + write32(args, 4, numwords); + pxt.U.assert(numwords <= 64); // just sanity check + return this.talkAsync(HF2_CMD_READ_WORDS, args); + }; + Wrapper.prototype.flashAsync = function (blocks) { + var _this = this; + var start = Date.now(); + var fstart = 0; + var loopAsync = function (pos) { + if (pos >= blocks.length) + return Promise.resolve(); + var b = blocks[pos]; + pxt.U.assert(b.payloadSize == _this.pageSize); + var buf = new Uint8Array(4 + b.payloadSize); + write32(buf, 0, b.targetAddr); + pxt.U.memcpy(buf, 4, b.data, 0, b.payloadSize); + return _this.talkAsync(HF2_CMD_WRITE_FLASH_PAGE, buf) + .then(function () { return loopAsync(pos + 1); }); + }; + return this.switchToBootloaderAsync() + .then(function () { + var size = blocks.length * _this.pageSize; + log("Starting flash (" + Math.round(size / 1024) + "kB)."); + fstart = Date.now(); + return onlyChangedBlocksAsync(blocks, function (a, l) { return _this.readWordsAsync(a, l); }); + }) + .then(function (res) { + if (res.length != blocks.length) { + blocks = res; + var size = blocks.length * _this.pageSize; + log("Performing partial flash (" + Math.round(size / 1024) + "kB)."); + } + }) + .then(function () { return loopAsync(0); }) + .then(function () { + var n = Date.now(); + var t0 = n - start; + var t1 = n - fstart; + log("Flashing done at " + Math.round(blocks.length * _this.pageSize / t1 * 1000 / 1024) + " kB/s in " + t0 + "ms (reset " + (t0 - t1) + "ms). Resetting."); + }) + .then(function () { + return _this.talkAsync(HF2_CMD_RESET_INTO_APP) + .catch(function (e) { + // error expected here - device is resetting + }); + }) + .then(function () { }); + }; + Wrapper.prototype.initAsync = function () { + var _this = this; + return Promise.resolve() + .then(function () { return _this.talkAsync(HF2_CMD_BININFO); }) + .then(function (binfo) { + _this.bootloaderMode = binfo[0] == HF2_MODE_BOOTLOADER; + _this.pageSize = read32(binfo, 4); + _this.flashSize = read32(binfo, 8) * _this.pageSize; + _this.maxMsgSize = read32(binfo, 12); + log("Connected; msgSize " + _this.maxMsgSize + "B; flash " + _this.flashSize / 1024 + "kB; " + (_this.bootloaderMode ? "bootloader" : "application") + " mode"); + return _this.talkAsync(HF2_CMD_INFO); + }) + .then(function (buf) { + _this.infoRaw = pxt.U.fromUTF8(pxt.U.uint8ArrayToString(buf)); + var info = {}; + ("Header: " + _this.infoRaw).replace(/^([\w\-]+):\s*([^\n\r]*)/mg, function (f, n, v) { + info[n.replace(/-/g, "")] = v; + return ""; + }); + _this.info = info; + var m = /v(\d\S+)\s+(\S+)/.exec(_this.info.Header); + _this.info.Parsed = { + Version: m[1], + Features: m[2], + }; + log("Board-ID: " + _this.info.BoardID); + }) + .then(function () { + _this.reconnectTries = 0; + }); + }; + return Wrapper; + }()); + HF2.Wrapper = Wrapper; + function readChecksumBlockAsync(readWordsAsync) { + if (!pxt.appTarget.compile.flashChecksumAddr) + return Promise.resolve(null); + return readWordsAsync(pxt.appTarget.compile.flashChecksumAddr, 12) + .then(function (buf) { + var blk = pxtc.hex.parseChecksumBlock(buf); + if (!blk) + return null; + return readWordsAsync(blk.endMarkerPos, 1) + .then(function (w) { + if (read32(w, 0) != blk.endMarker) { + pxt.log("end-marker mismatch"); + return null; + } + return blk; + }); + }); + } + function onlyChangedBlocksAsync(blocks, readWordsAsync) { + if (!pxt.appTarget.compile.flashChecksumAddr) + return Promise.resolve(blocks); + var blBuf = pxtc.UF2.readBytes(blocks, pxt.appTarget.compile.flashChecksumAddr, 12 * 4); + var blChk = pxtc.hex.parseChecksumBlock(blBuf); + if (!blChk) + return Promise.resolve(blocks); + return readChecksumBlockAsync(readWordsAsync) + .then(function (devChk) { + if (!devChk) + return blocks; + var regionsOk = devChk.regions.filter(function (r) { + var hasMatching = blChk.regions.some(function (r2) { + return r.checksum == r2.checksum && + r.length == r2.length && + r.start == r2.start; + }); + return hasMatching; + }); + if (regionsOk.length == 0) + return blocks; + log("skipping flash at: " + + regionsOk.map(function (r) { + return (pxtc.assembler.tohex(r.start) + " (" + r.length / 1024 + "kB)"); + }) + .join(", ")); + var unchangedAddr = function (a) { + return regionsOk.some(function (r) { return r.start <= a && a < r.start + r.length; }); + }; + return blocks.filter(function (b) { + return !(unchangedAddr(b.targetAddr) && + unchangedAddr(b.targetAddr + b.payloadSize - 1)); + }); + }); + } + HF2.onlyChangedBlocksAsync = onlyChangedBlocksAsync; + })(HF2 = pxt.HF2 || (pxt.HF2 = {})); +})(pxt || (pxt = {})); +// see http://semver.org/ +var pxt; +(function (pxt) { + var semver; + (function (semver) { + function cmp(a, b) { + if (!a) + if (!b) + return 0; + else + return 1; + else if (!b) + return -1; + else { + var d = a.major - b.major || a.minor - b.minor || a.patch - b.patch; + if (d) + return d; + if (a.pre.length == 0 && b.pre.length > 0) + return 1; + if (a.pre.length > 0 && b.pre.length == 0) + return -1; + for (var i = 0; i < a.pre.length + 1; ++i) { + var aa = a.pre[i]; + var bb = b.pre[i]; + if (!aa) + if (!bb) + return 0; + else + return -1; + else if (!bb) + return 1; + else if (/^\d+$/.test(aa)) + if (/^\d+$/.test(bb)) { + d = parseInt(aa) - parseInt(bb); + if (d) + return d; + } + else + return -1; + else if (/^\d+$/.test(bb)) + return 1; + else { + d = pxt.U.strcmp(aa, bb); + if (d) + return d; + } + } + return 0; + } + } + semver.cmp = cmp; + function parse(v) { + var r = tryParse(v); + if (!r) + pxt.U.userError(pxt.U.lf("'{0}' doesn't look like a semantic version number", v)); + return r; + } + semver.parse = parse; + function tryParse(v) { + if (/^v\d/i.test(v)) + v = v.slice(1); + var m = /^(\d+)\.(\d+)\.(\d+)(-([0-9a-zA-Z\-\.]+))?(\+([0-9a-zA-Z\-\.]+))?$/.exec(v); + if (m) + return { + major: parseInt(m[1]), + minor: parseInt(m[2]), + patch: parseInt(m[3]), + pre: m[5] ? m[5].split(".") : [], + build: m[7] ? m[7].split(".") : [] + }; + return null; + } + semver.tryParse = tryParse; + function stringify(v) { + var r = v.major + "." + v.minor + "." + v.patch; + if (v.pre.length) + r += "-" + v.pre.join("."); + if (v.build.length) + r += "+" + v.build.join("."); + return r; + } + semver.stringify = stringify; + function strcmp(a, b) { + var aa = tryParse(a); + var bb = tryParse(b); + if (!aa && !bb) + return pxt.U.strcmp(a, b); + else + return cmp(aa, bb); + } + semver.strcmp = strcmp; + function test() { + console.log("Test semver"); + var d = [ + "0.9.0", + "1.0.0-0.3.7", + "1.0.0-alpha", "1.0.0-alpha.1", + "1.0.0-alpha.beta", "1.0.0-beta", + "1.0.0-beta.2", "1.0.0-beta.11", + "1.0.0-rc.1", + "1.0.0-x.7.z.92", + "1.0.0", + "1.0.1", + "1.9.0", "1.10.0", "1.11.0" + ]; + for (var i = 0; i < d.length; ++i) { + var p = parse(d[i]); + console.log(d[i], p); + pxt.U.assert(stringify(p) == d[i]); + for (var j = 0; j < d.length; ++j) { + var x = cmp(p, parse(d[j])); + console.log(d[i], d[j], x); + if (i < j) + pxt.U.assert(x < 0); + else if (i > j) + pxt.U.assert(x > 0); + else + pxt.U.assert(x == 0); + } + } + } + semver.test = test; + })(semver = pxt.semver || (pxt.semver = {})); +})(pxt || (pxt = {})); +var pxt; +(function (pxt) { + function simshim(prog) { + var SK = ts.SyntaxKind; + var checker = prog.getTypeChecker(); + var mainWr = pxt.cpp.nsWriter("declare namespace"); + var currNs = ""; + for (var _i = 0, _a = prog.getSourceFiles(); _i < _a.length; _i++) { + var src = _a[_i]; + if (!pxt.U.startsWith(src.fileName, "sim/")) + continue; + for (var _b = 0, _c = src.statements; _b < _c.length; _b++) { + var stmt = _c[_b]; + var mod = stmt; + if (stmt.kind == SK.ModuleDeclaration && mod.name.text == "pxsim") { + doStmt(mod.body); + } + } + } + var res = {}; + res[pxt.appTarget.corepkg] = mainWr.finish(); + return res; + function typeOf(node) { + var r; + if (ts.isExpression(node)) + r = checker.getContextualType(node); + if (!r) + r = checker.getTypeAtLocation(node); + return r; + } + /* + let doSymbol = (sym: ts.Symbol) => { + if (sym.getFlags() & ts.SymbolFlags.HasExports) { + typechecker.getExportsOfModule(sym).forEach(doSymbol) + } + decls[pxtc.getFullName(typechecker, sym)] = sym + } + */ + function emitModuleDeclaration(mod) { + var prevNs = currNs; + if (currNs) + currNs += "."; + currNs += mod.name.text; + doStmt(mod.body); + currNs = prevNs; + } + function mapType(tp) { + var fn = checker.typeToString(tp, null, ts.TypeFormatFlags.UseFullyQualifiedType); + switch (fn) { + case "pxsim.RefAction": return "() => void"; + default: + return fn.replace(/^pxsim\./, ""); + } + } + function promiseElementType(tp) { + if ((tp.flags & ts.TypeFlags.Reference) && tp.symbol.name == "Promise") { + return tp.typeArguments[0]; + } + return null; + } + function emitClassDeclaration(cl) { + var cmts = getExportComments(cl); + if (!cmts) + return; + mainWr.setNs(currNs); + mainWr.write(cmts); + var prevNs = currNs; + if (currNs) + currNs += "."; + currNs += cl.name.text; + mainWr.write("declare class " + cl.name.text + " {"); + mainWr.incrIndent(); + for (var _i = 0, _a = cl.members; _i < _a.length; _i++) { + var mem = _a[_i]; + switch (mem.kind) { + case SK.MethodDeclaration: + emitFunctionDeclaration(mem); + break; + case SK.PropertyDeclaration: + emitPropertyDeclaration(mem); + break; + case SK.Constructor: + emitConstructorDeclaration(mem); + break; + default: + break; + } + } + currNs = prevNs; + mainWr.decrIndent(); + mainWr.write("}"); + } + function getExportComments(n) { + var cmts = pxtc.getComments(n); + if (!/^\s*\/\/%/m.test(cmts)) + return null; + return cmts; + } + function emitPropertyDeclaration(fn) { + var cmts = getExportComments(fn); + if (!cmts) + return; + var nm = fn.name.getText(); + var attrs = "//% shim=." + nm; + var tp = checker.getTypeAtLocation(fn); + mainWr.write(cmts); + mainWr.write(attrs); + mainWr.write("public " + nm + ": " + mapType(tp) + ";"); + mainWr.write(""); + } + function emitConstructorDeclaration(fn) { + var cmts = getExportComments(fn); + if (!cmts) + return; + var tp = checker.getTypeAtLocation(fn); + var args = fn.parameters.map(function (p) { return p.name.getText() + ": " + mapType(typeOf(p)); }); + mainWr.write(cmts); + mainWr.write("//% shim=\"new " + currNs + "\""); + mainWr.write("constructor(" + args.join(", ") + ");"); + mainWr.write(""); + } + function emitFunctionDeclaration(fn) { + var cmts = getExportComments(fn); + if (!cmts) + return; + var fnname = fn.name.getText(); + var isMethod = fn.kind == SK.MethodDeclaration; + var attrs = "//% shim=" + (isMethod ? "." + fnname : currNs + "::" + fnname); + var sig = checker.getSignatureFromDeclaration(fn); + var rettp = checker.getReturnTypeOfSignature(sig); + var asyncName = /Async$/.test(fnname); + var prom = promiseElementType(rettp); + if (prom) { + attrs += " promise"; + rettp = prom; + if (!asyncName) + pxt.U.userError(currNs + "::" + fnname + " should be called " + fnname + "Async"); + } + else if (asyncName) { + pxt.U.userError(currNs + "::" + fnname + " doesn't return a promise"); + } + var args = fn.parameters.map(function (p) { return ("" + p.name.getText() + (p.questionToken ? "?" : "") + ": " + mapType(typeOf(p))); }); + var localname = fnname.replace(/Async$/, ""); + var defkw = isMethod ? "public" : "function"; + if (!isMethod) + mainWr.setNs(currNs); + mainWr.write(cmts); + mainWr.write(attrs); + mainWr.write(defkw + " " + localname + "(" + args.join(", ") + "): " + mapType(rettp) + ";"); + mainWr.write(""); + } + function doStmt(stmt) { + switch (stmt.kind) { + case SK.ModuleDeclaration: + return emitModuleDeclaration(stmt); + case SK.ModuleBlock: + return stmt.statements.forEach(doStmt); + case SK.FunctionDeclaration: + return emitFunctionDeclaration(stmt); + case SK.ClassDeclaration: + return emitClassDeclaration(stmt); + } + //console.log("SKIP", pxtc.stringKind(stmt)) + //let mod = stmt as ts.ModuleDeclaration + //if (mod.name) console.log(mod.name.text) + /* + if (mod.name) { + let sym = typechecker.getSymbolAtLocation(mod.name) + if (sym) doSymbol(sym) + } + */ + } + } + pxt.simshim = simshim; +})(pxt || (pxt = {})); +// See https://github.com/Microsoft/TouchDevelop-backend/blob/master/docs/streams.md +var pxt; +(function (pxt) { + var streams; + (function (streams) { + function createStreamAsync(target, name) { + return pxt.Cloud.privatePostAsync("streams", { target: target, name: name || 'data' }).then(function (j) { return j; }); + } + streams.createStreamAsync = createStreamAsync; + function postPayloadAsync(stream, data) { + pxt.Util.assert(!!stream.privatekey); + return pxt.Cloud.privatePostAsync(stream.id + "/data?privatekey=" + stream.privatekey, data); + } + streams.postPayloadAsync = postPayloadAsync; + })(streams = pxt.streams || (pxt.streams = {})); +})(pxt || (pxt = {})); +var pxt; +(function (pxt) { + var usb; + (function (usb) { + var USBError = (function (_super) { + __extends(USBError, _super); + function USBError(msg) { + _super.call(this, msg); + this.message = msg; + } + return USBError; + }(Error)); + usb.USBError = USBError; + ; + ; + ; + var HID = (function () { + function HID(dev) { + this.dev = dev; + this.ready = false; + this.onData = function (v) { }; + this.onError = function (e) { }; + this.readLoop(); + } + HID.prototype.error = function (msg) { + throw new USBError(pxt.U.lf("USB error on device {0} ({1})", this.dev.productName, msg)); + }; + HID.prototype.reconnectAsync = function () { + var _this = this; + this.ready = false; + return this.dev.close() + .then(function () { return Promise.delay(500); }) + .then(requestDeviceAsync) + .then(function (dev) { + _this.dev = dev; + return _this.initAsync(); + }); + }; + HID.prototype.sendPacketAsync = function (pkt) { + var _this = this; + pxt.Util.assert(pkt.length <= 64); + return this.dev.transferOut(this.epOut.endpointNumber, pkt) + .then(function (res) { + if (res.status != "ok") + _this.error("USB OUT transfer failed"); + }); + }; + HID.prototype.readLoop = function () { + var _this = this; + var loop = function () { + if (!_this.ready) + Promise.delay(300).then(loop); + else + _this.recvPacketAsync() + .then(function (buf) { + _this.onData(buf); + loop(); + }, function (err) { + _this.onError(err); + Promise.delay(300).then(loop); + }); + }; + loop(); + }; + HID.prototype.recvPacketAsync = function () { + var _this = this; + return this.dev.transferIn(this.epIn.endpointNumber, 64) + .then(function (res) { + if (res.status != "ok") + _this.error("USB IN transfer failed"); + var arr = new Uint8Array(res.data.buffer); + if (arr.length == 0) + return _this.recvPacketAsync(); + return arr; + }); + }; + HID.prototype.initAsync = function () { + var _this = this; + var dev = this.dev; + return dev.open() + .then(function () { return dev.selectConfiguration(1); }) + .then(function () { + var isHID = function (iface) { + return iface.alternates[0].interfaceClass == 0xff && + iface.alternates[0].interfaceSubclass == 42; + }; + //iface.alternates[0].endpoints[0].type == "interrupt"; + var hid = dev.configurations[0].interfaces.filter(isHID)[0]; + if (!hid) + _this.error("cannot find USB HID interface"); + _this.altIface = hid.alternates[0]; + _this.epIn = _this.altIface.endpoints.filter(function (e) { return e.direction == "in"; })[0]; + _this.epOut = _this.altIface.endpoints.filter(function (e) { return e.direction == "out"; })[0]; + pxt.Util.assert(_this.epIn.packetSize == 64); + pxt.Util.assert(_this.epOut.packetSize == 64); + //Util.assert(this.epIn.type == "interrupt"); + //Util.assert(this.epOut.type == "interrupt"); + //console.log("USB-device", dev) + return dev.claimInterface(hid.interfaceNumber); + }) + .then(function () { _this.ready = true; }); + }; + return HID; + }()); + function requestDeviceAsync() { + return navigator.usb.requestDevice({ filters: [] }); + } + function getHidAsync() { + return requestDeviceAsync() + .then(function (dev) { + var h = new HID(dev); + return h.initAsync() + .then(function () { return h; }); + }); + } + function hf2Async() { + return getHidAsync() + .then(function (h) { + var w = new pxt.HF2.Wrapper(h); + return w.reconnectAsync(true) + .then(function () { return w; }); + }); + } + var initPromise; + function initAsync() { + if (!initPromise) + initPromise = hf2Async(); + return initPromise; + } + usb.initAsync = initAsync; + })(usb = pxt.usb || (pxt.usb = {})); +})(pxt || (pxt = {})); +// TODO: add a macro facility to make 8-bit assembly easier? +var ts; +(function (ts) { + var pxtc; + (function (pxtc) { + var assembler; + (function (assembler) { + function lf(fmt) { + var args = []; + for (var _i = 1; _i < arguments.length; _i++) { + args[_i - 1] = arguments[_i]; + } + return fmt.replace(/{(\d+)}/g, function (match, index) { return args[+index]; }); + } + assembler.lf = lf; + var badNameError = emitErr("opcode name doesn't match", ""); + // An Instruction represents an instruction class with meta-variables + // that should be substituted given an actually line (Line) of assembly + // Thus, the Instruction helps us parse a sequence of tokens in a Line + // as well as extract the relevant values to substitute for the meta-variables. + // The Instruction also knows how to convert the particular instance into + // machine code (EmitResult) + var Instruction = (function () { + function Instruction(ei, format, opcode, mask, jsFormat) { + var _this = this; + this.opcode = opcode; + this.mask = mask; + this.jsFormat = jsFormat; + pxtc.assert((opcode & mask) == opcode); + this.ei = ei; + this.code = format.replace(/\s+/g, " "); + this.friendlyFmt = format.replace(/\$\w+/g, function (m) { + if (_this.ei.encoders[m]) + return _this.ei.encoders[m].pretty; + return m; + }); + var words = tokenize(format); + this.name = words[0]; + this.args = words.slice(1); + // a bit of a hack here... + this.is32bit = (jsFormat != undefined); + } + Instruction.prototype.emit = function (ln) { + var tokens = ln.words; + if (tokens[0] != this.name) + return badNameError; + var r = this.opcode; + var j = 1; + var stack = 0; + var numArgs = []; + var labelName = null; + var bit32_value = null; + var bit32_actual = null; + for (var i = 0; i < this.args.length; ++i) { + var formal = this.args[i]; + var actual = tokens[j++]; + if (formal[0] == "$") { + var enc = this.ei.encoders[formal]; + var v = null; + if (enc.isRegister) { + v = this.ei.registerNo(actual); + if (v == null) + return emitErr("expecting register name", actual); + if (this.ei.isPush(this.opcode)) + stack++; + else if (this.ei.isPop(this.opcode)) + stack--; + } + else if (enc.isImmediate) { + actual = actual.replace(/^#/, ""); + v = ln.bin.parseOneInt(actual); + if (v == null) { + return emitErr("expecting number", actual); + } + else { + // explicit manipulation of stack pointer (SP) + // ARM only + if (this.ei.isAddSP(this.opcode)) + stack = -(v / this.ei.wordSize()); + else if (this.ei.isSubSP(this.opcode)) + stack = (v / this.ei.wordSize()); + } + } + else if (enc.isRegList) { + // register lists are ARM-specific - this code not used in AVR + if (actual != "{") + return emitErr("expecting {", actual); + v = 0; + while (tokens[j] != "}") { + actual = tokens[j++]; + if (!actual) + return emitErr("expecting }", tokens[j - 2]); + var no = this.ei.registerNo(actual); + if (no == null) + return emitErr("expecting register name", actual); + if (v & (1 << no)) + return emitErr("duplicate register name", actual); + v |= (1 << no); + if (this.ei.isPush(this.opcode)) + stack++; + else if (this.ei.isPop(this.opcode)) + stack--; + if (tokens[j] == ",") + j++; + } + actual = tokens[j++]; // skip close brace + } + else if (enc.isLabel) { + actual = actual.replace(/^#/, ""); + if (/^[+-]?\d+$/.test(actual)) { + v = parseInt(actual, 10); + labelName = "rel" + v; + } + else if (/^0x[0-9a-fA-F]+$/.test(actual)) { + v = parseInt(actual, 16); + labelName = "abs" + v; + } + else { + labelName = actual; + v = this.ei.getAddressFromLabel(ln.bin, this, actual, enc.isWordAligned); + if (v == null) { + if (ln.bin.finalEmit) + return emitErr("unknown label", actual); + else + // just need some value when we are + // doing some pass other than finalEmit + v = 8; // needs to be divisible by 4 etc + } + } + if (this.ei.is32bit(this)) { + // console.log(actual + " " + v.toString()) + bit32_value = v; + bit32_actual = actual; + continue; + } + } + else { + pxtc.oops(); + } + if (v == null) + return emitErr("didn't understand it", actual); // shouldn't happen + numArgs.push(v); + v = enc.encode(v); + // console.log("enc(v) = ",v) + if (v == null) + return emitErr("argument out of range or mis-aligned", actual); + pxtc.assert((r & v) == 0); + r |= v; + } + else if (formal == actual) { + } + else { + return emitErr("expecting " + formal, actual); + } + } + if (tokens[j]) + return emitErr("trailing tokens", tokens[j]); + if (this.ei.is32bit(this)) { + return this.ei.emit32(r, bit32_value, ln.bin.normalizeExternalLabel(bit32_actual)); + } + return { + stack: stack, + opcode: r, + numArgs: numArgs, + labelName: ln.bin.normalizeExternalLabel(labelName) + }; + }; + Instruction.prototype.toString = function () { + return this.friendlyFmt; + }; + return Instruction; + }()); + assembler.Instruction = Instruction; + // represents a line of assembly from a file + var Line = (function () { + function Line(bin, text) { + this.bin = bin; + this.text = text; + } + Line.prototype.getOpExt = function () { + return this.instruction ? this.instruction.code : ""; + }; + Line.prototype.getOp = function () { + return this.instruction ? this.instruction.name : ""; + }; + Line.prototype.update = function (s) { + this.bin.peepOps++; + s = s.replace(/^\s*/, ""); + if (!s) + this.bin.peepDel++; + if (s) + s += " "; + s = " " + s; + this.text = s + "; WAS: " + this.text.trim(); + this.instruction = null; + this.numArgs = null; + this.words = tokenize(s) || []; + if (this.words.length == 0) + this.type = "empty"; + }; + return Line; + }()); + assembler.Line = Line; + // File is the center of the action: parsing a file into a sequence of Lines + // and also emitting the binary (buf) + var File = (function () { + function File(ei) { + this.baseOffset = 0; + this.checkStack = true; + this.inlineMode = false; + this.normalizeExternalLabel = function (n) { return n; }; + this.currLineNo = 0; + this.scope = ""; + this.scopeId = 0; + this.errors = []; + this.labels = {}; + this.stackpointers = {}; + this.stack = 0; + this.peepOps = 0; + this.peepDel = 0; + this.stats = ""; + this.throwOnError = false; + this.disablePeepHole = false; + this.stackAtLabel = {}; + this.currLine = new Line(this, ""); + this.currLine.lineNo = 0; + this.ei = ei; + this.ei.file = this; + } + File.prototype.emitShort = function (op) { + pxtc.assert(0 <= op && op <= 0xffff); + this.buf.push(op); + }; + File.prototype.location = function () { + // store one short (2 bytes) per buf location + return this.buf.length * 2; + }; + File.prototype.pc = function () { + return this.location() + this.baseOffset; + }; + // parsing of an "integer", well actually much more than + // just that + File.prototype.parseOneInt = function (s) { + if (!s) + return null; + if (s == "0") + return 0; + var mul = 1; + // recursive-descent parsing of multiplication + if (s.indexOf("*") >= 0) { + var m_1 = null; + while (m_1 = /^([^\*]*)\*(.*)$/.exec(s)) { + var tmp = this.parseOneInt(m_1[1]); + if (tmp == null) + return null; + mul *= tmp; + s = m_1[2]; + } + } + if (s[0] == "-") { + mul *= -1; + s = s.slice(1); + } + else if (s[0] == "+") { + s = s.slice(1); + } + var v = null; + // allow or'ing of 1 to least-signficant bit + if (pxtc.U.endsWith(s, "|1")) { + return this.parseOneInt(s.slice(0, s.length - 2)) | 1; + } + // allow subtracting 1 too + if (pxtc.U.endsWith(s, "-1")) { + return this.parseOneInt(s.slice(0, s.length - 2)) - 1; + } + // handle hexadecimal and binary encodings + if (s[0] == "0") { + if (s[1] == "x" || s[1] == "X") { + var m_2 = /^0x([a-f0-9]+)$/i.exec(s); + if (m_2) + v = parseInt(m_2[1], 16); + } + else if (s[1] == "b" || s[1] == "B") { + var m_3 = /^0b([01]+)$/i.exec(s); + if (m_3) + v = parseInt(m_3[1], 2); + } + } + // decimal encoding + var m = /^(\d+)$/i.exec(s); + if (m) + v = parseInt(m[1], 10); + // stack-specific processing + // more special characters to handle + if (s.indexOf("@") >= 0) { + m = /^(\w+)@(-?\d+)$/.exec(s); + if (m) { + if (mul != 1) + this.directiveError(lf("multiplication not supported with saved stacks")); + if (this.stackpointers.hasOwnProperty(m[1])) { + // console.log(m[1] + ": " + this.stack + " " + this.stackpointers[m[1]] + " " + m[2]) + v = this.ei.wordSize() * this.ei.computeStackOffset(m[1], this.stack - this.stackpointers[m[1]] + parseInt(m[2])); + } + else + this.directiveError(lf("saved stack not found")); + } + m = /^(.*)@(hi|lo)$/.exec(s); + if (m && this.looksLikeLabel(m[1])) { + v = this.lookupLabel(m[1], true); + if (v != null) { + v >>= 1; + if (0 <= v && v <= 0xffff) { + if (m[2] == "hi") + v = (v >> 8) & 0xff; + else if (m[2] == "lo") + v = v & 0xff; + else + pxtc.oops(); + } + else { + this.directiveError(lf("@hi/lo out of range")); + v = null; + } + } + } + } + if (v == null && this.looksLikeLabel(s)) { + v = this.lookupLabel(s, true); + if (v != null) + v += this.baseOffset; + } + if (v == null || isNaN(v)) + return null; + return v * mul; + }; + File.prototype.looksLikeLabel = function (name) { + if (/^(r\d|pc|sp|lr)$/i.test(name)) + return false; + return /^[\.a-zA-Z_][\.:\w+]*$/.test(name); + }; + File.prototype.scopedName = function (name) { + if (name[0] == "." && this.scope) + return this.scope + "$" + name; + else + return name; + }; + File.prototype.lookupLabel = function (name, direct) { + if (direct === void 0) { direct = false; } + var v = null; + var scoped = this.scopedName(name); + if (this.labels.hasOwnProperty(scoped)) { + v = this.labels[scoped]; + v = this.ei.postProcessRelAddress(this, v); + } + else if (this.lookupExternalLabel) { + v = this.lookupExternalLabel(name); + if (v != null) { + v = this.ei.postProcessAbsAddress(this, v); + } + } + if (v == null && direct) { + if (this.finalEmit) + this.directiveError(lf("unknown label: {0}", name)); + else + v = 42; + } + return v; + }; + File.prototype.align = function (n) { + pxtc.assert(n == 2 || n == 4 || n == 8 || n == 16); + while (this.location() % n != 0) + this.emitShort(0); + }; + File.prototype.pushError = function (msg, hints) { + if (hints === void 0) { hints = ""; } + var err = { + scope: this.scope, + message: lf(" -> Line {2} ('{1}'), error: {0}\n{3}", msg, this.currLine.text, this.currLine.lineNo, hints), + lineNo: this.currLine.lineNo, + line: this.currLine.text, + coremsg: msg, + hints: hints + }; + this.errors.push(err); + if (this.throwOnError) + throw new Error(err.message); + }; + File.prototype.directiveError = function (msg) { + this.pushError(msg); + // this.pushError(lf("directive error: {0}", msg)) + }; + File.prototype.emitString = function (l) { + function byteAt(s, i) { return (s.charCodeAt(i) || 0) & 0xff; } + var m = /^\s*([\w\.]+\s*:\s*)?.\w+\s+(".*")\s*$/.exec(l); + var s; + if (!m || null == (s = parseString(m[2]))) { + this.directiveError(lf("expecting string")); + } + else { + this.align(2); + // s.length + 1 to NUL terminate + for (var i = 0; i < s.length + 1; i += 2) { + this.emitShort((byteAt(s, i + 1) << 8) | byteAt(s, i)); + } + } + }; + File.prototype.parseNumber = function (words) { + var v = this.parseOneInt(words.shift()); + if (v == null) + return null; + return v; + }; + File.prototype.parseNumbers = function (words) { + words = words.slice(1); + var nums = []; + while (true) { + var n = this.parseNumber(words); + if (n == null) { + this.directiveError(lf("cannot parse number at '{0}'", words[0])); + break; + } + else + nums.push(n); + if (words[0] == ",") { + words.shift(); + if (words[0] == null) + break; + } + else if (words[0] == null) { + break; + } + else { + this.directiveError(lf("expecting number, got '{0}'", words[0])); + break; + } + } + return nums; + }; + File.prototype.emitSpace = function (words) { + var nums = this.parseNumbers(words); + if (nums.length == 1) + nums.push(0); + if (nums.length != 2) + this.directiveError(lf("expecting one or two numbers")); + else if (nums[0] % 2 != 0) + this.directiveError(lf("only even space supported")); + else { + var f = nums[1] & 0xff; + f = f | (f << 8); + for (var i = 0; i < nums[0]; i += 2) + this.emitShort(f); + } + }; + File.prototype.emitBytes = function (words) { + var nums = this.parseNumbers(words); + if (nums.length % 2 != 0) { + this.directiveError(".bytes needs an even number of arguments"); + nums.push(0); + } + for (var i = 0; i < nums.length; i += 2) { + var n0 = nums[i]; + var n1 = nums[i + 1]; + if (0 <= n0 && n1 <= 0xff && + 0 <= n1 && n0 <= 0xff) + this.emitShort((n0 & 0xff) | ((n1 & 0xff) << 8)); + else + this.directiveError(lf("expecting uint8")); + } + }; + File.prototype.emitHex = function (words) { + var _this = this; + words.slice(1).forEach(function (w) { + if (w == ",") + return; + // TODO: why 4 and not 2? + if (w.length % 4 != 0) + _this.directiveError(".hex needs an even number of bytes"); + else if (!/^[a-f0-9]+$/i.test(w)) + _this.directiveError(".hex needs a hex number"); + else + for (var i = 0; i < w.length; i += 4) { + var n = parseInt(w.slice(i, i + 4), 16); + n = ((n & 0xff) << 8) | ((n >> 8) & 0xff); + _this.emitShort(n); + } + }); + }; + File.prototype.handleDirective = function (l) { + var _this = this; + var words = l.words; + var expectOne = function () { + if (words.length != 2) + _this.directiveError(lf("expecting one argument")); + }; + var num0; + switch (words[0]) { + case ".ascii": + case ".asciz": + case ".string": + this.emitString(l.text); + break; + case ".align": + expectOne(); + num0 = this.parseOneInt(words[1]); + if (num0 != null) { + if (num0 == 0) + return; + if (num0 <= 4) { + this.align(1 << num0); + } + else { + this.directiveError(lf("expecting 1, 2, 3 or 4 (for 2, 4, 8, or 16 byte alignment)")); + } + } + else + this.directiveError(lf("expecting number")); + break; + case ".balign": + expectOne(); + num0 = this.parseOneInt(words[1]); + if (num0 != null) { + if (num0 == 1) + return; + if (num0 == 2 || num0 == 4 || num0 == 8 || num0 == 16) { + this.align(num0); + } + else { + this.directiveError(lf("expecting 2, 4, 8, or 16")); + } + } + else + this.directiveError(lf("expecting number")); + break; + case ".byte": + this.emitBytes(words); + break; + case ".hex": + this.emitHex(words); + break; + case ".hword": + case ".short": + case ".2bytes": + this.parseNumbers(words).forEach(function (n) { + // we allow negative numbers + if (-0x8000 <= n && n <= 0xffff) + _this.emitShort(n & 0xffff); + else + _this.directiveError(lf("expecting int16")); + }); + break; + case ".word": + case ".4bytes": + // TODO: a word is machine-dependent (16-bit for AVR, 32-bit for ARM) + this.parseNumbers(words).forEach(function (n) { + // we allow negative numbers + if (-0x80000000 <= n && n <= 0xffffffff) { + _this.emitShort(n & 0xffff); + _this.emitShort((n >> 16) & 0xffff); + } + else { + _this.directiveError(lf("expecting int32")); + } + }); + break; + case ".skip": + case ".space": + this.emitSpace(words); + break; + case ".startaddr": + if (this.location()) + this.directiveError(lf(".startaddr can be only be specified at the beginning of the file")); + expectOne(); + this.baseOffset = this.parseOneInt(words[1]); + break; + // The usage for this is as follows: + // push {...} + // @stackmark locals ; locals := sp + // ... some push/pops ... + // ldr r0, [pc, locals@3] ; load local number 3 + // ... some push/pops ... + // @stackempty locals ; expect an empty stack here + case "@stackmark": + expectOne(); + this.stackpointers[words[1]] = this.stack; + break; + case "@stackempty": + if (this.stackpointers[words[1]] == null) + this.directiveError(lf("no such saved stack")); + else if (this.stackpointers[words[1]] != this.stack) + this.directiveError(lf("stack mismatch")); + break; + case "@scope": + this.scope = words[1] || ""; + this.currLineNo = this.scope ? 0 : this.realCurrLineNo; + break; + case "@nostackcheck": + this.checkStack = false; + break; + case "@dummystack": + expectOne(); + this.stack += this.parseOneInt(words[1]); + break; + case ".section": + case ".global": + this.stackpointers = {}; + this.stack = 0; + this.scope = "$S" + this.scopeId++; + break; + case ".file": + case ".text": + case ".cpu": + case ".fpu": + case ".eabi_attribute": + case ".code": + case ".thumb_func": + case ".type": + break; + case "@": + // @ sp needed + break; + default: + if (/^\.cfi_/.test(words[0])) { + } + else { + this.directiveError(lf("unknown directive")); + } + break; + } + }; + File.prototype.handleOneInstruction = function (ln, instr) { + var op = instr.emit(ln); + if (!op.error) { + this.stack += op.stack; + if (this.checkStack && this.stack < 0) + this.pushError(lf("stack underflow")); + ln.location = this.location(); + this.emitShort(op.opcode); + if (op.opcode2 != null) + this.emitShort(op.opcode2); + ln.instruction = instr; + ln.numArgs = op.numArgs; + return true; + } + return false; + }; + File.prototype.handleInstruction = function (ln) { + var _this = this; + if (ln.instruction) { + if (this.handleOneInstruction(ln, ln.instruction)) + return; + } + var getIns = function (n) { return _this.ei.instructions.hasOwnProperty(n) ? _this.ei.instructions[n] : []; }; + if (!ln.instruction) { + var ins = getIns(ln.words[0]); + for (var i = 0; i < ins.length; ++i) { + if (this.handleOneInstruction(ln, ins[i])) + return; + } + } + var w0 = ln.words[0].toLowerCase().replace(/s$/, "").replace(/[^a-z]/g, ""); + var hints = ""; + var possibilities = getIns(w0).concat(getIns(w0 + "s")); + if (possibilities.length > 0) { + possibilities.forEach(function (i) { + var err = i.emit(ln); + hints += lf(" Maybe: {0} ({1} at '{2}')\n", i.toString(), err.error, err.errorAt); + }); + } + this.pushError(lf("assembly error"), hints); + }; + File.prototype.mkLine = function (tx) { + var l = new Line(this, tx); + l.scope = this.scope; + l.lineNo = this.currLineNo; + this.lines.push(l); + return l; + }; + File.prototype.prepLines = function (text) { + var _this = this; + this.currLineNo = 0; + this.realCurrLineNo = 0; + this.lines = []; + text.split(/\r?\n/).forEach(function (tx) { + if (_this.errors.length > 10) + return; + _this.currLineNo++; + _this.realCurrLineNo++; + var l = _this.mkLine(tx); + var words = tokenize(l.text) || []; + l.words = words; + var w0 = words[0] || ""; + if (w0.charAt(w0.length - 1) == ":") { + var m = /^([\.\w]+):$/.exec(words[0]); + if (m) { + l.type = "label"; + l.text = m[1] + ":"; + l.words = [m[1]]; + if (words.length > 1) { + words.shift(); + l = _this.mkLine(tx.replace(/^[^:]*:/, "")); + l.words = words; + w0 = words[0] || ""; + } + else { + return; + } + } + } + var c0 = w0.charAt(0); + if (c0 == "." || c0 == "@") { + l.type = "directive"; + if (l.words[0] == "@scope") + _this.handleDirective(l); + } + else { + if (l.words.length == 0) + l.type = "empty"; + else + l.type = "instruction"; + } + }); + }; + File.prototype.iterLines = function () { + var _this = this; + this.stack = 0; + this.buf = []; + this.scopeId = 0; + this.lines.forEach(function (l) { + if (_this.errors.length > 10) + return; + _this.currLine = l; + if (l.words.length == 0) + return; + if (l.type == "label") { + var lblname = _this.scopedName(l.words[0]); + _this.prevLabel = lblname; + if (_this.finalEmit) { + var curr = _this.labels[lblname]; + if (curr == null) + pxtc.oops(); + pxtc.assert(_this.errors.length > 0 || curr == _this.location()); + if (_this.reallyFinalEmit) { + _this.stackAtLabel[lblname] = _this.stack; + } + } + else { + if (_this.labels.hasOwnProperty(lblname)) + _this.directiveError(lf("label redefinition")); + else if (_this.inlineMode && /^_/.test(lblname)) + _this.directiveError(lf("labels starting with '_' are reserved for the compiler")); + else { + _this.labels[lblname] = _this.location(); + } + } + } + else if (l.type == "directive") { + _this.handleDirective(l); + } + else if (l.type == "instruction") { + _this.handleInstruction(l); + } + else if (l.type == "empty") { + } + else { + pxtc.oops(); + } + }); + }; + File.prototype.getSource = function (clean) { + var _this = this; + var lenTotal = this.buf ? this.buf.length * 2 : 0; + var lenThumb = this.labels["_program_end"] || lenTotal; + var res = + // ARM-specific + lf("; thumb size: {0} bytes; src size {1} bytes\n", lenThumb, lenTotal - lenThumb) + + lf("; assembly: {0} lines\n", this.lines.length) + + this.stats + "\n\n"; + var skipOne = false; + this.lines.forEach(function (ln, i) { + if (ln.words[0] == "_stored_program") { + res += "_stored_program: .string \"...\"\n"; + skipOne = true; + return; + } + if (skipOne) { + skipOne = false; + return; + } + var text = ln.text; + if (clean) { + if (ln.words[0] == "@stackempty" && + _this.lines[i - 1].text == ln.text) + return; + text = text.replace(/; WAS: .*/, ""); + if (!text.trim()) + return; + } + res += text + "\n"; + }); + return res; + }; + File.prototype.peepHole = function () { + // TODO add: str X; ldr X -> str X ? + var mylines = this.lines.filter(function (l) { return l.type != "empty"; }); + for (var i = 0; i < mylines.length; ++i) { + var ln = mylines[i]; + if (/^user/.test(ln.scope)) + continue; + var lnNext = mylines[i + 1]; + if (!lnNext) + continue; + var lnNext2 = mylines[i + 2]; + if (ln.type == "instruction") { + this.ei.peephole(ln, lnNext, lnNext2); + } + } + }; + File.prototype.peepPass = function (reallyFinal) { + if (this.disablePeepHole) + return; + this.peepOps = 0; + this.peepDel = 0; + this.peepHole(); + this.throwOnError = true; + this.finalEmit = false; + this.labels = {}; + this.iterLines(); + pxtc.assert(!this.checkStack || this.stack == 0); + this.finalEmit = true; + this.reallyFinalEmit = reallyFinal || this.peepOps == 0; + this.iterLines(); + this.stats += lf("; peep hole pass: {0} instructions removed and {1} updated\n", this.peepDel, this.peepOps - this.peepDel); + }; + File.prototype.getLabels = function () { + var _this = this; + if (!this.userLabelsCache) + this.userLabelsCache = pxtc.U.mapMap(this.labels, function (k, v) { return v + _this.baseOffset; }); + return this.userLabelsCache; + }; + File.prototype.emit = function (text) { + pxtc.assert(this.buf == null); + this.prepLines(text); + if (this.errors.length > 0) + return; + this.labels = {}; + this.iterLines(); + if (this.checkStack && this.stack != 0) + this.directiveError(lf("stack misaligned at the end of the file")); + if (this.errors.length > 0) + return; + this.finalEmit = true; + this.reallyFinalEmit = this.disablePeepHole; + this.iterLines(); + if (this.errors.length > 0) + return; + var maxPasses = 5; + for (var i = 0; i < maxPasses; ++i) { + this.peepPass(i == maxPasses); + if (this.peepOps == 0) + break; + } + }; + return File; + }()); + assembler.File = File; + // an assembler provider must inherit from this + // class and provide Encoders and Instructions + var AbstractProcessor = (function () { + function AbstractProcessor() { + var _this = this; + this.file = null; + this.addEnc = function (n, p, e) { + var ee = { + name: n, + pretty: p, + encode: e, + isRegister: /^\$r\d/.test(n), + isImmediate: /^\$i\d/.test(n), + isRegList: /^\$rl\d/.test(n), + isLabel: /^\$l[a-z]/.test(n), + }; + _this.encoders[n] = ee; + return ee; + }; + this.inrange = function (max, v, e) { + if (Math.floor(v) != v) + return null; + if (v < 0) + return null; + if (v > max) + return null; + return e; + }; + this.inminmax = function (min, max, v, e) { + if (Math.floor(v) != v) + return null; + if (v < min) + return null; + if (v > max) + return null; + return e; + }; + this.inseq = function (seq, v) { + var ind = seq.indexOf(v); + if (ind < 0) + return null; + return ind; + }; + this.inrangeSigned = function (max, v, e) { + if (Math.floor(v) != v) + return null; + if (v < -(max + 1)) + return null; + if (v > max) + return null; + var mask = (max << 1) | 1; + return e & mask; + }; + this.addInst = function (name, code, mask, jsFormat) { + var ins = new Instruction(_this, name, code, mask, jsFormat); + if (!_this.instructions.hasOwnProperty(ins.name)) + _this.instructions[ins.name] = []; + _this.instructions[ins.name].push(ins); + }; + this.encoders = {}; + this.instructions = {}; + } + AbstractProcessor.prototype.wordSize = function () { + return -1; + }; + AbstractProcessor.prototype.computeStackOffset = function (kind, offset) { + return offset; + }; + AbstractProcessor.prototype.is32bit = function (i) { + return false; + }; + AbstractProcessor.prototype.emit32 = function (v1, v2, actual) { + return null; + }; + AbstractProcessor.prototype.postProcessRelAddress = function (f, v) { + return v; + }; + AbstractProcessor.prototype.postProcessAbsAddress = function (f, v) { + return v; + }; + AbstractProcessor.prototype.peephole = function (ln, lnNext, lnNext2) { + return; + }; + AbstractProcessor.prototype.registerNo = function (actual) { + return null; + }; + AbstractProcessor.prototype.getAddressFromLabel = function (f, i, s, wordAligned) { + if (wordAligned === void 0) { wordAligned = false; } + return null; + }; + AbstractProcessor.prototype.isPop = function (opcode) { + return false; + }; + AbstractProcessor.prototype.isPush = function (opcode) { + return false; + }; + AbstractProcessor.prototype.isAddSP = function (opcode) { + return false; + }; + AbstractProcessor.prototype.isSubSP = function (opcode) { + return false; + }; + AbstractProcessor.prototype.testAssembler = function () { + pxtc.assert(false); + }; + return AbstractProcessor; + }()); + assembler.AbstractProcessor = AbstractProcessor; + // utility functions + function tokenize(line) { + var words = []; + var w = ""; + loop: for (var i = 0; i < line.length; ++i) { + switch (line[i]) { + case "[": + case "]": + case "!": + case "{": + case "}": + case ",": + if (w) { + words.push(w); + w = ""; + } + words.push(line[i]); + break; + case " ": + case "\t": + case "\r": + case "\n": + if (w) { + words.push(w); + w = ""; + } + break; + case ";": + // drop the trailing comment + break loop; + default: + w += line[i]; + break; + } + } + if (w) { + words.push(w); + w = ""; + } + if (!words[0]) + return null; + return words; + } + function parseString(s) { + s = s.replace(/\\\\/g, "\\B") // don't get confused by double backslash + .replace(/\\(['\?])/g, function (f, q) { return q; }) // these are not valid in JSON yet valid in C + .replace(/\\[z0]/g, "\u0000") // \0 is valid in C + .replace(/\\x([0-9a-f][0-9a-f])/gi, function (f, h) { return "\\u00" + h; }) + .replace(/\\B/g, "\\\\"); // undo anti-confusion above + try { + return JSON.parse(s); + } + catch (e) { + return null; + } + } + function emitErr(msg, tok) { + return { + stack: null, + opcode: null, + error: msg, + errorAt: tok + }; + } + assembler.emitErr = emitErr; + function testOne(ei, op, code) { + var b = new File(ei); + b.checkStack = false; + b.emit(op); + pxtc.assert(b.buf[0] == code); + } + function expectError(ei, asm) { + var b = new File(ei); + b.emit(asm); + if (b.errors.length == 0) { + pxtc.oops("ASMTEST: expecting error for: " + asm); + } + // console.log(b.errors[0].message) + } + assembler.expectError = expectError; + function tohex(n) { + if (n < 0 || n > 0xffff) + return ("0x" + n.toString(16)).toLowerCase(); + else + return ("0x" + ("000" + n.toString(16)).slice(-4)).toLowerCase(); + } + assembler.tohex = tohex; + function expect(ei, disasm) { + var exp = []; + var asm = disasm.replace(/^([0-9a-fA-F]{4,8})\s/gm, function (w, n) { + exp.push(parseInt(n.slice(0, 4), 16)); + if (n.length == 8) + exp.push(parseInt(n.slice(4, 8), 16)); + return ""; + }); + var b = new File(ei); + b.throwOnError = true; + b.disablePeepHole = true; + b.emit(asm); + if (b.errors.length > 0) { + console.debug(b.errors[0].message); + pxtc.oops("ASMTEST: not expecting errors"); + } + if (b.buf.length != exp.length) + pxtc.oops("ASMTEST: wrong buf len"); + for (var i = 0; i < exp.length; ++i) { + if (b.buf[i] != exp[i]) + pxtc.oops("ASMTEST: wrong buf content at " + i + " , exp:" + tohex(exp[i]) + ", got: " + tohex(b.buf[i])); + } + } + assembler.expect = expect; + })(assembler = pxtc.assembler || (pxtc.assembler = {})); + })(pxtc = ts.pxtc || (ts.pxtc = {})); +})(ts || (ts = {})); +/// +/* Docs: + * + * Atmel AVR 8-bit Instruction Set Manual + * http://www.atmel.com/Images/Atmel-0856-AVR-Instruction-Set-Manual.pdf + * + * Common part for Arduino and Circuit Playground + * http://www.atmel.com/Images/Atmel-7766-8-bit-AVR-ATmega16U4-32U4_Datasheet.pdf + * + */ +var ts; +(function (ts) { + var pxtc; + (function (pxtc) { + var avr; + (function (avr) { + var AVRProcessor = (function (_super) { + __extends(AVRProcessor, _super); + function AVRProcessor() { + var _this = this; + _super.call(this); + // TODO: use $lbl whenever we need an address + // Registers + // $Rd - bits 8:7:6:5:4 (r0) + // $Rr - bits 9:3:2:1:0 (r1) + this.addEnc("$r0", "R0-31", function (v) { return _this.inrange(31, v, v << 4); }); + this.addEnc("$r1", "R0-31", function (v) { return _this.inrange(31, v, (v & 15) | ((v & 16) << 5)); }); + this.addEnc("$r2", "R0-4", function (v) { + var r = _this.inseq([24, 26, 28, 30], v); + return r == null ? null : r << 4; + }); + this.addEnc("$r3", "R0-16-31", function (v) { return _this.inminmax(16, 31, v, (v - 16) << 4); }); + this.addEnc("$r4", "R0-7", function (v) { return _this.inrange(7, v, v << 4); }); + this.addEnc("$r6", "R0-31", function (v) { return _this.inrange(31, v, v << 5 | v); }); + this.addEnc("$r7", "R0-31", function (v) { return _this.inrange(31, v, v << 3); }); + this.addEnc("$r8", "Reven", function (v) { return v & 0x1 ? null : (v >> 1) << 4; }); + this.addEnc("$r9", "Reven", function (v) { return v & 0x1 ? null : (v >> 1); }); + this.addEnc("$r10", "R0-16-23", function (v) { return _this.inminmax(16, 23, v, (v - 16) << 4); }); + this.addEnc("$r11", "R0-16-23", function (v) { return _this.inminmax(16, 23, v, v - 16); }); + this.addEnc("$r12", "R0-16-31", function (v) { return _this.inminmax(16, 31, v, v - 16); }); + // Immediates: + this.addEnc("$i0", "#0-63", function (v) { return _this.inrange(63, v, (v & 0x0f) | (v & 0x30) << 2); }); + this.addEnc("$i1", "#0-255", function (v) { return _this.inrange(255, v, (v & 0x0f) | (v & 0xf0) << 4); }); + this.addEnc("$i2", "#0-127", function (v) { return _this.inrange(127, v, v << 3); }); + this.addEnc("$i3", "#0-255", function (v) { return _this.inrange(255, v, (~v & 0x0f) | (~v & 0xf0) << 4); }); + this.addEnc("$i4", "#0-15", function (v) { return _this.inrange(15, v, v << 4); }); + this.addEnc("$i5", "#0-63", function (v) { return _this.inrange(63, v, (v & 0x0f) | (v & 0x30) << 5); }); + this.addEnc("$i6", "#0-127", function (v) { return _this.inrange(127, v, (v & 0x0f) | (v & 0x70) << 4); }); + this.addEnc("$i7", "#0-4095", function (v) { return _this.inrange(4095, v, v); }); + this.addEnc("$i8", "#0-63", function (v) { return _this.inrange(63, v, v & 0x7 | (v & 0x18) << 7) | (v & 0x20) << 7; }); + this.addEnc("$i9", "#0-7", function (v) { return _this.inrange(7, v, v); }); + // labels + // this.addEnc("$la", "LABEL", v => this.inrange(255, v >> 1, v >> 1)).isWordAligned = true; + this.addEnc("$la", "LABEL", function (v) { return _this.inrange(65535, v, v); }); + this.addEnc("$lb", "LABEL", function (v) { return _this.inrangeSigned(127, v >> 1, v >> 1) << 3; }); + this.addEnc("$lc", "LABEL", function (v) { return _this.inrange(65535, v >> 1, v >> 1); }); + this.addEnc("$ld", "LABEL", function (v) { return _this.inrangeSigned(2047, v >> 1, v >> 1); }); + this.addInst("adc $r0, $r1", 0x1C00, 0xfC00); + this.addInst("add $r0, $r1", 0x0C00, 0xfC00); + // adiw deviates from broken syntax in PDF + this.addInst("adiw $r2, $i0", 0x9600, 0xff00); + this.addInst("and $r0, $r1", 0x2000, 0xfC00); + this.addInst("andi $r3, $i1", 0x7000, 0xf000); + this.addInst("asr $r0", 0x9405, 0xfe0f); + this.addInst("bclr $r4", 0x9488, 0xff8f); + this.addInst("bld $r0, $i9", 0xf800, 0xfe08); + this.addInst("brbc $i9, $lb", 0xf400, 0xfc00); + this.addInst("brbs $i9, $lb", 0xf000, 0xfc00); + this.addInst("brcc $lb", 0xf400, 0xfc07); + this.addInst("brcs $lb", 0xf000, 0xfc07); + this.addInst("break", 0x9598, 0xffff); + this.addInst("breq $lb", 0xf001, 0xfc07); + this.addInst("brge $lb", 0xf404, 0xfc07); + this.addInst("brhc $lb", 0xf405, 0xfc07); + this.addInst("brhs $lb", 0xf005, 0xfc07); + this.addInst("brid $lb", 0xf407, 0xfc07); + this.addInst("brie $lb", 0xf007, 0xfc07); + // conflict with brbs? + this.addInst("brlo $lb", 0xf000, 0xfc07); + this.addInst("brlt $lb", 0xf004, 0xfc07); + this.addInst("brmi $lb", 0xf002, 0xfc07); + this.addInst("brne $lb", 0xf401, 0xfc07); + this.addInst("brpl $lb", 0xf402, 0xfc07); + // error in doc? - this has same opcode as brcc + this.addInst("brsh $lb", 0xf400, 0xfc07); + this.addInst("brtc $lb", 0xf406, 0xfc07); + this.addInst("brts $lb", 0xf006, 0xfc07); + this.addInst("brvc $lb", 0xf403, 0xfc07); + this.addInst("brvs $lb", 0xf003, 0xfc07); + this.addInst("bset $r4", 0x9408, 0xff8f); + this.addInst("bst $r0, $i9", 0xfa00, 0xfe08); + // call - 32 bit - special handling + this.addInst("call $lc", 0x940e, 0xffff, "CALL"); + this.addInst("cbi $r7, $i9", 0x9800, 0xff00); + this.addInst("cbr $r3, $i3", 0x7000, 0xf000); + this.addInst("clc", 0x9488, 0xffff); + this.addInst("clh", 0x94d8, 0xffff); + this.addInst("cli", 0x94f8, 0xffff); + this.addInst("cln", 0x94a8, 0xffff); + this.addInst("clr $r6", 0x2400, 0xfc00); + this.addInst("cls", 0x94c8, 0xffff); + this.addInst("clt", 0x94e8, 0xffff); + this.addInst("clv", 0x94b8, 0xffff); + this.addInst("clz", 0x9498, 0xffff); + this.addInst("com $r0", 0x9400, 0xfe0f); + this.addInst("cp $r0, $r1", 0x1400, 0xfC00); + this.addInst("cpc $r0, $r1", 0x0400, 0xfC00); + this.addInst("cpi $r3, $i1", 0x3000, 0xf000); + this.addInst("cpse $r0, $r1", 0x1000, 0xfC00); + this.addInst("dec $r0", 0x940a, 0xfe0f); + this.addInst("des $i4", 0x940b, 0xff0f); + this.addInst("eicall", 0x9519, 0xffff); + this.addInst("eijmp", 0x9419, 0xffff); + this.addInst("elpm", 0x95d8, 0xffff); + this.addInst("elpm $r0, Z0", 0x9006, 0xfe0f); + this.addInst("elpm $r0, Z+0", 0x9007, 0xfe0f); + this.addInst("eor $r0, $r1", 0x2400, 0xfC00); + this.addInst("fmul $r10, $r11", 0x0308, 0xff88); + this.addInst("fmuls $r10, $r11", 0x0380, 0xff88); + this.addInst("fmulsu $r10, $r11", 0x0388, 0xff88); + this.addInst("icall", 0x9509, 0xffff); + this.addInst("ijmp", 0x9409, 0xffff); + this.addInst("in $r0, $i5", 0xb000, 0xf800); + this.addInst("inc $r0", 0x9403, 0xfe0f); + // jmp - 32 bit - special handling + this.addInst("jmp $lc", 0x940c, 0xffff, "JMP"); + this.addInst("lac Z, $r0", 0x9206, 0xfe0f); + this.addInst("las Z, $r0", 0x9205, 0xfe0f); + this.addInst("lat Z, $r0", 0x9207, 0xfe0f); + this.addInst("ld $r0, X", 0x900c, 0xfe0f); + this.addInst("ld $r0, X+", 0x900d, 0xfe0f); + this.addInst("ld $r0, -X", 0x900e, 0xfe0f); + this.addInst("ld $r0, Y", 0x8008, 0xfe0f); + this.addInst("ld $r0, Y+", 0x9009, 0xfe0f); + this.addInst("ld $r0, -Y", 0x900a, 0xfe0f); + this.addInst("ldd $r0, Y, $i8", 0x8008, 0xd208); + this.addInst("ld $r0, Z", 0x8000, 0xfe0f); + this.addInst("ld $r0, Z+", 0x9001, 0xfe0f); + this.addInst("ld $r0, -Z", 0x9002, 0xfe0f); + this.addInst("ldd $r0, Z, $i8", 0x8000, 0xd208); + this.addInst("ldi $r3, $i1", 0xe000, 0xf000); + // lds - 32 bit (special handling required) + this.addInst("lds $r0, $la", 0x9000, 0xfe0f, "LDS"); + this.addInst("lds $r3, $i6", 0xa000, 0xf800); + this.addInst("lpm", 0x95a8, 0xffff); + this.addInst("lpm $r0, Z", 0x9004, 0xfe0f); + this.addInst("lpm $r0, Z+", 0x9005, 0xfe0f); + this.addInst("lsl $r6", 0x0c00, 0xfc00); + this.addInst("lsr $r0", 0x9406, 0xfe0f); + this.addInst("mov $r0, $r1", 0x2C00, 0xfC00); + this.addInst("movw $r8, $r9", 0x0100, 0xff00); + this.addInst("mul $r0, $r1", 0x9c00, 0xfC00); + this.addInst("muls $r3, $r12", 0x0200, 0xff00); + this.addInst("mulsu $r10, $r11", 0x0300, 0xff88); + this.addInst("neg $r0", 0x9401, 0xfe0f); + this.addInst("nop", 0x0000, 0xffff); + this.addInst("or $r0, $r1", 0x2800, 0xfC00); + this.addInst("ori $r3, $i1", 0x6000, 0xf000); + this.addInst("out $i5, $r0", 0xb800, 0xf800); + this.addInst("pop $r0", 0x900f, 0xfe0f); + this.addInst("push $r0", 0x920f, 0xfe0f); + this.addInst("rcall $ld", 0xd000, 0xf000); + this.addInst("ret", 0x9508, 0xffff); + this.addInst("reti", 0x9518, 0xffff); + this.addInst("rjmp $ld", 0xc000, 0xf000); + this.addInst("rol $r6", 0x1c00, 0xfc00); + this.addInst("ror $r0", 0x9407, 0xfe0f); + this.addInst("sbc $r0, $r1", 0x0800, 0xfC00); + this.addInst("sbci $r3, $i1", 0x4000, 0xf000); + this.addInst("sbi $r7, $i9", 0x9a00, 0xff00); + this.addInst("sbic $r7, $i9", 0x9900, 0xff00); + this.addInst("sbis $r7, $i9", 0x9b00, 0xff00); + this.addInst("sbiw $r2, $i0", 0x9700, 0xff00); + this.addInst("sbr $r3, $i1", 0x6000, 0xf000); + this.addInst("sbrc $r0, $i9", 0xfc00, 0xfe08); + this.addInst("sbrs $r0, $i9", 0xfe00, 0xfe08); + this.addInst("sec", 0x9408, 0xffff); + this.addInst("seh", 0x9458, 0xffff); + this.addInst("sei", 0x9478, 0xffff); + this.addInst("sen", 0x9428, 0xffff); + this.addInst("sec", 0x9408, 0xffff); + this.addInst("ser $r3", 0xef0f, 0xff0f); + this.addInst("ses", 0x9448, 0xffff); + this.addInst("set", 0x9468, 0xffff); + this.addInst("sev", 0x9438, 0xffff); + this.addInst("sez", 0x9418, 0xffff); + this.addInst("sleep", 0x9588, 0xffff); + this.addInst("spm", 0x95e8, 0xffff); + this.addInst("st X, $r0", 0x920c, 0xfe0f); + this.addInst("st X+, $r0", 0x920d, 0xfe0f); + this.addInst("st -X, $r0", 0x920e, 0xfe0f); + this.addInst("st Y, $r0", 0x8208, 0xfe0f); + this.addInst("st Y+, $r0", 0x9209, 0xfe0f); + this.addInst("st -Y, $r0", 0x920a, 0xfe0f); + this.addInst("std Y, $i8, $r0", 0x8208, 0xd208); + this.addInst("st Z, $r0", 0x8200, 0xfe0f); + this.addInst("st Z+, $r0", 0x9201, 0xfe0f); + this.addInst("st -Z, $r0", 0x9202, 0xfe0f); + this.addInst("std Z, $i8, $r0", 0x8200, 0xd208); + // sts - 32-bit (special handing required) + this.addInst("sts $la, $r0", 0x9200, 0xfe0f, "STS"); + this.addInst("sts $i6, $r3", 0xa800, 0xf800); + this.addInst("sub $r0, $r1", 0x1800, 0xfC00); + this.addInst("subi $r3, $i1", 0x5000, 0xf000); + this.addInst("swap $r0", 0x9402, 0xfe0f); + this.addInst("tst $r6", 0x2000, 0xfc00); + this.addInst("wdr", 0x95a8, 0xffff); + this.addInst("xch Z, $r0", 0x9204, 0xfe0F); + } + AVRProcessor.prototype.wordSize = function () { + return 2; + }; + // return offset+1 because stack points to next available slot + AVRProcessor.prototype.computeStackOffset = function (kind, offset) { + if (kind == "args") + return offset + 2; // the return pointer is stored on the stack, skip it to get to args + return offset + 1; + }; + AVRProcessor.prototype.is32bit = function (i) { + return i.is32bit; + }; + // - the call and jmp instructions have both 16-bit and 22-bit varieties + // - lds and sts are both 16-bit + // for now, we only support only 16-bit + AVRProcessor.prototype.emit32 = function (op, v, actual) { + // TODO: optimize call/jmp by rcall/rjmp + var off = v >> 1; + pxtc.assert(off != null, "off null"); + if ((off | 0) != off || + // 16-bit only for now (so, can address 128k) + !(-128 * 512 <= off && off <= 128 * 512)) + return pxtc.assembler.emitErr("jump out of range", actual); + // note that off is already in instructions, not bytes + var imm = off & 0xffff; + return { + opcode: op, + opcode2: imm, + stack: 0, + numArgs: [v], + labelName: actual + }; + }; + AVRProcessor.prototype.registerNo = function (actual) { + if (!actual) + return null; + actual = actual.toLowerCase(); + var m = /^r(\d+)$/.exec(actual); + if (m) { + var r = parseInt(m[1], 10); + if (0 <= r && r < 32) + return r; + } + return null; + }; + AVRProcessor.prototype.postProcessRelAddress = function (f, v) { + return v + f.baseOffset; + }; + // absolute addresses come in divide by two + AVRProcessor.prototype.postProcessAbsAddress = function (f, v) { + return v << 1; + }; + AVRProcessor.prototype.getAddressFromLabel = function (f, i, s, wordAligned) { + if (wordAligned === void 0) { wordAligned = false; } + // lookup absolute, relative, dependeing + var l = f.lookupLabel(s); + if (l == null) + return null; + if (i.is32bit) + // absolute address + return l; + // relative address + return l - (f.pc() + 2); + }; + AVRProcessor.prototype.peephole = function (ln, lnNext, lnNext2) { + /* + let ld = this.encoders["$ld"] + let lnop = ln.getOp() + + // replace 32-bit with 16-bit when branch distance is within bounds + if ((lnop == "call" || lnop == "jmp") && ln.numArgs[0] != null) { + let offset = ln.numArgs[0] - (this.file.baseOffset + ln.location + 2) >> 1 + if (ld.encode(offset)) { + // RULE: call/jmp .somewhere -> rcall/rjmp .somewhere (if fits) + if (lnop == "call") + ln.update((lnop == "call" ? "rcall " : "rjmp ") + ln.words[1]) + } + } + */ + }; + AVRProcessor.prototype.testAssembler = function () { + pxtc.assembler.expect(this, "2411 eor r1, r1 \n" + + "be1f out 0x3f, r1 \n" + + "efcf ldi r28, 0xFF \n" + + "e0da ldi r29, 0x0A \n" + + "bfde out 0x3e, r29 \n" + + "bfcd out 0x3d, r28 \n"); + pxtc.assembler.expect(this, "0c00 lsl r0\n" + + "920f push r0\n" + + "e604 ldi r16, #100 ; 0x64\n" + + "903f pop r3\n"); + pxtc.assembler.expect(this, "1412 cp r1, r2\n" + + "f409 brne l6\n" + + "c001 rjmp l8\n" + + "0e01 l6: add r0, r17\n" + + "0000 l8: nop \n"); + }; + return AVRProcessor; + }(pxtc.assembler.AbstractProcessor)); + avr.AVRProcessor = AVRProcessor; + })(avr = pxtc.avr || (pxtc.avr = {})); + })(pxtc = ts.pxtc || (ts.pxtc = {})); +})(ts || (ts = {})); +var ts; +(function (ts) { + var pxtc; + (function (pxtc) { + pxtc.decodeBase64 = function (s) { return atob(s); }; + // this class defines the interface between the IR + // and a particular assembler (Thumb, AVR). Thus, + // the registers mentioned below are VIRTUAL registers + // required by the IR-machine, rather than PHYSICAL registers + // at the assembly level. + // that said, the assumptions below about registers are based on + // ARM, so a mapping will be needed for other processors + // Assumptions: + // - registers can hold a pointer (data or code) + // - special registers include: sp + // - fixed registers are r0, r1, r2, r3, r5, r6 + // - r0 is the current value (from expression evaluation) + // - registers for runtime calls (r0, r1,r2,r3) + // - r5 is for captured locals in lambda + // - r6 for global{} + // - for calls to user functions, all arguments passed on stack + var AssemblerSnippets = (function () { + function AssemblerSnippets() { + } + AssemblerSnippets.prototype.nop = function () { return "TBD "; }; + AssemblerSnippets.prototype.reg_gets_imm = function (reg, imm) { return "TBD"; }; + // Registers are stored on the stack in numerical order + AssemblerSnippets.prototype.proc_setup = function (main) { return "TBD"; }; + AssemblerSnippets.prototype.push_fixed = function (reg) { return "TBD"; }; + AssemblerSnippets.prototype.push_local = function (reg) { return "TBD"; }; + AssemblerSnippets.prototype.proc_setup_end = function () { return ""; }; + AssemblerSnippets.prototype.pop_fixed = function (reg) { return "TBD"; }; + AssemblerSnippets.prototype.pop_locals = function (n) { return "TBD"; }; + AssemblerSnippets.prototype.proc_return = function () { return "TBD"; }; + AssemblerSnippets.prototype.debugger_hook = function (lbl) { return "TBD"; }; + AssemblerSnippets.prototype.debugger_bkpt = function (lbl) { return "TBD"; }; + AssemblerSnippets.prototype.breakpoint = function () { return "TBD"; }; + AssemblerSnippets.prototype.unconditional_branch = function (lbl) { return "TBD"; }; + AssemblerSnippets.prototype.beq = function (lbl) { return "TBD"; }; + AssemblerSnippets.prototype.bne = function (lbl) { return "TBD"; }; + AssemblerSnippets.prototype.cmp = function (reg1, reg) { return "TBD"; }; + AssemblerSnippets.prototype.cmp_zero = function (reg1) { return "TBD"; }; + // load_reg_src_off is load/store indirect + // word? - does offset represent an index that must be multiplied by word size? + // inf? - control over size of referenced data + // str? - true=Store/false=Load + // src - can range over + AssemblerSnippets.prototype.load_reg_src_off = function (reg, src, off, word, store, inf) { return "TBD"; }; + AssemblerSnippets.prototype.rt_call = function (name, r0, r1) { return "TBD"; }; + AssemblerSnippets.prototype.call_lbl = function (lbl) { return "TBD"; }; + AssemblerSnippets.prototype.call_reg = function (reg) { return "TBD"; }; + AssemblerSnippets.prototype.vcall = function (mapMethod, isSet, vtableShift) { return "TBD"; }; + AssemblerSnippets.prototype.prologue_vtable = function (arg_index, vtableShift) { return "TBD"; }; + AssemblerSnippets.prototype.lambda_prologue = function () { return "TBD"; }; + AssemblerSnippets.prototype.lambda_epilogue = function () { return "TBD"; }; + AssemblerSnippets.prototype.load_ptr = function (lbl, reg) { return "TBD"; }; + AssemblerSnippets.prototype.emit_int = function (v, reg) { return "TBD"; }; + return AssemblerSnippets; + }()); + pxtc.AssemblerSnippets = AssemblerSnippets; + // helper for emit_int + function numBytes(n) { + var v = 0; + for (var q = n; q > 0; q >>>= 8) { + v++; + } + return v || 1; + } + pxtc.numBytes = numBytes; + var ProctoAssembler = (function () { + function ProctoAssembler(t, bin, proc) { + var _this = this; + this.resText = ""; + this.exprStack = []; + this.calls = []; + this.proc = null; + this.write = function (s) { _this.resText += pxtc.asmline(s); }; + this.t = t; + this.bin = bin; + this.proc = proc; + this.work(); + } + ProctoAssembler.prototype.getAssembly = function () { + return this.resText; + }; + ProctoAssembler.prototype.work = function () { + var _this = this; + this.write("\n;\n; Function " + this.proc.getName() + "\n;\n"); + if (this.proc.args.length <= 3) + this.emitLambdaWrapper(this.proc.isRoot); + var baseLabel = this.proc.label(); + var bkptLabel = baseLabel + "_bkpt"; + var locLabel = baseLabel + "_locals"; + this.write("\n.section code\n" + bkptLabel + ":"); + this.write(this.t.breakpoint()); + this.write("\n" + baseLabel + ":\n @stackmark func\n @stackmark args\n"); + // create a new function for later use by hex file generation + this.proc.fillDebugInfo = function (th) { + var labels = th.getLabels(); + _this.proc.debugInfo = { + locals: (_this.proc.seqNo == 1 ? _this.bin.globals : _this.proc.locals).map(function (l) { return l.getDebugInfo(); }), + args: _this.proc.args.map(function (l) { return l.getDebugInfo(); }), + name: _this.proc.getName(), + codeStartLoc: pxtc.U.lookup(labels, bkptLabel + "_after"), + bkptLoc: pxtc.U.lookup(labels, bkptLabel), + localsMark: pxtc.U.lookup(th.stackAtLabel, locLabel), + idx: _this.proc.seqNo, + calls: _this.calls + }; + for (var _i = 0, _a = _this.calls; _i < _a.length; _i++) { + var ci = _a[_i]; + ci.addr = pxtc.U.lookup(labels, ci.callLabel); + ci.stack = pxtc.U.lookup(th.stackAtLabel, ci.callLabel); + ci.callLabel = undefined; // don't waste space + } + for (var i = 0; i < _this.proc.body.length; ++i) { + var bi = _this.proc.body[i].breakpointInfo; + if (bi) { + var off = pxtc.U.lookup(th.stackAtLabel, "__brkp_" + bi.id); + pxtc.assert(off === _this.proc.debugInfo.localsMark); + } + } + }; + this.write(this.t.proc_setup(true)); + // initialize the locals + var numlocals = this.proc.locals.length; + if (numlocals > 0) + this.write(this.t.reg_gets_imm("r0", 0)); + this.proc.locals.forEach(function (l) { + _this.write(_this.t.push_local("r0") + " ;loc"); + }); + this.write(this.t.proc_setup_end()); + this.write("@stackmark locals"); + this.write(locLabel + ":"); + //console.log(proc.toString()) + this.proc.resolve(); + //console.log("OPT", proc.toString()) + // debugger hook - bit #1 of global #0 determines break on function entry + // we could have put the 'bkpt' inline, and used `bpl`, but that would be 2 cycles slower + this.write(this.t.debugger_hook(bkptLabel)); + for (var i = 0; i < this.proc.body.length; ++i) { + var s = this.proc.body[i]; + // console.log("STMT", s.toString()) + switch (s.stmtKind) { + case pxtc.ir.SK.Expr: + this.emitExpr(s.expr); + break; + case pxtc.ir.SK.StackEmpty: + if (this.exprStack.length > 0) { + for (var _i = 0, _a = this.proc.body.slice(i - 4, i + 1); _i < _a.length; _i++) { + var stmt = _a[_i]; + console.log("PREVSTMT " + stmt.toString().trim()); + } + for (var _b = 0, _c = this.exprStack; _b < _c.length; _b++) { + var e = _c[_b]; + console.log("EXPRSTACK " + e.currUses + "/" + e.totalUses + " E: " + e.toString()); + } + pxtc.oops("stack should be empty"); + } + this.write("@stackempty locals"); + break; + case pxtc.ir.SK.Jmp: + this.emitJmp(s); + break; + case pxtc.ir.SK.Label: + this.write(s.lblName + ":"); + break; + case pxtc.ir.SK.Breakpoint: + this.write("__brkp_" + s.breakpointInfo.id + ":"); + if (s.breakpointInfo.isDebuggerStmt) { + var lbl = this.mkLbl("debugger"); + // bit #0 of debugger register is set when debugger is attached + this.t.debugger_bkpt(lbl); + } + else { + } + break; + default: pxtc.oops(); + } + } + pxtc.assert(0 <= numlocals && numlocals < 127); + if (numlocals > 0) + this.write(this.t.pop_locals(numlocals)); + this.write(this.t.proc_return()); + this.write("@stackempty func"); + this.write("@stackempty args"); + }; + ProctoAssembler.prototype.mkLbl = function (root) { + return "." + root + this.bin.lblNo++; + }; + ProctoAssembler.prototype.terminate = function (expr) { + pxtc.assert(expr.exprKind == pxtc.ir.EK.SharedRef); + var arg = expr.args[0]; + if (arg.currUses == arg.totalUses) + return; + var numEntries = 0; + while (numEntries < this.exprStack.length) { + var ee = this.exprStack[numEntries]; + if (ee != arg && ee.currUses != ee.totalUses) + break; + numEntries++; + } + pxtc.assert(numEntries > 0); + this.write("@dummystack " + numEntries); + this.write(this.t.pop_locals(numEntries)); + }; + ProctoAssembler.prototype.emitJmp = function (jmp) { + if (jmp.jmpMode == pxtc.ir.JmpMode.Always) { + if (jmp.expr) + this.emitExpr(jmp.expr); + if (jmp.terminateExpr) + this.terminate(jmp.terminateExpr); + this.write(this.t.unconditional_branch(jmp.lblName) + " ; with expression"); + } + else { + var lbl = this.mkLbl("jmpz"); + if (jmp.jmpMode == pxtc.ir.JmpMode.IfJmpValEq) { + this.emitExprInto(jmp.expr, "r1"); + this.write(this.t.cmp("r0", "r1")); + } + else { + this.emitExpr(jmp.expr); + // TODO: remove ARM-specific code + if (jmp.expr.exprKind == pxtc.ir.EK.RuntimeCall && jmp.expr.data === "thumb::subs") { + } + else { + this.write(this.t.cmp_zero("r0")); + } + } + if (jmp.jmpMode == pxtc.ir.JmpMode.IfNotZero) { + this.write(this.t.beq(lbl)); // this is to *skip* the following 'b' instruction; beq itself has a very short range + } + else { + // IfZero or IfJmpValEq + this.write(this.t.bne(lbl)); + } + if (jmp.terminateExpr) + this.terminate(jmp.terminateExpr); + this.write(this.t.unconditional_branch(jmp.lblName)); + this.write(lbl + ":"); + } + }; + ProctoAssembler.prototype.clearStack = function () { + var numEntries = 0; + while (this.exprStack.length > 0 && this.exprStack[0].currUses == this.exprStack[0].totalUses) { + numEntries++; + this.exprStack.shift(); + } + if (numEntries) + this.write(this.t.pop_locals(numEntries)); + }; + ProctoAssembler.prototype.withRef = function (name, isRef) { + return name + (isRef ? "Ref" : ""); + }; + ProctoAssembler.prototype.emitExprInto = function (e, reg) { + switch (e.exprKind) { + case pxtc.ir.EK.NumberLiteral: + if (e.data === true) + this.write(this.t.emit_int(1, reg)); + else if (e.data === false) + this.write(this.t.emit_int(0, reg)); + else if (e.data === null) + this.write(this.t.emit_int(0, reg)); + else if (typeof e.data == "number") + this.write(this.t.emit_int(e.data, reg)); + else + pxtc.oops(); + break; + case pxtc.ir.EK.PointerLiteral: + this.write(this.t.load_ptr(e.data, reg)); + break; + case pxtc.ir.EK.SharedRef: + var arg = e.args[0]; + pxtc.U.assert(!!arg.currUses); // not first use + pxtc.U.assert(arg.currUses < arg.totalUses); + arg.currUses++; + var idx = this.exprStack.indexOf(arg); + pxtc.U.assert(idx >= 0); + if (idx == 0 && arg.totalUses == arg.currUses) { + this.write(this.t.pop_fixed([reg]) + (" ; tmpref @" + this.exprStack.length)); + this.exprStack.shift(); + this.clearStack(); + } + else { + this.write(this.t.load_reg_src_off(reg, "sp", idx.toString(), true) + (" ; tmpref @" + (this.exprStack.length - idx))); + } + break; + case pxtc.ir.EK.CellRef: + var cell = e.data; + if (cell.isGlobal()) { + var inf = this.bitSizeInfo(cell.bitSize); + var off = "#" + cell.index; + if (inf.needsSignExt || cell.index >= inf.immLimit) { + this.write(this.t.emit_int(cell.index, reg)); + off = reg; + } + this.write(this.t.load_reg_src_off(reg, "r6", off, false, false, inf)); + } + else { + var _a = this.cellref(cell), src = _a[0], imm = _a[1], idx_1 = _a[2]; + this.write(this.t.load_reg_src_off(reg, src, imm, idx_1)); + } + break; + default: pxtc.oops(); + } + }; + ProctoAssembler.prototype.bitSizeInfo = function (b) { + var inf = { + size: pxtc.sizeOfBitSize(b), + immLimit: 128 + }; + if (inf.size == 1) { + inf.immLimit = 32; + } + else if (inf.size == 2) { + inf.immLimit = 64; + } + if (b == 1 /* Int8 */ || b == 3 /* Int16 */) { + inf.needsSignExt = true; + } + return inf; + }; + // result in R0 + ProctoAssembler.prototype.emitExpr = function (e) { + //console.log(`EMITEXPR ${e.sharingInfo()} E: ${e.toString()}`) + var _this = this; + switch (e.exprKind) { + case pxtc.ir.EK.JmpValue: + this.write("; jmp value (already in r0)"); + break; + case pxtc.ir.EK.Nop: + // this is there because we need different addresses for breakpoints + this.write(this.t.nop()); + break; + case pxtc.ir.EK.Incr: + this.emitExpr(e.args[0]); + this.emitCallRaw("pxt::incr"); + break; + case pxtc.ir.EK.Decr: + this.emitExpr(e.args[0]); + this.emitCallRaw("pxt::decr"); + break; + case pxtc.ir.EK.FieldAccess: + var info = e.data; + // it does the decr itself, no mask + return this.emitExpr(pxtc.ir.rtcall(this.withRef("pxtrt::ldfld", info.isRef), [e.args[0], pxtc.ir.numlit(info.idx)])); + case pxtc.ir.EK.Store: + return this.emitStore(e.args[0], e.args[1]); + case pxtc.ir.EK.RuntimeCall: + return this.emitRtCall(e); + case pxtc.ir.EK.ProcCall: + return this.emitProcCall(e); + case pxtc.ir.EK.SharedDef: + return this.emitSharedDef(e); + case pxtc.ir.EK.Sequence: + e.args.forEach(function (e) { return _this.emitExpr(e); }); + return this.clearStack(); + default: + return this.emitExprInto(e, "r0"); + } + }; + ProctoAssembler.prototype.emitSharedDef = function (e) { + var arg = e.args[0]; + pxtc.U.assert(arg.totalUses >= 1); + pxtc.U.assert(arg.currUses === 0); + arg.currUses = 1; + if (arg.totalUses == 1) + return this.emitExpr(arg); + else { + this.emitExpr(arg); + this.exprStack.unshift(arg); + this.write(this.t.push_local("r0") + "; tmpstore @" + this.exprStack.length); + } + }; + ProctoAssembler.prototype.emitSharedTerminate = function (e) { + this.emitExpr(e); + var arg = e.data; + // ??? missing ??? + }; + ProctoAssembler.prototype.emitRtCall = function (topExpr) { + var _this = this; + var info = pxtc.ir.flattenArgs(topExpr); + info.precomp.forEach(function (e) { return _this.emitExpr(e); }); + info.flattened.forEach(function (a, i) { + pxtc.U.assert(i <= 3); + _this.emitExprInto(a, "r" + i); + }); + this.clearStack(); + var name = topExpr.data; + //console.log("RT",name,topExpr.isAsync) + if (name == "thumb::ignore") + return; + if (pxtc.U.startsWith(name, "thumb::")) { + this.write(this.t.rt_call(name.slice(7), "r0", "r1")); + } + else { + this.write(this.t.call_lbl(name)); + } + }; + ProctoAssembler.prototype.emitHelper = function (asm) { + if (!this.bin.codeHelpers[asm]) { + var len = Object.keys(this.bin.codeHelpers).length; + this.bin.codeHelpers[asm] = "_hlp_" + len; + } + this.write(this.t.call_lbl(this.bin.codeHelpers[asm])); + }; + ProctoAssembler.prototype.emitProcCall = function (topExpr) { + var _this = this; + var stackBottom = 0; + //console.log("PROCCALL", topExpr.toString()) + var argStmts = topExpr.args.map(function (a, i) { + _this.emitExpr(a); + _this.write(_this.t.push_local("r0") + " ; proc-arg"); + a.totalUses = 1; + a.currUses = 0; + _this.exprStack.unshift(a); + if (i == 0) + stackBottom = _this.exprStack.length; + pxtc.U.assert(_this.exprStack.length - stackBottom == i); + return a; + }); + var lbl = this.mkLbl("proccall"); + var afterall = this.mkLbl("afterall"); + var procid = topExpr.data; + var procIdx = -1; + if (procid.virtualIndex != null || procid.ifaceIndex != null) { + if (procid.mapMethod) { + var isSet = /Set/.test(procid.mapMethod); + pxtc.assert(isSet == (topExpr.args.length == 2)); + pxtc.assert(!isSet == (topExpr.args.length == 1)); + this.write(this.t.emit_int(procid.mapIdx, "r1")); + if (isSet) + this.write(this.t.emit_int(procid.ifaceIndex, "r2")); + this.write(lbl + ":"); + this.emitHelper(this.t.vcall(procid.mapMethod, isSet, pxtc.vtableShift)); + } + else { + this.write(this.t.prologue_vtable(topExpr.args.length - 1, pxtc.vtableShift)); + var effIdx = procid.virtualIndex + 4; + if (procid.ifaceIndex != null) { + this.write(this.t.load_reg_src_off("r0", "r0", "#4") + " ; iface table"); + effIdx = procid.ifaceIndex; + } + if (effIdx <= 31) { + this.write(this.t.load_reg_src_off("r0", "r0", effIdx.toString(), true) + " ; ld-method"); + } + else { + this.write(this.t.emit_int(effIdx * 4, "r1")); + this.write(this.t.load_reg_src_off("r0", "r0", "r1") + " ; ld-method"); + } + this.write(lbl + ":"); + this.write(this.t.call_reg("r0")); + this.write(afterall + ":"); + } + } + else { + var proc = procid.proc; + procIdx = proc.seqNo; + this.write(lbl + ":"); + this.write(this.t.call_lbl(proc.label())); + } + this.calls.push({ + procIndex: procIdx, + stack: 0, + addr: 0, + callLabel: lbl, + }); + for (var _i = 0, argStmts_1 = argStmts; _i < argStmts_1.length; _i++) { + var a = argStmts_1[_i]; + a.currUses = 1; + } + this.clearStack(); + }; + ProctoAssembler.prototype.emitStore = function (trg, src) { + switch (trg.exprKind) { + case pxtc.ir.EK.CellRef: + var cell = trg.data; + this.emitExpr(src); + if (cell.isGlobal()) { + var inf = this.bitSizeInfo(cell.bitSize); + var off = "#" + cell.index; + if (cell.index >= inf.immLimit) { + this.write(this.t.emit_int(cell.index, "r1")); + off = "r1"; + } + this.write(this.t.load_reg_src_off("r0", "r6", off, false, true, inf)); + } + else { + var _a = this.cellref(cell), reg = _a[0], imm = _a[1], off = _a[2]; + this.write(this.t.load_reg_src_off("r0", reg, imm, off, true)); + } + break; + case pxtc.ir.EK.FieldAccess: + var info = trg.data; + // it does the decr itself, no mask + this.emitExpr(pxtc.ir.rtcall(this.withRef("pxtrt::stfld", info.isRef), [trg.args[0], pxtc.ir.numlit(info.idx), src])); + break; + default: pxtc.oops(); + } + }; + ProctoAssembler.prototype.cellref = function (cell) { + if (cell.isGlobal()) { + throw pxtc.oops(); + } + else if (cell.iscap) { + pxtc.assert(0 <= cell.index && cell.index < 32); + return ["r5", cell.index.toString(), true]; + } + else if (cell.isarg) { + var idx = this.proc.args.length - cell.index - 1; + return ["sp", "args@" + idx.toString(), false]; + } + else { + return ["sp", "locals@" + cell.index, false]; + } + }; + ProctoAssembler.prototype.emitLambdaWrapper = function (isMain) { + var _this = this; + var node = this.proc.action; + this.write(""); + this.write(".section code"); + if (isMain) + this.write(this.t.unconditional_branch(".themain")); + this.write(".balign 4"); + this.write(this.proc.label() + "_Lit:"); + this.write(".short 0xffff, 0x0000 ; action literal"); + this.write("@stackmark litfunc"); + if (isMain) + this.write(".themain:"); + var parms = this.proc.args.map(function (a) { return a.def; }); + this.write(this.t.proc_setup()); + this.write(this.t.push_fixed(["r5", "r6"])); + if (parms.length >= 1) + this.write(this.t.push_local("r1")); + parms.forEach(function (_, i) { + if (i >= 3) + pxtc.U.userError(pxtc.U.lf("only up to three parameters supported in lambdas")); + if (i > 0) + _this.write(_this.t.push_local("r" + (i + 1))); + }); + this.write(this.t.proc_setup_end()); + var asm = this.t.lambda_prologue(); + this.proc.args.forEach(function (p, i) { + if (p.isRef()) { + var _a = _this.cellref(p), reg = _a[0], off = _a[1], idx = _a[2]; + asm += _this.t.load_reg_src_off("r0", reg, off, idx) + "\n"; + asm += _this.t.call_lbl("pxt::incr") + "\n"; + } + }); + asm += this.t.lambda_epilogue(); + this.emitHelper(asm); // using shared helper saves about 3% of binary size + this.write(this.t.call_lbl(this.proc.label())); + if (parms.length) + this.write(this.t.pop_locals(parms.length)); + this.write(this.t.pop_fixed(["r6", "r5"])); + this.write(this.t.proc_return()); + this.write("@stackempty litfunc"); + }; + ProctoAssembler.prototype.emitCallRaw = function (name) { + var inf = pxtc.hex.lookupFunc(name); + pxtc.assert(!!inf, "unimplemented raw function: " + name); + this.write(this.t.call_lbl(name) + " ; *" + inf.type + inf.args + " (raw)"); + }; + return ProctoAssembler; + }()); + pxtc.ProctoAssembler = ProctoAssembler; + })(pxtc = ts.pxtc || (ts.pxtc = {})); +})(ts || (ts = {})); +// Make sure backbase.ts is loaded before us, otherwise 'extends AssemblerSnippets' fails at runtime +/// +var ts; +(function (ts) { + var pxtc; + (function (pxtc) { + // AVR: + // - 32 8-bit registers (R0 - R31), with mapping to data addresses 0x0000 - 0x001F + // - X-register R26 (low), R27 (high) + // - Y-register R28 (low), R29 (high), Frame Pointer (FP) + // - Z-register R30 (low), R31 (high), use for indirect addressing + // - 64 I/0 registers ($00-$3F), with mapping to data addresses 0x0020 - 0x005F + // - 160 Ext I/O registers (0x0060-0x00FF) + // - Internal SRAM 0x100- + // - SP: special register in I/O space (0x3D, 0x3E) + // - instructions that use SP + // - PUSH Rr (dec SP by 1) + // - CALL, ICALL, RCALL (dec by 2 - 16 bit code pointer) + // - POP Rd (inc SP by 1) + // - RET, RETI (inc by 2 - 16 bit code pointer) + // - in AVR, 0x0060 is lowest address for the stack + // - stack grows from high (RAMEND) to low (top of stack) + // Text below from http://gcc.gnu.org/wiki/avr-gcc + // R0 is used as scratch register that need not to be restored after its usage. + // R1 always contains zero. + /* + * Call-Used Registers + * + * R18–R27, R30, R31. These GPRs are call clobbered. + * An ordinary function may use them without restoring the contents. + */ + /* + * Call-Saved Registers + * + * R2–R17, (R28, R29) FP + * The remaining GPRs are call-saved, i.e. a function that uses such a registers must restore its original content. + * This applies even if the register is used to pass a function argument. + * R1 The zero-register is implicity call-saved (implicit because R1 is a fixed register). + */ + /* + * Frame layout + * + * Y-register (R28-R29) is frame pointer + * + * Pseudos that don't get a hard register will be put into a stack slot and loaded / stored as needed. + * The stack grows downwards. + * Stack pointer and frame pointer are not aligned, i.e. 1-byte aligned. + * After the function prologue, the frame pointer will point one byte below the stack frame, + * i.e. Y+1 points to the bottom of the stack frame. + */ + /* + * Calling convention + * + * - An argument is passed either completely in registers or completely in memory. + * - To find the register where a function argument is passed, follow this procedure: + * 0. X = 26 + * 1. If the argument SIZE is an odd number of bytes, round up SIZE to the next even number. + * 2. X = X -SIZE + * 3. If the new X is at least 8 and the size of the object is non-zero, + * then the low-byte of the argument is passed in RX. Subsequent bytes of the argument + * are passed in the subsequent registers, i.e. in increasing register numbers. + * 4. If X < 8 or the SIZE = 0, the argument will be passed in memory. + * 5. If the current argument is passed in memory, stop the procedure: All subsequent arguments will also be passed in memory. + * 6. If there are arguments left, goto 1. and proceed with the next argument. + * + * - Return values with a size of 1 byte up to and including a size of 8 bytes will be returned in registers. + * - Return values whose size is outside that range will be returned in memory. + * - If the return value of a function is returned in registers, the same registers are used as if + * the value was the first parameter of a non-varargs function. + * For example, an 8-bit value is returned in R24 and an 32-bit value is returned R22...R25. + */ + // for now, everything is 16-bit (word) + var AVRSnippets = (function (_super) { + __extends(AVRSnippets, _super); + function AVRSnippets() { + _super.apply(this, arguments); + // mapping from virtual registers to AVR registers + this.rmap_lo = { + "r0": "r24", + "r1": "r22", + "r2": "r20", + "r3": "r18", + "r5": "r26", + "r6": "r2" // Z - we really mean r2 YES, because r30 is used as Z + }; + this.rmap_hi = { + "r0": "r25", + "r1": "r23", + "r2": "r21", + "r3": "r19", + "r5": "r27", + "r6": "r3" + }; + this.inst_lo = { + "adds": "add", + "subs": "sub", + "ands": "and", + "orrs": "or", + "eors": "eor", + "muls": "Number_::", + "lsls": "Number_::", + "asrs": "Number_::", + "lsrs": "Number_::" // case SK.GreaterThanGreaterThanGreaterThanToken + }; + this.inst_hi = { + "adds": "adc", + "subs": "sbc", + "ands": "and", + "orrs": "or", + "eors": "eor" + }; + } + AVRSnippets.prototype.nop = function () { return "nop"; }; + AVRSnippets.prototype.reg_gets_imm = function (reg, imm) { + var imm_lo = imm & 0xff; + var imm_hi = (imm & 0xff00) >> 8; + return "\n ldi " + this.rmap_lo[reg] + ", #" + imm_lo + "\n ldi " + this.rmap_hi[reg] + ", #" + imm_hi; + }; + AVRSnippets.prototype.push_fixed = function (regs) { + var _this = this; + var res = ""; + regs.forEach(function (r) { + res = res + ("\npush " + _this.rmap_lo[r] + "\npush " + _this.rmap_hi[r]); + }); + res += "\n @dummystack " + regs.length + "\n in r28, 0x3d\n in r29, 0x3e"; + return res; + }; + AVRSnippets.prototype.pop_fixed = function (regs) { + var _this = this; + var res = ""; + regs.forEach(function (r) { + res = res + ("\npop " + _this.rmap_hi[r] + "\npop " + _this.rmap_lo[r]); + }); + res += "\n in r28, 0x3d\n in r29, 0x3e\n @dummystack -" + regs.length; + return res; + }; + AVRSnippets.prototype.proc_setup = function (main) { + var set_r1_zero = main ? "eor r1, r1" : ""; + // push the frame pointer + return "\n " + set_r1_zero + "\n push r28\n push r29\n @dummystack 1\n in r28, 0x3d\n in r29, 0x3e"; + }; + AVRSnippets.prototype.proc_return = function () { + // pop frame pointer and return + return "\n pop r29\n pop r28\n in r28, 0x3d\n in r29, 0x3e\n @dummystack -1\n ret"; + }; + AVRSnippets.prototype.debugger_hook = function (lbl) { return "eor r1, r1"; }; + AVRSnippets.prototype.debugger_bkpt = function (lbl) { return "eor r1, r1"; }; + AVRSnippets.prototype.breakpoint = function () { return "eor r1, r1"; }; + AVRSnippets.prototype.push_local = function (reg) { + return "\n push " + this.rmap_lo[reg] + "\n push " + this.rmap_hi[reg] + "\n @dummystack 1\n in r28, 0x3d\n in r29, 0x3e"; + }; + AVRSnippets.prototype.pop_locals = function (n) { + return "\n in\tr28, 0x3d\n in\tr29, 0x3e\n adiw\tr28, #2*" + n + "\n out\t0x3d, r28\n out\t0x3e, r29\n @dummystack -" + n; + }; + AVRSnippets.prototype.unconditional_branch = function (lbl) { return "jmp " + lbl; }; + AVRSnippets.prototype.beq = function (lbl) { return "breq " + lbl; }; + AVRSnippets.prototype.bne = function (lbl) { return "brne " + lbl; }; + AVRSnippets.prototype.cmp = function (reg1, reg2) { + var reg1_lo = this.rmap_lo[reg1]; + var reg1_hi = this.rmap_hi[reg1]; + var reg2_lo = this.rmap_lo[reg2]; + var reg2_hi = this.rmap_hi[reg2]; + return "\n cp " + reg1_lo + ", " + reg2_lo + "\n cpc " + reg1_hi + ", " + reg2_hi; + }; + AVRSnippets.prototype.cmp_zero = function (reg) { + var reg_lo = this.rmap_lo[reg]; + return "\n cp " + reg_lo + ", r1"; + }; + // load_reg_src_off is load/store indirect + // word? - does offset represent an index that must be multiplied by word size? + // inf? - control over size of referenced data + // str? - true=Store/false=Load + AVRSnippets.prototype.load_reg_src_off = function (reg, src, off, word, store, inf) { + pxtc.assert(src != "r1"); + var tgt_reg = ""; + var prelude = ""; + var _this = this; + function spill_it(new_off) { + prelude += "\n " + _this.reg_gets_imm("r1", new_off) + "\n "; + if (tgt_reg == "Y") { + prelude += "\n movw r30, r28\n"; + } + prelude += "\n add r30, " + _this.rmap_lo["r1"] + "\n adc r31, " + _this.rmap_hi["r1"]; + off = "0"; + tgt_reg = "Z"; + } + // different possibilities for src: r0, r5, sp, r6 + // any indirection we want to do using Y+C, Z+C (recall Y=sp, r6 -> Z) + if (src != "sp") { + prelude = "\n movw r30, " + this.rmap_lo[src]; + tgt_reg = "Z"; + } + else { + tgt_reg = "Y"; // sp -> FP = r29 + } + // different possibilities for off + if (word || off[0] == "#") { + var new_off = 0; + if (word) { + // word true implies off is an integer + new_off = 2 * parseInt(off); + } + else { + // word false means we have #integer + new_off = parseInt(off.slice(1)); + } + if (0 <= new_off && new_off <= 63) { + off = new_off.toString(); + } + else { + spill_it(new_off); + } + } + else if (off[0] == "r") { + if (tgt_reg == "Y") { + prelude += "\n movw r30, r28\n"; + } + prelude += "\n add r30, " + this.rmap_lo[off] + "\n adc r31, " + this.rmap_hi[off]; + off = "0"; + } + else { + } + var _a = ["TBD", "TBD"], off_lo = _a[0], off_hi = _a[1]; + if (off.indexOf("@") == -1) { + // in AVR, SP/FP points to next available slot, so need to bump + _b = (tgt_reg == "Y") ? [(parseInt(off) + 2).toString(), (parseInt(off) + 1).toString()] : [off, off + "|1"], off_lo = _b[0], off_hi = _b[1]; + } + else { + // locals@offset and args@offset used in stack context, so also need to handle + _c = [off, off + "-1"], off_lo = _c[0], off_hi = _c[1]; + } + if (store) { + return "\n " + prelude + "\n std " + tgt_reg + ", " + off_lo + ", " + this.rmap_lo[reg] + "\n std " + tgt_reg + ", " + off_hi + ", " + this.rmap_hi[reg]; + } + else { + return "\n " + prelude + "\n ldd " + this.rmap_lo[reg] + ", " + tgt_reg + ", " + off_lo + "\n ldd " + this.rmap_hi[reg] + ", " + tgt_reg + ", " + off_hi; + } + var _b, _c; + }; + AVRSnippets.prototype.rt_call = function (name, r0, r1) { + pxtc.assert(r0 == "r0" && r1 == "r1"); + if (this.inst_lo[name] == "Number_::") { + return this.call_lbl("Number_::" + name); + } + else { + return "\n " + this.inst_lo[name] + " r24, r22\n " + this.inst_hi[name] + " r25, r23"; + } + }; + AVRSnippets.prototype.call_lbl = function (lbl) { return "call " + lbl; }; + AVRSnippets.prototype.call_reg = function (reg) { + return "\n movw r30, " + this.rmap_lo[reg] + "\n icall"; + }; + // no virtuals for now + AVRSnippets.prototype.vcall = function (mapMethod, isSet, vtableShift) { pxtc.assert(false); return ""; }; + AVRSnippets.prototype.prologue_vtable = function (arg_index, vtableShift) { pxtc.assert(false); return ""; }; + AVRSnippets.prototype.lambda_prologue = function () { + return "\n @stackmark args\n " + this.proc_setup() + "\n movw r26, r24"; + }; + AVRSnippets.prototype.lambda_epilogue = function () { + return "\n call pxtrt::getGlobalsPtr\n movw r2, r24\n " + this.proc_return() + "\n @stackempty args"; + }; + AVRSnippets.prototype.load_ptr = function (lbl, reg) { + pxtc.assert(!!lbl); + return "\n ldi " + this.rmap_lo[reg] + ", " + lbl + "@lo\n ldi " + this.rmap_hi[reg] + ", " + lbl + "@hi"; + }; + AVRSnippets.prototype.emit_int = function (v, reg) { + return this.reg_gets_imm(reg, v); + }; + return AVRSnippets; + }(pxtc.AssemblerSnippets)); + pxtc.AVRSnippets = AVRSnippets; + })(pxtc = ts.pxtc || (ts.pxtc = {})); +})(ts || (ts = {})); +var ts; +(function (ts) { + var pxtc; + (function (pxtc) { + // TODO: ARM specific code should be lifted out + var jsOpMap = { + "thumb::adds": "+", + "thumb::subs": "-", + "Number_::div": "/", + "Number_::mod": "%", + "thumb::muls": "*" + }; + function shimToJs(shimName) { + shimName = shimName.replace(/::/g, "."); + if (shimName.slice(0, 4) == "pxt.") + shimName = "pxtcore." + shimName.slice(4); + return "pxsim." + shimName; + } + pxtc.shimToJs = shimToJs; + function vtableToJs(info) { + var s = ("var " + info.id + "_VT = {\n") + + (" name: " + JSON.stringify(pxtc.getName(info.decl)) + ",\n") + + (" refmask: " + JSON.stringify(info.refmask) + ",\n") + + " methods: [\n"; + for (var _i = 0, _a = info.vtable; _i < _a.length; _i++) { + var m = _a[_i]; + s += " " + m.label() + ",\n"; + } + s += " ],\n"; + s += " iface: [\n"; + var i = 0; + for (var _b = 0, _c = info.itable; _b < _c.length; _b++) { + var m = _c[_b]; + s += " " + (m ? m.label() : "null") + ", // " + (info.itableInfo[i] || ".") + "\n"; + i++; + } + s += " ],\n"; + s += "};\n"; + return s; + } + function jsEmit(bin) { + var jssource = ""; + if (!bin.target.jsRefCounting) + jssource += "pxsim.noRefCounting();\n"; + bin.procs.forEach(function (p) { + jssource += "\n" + irToJS(bin, p) + "\n"; + }); + bin.usedClassInfos.forEach(function (info) { + jssource += vtableToJs(info); + }); + if (bin.res.breakpoints) + jssource += "\nsetupDebugger(" + bin.res.breakpoints.length + ")\n"; + jssource += "\npxsim.setupStringLiterals(" + + JSON.stringify(pxtc.U.mapMap(bin.strings, function (k, v) { return 1; }), null, 1) + + ")\n"; + bin.writeFile(pxtc.BINARY_JS, jssource); + } + pxtc.jsEmit = jsEmit; + function irToJS(bin, proc) { + var resText = ""; + var writeRaw = function (s) { resText += s + "\n"; }; + var write = function (s) { resText += " " + s + "\n"; }; + var EK = pxtc.ir.EK; + var refCounting = !!bin.target.jsRefCounting; + writeRaw("\nvar " + proc.label() + " " + (bin.procs[0] == proc ? "= entryPoint" : "") + " = function (s) {\nvar r0 = s.r0, step = s.pc;\ns.pc = -1;\nwhile (true) { \nif (yieldSteps-- < 0 && maybeYield(s, step, r0)) return null;\nswitch (step) {\n case 0:\n"); + //console.log(proc.toString()) + proc.resolve(); + //console.log("OPT", proc.toString()) + proc.locals.forEach(function (l) { + write(locref(l) + " = 0;"); + }); + if (proc.args.length) { + write("if (s.lambdaArgs) {"); + proc.args.forEach(function (l, i) { + write(" " + locref(l) + " = " + (l.isRef() ? "pxtrt.incr" : "") + "(s.lambdaArgs[" + i + "]);"); + }); + write(" s.lambdaArgs = null;"); + write("}"); + } + var exprStack = []; + var lblIdx = 0; + var asyncContinuations = []; + for (var _i = 0, _a = proc.body; _i < _a.length; _i++) { + var s = _a[_i]; + if (s.stmtKind == pxtc.ir.SK.Label) + s.lblId = ++lblIdx; + } + for (var _b = 0, _c = proc.body; _b < _c.length; _b++) { + var s = _c[_b]; + switch (s.stmtKind) { + case pxtc.ir.SK.Expr: + emitExpr(s.expr); + break; + case pxtc.ir.SK.StackEmpty: + for (var _d = 0, exprStack_1 = exprStack; _d < exprStack_1.length; _d++) { + var e = exprStack_1[_d]; + if (e.totalUses !== e.currUses) + pxtc.oops(); + } + exprStack = []; + break; + case pxtc.ir.SK.Jmp: + emitJmp(s); + break; + case pxtc.ir.SK.Label: + writeRaw(" case " + s.lblId + ":"); + break; + case pxtc.ir.SK.Breakpoint: + emitBreakpoint(s); + break; + default: pxtc.oops(); + } + } + write("return leave(s, r0)"); + writeRaw(" default: oops()"); + writeRaw("} } }"); + var info = pxtc.nodeLocationInfo(proc.action); + info.functionName = proc.getName(); + writeRaw(proc.label() + ".info = " + JSON.stringify(info)); + if (proc.isRoot) + writeRaw(proc.label() + ".continuations = [ " + asyncContinuations.join(",") + " ]"); + return resText; + function emitBreakpoint(s) { + var id = s.breakpointInfo.id; + write("s.lastBrkId = " + id + ";"); + if (!bin.options.breakpoints) + return; + var lbl = ++lblIdx; + var brkCall = "return breakpoint(s, " + lbl + ", " + id + ", r0);"; + if (s.breakpointInfo.isDebuggerStmt) + write(brkCall); + else + write("if ((breakAlways && isBreakFrame(s)) || breakpoints[" + id + "]) " + brkCall); + writeRaw(" case " + lbl + ":"); + } + function locref(cell) { + if (cell.isGlobal()) + return "globals." + cell.uniqueName(); + else if (cell.iscap) + return "s.caps[" + cell.index + "]"; + return "s." + cell.uniqueName(); + } + function emitJmp(jmp) { + var trg = "{ step = " + jmp.lbl.lblId + "; continue; }"; + if (jmp.jmpMode == pxtc.ir.JmpMode.Always) { + if (jmp.expr) + emitExpr(jmp.expr); + write(trg); + } + else if (jmp.jmpMode == pxtc.ir.JmpMode.IfJmpValEq) { + write("if (r0 == (" + emitExprInto(jmp.expr) + ")) " + trg); + } + else { + emitExpr(jmp.expr); + if (jmp.jmpMode == pxtc.ir.JmpMode.IfNotZero) { + write("if (r0) " + trg); + } + else { + write("if (!r0) " + trg); + } + } + } + function withRef(name, isRef) { + return name + (isRef ? "Ref" : ""); + } + function emitExprInto(e) { + switch (e.exprKind) { + case EK.NumberLiteral: + if (e.data === true) + return "1"; + else if (e.data === false) + return "0"; + else if (e.data === null) + return "0"; + else if (typeof e.data == "number") + return e.data + ""; + else + throw pxtc.oops(); + case EK.PointerLiteral: + return e.jsInfo; + case EK.SharedRef: + var arg = e.args[0]; + pxtc.U.assert(!!arg.currUses); // not first use + pxtc.U.assert(arg.currUses < arg.totalUses); + arg.currUses++; + var idx = exprStack.indexOf(arg); + pxtc.U.assert(idx >= 0); + return "s.tmp_" + idx; + case EK.CellRef: + var cell = e.data; + return locref(cell); + default: throw pxtc.oops(); + } + } + // result in R0 + function emitExpr(e) { + //console.log(`EMITEXPR ${e.sharingInfo()} E: ${e.toString()}`) + switch (e.exprKind) { + case EK.JmpValue: + write("// jmp value (already in r0)"); + break; + case EK.Nop: + write("// nop"); + break; + case EK.Incr: + emitExpr(e.args[0]); + if (refCounting) + write("pxtrt.incr(r0);"); + break; + case EK.Decr: + emitExpr(e.args[0]); + if (refCounting) + write("pxtrt.decr(r0);"); + break; + case EK.FieldAccess: + var info_1 = e.data; + if (info_1.shimName) { + pxtc.assert(!refCounting); + emitExpr(e.args[0]); + write("r0 = r0" + info_1.shimName + ";"); + return; + } + // it does the decr itself, no mask + return emitExpr(pxtc.ir.rtcall(withRef("pxtrt::ldfld", info_1.isRef), [e.args[0], pxtc.ir.numlit(info_1.idx)])); + case EK.Store: + return emitStore(e.args[0], e.args[1]); + case EK.RuntimeCall: + return emitRtCall(e); + case EK.ProcCall: + return emitProcCall(e); + case EK.SharedDef: + return emitSharedDef(e); + case EK.Sequence: + return e.args.forEach(emitExpr); + default: + write("r0 = " + emitExprInto(e) + ";"); + } + } + function emitSharedDef(e) { + var arg = e.args[0]; + pxtc.U.assert(arg.totalUses >= 1); + pxtc.U.assert(arg.currUses === 0); + arg.currUses = 1; + if (arg.totalUses == 1) + return emitExpr(arg); + else { + emitExpr(arg); + var idx = exprStack.length; + exprStack.push(arg); + write("s.tmp_" + idx + " = r0;"); + } + } + function emitRtCall(topExpr) { + var info = pxtc.ir.flattenArgs(topExpr); + info.precomp.forEach(emitExpr); + var name = topExpr.data; + var args = info.flattened.map(emitExprInto); + var text = ""; + if (name[0] == ".") + text = "" + args[0] + name + "(" + args.slice(1).join(", ") + ")"; + else if (pxtc.U.startsWith(name, "new ")) + text = "new " + shimToJs(name.slice(4)) + "(" + args.join(", ") + ")"; + else if (args.length == 2 && bin.target.floatingPoint && pxtc.U.lookup(jsOpMap, name)) + text = "(" + args[0] + " " + pxtc.U.lookup(jsOpMap, name) + " " + args[1] + ")"; + else + text = shimToJs(name) + "(" + args.join(", ") + ")"; + if (topExpr.callingConvention == pxtc.ir.CallingConvention.Plain) { + write("r0 = " + text + ";"); + } + else { + var loc = ++lblIdx; + asyncContinuations.push(loc); + if (topExpr.callingConvention == pxtc.ir.CallingConvention.Promise) { + write("(function(cb) { " + text + ".done(cb) })(buildResume(s, " + loc + "));"); + } + else { + write("setupResume(s, " + loc + ");"); + write(text + ";"); + } + write("checkResumeConsumed();"); + write("return;"); + writeRaw(" case " + loc + ":"); + write("r0 = s.retval;"); + } + } + function emitProcCall(topExpr) { + var frameExpr = pxtc.ir.rtcall("", []); + frameExpr.totalUses = 1; + frameExpr.currUses = 0; + var frameIdx = exprStack.length; + exprStack.push(frameExpr); + var procid = topExpr.data; + var proc = procid.proc; + var frameRef = "s.tmp_" + frameIdx; + var lblId = ++lblIdx; + write(frameRef + " = { fn: " + (proc ? proc.label() : null) + ", parent: s };"); + //console.log("PROCCALL", topExpr.toString()) + topExpr.args.forEach(function (a, i) { + emitExpr(a); + write(frameRef + ".arg" + i + " = r0;"); + }); + write("s.pc = " + lblId + ";"); + if (procid.ifaceIndex != null) { + if (procid.mapMethod) { + write("if (" + frameRef + ".arg0.vtable === 42) {"); + var args = topExpr.args.map(function (a, i) { return (frameRef + ".arg" + i); }); + args.splice(1, 0, procid.mapIdx.toString()); + write(" s.retval = " + shimToJs(procid.mapMethod) + "(" + args.join(", ") + ");"); + write(" " + frameRef + ".fn = doNothing;"); + write("} else"); + } + write(frameRef + ".fn = " + frameRef + ".arg0.vtable.iface[" + procid.ifaceIndex + "];"); + } + else if (procid.virtualIndex != null) { + pxtc.assert(procid.virtualIndex >= 0); + write(frameRef + ".fn = " + frameRef + ".arg0.vtable.methods[" + procid.virtualIndex + "];"); + } + write("return actionCall(" + frameRef + ")"); + writeRaw(" case " + lblId + ":"); + write("r0 = s.retval;"); + frameExpr.currUses = 1; + } + function bitSizeConverter(b) { + switch (b) { + case 0 /* None */: return ""; + case 1 /* Int8 */: return "pxsim.pxtrt.toInt8"; + case 3 /* Int16 */: return "pxsim.pxtrt.toInt16"; + case 5 /* Int32 */: return "pxsim.pxtrt.toInt32"; + case 2 /* UInt8 */: return "pxsim.pxtrt.toUInt8"; + case 4 /* UInt16 */: return "pxsim.pxtrt.toUInt16"; + default: throw pxtc.oops(); + } + } + function emitStore(trg, src) { + switch (trg.exprKind) { + case EK.CellRef: + var cell = trg.data; + emitExpr(src); + write(locref(cell) + " = " + bitSizeConverter(cell.bitSize) + "(r0);"); + break; + case EK.FieldAccess: + var info_2 = trg.data; + // it does the decr itself, no mask + emitExpr(pxtc.ir.rtcall(withRef("pxtrt::stfld", info_2.isRef), [trg.args[0], pxtc.ir.numlit(info_2.idx), src])); + break; + default: pxtc.oops(); + } + } + } + })(pxtc = ts.pxtc || (ts.pxtc = {})); +})(ts || (ts = {})); +// Make sure backbase.ts is loaded before us, otherwise 'extends AssemblerSnippets' fails at runtime +/// +var ts; +(function (ts) { + var pxtc; + (function (pxtc) { + // snippets for ARM Thumb assembly + var ThumbSnippets = (function (_super) { + __extends(ThumbSnippets, _super); + function ThumbSnippets() { + _super.apply(this, arguments); + } + ThumbSnippets.prototype.nop = function () { return "nop"; }; + ThumbSnippets.prototype.reg_gets_imm = function (reg, imm) { + return "movs " + reg + ", #" + imm; + }; + ThumbSnippets.prototype.push_fixed = function (regs) { return "push {" + regs.join(", ") + "}"; }; + ThumbSnippets.prototype.pop_fixed = function (regs) { return "pop {" + regs.join(", ") + "}"; }; + ThumbSnippets.prototype.proc_setup = function (main) { return "push {lr}"; }; + ThumbSnippets.prototype.proc_return = function () { return "pop {pc}"; }; + ThumbSnippets.prototype.debugger_hook = function (lbl) { + return "\n ldr r0, [r6, #0]\n lsls r0, r0, #30\n bmi " + lbl + "\n" + (lbl + "_after") + ":\n"; + }; + ThumbSnippets.prototype.debugger_bkpt = function (lbl) { + return "\n ldr r0, [r6, #0]\n lsls r0, r0, #31\n bpl " + lbl + "\n bkpt 2\n" + lbl + ":"; + }; + ThumbSnippets.prototype.breakpoint = function () { + return "bkpt 1"; + }; + ThumbSnippets.prototype.push_local = function (reg) { return "push {" + reg + "}"; }; + ThumbSnippets.prototype.pop_locals = function (n) { return "add sp, #4*" + n + " ; pop locals" + n; }; + ThumbSnippets.prototype.unconditional_branch = function (lbl) { return "bb " + lbl; }; + ThumbSnippets.prototype.beq = function (lbl) { return "beq " + lbl; }; + ThumbSnippets.prototype.bne = function (lbl) { return "bne " + lbl; }; + ThumbSnippets.prototype.cmp = function (reg1, reg2) { return "cmp " + reg1 + ", " + reg2; }; + ThumbSnippets.prototype.cmp_zero = function (reg1) { return "cmp " + reg1 + ", #0"; }; + ThumbSnippets.prototype.load_reg_src_off = function (reg, src, off, word, store, inf) { + if (word) { + off = "#4*" + off; + } + var str = "str"; + var ldr = "ldr"; + if (inf) { + if (inf.immLimit == 32) + str = "strb"; + else if (inf.immLimit == 64) + str = "strh"; + if (inf.needsSignExt) + ldr = str.replace("str", "ldrs"); + else + ldr = str.replace("str", "ldr"); + } + if (store) + return str + " " + reg + ", [" + src + ", " + off + "]"; + else + return ldr + " " + reg + ", [" + src + ", " + off + "]"; + }; + ThumbSnippets.prototype.rt_call = function (name, r0, r1) { + return name + " " + r0 + ", " + r1; + }; + ThumbSnippets.prototype.call_lbl = function (lbl) { + return "bl " + lbl; + }; + ThumbSnippets.prototype.call_reg = function (reg) { + return "blx " + reg; + }; + ThumbSnippets.prototype.vcall = function (mapMethod, isSet, vtableShift) { + return "\n ldr r0, [sp, #" + (isSet ? 4 : 0) + "] ; ld-this\n ldrh r3, [r0, #2] ; ld-vtable\n lsls r3, r3, #" + vtableShift + "\n ldr r3, [r3, #4] ; iface table\n cmp r3, #43\n beq .objlit\n.nonlit:\n lsls r1, " + (isSet ? "r2" : "r1") + ", #2\n ldr r0, [r3, r1] ; ld-method\n bx r0\n.objlit:\n " + (isSet ? "ldr r2, [sp, #0]" : "") + "\n push {lr}\n bl " + mapMethod + "\n pop {pc}\n"; + }; + ThumbSnippets.prototype.prologue_vtable = function (arg_top_index, vtableShift) { + return "\n ldr r0, [sp, #4*" + arg_top_index + "] ; ld-this\n ldrh r0, [r0, #2] ; ld-vtable\n lsls r0, r0, #" + vtableShift + "\n "; + }; + ThumbSnippets.prototype.lambda_prologue = function () { + return "\n @stackmark args\n push {lr}\n mov r5, r0\n"; + }; + ThumbSnippets.prototype.lambda_epilogue = function () { + return "\n bl pxtrt::getGlobalsPtr\n mov r6, r0\n pop {pc}\n @stackempty args\n"; + }; + ThumbSnippets.prototype.load_ptr = function (lbl, reg) { + pxtc.assert(!!lbl); + return "\n movs " + reg + ", " + lbl + "@hi ; ldptr\n lsls " + reg + ", " + reg + ", #8\n adds " + reg + ", " + lbl + "@lo\n"; + }; + ThumbSnippets.prototype.emit_int = function (v, reg) { + var movWritten = false; + function writeMov(v) { + pxtc.assert(0 <= v && v <= 255); + var result = ""; + if (movWritten) { + if (v) + result = "adds " + reg + ", #" + v + "\n"; + } + else + result = "movs " + reg + ", #" + v + "\n"; + movWritten = true; + return result; + } + function shift(v) { + if (v === void 0) { v = 8; } + return "lsls " + reg + ", " + reg + ", #" + v + "\n"; + } + pxtc.assert(v != null); + var n = Math.floor(v); + var isNeg = false; + if (n < 0) { + isNeg = true; + n = -n; + } + // compute number of lower-order 0s and shift that amount + var numShift = 0; + if (n > 0xff) { + var shifted = n; + while ((shifted & 1) == 0) { + shifted >>>= 1; + numShift++; + } + if (pxtc.numBytes(shifted) < pxtc.numBytes(n)) { + n = shifted; + } + else { + numShift = 0; + } + } + var result = ""; + switch (pxtc.numBytes(n)) { + case 4: + result += writeMov((n >>> 24) & 0xff); + result += shift(); + case 3: + result += writeMov((n >>> 16) & 0xff); + result += shift(); + case 2: + result += writeMov((n >>> 8) & 0xff); + result += shift(); + case 1: + result += writeMov(n & 0xff); + break; + default: + pxtc.oops(); + } + if (numShift) + result += shift(numShift); + if (isNeg) { + result += "negs " + reg + ", " + reg; + } + return result; + }; + return ThumbSnippets; + }(pxtc.AssemblerSnippets)); + pxtc.ThumbSnippets = ThumbSnippets; + })(pxtc = ts.pxtc || (ts.pxtc = {})); +})(ts || (ts = {})); +var pxt; +(function (pxt) { + var Cloud; + (function (Cloud) { + var Util = pxtc.Util; + Cloud.apiRoot = "https://www.pxt.io/api/"; + Cloud.accessToken = ""; + Cloud.localToken = ""; + var _isOnline = true; + Cloud.onOffline = function () { }; + function offlineError(url) { + var e = new Error(Util.lf("Cannot access {0} while offline", url)); + e.isOffline = true; + return Promise.delay(1000).then(function () { return Promise.reject(e); }); + } + function hasAccessToken() { + return !!Cloud.accessToken; + } + Cloud.hasAccessToken = hasAccessToken; + function isLocalHost() { + try { + return /^http:\/\/(localhost|127\.0\.0\.1):\d+\//.test(window.location.href) + && !/nolocalhost=1/.test(window.location.href) + && !pxt.webConfig.isStatic; + } + catch (e) { + return false; + } + } + Cloud.isLocalHost = isLocalHost; + function privateRequestAsync(options) { + options.url = Cloud.apiRoot + options.url; + options.allowGzipPost = true; + if (!Cloud.isOnline()) { + return offlineError(options.url); + } + if (Cloud.accessToken) { + if (!options.headers) + options.headers = {}; + options.headers["x-td-access-token"] = Cloud.accessToken; + } + return Util.requestAsync(options) + .catch(function (e) { + if (e.statusCode == 0) { + if (_isOnline) { + _isOnline = false; + Cloud.onOffline(); + } + return offlineError(options.url); + } + else { + return Promise.reject(e); + } + }); + } + Cloud.privateRequestAsync = privateRequestAsync; + function privateGetTextAsync(path) { + return privateRequestAsync({ url: path }).then(function (resp) { return resp.text; }); + } + Cloud.privateGetTextAsync = privateGetTextAsync; + function privateGetAsync(path) { + return privateRequestAsync({ url: path }).then(function (resp) { return resp.json; }); + } + Cloud.privateGetAsync = privateGetAsync; + function downloadScriptFilesAsync(id) { + return privateRequestAsync({ url: id + "/text" }).then(function (resp) { + return JSON.parse(resp.text); + }); + } + Cloud.downloadScriptFilesAsync = downloadScriptFilesAsync; + function downloadMarkdownAsync(docid, locale, live) { + docid = docid.replace(/^\//, ""); + var url = "md/" + pxt.appTarget.id + "/" + docid; + if (locale != "en") { + url += "?lang=" + encodeURIComponent(Util.userLanguage()); + if (live) + url += "&live=1"; + } + if (Cloud.isLocalHost() && !live) + return Util.requestAsync({ + url: "/api/" + url, + headers: { "Authorization": Cloud.localToken }, + method: "GET", + allowHttpErrors: true + }).then(function (resp) { + if (resp.statusCode == 404) + return privateGetTextAsync(url); + else + return resp.json; + }); + else + return privateGetTextAsync(url); + } + Cloud.downloadMarkdownAsync = downloadMarkdownAsync; + function privateDeleteAsync(path) { + return privateRequestAsync({ url: path, method: "DELETE" }).then(function (resp) { return resp.json; }); + } + Cloud.privateDeleteAsync = privateDeleteAsync; + function privatePostAsync(path, data) { + return privateRequestAsync({ url: path, data: data || {} }).then(function (resp) { return resp.json; }); + } + Cloud.privatePostAsync = privatePostAsync; + function isLoggedIn() { return !!Cloud.accessToken; } + Cloud.isLoggedIn = isLoggedIn; + function isOnline() { return _isOnline; } + Cloud.isOnline = isOnline; + function getServiceUrl() { + return Cloud.apiRoot.replace(/\/api\/$/, ""); + } + Cloud.getServiceUrl = getServiceUrl; + function getUserId() { + var m = /^0(\w+)\./.exec(Cloud.accessToken); + if (m) + return m[1]; + return null; + } + Cloud.getUserId = getUserId; + function parseScriptId(uri) { + var target = pxt.appTarget; + if (!uri || !target.appTheme || !target.appTheme.embedUrl) + return undefined; + var embedUrl = Util.escapeForRegex(Util.stripUrlProtocol(target.appTheme.embedUrl)); + var m = new RegExp("^((https://)?" + embedUrl + ")?(api/oembed?url=.*%2F([^&]*)&.*?|(.+))$", 'i').exec(uri.trim()); + var scriptid = m && (m[3] || m[4]) ? (m[3] ? m[3].toLowerCase() : m[4].toLowerCase()) : null; + return scriptid; + } + Cloud.parseScriptId = parseScriptId; + })(Cloud = pxt.Cloud || (pxt.Cloud = {})); +})(pxt || (pxt = {})); +var ts; +(function (ts) { + var pxtc; + (function (pxtc) { + var decompiler; + (function (decompiler) { + var SK = ts.SyntaxKind; + var lowerCaseAlphabetStartCode = 97; + var lowerCaseAlphabetEndCode = 122; + var ShadowType; + (function (ShadowType) { + ShadowType[ShadowType["Boolean"] = 0] = "Boolean"; + ShadowType[ShadowType["Number"] = 1] = "Number"; + ShadowType[ShadowType["String"] = 2] = "String"; + })(ShadowType || (ShadowType = {})); + var ops = { + "+": { type: "math_arithmetic", op: "ADD" }, + "-": { type: "math_arithmetic", op: "MINUS" }, + "/": { type: "math_arithmetic", op: "DIVIDE" }, + "*": { type: "math_arithmetic", op: "MULTIPLY" }, + "%": { type: "math_modulo", leftName: "DIVIDEND", rightName: "DIVISOR" }, + "<": { type: "logic_compare", op: "LT" }, + "<=": { type: "logic_compare", op: "LTE" }, + ">": { type: "logic_compare", op: "GT" }, + ">=": { type: "logic_compare", op: "GTE" }, + "==": { type: "logic_compare", op: "EQ" }, + "===": { type: "logic_compare", op: "EQ" }, + "!=": { type: "logic_compare", op: "NEQ" }, + "!==": { type: "logic_compare", op: "NEQ" }, + "&&": { type: "logic_operation", op: "AND" }, + "||": { type: "logic_operation", op: "OR" }, + }; + /* + * Matches a single line comment and extracts the text. + * Breakdown: + * ^\s* - matches leading whitespace + * \/\/s* - matches double slash + * (.*) - matches rest of the comment + */ + var singleLineCommentRegex = /^\s*\/\/\s*(.*)$/; + /* + * Matches one line of a multi-line comment and extracts the text. + * Breakdown: + * ^\s* - matches leading whitespace + * (?:\/\*\*?) - matches beginning of a multi-line comment (/* or /**) + * (?:\*) - matches a single asterisk that might begin a line in the body of the comment + * (?:(?:(?:\/\*\*?)|(?:\*))(?!\/)) - combines the previous two regexes but does not match either if followed by a slash + * ^\s*(?:(?:(?:\/\*\*?)|(?:\*))(?!\/))?\s* - matches all possible beginnings of a multi-line comment line (/*, /**, *, or just whitespace) + * (.*?) - matches the text of the comment line + * (?:\*?\*\/)?$ - matches the end of the multiline comment (one or two asterisks and a slash) or the end of a line within the comment + */ + var multiLineCommentRegex = /^\s*(?:(?:(?:\/\*\*?)|(?:\*))(?!\/))?\s*(.*?)(?:\*?\*\/)?$/; + var builtinBlocks = { + "Math.random": { blockId: "device_random", block: "pick random 0 to %limit" }, + "Math.abs": { blockId: "math_op3", block: "absolute of %x" }, + "Math.min": { blockId: "math_op2", block: "of %x|and %y" }, + "Math.max": { blockId: "math_op2", block: "of %x|and %y", fields: "max" } + }; + var RenameMap = (function () { + function RenameMap(renames) { + this.renames = renames; + this.renames.sort(function (a, b) { return a.span.start - b.span.start; }); + } + RenameMap.prototype.getRenamesInSpan = function (start, end) { + var res = []; + for (var _i = 0, _a = this.renames; _i < _a.length; _i++) { + var rename = _a[_i]; + if (rename.span.start > end) { + break; + } + else if (rename.span.start >= start) { + res.push(rename); + } + } + return res; + }; + RenameMap.prototype.getRenameForPosition = function (position) { + for (var _i = 0, _a = this.renames; _i < _a.length; _i++) { + var rename = _a[_i]; + if (rename.span.start > position) { + return undefined; + } + else if (rename.span.start === position) { + return rename; + } + } + return undefined; + }; + return RenameMap; + }()); + decompiler.RenameMap = RenameMap; + var LSHost = (function () { + function LSHost(p) { + this.p = p; + } + LSHost.prototype.getCompilationSettings = function () { + var opts = this.p.getCompilerOptions(); + opts.noLib = true; + return opts; + }; + LSHost.prototype.getNewLine = function () { return "\n"; }; + LSHost.prototype.getScriptFileNames = function () { + return this.p.getSourceFiles().map(function (f) { return f.fileName; }); + }; + LSHost.prototype.getScriptVersion = function (fileName) { + return "0"; + }; + LSHost.prototype.getScriptSnapshot = function (fileName) { + var f = this.p.getSourceFile(fileName); + return { + getLength: function () { return f.getFullText().length; }, + getText: function () { return f.getFullText(); }, + getChangeRange: function () { return undefined; } + }; + }; + LSHost.prototype.getCurrentDirectory = function () { return "."; }; + LSHost.prototype.getDefaultLibFileName = function (options) { return null; }; + LSHost.prototype.useCaseSensitiveFileNames = function () { return true; }; + return LSHost; + }()); + /** + * Uses the language service to ensure that there are no duplicate variable + * names in the given file. All variables in Blockly are global, so this is + * necessary to prevent local variables from colliding. + */ + function buildRenameMap(p, s) { + var service = ts.createLanguageService(new LSHost(p)); + var allRenames = []; + collectNameCollisions(); + if (allRenames.length) { + return new RenameMap(allRenames); + } + return undefined; + function collectNameCollisions() { + var takenNames = {}; + checkChildren(s); + function checkChildren(n) { + ts.forEachChild(n, function (child) { + if (ts.isDeclaration(child) && ts.isVariableLike(child) && child.name.kind === SK.Identifier) { + var name_2 = child.name.getText(); + if (takenNames[name_2]) { + var newName_1 = getNewName(name_2); + var renames = service.findRenameLocations(s.fileName, child.name.pos + 1, false, false); + if (renames) { + renames.forEach(function (r) { + allRenames.push({ + name: newName_1, + diff: newName_1.length - name_2.length, + span: r.textSpan + }); + }); + } + } + else { + takenNames[name_2] = true; + } + } + checkChildren(child); + }); + } + function getNewName(name) { + // If the variable is a single lower case letter, try and rename it to a different letter (i.e. i -> j) + if (name.length === 1) { + var charCode = name.charCodeAt(0); + if (charCode >= lowerCaseAlphabetStartCode && charCode <= lowerCaseAlphabetEndCode) { + var offset = charCode - lowerCaseAlphabetStartCode; + for (var i = 1; i < 26; i++) { + var newChar = String.fromCharCode(lowerCaseAlphabetStartCode + ((offset + i) % 26)); + if (!takenNames[newChar]) { + takenNames[newChar] = true; + return newChar; + } + } + } + } + // For all other names, add a number to the end. Start at 2 because it probably makes more sense for kids + for (var i = 2;; i++) { + var toTest = name + i; + if (!takenNames[toTest]) { + takenNames[toTest] = true; + return toTest; + } + } + } + } + } + decompiler.buildRenameMap = buildRenameMap; + function decompileToBlocks(blocksInfo, file, options, renameMap) { + var stmts = file.statements; + var result = { + blocksInfo: blocksInfo, + outfiles: {}, diagnostics: [], success: true, times: {} + }; + var fileText = file.getFullText(); + var output = ""; + var varUsages = {}; + var autoDeclarations = []; + var n = codeBlock(stmts, undefined, true); + emitStatementNode(n); + result.outfiles[file.fileName.replace(/(\.blocks)?\.\w*$/i, '') + '.blocks'] = "\n" + output + ""; + return result; + function write(s, suffix) { + if (suffix === void 0) { suffix = "\n"; } + output += s + suffix; + } + function error(n, msg) { + var messageText = msg || "Language feature \"" + n.getFullText().trim() + "\"\" not supported in blocks"; + var diags = pxtc.patchUpDiagnostics([{ + file: file, + start: n.getFullStart(), + length: n.getFullWidth(), + messageText: messageText, + category: ts.DiagnosticCategory.Error, + code: 1001 + }]); + pxt.debug("decompilation error: " + messageText); + pxtc.U.pushRange(result.diagnostics, diags); + result.success = false; + } + function isEventExpression(expr) { + if (expr.expression.kind == SK.CallExpression) { + var call = expr.expression; + var callInfo = call.callInfo; + if (!callInfo) { + error(expr); + return false; + } + return callInfo.attrs.blockId && !callInfo.isExpression && hasArrowFunction(callInfo); + } + return false; + } + function isOutputExpression(expr) { + switch (expr.kind) { + case SK.BinaryExpression: + return !/[=<>]/.test(expr.operatorToken.getText()); + case SK.PrefixUnaryExpression: { + var op = expr.operator; + return op != SK.PlusPlusToken && op != SK.MinusMinusToken; + } + case SK.PostfixUnaryExpression: { + var op = expr.operator; + return op != SK.PlusPlusToken && op != SK.MinusMinusToken; + } + case SK.CallExpression: + var callInfo = expr.callInfo; + if (!callInfo) { + error(expr); + } + return callInfo.isExpression; + case SK.ParenthesizedExpression: + case SK.NumericLiteral: + case SK.StringLiteral: + case SK.NoSubstitutionTemplateLiteral: + case SK.TrueKeyword: + case SK.FalseKeyword: + case SK.NullKeyword: + return true; + default: return false; + } + } + function emitStatementNode(n) { + if (!n) { + return; + } + openBlockTag(n.type); + emitBlockNodeCore(n); + if (n.handlers) { + n.handlers.forEach(emitHandler); + } + if (n.next) { + write(""); + emitStatementNode(n.next); + write(""); + } + if (n.comment !== undefined) { + write("" + pxtc.U.htmlEscape(n.comment) + ""); + } + closeBlockTag(); + } + function emitBlockNodeCore(n) { + if (n.mutation) { + write(""); + } + if (n.fields) { + n.fields.forEach(emitFieldNode); + } + if (n.inputs) { + n.inputs.forEach(emitValueNode); + } + } + function emitValueNode(n) { + write(""); + var emitShadowOnly = false; + if (n.value.kind === "expr") { + var value = n.value; + switch (value.type) { + case "math_number": + case "logic_boolean": + case "text": + emitShadowOnly = true; + break; + default: + } + } + if (emitShadowOnly) { + emitOutputNode(n.value, true); + } + else { + // Emit a shadow block to appear if the given input is removed + if (n.shadowType !== undefined) { + switch (n.shadowType) { + case ShadowType.Number: + write("0"); + break; + case ShadowType.Boolean: + write("TRUE"); + break; + case ShadowType.String: + write(""); + break; + default: + } + } + emitOutputNode(n.value); + } + write(""); + } + function emitFieldNode(n) { + write("" + pxtc.U.htmlEscape(n.value.toString()) + ""); + } + function emitHandler(h) { + write(""); + emitStatementNode(h.statement); + write(""); + } + function emitOutputNode(n, shadow) { + if (shadow === void 0) { shadow = false; } + if (n.kind === "text") { + var node = n; + write(node.value); + } + else { + var node = n; + var tag = shadow ? "shadow" : "block"; + write("<" + tag + " type=\"" + pxtc.U.htmlEscape(node.type) + "\">"); + emitBlockNodeCore(node); + write(""); + } + } + function openBlockTag(type) { + write(""); + } + function closeBlockTag() { + write(""); + } + function getOutputBlock(n) { + if (checkExpression(n)) { + return getTypeScriptExpressionBlock(n); + } + else { + switch (n.kind) { + case SK.ExpressionStatement: + return getOutputBlock(n.expression); + case SK.ParenthesizedExpression: + return getOutputBlock(n.expression); + case SK.Identifier: + return getIdentifier(n); + case SK.StringLiteral: + case SK.FirstTemplateToken: + case SK.NoSubstitutionTemplateLiteral: + return getStringLiteral(n.text); + case SK.NumericLiteral: + return getNumericLiteral(n.text); + case SK.TrueKeyword: + return getBooleanLiteral(true); + case SK.FalseKeyword: + return getBooleanLiteral(false); + case SK.BinaryExpression: + return getBinaryExpression(n); + case SK.PrefixUnaryExpression: + return getPrefixUnaryExpression(n); + case SK.PropertyAccessExpression: + return getPropertyAccessExpression(n); + case SK.CallExpression: + return getStatementBlock(n); + default: + error(n, pxtc.Util.lf("Unsupported syntax kind for output expression block: {0}", SK[n.kind])); + break; + } + return undefined; + } + } + function applyRenamesInRange(text, start, end) { + if (renameMap) { + var renames = renameMap.getRenamesInSpan(start, end); + if (renames.length) { + var offset_1 = 0; + renames.forEach(function (rename) { + var sIndex = rename.span.start + offset_1 - start; + var eIndex = sIndex + rename.span.length; + offset_1 += rename.diff; + text = text.slice(0, sIndex) + rename.name + text.slice(eIndex); + }); + } + } + return text; + } + function getTypeScriptExpressionBlock(n) { + var text = applyRenamesInRange(n.getFullText(), n.getFullStart(), n.getEnd()); + return getFieldBlock(pxtc.TS_OUTPUT_TYPE, "EXPRESSION", text); + } + function getBinaryExpression(n) { + var op = n.operatorToken.getText(); + var npp = ops[op]; + // Could be string concatenation + if (isTextJoin(n)) { + var args = []; + collectTextJoinArgs(n, args); + var result_1 = { + kind: "expr", + type: "text_join", + mutation: { + "items": args.length.toString() + }, + inputs: [] + }; + for (var i = 0; i < args.length; i++) { + result_1.inputs.push(getValue("ADD" + i, args[i], ShadowType.String)); + } + return result_1; + } + var result = { + kind: "expr", + type: npp.type, + fields: [], + inputs: [] + }; + if (npp.op) { + result.fields.push(getField("OP", npp.op)); + } + var shadowType = (op === "&&" || op === "||") ? ShadowType.Boolean : ShadowType.Number; + result.inputs.push(getValue(npp.leftName || "A", n.left, shadowType)); + result.inputs.push(getValue(npp.rightName || "B", n.right, shadowType)); + return result; + function isTextJoin(n) { + if (n.kind === SK.BinaryExpression) { + var b = n; + if (b.operatorToken.getText() === "+") { + var info = n.exprInfo; + return !!info; + } + } + return false; + } + function collectTextJoinArgs(n, result) { + if (isTextJoin(n)) { + collectTextJoinArgs(n.left, result); + collectTextJoinArgs(n.right, result); + } + else { + result.push(n); + } + } + } + function getValue(name, contents, shadowType) { + var value; + if (typeof contents === "number") { + value = getNumericLiteral(contents.toString()); + } + else if (typeof contents === "boolean") { + value = getBooleanLiteral(contents); + } + else if (typeof contents === "string") { + value = getStringLiteral(contents); + } + else { + value = getOutputBlock(contents); + } + return { kind: "value", name: name, value: value, shadowType: shadowType }; + } + function getIdentifier(identifier) { + var name = getVariableName(identifier); + varUsages[name] = true; + return getFieldBlock("variables_get", "VAR", name); + } + function getNumericLiteral(value) { + return getFieldBlock("math_number", "NUM", value); + } + function getStringLiteral(value) { + return getFieldBlock("text", "TEXT", value); + } + function getBooleanLiteral(value) { + return getFieldBlock("logic_boolean", "BOOL", value ? "TRUE" : "FALSE"); + } + function getFieldBlock(type, fieldName, value) { + return { + kind: "expr", + type: type, + fields: [getField(fieldName, value)] + }; + } + function getField(name, value) { + return { + kind: "field", + name: name, + value: value, + }; + } + // TODO: Add a real negation block + function negateNumericNode(node) { + return { + kind: "expr", + type: "math_arithmetic", + inputs: [ + getValue("A", 0), + getValue("B", node, ShadowType.Number) + ], + fields: [ + getField("OP", "MINUS") + ] + }; + } + function getPrefixUnaryExpression(node) { + switch (node.operator) { + case SK.ExclamationToken: + var r = { kind: "expr", type: "logic_negate" }; + r.inputs = [getValue("BOOL", node.operand, ShadowType.Boolean)]; + return r; + case SK.PlusToken: + return getOutputBlock(node.operand); + case SK.MinusToken: + if (node.operand.kind == SK.NumericLiteral) { + return getNumericLiteral("-" + node.operand.text); + } + else { + return negateNumericNode(node.operand); + } + default: + error(node); + break; + } + return undefined; + } + function getPropertyAccessExpression(n) { + var callInfo = n.callInfo; + if (!callInfo) { + error(n); + return; + } + var value = pxtc.U.htmlEscape(callInfo.attrs.blockId || callInfo.qName); + if (callInfo.attrs.blockIdentity) { + var parentCallInfo = n.parent && n.parent.callInfo; + if (callInfo.attrs.enumval && parentCallInfo && parentCallInfo.attrs.useEnumVal) { + value = callInfo.attrs.enumval; + } + var idfn = blocksInfo.apis.byQName[callInfo.attrs.blockIdentity]; + var f = /%([a-zA-Z0-9_]+)/.exec(idfn.attributes.block); + return { + kind: "expr", + type: pxtc.U.htmlEscape(idfn.attributes.blockId), + fields: [{ + kind: "field", + name: pxtc.U.htmlEscape(f[1]), + value: value + }] + }; + } + else { + return { + kind: "text", + value: value + }; + } + } + function getStatementBlock(n, next, parent) { + var node = n; + var stmt; + if (checkStatement(node)) { + stmt = getTypeScriptStatementBlock(node); + } + else { + switch (node.kind) { + case SK.Block: + return codeBlock(node.statements, next); + case SK.ExpressionStatement: + return getStatementBlock(node.expression, next, parent || node); + case SK.VariableStatement: + return codeBlock(node.declarationList.declarations, next, false, parent || node); + case SK.ArrowFunction: + return getArrowFunctionStatement(node, next); + case SK.BinaryExpression: + stmt = getBinaryExpressionStatement(node); + break; + case SK.PostfixUnaryExpression: + case SK.PrefixUnaryExpression: + stmt = getIncrementStatement(node); + break; + case SK.VariableDeclaration: + var decl = node; + if (isAutoDeclaration(decl)) { + // Don't emit null or automatic initializers; + // They are implicit within the blocks. But do track them in case they + // never get used in the blocks (and thus won't be emitted again) + trackAutoDeclaration(decl); + return getNext(); + } + stmt = getVariableDeclarationStatement(node); + break; + case SK.WhileStatement: + stmt = getWhileStatement(node); + break; + case SK.IfStatement: + stmt = getIfStatement(node); + break; + case SK.ForStatement: + stmt = getForStatement(node); + break; + case SK.CallExpression: + stmt = getCallStatement(node); + break; + default: + if (next) { + error(node, pxtc.Util.lf("Unsupported statement in block: {0}", SK[node.kind])); + } + else { + error(node, pxtc.Util.lf("Statement kind unsupported in blocks: {0}", SK[node.kind])); + } + return; + } + } + if (stmt) { + stmt.next = getNext(); + if (stmt.next) { + stmt.next.prev = stmt; + } + } + var commentRanges = ts.getLeadingCommentRangesOfNode(parent || node, file); + if (commentRanges) { + var commentText = getCommentText(commentRanges); + if (commentText && stmt) { + stmt.comment = commentText; + } + else { + } + } + return stmt; + function getNext() { + if (next && next.length) { + return getStatementBlock(next.shift(), next); + } + return undefined; + } + } + function getTypeScriptStatementBlock(node) { + var r = { + kind: "statement", + type: pxtc.TS_STATEMENT_TYPE, + mutation: {} + }; + var text = node.getText(); + var start = node.getStart(); + var end = node.getEnd(); + text = applyRenamesInRange(text, start, end); + var declaredVariables = []; + if (node.kind === SK.VariableStatement) { + for (var _i = 0, _a = node.declarationList.declarations; _i < _a.length; _i++) { + var declaration = _a[_i]; + declaredVariables.push(getVariableName(declaration.name)); + } + } + if (declaredVariables.length) { + r.mutation["declaredvars"] = declaredVariables.join(","); + } + var parts = text.split("\n"); + r.mutation["numlines"] = parts.length.toString(); + parts.forEach(function (p, i) { + r.mutation[("line" + i)] = pxtc.U.htmlEscape(p); + }); + return r; + } + function getImageLiteralStatement(node, info) { + var arg = node.arguments[0]; + if (arg.kind != SK.StringLiteral && arg.kind != SK.NoSubstitutionTemplateLiteral) { + error(node); + return; + } + var res = { + kind: "statement", + type: info.attrs.blockId, + fields: [] + }; + var leds = (arg.text || '').replace(/\s+/g, ''); + var nc = info.attrs.imageLiteral * 5; + if (nc * 5 != leds.length) { + error(node, pxtc.Util.lf("Invalid image pattern")); + return; + } + for (var r = 0; r < 5; ++r) { + for (var c = 0; c < nc; ++c) { + res.fields.push(getField("LED" + c + r, /[#*1]/.test(leds[r * nc + c]) ? "TRUE" : "FALSE")); + } + } + return res; + } + function getBinaryExpressionStatement(n) { + if (n.left.kind !== SK.Identifier) { + error(n, pxtc.Util.lf("Only variable names may be assigned to")); + return; + } + var name = n.left.text; + switch (n.operatorToken.kind) { + case SK.EqualsToken: + return getVariableSetOrChangeBlock(n.left, n.right); + case SK.PlusEqualsToken: + return getVariableSetOrChangeBlock(n.left, n.right, true); + case SK.MinusEqualsToken: + return { + kind: "statement", + type: "variables_change", + inputs: [{ + kind: "value", + name: "VALUE", + value: negateNumericNode(n.right), + shadowType: ShadowType.Number + }], + fields: [getField("VAR", getVariableName(n.left))] + }; + default: + error(n, pxtc.Util.lf("Unsupported operator token in statement {0}", SK[n.operatorToken.kind])); + return; + } + } + function getWhileStatement(n) { + return { + kind: "statement", + type: "device_while", + inputs: [getValue("COND", n.expression, ShadowType.Boolean)], + handlers: [{ name: "DO", statement: getStatementBlock(n.statement) }] + }; + } + function getIfStatement(n) { + var flatif = flattenIfStatement(n); + var r = { + kind: "statement", + type: "controls_if", + mutation: { + "elseif": (flatif.ifStatements.length - 1).toString(), + "else": flatif.elseStatement ? "1" : "0" + }, + inputs: [], + handlers: [] + }; + flatif.ifStatements.forEach(function (stmt, i) { + r.inputs.push(getValue("IF" + i, stmt.expression, ShadowType.Boolean)); + r.handlers.push({ name: "DO" + i, statement: getStatementBlock(stmt.thenStatement) }); + }); + if (flatif.elseStatement) { + r.handlers.push({ name: "ELSE", statement: getStatementBlock(flatif.elseStatement) }); + } + return r; + } + function getForStatement(n) { + var initializer = n.initializer; + var indexVar = initializer.declarations[0].name.text; + var condition = n.condition; + var r = { + kind: "statement", + type: "controls_simple_for", + fields: [getField("VAR", getVariableName(initializer.declarations[0].name))], + inputs: [], + handlers: [] + }; + // FIXME: We never decompile repeat blocks correctly, they are always converted into a for-loop. + // To decompile repeat, we would need to check to make sure the initialized variable is + // never referenced in the loop body + if (condition.operatorToken.kind === SK.LessThanToken) { + r.inputs.push({ + kind: "value", + name: "TO", + shadowType: ShadowType.Number, + value: { + kind: "expr", + type: "math_arithmetic", + fields: [getField("OP", "MINUS")], + inputs: [ + getValue("A", condition.right, ShadowType.Number), + getValue("B", 1) + ] + } + }); + } + else if (condition.operatorToken.kind === SK.LessThanEqualsToken) { + r.inputs.push(getValue("TO", condition.right, ShadowType.Number)); + } + r.handlers.push({ name: "DO", statement: getStatementBlock(n.statement) }); + return r; + } + function getVariableSetOrChangeBlock(name, value, changed, overrideName) { + if (changed === void 0) { changed = false; } + if (overrideName === void 0) { overrideName = false; } + var renamed = getVariableName(name); + varUsages[renamed] = true; + // We always do a number shadow even if the variable is not of type number + return { + kind: "statement", + type: changed ? "variables_change" : "variables_set", + inputs: [getValue("VALUE", value, ShadowType.Number)], + fields: [getField("VAR", renamed)] + }; + } + function getVariableDeclarationStatement(n) { + if (addVariableDeclaration(n)) { + return getVariableSetOrChangeBlock(n.name, n.initializer); + } + return undefined; + } + function getIncrementStatement(node) { + var isPlusPlus = node.operator === SK.PlusPlusToken; + if (!isPlusPlus && node.operator !== SK.MinusMinusToken) { + error(node); + return; + } + return getVariableSetOrChangeBlock(node.operand, isPlusPlus ? 1 : -1, true); + } + function getCallStatement(node) { + var info = node.callInfo; + if (!info) { + error(node); + return; + } + if (!info.attrs.blockId || !info.attrs.block) { + var builtin = builtinBlocks[info.qName]; + if (!builtin) { + error(node); + return; + } + info.attrs.block = builtin.block; + info.attrs.blockId = builtin.blockId; + } + if (info.attrs.imageLiteral) { + return getImageLiteralStatement(node, info); + } + if (ts.isFunctionLike(info.decl)) { + } + var argNames = []; + info.attrs.block.replace(/%(\w+)/g, function (f, n) { + argNames.push(n); + return ""; + }); + if (info.attrs.defaultInstance) { + argNames.unshift("__instance__"); + } + var r = { + kind: "statement", + type: info.attrs.blockId + }; + info.args.forEach(function (e, i) { + if (i === 0 && info.attrs.defaultInstance) { + if (e.getText() === info.attrs.defaultInstance) { + return; + } + else { + r.mutation = { "showing": "true" }; + } + } + if (info.attrs.mutatePropertyEnum && i === info.args.length - 2) { + // Implicit in the blocks + return; + } + switch (e.kind) { + case SK.ArrowFunction: + var m = getDestructuringMutation(e); + if (m) { + r.mutation = m; + } + (r.handlers || (r.handlers = [])).push({ name: "HANDLER", statement: getStatementBlock(e) }); + break; + case SK.PropertyAccessExpression: + var callInfo = e.callInfo; + var shadow = callInfo && !!callInfo.attrs.blockIdentity; + var aName = pxtc.U.htmlEscape(argNames[i]); + if (shadow) { + (r.inputs || (r.inputs = [])).push(getValue(aName, e)); + } + else { + var expr = getOutputBlock(e); + if (expr.kind === "text") { + (r.fields || (r.fields = [])).push(getField(aName, expr.value)); + } + else { + (r.inputs || (r.inputs = [])).push({ + kind: "value", + name: aName, + value: expr + }); + } + } + break; + default: + var v = void 0; + var vName = pxtc.U.htmlEscape(argNames[i]); + if (info.qName == "Math.random") { + v = { + kind: "value", + name: vName, + value: getMathRandomArgumentExpresion(e) + }; + } + else { + v = getValue(vName, e); + } + (r.inputs || (r.inputs = [])).push(v); + break; + } + }); + return r; + } + // function openCallExpressionBlockWithRestParameter(call: ts.CallExpression, info: pxtc.CallInfo) { + // openBlockTag(info.attrs.blockId); + // write(``) + // info.args.forEach((expression, index) => { + // emitValue("value_input_" + index, expression, ShadowType.Number); + // }); + // } + function getDestructuringMutation(callback) { + var bindings = getObjectBindingProperties(callback); + if (bindings) { + return { + "callbackproperties": bindings[0].join(","), + "renamemap": pxtc.Util.htmlEscape(JSON.stringify(bindings[1])) + }; + } + return undefined; + } + function getMathRandomArgumentExpresion(e) { + switch (e.kind) { + case SK.NumericLiteral: + var n_1 = e; + return getNumericLiteral((parseInt(n_1.text) - 1).toString()); + case SK.BinaryExpression: + var op = e; + if (op.operatorToken.kind == SK.PlusToken && op.right.text == "1") { + return getOutputBlock(op.left); + } + default: + //This will definitely lead to an error, but the above are the only two cases generated by blocks + return getOutputBlock(e); + } + } + function getArrowFunctionStatement(n, next) { + if (n.parameters.length > 0 && !(n.parameters.length === 1 && n.parameters[0].name.kind === SK.ObjectBindingPattern)) { + error(n); + return; + } + return getStatementBlock(n.body, next); + } + function flattenIfStatement(n) { + var r = { + ifStatements: [{ + expression: n.expression, + thenStatement: n.thenStatement + }], + elseStatement: n.elseStatement + }; + if (n.elseStatement && n.elseStatement.kind == SK.IfStatement) { + var flat = flattenIfStatement(n.elseStatement); + r.ifStatements = r.ifStatements.concat(flat.ifStatements); + r.elseStatement = flat.elseStatement; + } + return r; + } + function codeBlock(statements, next, topLevel, parent) { + if (topLevel === void 0) { topLevel = false; } + var eventStatements = []; + var blockStatements = next || []; + // Go over the statements in reverse so that we can insert the nodes into the existing list if there is one + statements.reverse().forEach(function (statement) { + if (statement.kind == SK.ExpressionStatement && isEventExpression(statement) && !checkStatement(statement)) { + eventStatements.unshift(statement); + } + else { + blockStatements.unshift(statement); + } + }); + eventStatements.map(function (n) { return getStatementBlock(n); }).forEach(emitStatementNode); + if (blockStatements.length) { + // wrap statement in "on start" if top level + var stmt = getStatementBlock(blockStatements.shift(), blockStatements, parent); + var emitOnStart = topLevel && !options.snippetMode; + if (emitOnStart) { + // Preserve any variable edeclarations that were never used + var current_1 = stmt; + autoDeclarations.forEach(function (_a) { + var name = _a[0], node = _a[1]; + if (varUsages[name]) { + return; + } + var v = getVariableSetOrChangeBlock(node.name, node.initializer, false, true); + v.next = current_1; + current_1 = v; + }); + return { + kind: "statement", + type: ts.pxtc.ON_START_TYPE, + handlers: [{ + name: "HANDLER", + statement: current_1 + }] + }; + } + return stmt; + } + return undefined; + } + function isLiteralNode(node) { + if (!node) { + return false; + } + switch (node.kind) { + case SK.ParenthesizedExpression: + return isLiteralNode(node.expression); + case SK.NumericLiteral: + case SK.StringLiteral: + case SK.NoSubstitutionTemplateLiteral: + case SK.TrueKeyword: + case SK.FalseKeyword: + return true; + case SK.PrefixUnaryExpression: + var expression = node; + return (expression.operator === SK.PlusToken || expression.operator === SK.MinusToken) && isLiteralNode(expression.operand); + default: + return false; + } + } + /** + * Takes a series of comment ranges and converts them into string suitable for a + * comment block in blockly. All comments above a statement will be included, + * regardless of single vs multi line and whitespace. Paragraphs are delineated + * by empty lines between comments (a commented empty line, not an empty line + * between two separate comment blocks) + */ + function getCommentText(commentRanges) { + var text = ""; + var currentLine = ""; + for (var _i = 0, commentRanges_1 = commentRanges; _i < commentRanges_1.length; _i++) { + var commentRange = commentRanges_1[_i]; + var commentText = fileText.substr(commentRange.pos, commentRange.end - commentRange.pos); + if (commentRange.kind === ts.SyntaxKind.SingleLineCommentTrivia) { + appendMatch(commentText, singleLineCommentRegex); + } + else { + var lines = commentText.split("\n"); + for (var _a = 0, lines_1 = lines; _a < lines_1.length; _a++) { + var line = lines_1[_a]; + appendMatch(line, multiLineCommentRegex); + } + } + } + text += currentLine; + return text.trim(); + function appendMatch(line, regex) { + var match = regex.exec(line); + if (match) { + var matched = match[1].trim(); + if (matched) { + currentLine += currentLine ? " " + matched : matched; + } + else { + text += currentLine + "\n"; + currentLine = ""; + } + } + } + } + function trackAutoDeclaration(n) { + autoDeclarations.push([getVariableName(n.name), n]); + } + function addVariableDeclaration(node) { + if (node.name.kind !== SK.Identifier) { + error(node, pxtc.Util.lf("Variable declarations may not use binding patterns")); + return false; + } + else if (!node.initializer) { + error(node, pxtc.Util.lf("Variable declarations must have an initializer")); + return false; + } + return true; + } + function getVariableName(name) { + if (renameMap) { + var rename = renameMap.getRenameForPosition(name.getStart()); + if (rename) { + return rename.name; + } + } + return name.text; + } + } + decompiler.decompileToBlocks = decompileToBlocks; + function checkStatement(node) { + switch (node.kind) { + case SK.WhileStatement: + case SK.IfStatement: + case SK.Block: + return undefined; + case SK.ExpressionStatement: + return checkStatement(node.expression); + case SK.VariableStatement: + return checkVariableStatement(node); + case SK.CallExpression: + return checkCall(node); + case SK.VariableDeclaration: + return checkVariableDeclaration(node); + case SK.PostfixUnaryExpression: + case SK.PrefixUnaryExpression: + return checkIncrementorExpression(node); + case SK.ArrowFunction: + return checkArrowFunction(node); + case SK.BinaryExpression: + return checkBinaryExpression(node); + case SK.ForStatement: + return checkForStatement(node); + } + return pxtc.Util.lf("Unsupported statement in block: {0}", SK[node.kind]); + function checkForStatement(n) { + if (!n.initializer || !n.incrementor || !n.condition) { + return pxtc.Util.lf("for loops must have an initializer, incrementor, and condition"); + } + if (n.initializer.kind !== SK.VariableDeclarationList) { + return pxtc.Util.lf("only variable declarations are permitted in for loop initializers"); + } + var initializer = n.initializer; + if (!initializer.declarations) { + return pxtc.Util.lf("for loop with out-of-scope variables not supported"); + } + if (initializer.declarations.length != 1) { + return pxtc.Util.lf("for loop with multiple variables not supported"); + } + var indexVar = initializer.declarations[0].name.text; + if (!incrementorIsValid(indexVar)) { + return pxtc.Util.lf("for loop incrementors may only increment the variable declared in the initializer"); + } + if (n.condition.kind !== SK.BinaryExpression) { + return pxtc.Util.lf("for loop conditionals must be binary comparison operations"); + } + var condition = n.condition; + if (condition.left.kind !== SK.Identifier || condition.left.text !== indexVar) { + return pxtc.Util.lf("left side of for loop conditional must be the variable declared in the initializer"); + } + if (condition.operatorToken.kind !== SK.LessThanToken && condition.operatorToken.kind !== SK.LessThanEqualsToken) { + return pxtc.Util.lf("for loop conditional operator must be either < or <="); + } + return undefined; + function incrementorIsValid(varName) { + if (n.incrementor.kind === SK.PostfixUnaryExpression || n.incrementor.kind === SK.PrefixUnaryExpression) { + var incrementor = n.incrementor; + if (incrementor.operator === SK.PlusPlusToken && incrementor.operand.kind === SK.Identifier) { + return incrementor.operand.text === varName; + } + } + return false; + } + } + function checkBinaryExpression(n) { + if (n.left.kind !== SK.Identifier) { + return pxtc.Util.lf("Only variable names may be assigned to"); + } + switch (n.operatorToken.kind) { + case SK.EqualsToken: + return checkExpression(n.right); + case SK.PlusEqualsToken: + case SK.MinusEqualsToken: + return undefined; + default: + return pxtc.Util.lf("Unsupported operator token in statement {0}", SK[n.operatorToken.kind]); + } + } + function checkArrowFunction(n) { + if (n.parameters.length > 0 && !(n.parameters.length === 1 && n.parameters[0].name.kind === SK.ObjectBindingPattern)) { + return pxtc.Util.lf("Unsupported parameters in error function"); + } + return undefined; + } + function checkIncrementorExpression(n) { + if (n.operand.kind != SK.Identifier) { + return pxtc.Util.lf("-- and ++ may only be used on an identifier"); + } + if (n.operator !== SK.PlusPlusToken && n.operator !== SK.MinusMinusToken) { + return pxtc.Util.lf("Only ++ and -- supported as prefix or postfix unary operators in a statement"); + } + return undefined; + } + function checkVariableDeclaration(n) { + var check; + if (n.name.kind !== SK.Identifier) { + check = pxtc.Util.lf("Variable declarations may not use binding patterns"); + } + else if (!n.initializer) { + check = pxtc.Util.lf("Variable declarations must have an initializer"); + } + else if (!isAutoDeclaration(n)) { + check = checkExpression(n.initializer); + } + if (check) { + } + return check; + } + function checkVariableStatement(n) { + for (var _i = 0, _a = n.declarationList.declarations; _i < _a.length; _i++) { + var declaration = _a[_i]; + var res = checkVariableDeclaration(declaration); + if (res) { + return res; + } + } + return undefined; + } + function checkCall(n) { + var info = n.callInfo; + if (!info) { + return pxtc.Util.lf("Function call not supported in the blocks"); + } + if (!info.attrs.blockId || !info.attrs.block) { + var builtin = builtinBlocks[info.qName]; + if (!builtin) { + return pxtc.Util.lf("Function call not supported in the blocks"); + } + info.attrs.block = builtin.block; + info.attrs.blockId = builtin.blockId; + } + if (info.attrs.imageLiteral) { + var arg = n.arguments[0]; + if (arg.kind != SK.StringLiteral && arg.kind != SK.NoSubstitutionTemplateLiteral) { + return pxtc.Util.lf("Only string literals supported for image literals"); + } + var leds = (arg.text || '').replace(/\s+/g, ''); + var nc = info.attrs.imageLiteral * 5; + if (nc * 5 != leds.length) { + return pxtc.Util.lf("Invalid image pattern"); + } + return undefined; + } + var argNames = []; + info.attrs.block.replace(/%(\w+)/g, function (f, n) { + argNames.push(n); + return ""; + }); + var argumentDifference = info.args.length - argNames.length; + if (argumentDifference > 0 && !(info.attrs.defaultInstance && argumentDifference === 1) && !checkForDestructuringMutation()) { + var hasCallback = hasArrowFunction(info); + if (argumentDifference > 1 || !hasCallback) { + return pxtc.Util.lf("Function call has more arguments than are supported by its block"); + } + } + return undefined; + function checkForDestructuringMutation() { + // If the mutatePropertyEnum is set, the array literal and the destructured + // properties must have matching names + if (info.attrs.mutatePropertyEnum && argumentDifference === 2 && info.args.length >= 2) { + var arrayArg = info.args[info.args.length - 2]; + var callbackArg = info.args[info.args.length - 1]; + if (arrayArg.kind === SK.ArrayLiteralExpression && callbackArg.kind === SK.ArrowFunction) { + var propNames_1 = []; + // Make sure that all elements in the array literal are enum values + var allLiterals = !arrayArg.elements.some(function (e) { + if (e.kind === SK.PropertyAccessExpression && e.expression.kind === SK.Identifier) { + propNames_1.push(e.name.text); + return e.expression.text !== info.attrs.mutatePropertyEnum; + } + return true; + }); + if (allLiterals) { + // Also need to check that the array literal's values and the destructured values match + var bindings = getObjectBindingProperties(callbackArg); + if (bindings) { + var names_1 = bindings[0]; + return names_1.length === propNames_1.length && !propNames_1.some(function (p) { return names_1.indexOf(p) === -1; }); + } + } + } + } + return false; + } + } + } + function isAutoDeclaration(decl) { + if (decl.initializer) { + if (decl.initializer.kind === ts.SyntaxKind.NullKeyword || decl.initializer.kind === ts.SyntaxKind.FalseKeyword) { + return true; + } + else if (ts.isStringOrNumericLiteral(decl.initializer.kind)) { + var text = decl.initializer.getText(); + return text === "0" || isEmptyString(text); + } + else { + var callInfo = decl.initializer.callInfo; + if (callInfo && callInfo.isAutoCreate) + return true; + } + } + return false; + } + function getCallInfo(checker, node, apiInfo) { + var symb = checker.getSymbolAtLocation(node); + if (symb) { + var qName = checker.getFullyQualifiedName(symb); + if (qName) { + return apiInfo.byQName[qName]; + } + } + return undefined; + } + function getObjectBindingProperties(callback) { + if (callback.parameters.length === 1 && callback.parameters[0].name.kind === SK.ObjectBindingPattern) { + var elements = callback.parameters[0].name.elements; + var renames_1 = {}; + var properties = elements.map(function (e) { + if (checkName(e.propertyName) && checkName(e.name)) { + var name_3 = e.name.text; + if (e.propertyName) { + var propName = e.propertyName.text; + renames_1[propName] = name_3; + return propName; + } + return name_3; + } + else { + return ""; + } + }); + return [properties, renames_1]; + } + return undefined; + function checkName(name) { + if (name && name.kind !== SK.Identifier) { + // error(name, Util.lf("Only identifiers may be used for variable names in object destructuring patterns")); + return false; + } + return true; + } + } + function checkExpression(n) { + switch (n.kind) { + case SK.StringLiteral: + case SK.FirstTemplateToken: + case SK.NoSubstitutionTemplateLiteral: + case SK.NumericLiteral: + case SK.TrueKeyword: + case SK.FalseKeyword: + case SK.ExpressionStatement: + return undefined; + case SK.ParenthesizedExpression: + return checkExpression(n.expression); + case SK.Identifier: + return isUndefined(n) ? pxtc.Util.lf("Undefined is not supported in blocks") : undefined; + case SK.BinaryExpression: + var op1 = n.operatorToken.getText(); + return ops[op1] ? undefined : pxtc.Util.lf("Could not find operator {0}", op1); + case SK.PrefixUnaryExpression: + var op2 = n.operator; + return op2 === SK.MinusToken || op2 === SK.PlusToken || op2 === SK.ExclamationToken ? + undefined : pxtc.Util.lf("Unsupported prefix unary operator{0}", op2); + case SK.PropertyAccessExpression: + return checkPropertyAccessExpression(n); + case SK.CallExpression: + return checkStatement(n); + } + return pxtc.Util.lf("Unsupported syntax kind for output expression block: {0}", SK[n.kind]); + function checkPropertyAccessExpression(n) { + var callInfo = n.callInfo; + if (callInfo && (callInfo.attrs.blockIdentity || callInfo.decl.kind === SK.EnumMember)) { + return undefined; + } + return pxtc.Util.lf("No call info found"); + } + } + function isEmptyString(a) { + return a === "\"\"" || a === "''" || a === "``"; + } + function isUndefined(node) { + return node && node.kind === SK.Identifier && node.text === "undefined"; + } + function hasArrowFunction(info) { + var parameters = info.decl.parameters; + return info.args.some(function (arg, index) { return arg && arg.kind === SK.ArrowFunction; }); + } + })(decompiler = pxtc.decompiler || (pxtc.decompiler = {})); + })(pxtc = ts.pxtc || (ts.pxtc = {})); +})(ts || (ts = {})); +/// +/* Docs: + * + * Thumb 16-bit Instruction Set Quick Reference Card + * http://infocenter.arm.com/help/topic/com.arm.doc.qrc0006e/QRC0006_UAL16.pdf + * + * ARMv6-M Architecture Reference Manual (bit encoding of instructions) + * http://ecee.colorado.edu/ecen3000/labs/lab3/files/DDI0419C_arm_architecture_v6m_reference_manual.pdf + * + * The ARM-THUMB Procedure Call Standard + * http://www.cs.cornell.edu/courses/cs414/2001fa/armcallconvention.pdf + * + * Cortex-M0 Technical Reference Manual: 3.3. Instruction set summary (cycle counts) + * http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0432c/CHDCICDF.html // M0 + * http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0484c/CHDCICDF.html // M0+ + */ +var ts; +(function (ts) { + var pxtc; + (function (pxtc) { + var thumb; + (function (thumb) { + var ThumbProcessor = (function (_super) { + __extends(ThumbProcessor, _super); + function ThumbProcessor() { + var _this = this; + _super.call(this); + // Registers + // $r0 - bits 2:1:0 + // $r1 - bits 5:4:3 + // $r2 - bits 7:2:1:0 + // $r3 - bits 6:5:4:3 + // $r4 - bits 8:7:6 + // $r5 - bits 10:9:8 + this.addEnc("$r0", "R0-7", function (v) { return _this.inrange(7, v, v); }); + this.addEnc("$r1", "R0-7", function (v) { return _this.inrange(7, v, v << 3); }); + this.addEnc("$r2", "R0-15", function (v) { return _this.inrange(15, v, (v & 7) | ((v & 8) << 4)); }); + this.addEnc("$r3", "R0-15", function (v) { return _this.inrange(15, v, v << 3); }); + this.addEnc("$r4", "R0-7", function (v) { return _this.inrange(7, v, v << 6); }); + this.addEnc("$r5", "R0-7", function (v) { return _this.inrange(7, v, v << 8); }); + // this for setting both $r0 and $r1 (two argument adds and subs) + this.addEnc("$r01", "R0-7", function (v) { return _this.inrange(7, v, (v | v << 3)); }); + // Immdiates: + // $i0 - bits 7-0 + // $i1 - bits 7-0 * 4 + // $i2 - bits 6-0 * 4 + // $i3 - bits 8-6 + // $i4 - bits 10-6 + // $i5 - bits 10-6 * 4 + // $i6 - bits 10-6, 0 is 32 + // $i7 - bits 10-6 * 2 + this.addEnc("$i0", "#0-255", function (v) { return _this.inrange(255, v, v); }); + this.addEnc("$i1", "#0-1020", function (v) { return _this.inrange(255, v / 4, v >> 2); }); + this.addEnc("$i2", "#0-510", function (v) { return _this.inrange(127, v / 4, v >> 2); }); + this.addEnc("$i3", "#0-7", function (v) { return _this.inrange(7, v, v << 6); }); + this.addEnc("$i4", "#0-31", function (v) { return _this.inrange(31, v, v << 6); }); + this.addEnc("$i5", "#0-124", function (v) { return _this.inrange(31, v / 4, (v >> 2) << 6); }); + this.addEnc("$i6", "#1-32", function (v) { return v == 0 ? null : v == 32 ? 0 : _this.inrange(31, v, v << 6); }); + this.addEnc("$i7", "#0-62", function (v) { return _this.inrange(31, v / 2, (v >> 1) << 6); }); + this.addEnc("$rl0", "{R0-7,...}", function (v) { return _this.inrange(255, v, v); }); + this.addEnc("$rl1", "{LR,R0-7,...}", function (v) { return (v & 0x4000) ? _this.inrange(255, (v & ~0x4000), 0x100 | (v & 0xff)) : _this.inrange(255, v, v); }); + this.addEnc("$rl2", "{PC,R0-7,...}", function (v) { return (v & 0x8000) ? _this.inrange(255, (v & ~0x8000), 0x100 | (v & 0xff)) : _this.inrange(255, v, v); }); + this.addEnc("$la", "LABEL", function (v) { return _this.inrange(255, v / 4, v >> 2); }).isWordAligned = true; + this.addEnc("$lb", "LABEL", function (v) { return _this.inrangeSigned(127, v / 2, v >> 1); }); + this.addEnc("$lb11", "LABEL", function (v) { return _this.inrangeSigned(1023, v / 2, v >> 1); }); + //this.addInst("nop", 0xbf00, 0xffff); // we use mov r8,r8 as gcc + this.addInst("adcs $r0, $r1", 0x4140, 0xffc0); + this.addInst("add $r2, $r3", 0x4400, 0xff00, "$r2 += $r3"); + this.addInst("add $r5, pc, $i1", 0xa000, 0xf800); + this.addInst("add $r5, sp, $i1", 0xa800, 0xf800); + this.addInst("add sp, $i2", 0xb000, 0xff80); + this.addInst("adds $r0, $r1, $i3", 0x1c00, 0xfe00); + this.addInst("adds $r0, $r1, $r4", 0x1800, 0xfe00); + this.addInst("adds $r01, $r4", 0x1800, 0xfe00); + this.addInst("adds $r5, $i0", 0x3000, 0xf800, "$r5 += $i0"); + this.addInst("adr $r5, $la", 0xa000, 0xf800); + this.addInst("ands $r0, $r1", 0x4000, 0xffc0); + this.addInst("asrs $r0, $r1", 0x4100, 0xffc0); + this.addInst("asrs $r0, $r1, $i6", 0x1000, 0xf800); + this.addInst("bics $r0, $r1", 0x4380, 0xffc0); + this.addInst("bkpt $i0", 0xbe00, 0xff00); + this.addInst("blx $r3", 0x4780, 0xff87); + this.addInst("bx $r3", 0x4700, 0xff80); + this.addInst("cmn $r0, $r1", 0x42c0, 0xffc0); + this.addInst("cmp $r0, $r1", 0x4280, 0xffc0); + this.addInst("cmp $r2, $r3", 0x4500, 0xff00); + this.addInst("cmp $r5, $i0", 0x2800, 0xf800); + this.addInst("eors $r0, $r1", 0x4040, 0xffc0); + this.addInst("ldmia $r5!, $rl0", 0xc800, 0xf800); + this.addInst("ldmia $r5, $rl0", 0xc800, 0xf800); + this.addInst("ldr $r0, [$r1, $i5]", 0x6800, 0xf800); + this.addInst("ldr $r0, [$r1, $r4]", 0x5800, 0xfe00); + this.addInst("ldr $r5, [pc, $i1]", 0x4800, 0xf800); + this.addInst("ldr $r5, $la", 0x4800, 0xf800); + this.addInst("ldr $r5, [sp, $i1]", 0x9800, 0xf800); + this.addInst("ldrb $r0, [$r1, $i4]", 0x7800, 0xf800); + this.addInst("ldrb $r0, [$r1, $r4]", 0x5c00, 0xfe00); + this.addInst("ldrh $r0, [$r1, $i7]", 0x8800, 0xf800); + this.addInst("ldrh $r0, [$r1, $r4]", 0x5a00, 0xfe00); + this.addInst("ldrsb $r0, [$r1, $r4]", 0x5600, 0xfe00); + this.addInst("ldrsh $r0, [$r1, $r4]", 0x5e00, 0xfe00); + this.addInst("lsls $r0, $r1", 0x4080, 0xffc0, "$r0 = $r0 << $r1"); + this.addInst("lsls $r0, $r1, $i4", 0x0000, 0xf800, "$r0 = $r1 << $i4"); + this.addInst("lsrs $r0, $r1", 0x40c0, 0xffc0); + this.addInst("lsrs $r0, $r1, $i6", 0x0800, 0xf800); + this.addInst("mov $r0, $r1", 0x4600, 0xffc0, "$r0 = $r1"); + //this.addInst("mov $r2, $r3", 0x4600, 0xff00); + this.addInst("movs $r0, $r1", 0x0000, 0xffc0, "$r0 = $r1"); + this.addInst("movs $r5, $i0", 0x2000, 0xf800, "$r5 = $i0"); + this.addInst("muls $r0, $r1", 0x4340, 0xffc0); + this.addInst("mvns $r0, $r1", 0x43c0, 0xffc0); + this.addInst("negs $r0, $r1", 0x4240, 0xffc0, "$r0 = -$r1"); + this.addInst("nop", 0x46c0, 0xffff); // mov r8, r8 + this.addInst("orrs $r0, $r1", 0x4300, 0xffc0); + this.addInst("pop $rl2", 0xbc00, 0xfe00); + this.addInst("push $rl1", 0xb400, 0xfe00); + this.addInst("rev $r0, $r1", 0xba00, 0xffc0); + this.addInst("rev16 $r0, $r1", 0xba40, 0xffc0); + this.addInst("revsh $r0, $r1", 0xbac0, 0xffc0); + this.addInst("rors $r0, $r1", 0x41c0, 0xffc0); + this.addInst("sbcs $r0, $r1", 0x4180, 0xffc0); + this.addInst("sev", 0xbf40, 0xffff); + this.addInst("stmia $r5!, $rl0", 0xc000, 0xf800); + this.addInst("str $r0, [$r1, $i5]", 0x6000, 0xf800); + this.addInst("str $r0, [$r1, $r4]", 0x5000, 0xfe00); + this.addInst("str $r5, [sp, $i1]", 0x9000, 0xf800); + this.addInst("strb $r0, [$r1, $i4]", 0x7000, 0xf800); + this.addInst("strb $r0, [$r1, $r4]", 0x5400, 0xfe00); + this.addInst("strh $r0, [$r1, $i7]", 0x8000, 0xf800); + this.addInst("strh $r0, [$r1, $r4]", 0x5200, 0xfe00); + this.addInst("sub sp, $i2", 0xb080, 0xff80); + this.addInst("subs $r0, $r1, $i3", 0x1e00, 0xfe00); + this.addInst("subs $r0, $r1, $r4", 0x1a00, 0xfe00); + this.addInst("subs $r01, $r4", 0x1a00, 0xfe00); + this.addInst("subs $r5, $i0", 0x3800, 0xf800); + this.addInst("svc $i0", 0xdf00, 0xff00); + this.addInst("sxtb $r0, $r1", 0xb240, 0xffc0); + this.addInst("sxth $r0, $r1", 0xb200, 0xffc0); + this.addInst("tst $r0, $r1", 0x4200, 0xffc0); + this.addInst("udf $i0", 0xde00, 0xff00); + this.addInst("uxtb $r0, $r1", 0xb2c0, 0xffc0); + this.addInst("uxth $r0, $r1", 0xb280, 0xffc0); + this.addInst("wfe", 0xbf20, 0xffff); + this.addInst("wfi", 0xbf30, 0xffff); + this.addInst("yield", 0xbf10, 0xffff); + this.addInst("cpsid i", 0xb672, 0xffff); + this.addInst("cpsie i", 0xb662, 0xffff); + this.addInst("beq $lb", 0xd000, 0xff00); + this.addInst("bne $lb", 0xd100, 0xff00); + this.addInst("bcs $lb", 0xd200, 0xff00); + this.addInst("bcc $lb", 0xd300, 0xff00); + this.addInst("bmi $lb", 0xd400, 0xff00); + this.addInst("bpl $lb", 0xd500, 0xff00); + this.addInst("bvs $lb", 0xd600, 0xff00); + this.addInst("bvc $lb", 0xd700, 0xff00); + this.addInst("bhi $lb", 0xd800, 0xff00); + this.addInst("bls $lb", 0xd900, 0xff00); + this.addInst("bge $lb", 0xda00, 0xff00); + this.addInst("blt $lb", 0xdb00, 0xff00); + this.addInst("bgt $lb", 0xdc00, 0xff00); + this.addInst("ble $lb", 0xdd00, 0xff00); + this.addInst("bhs $lb", 0xd200, 0xff00); // cs + this.addInst("blo $lb", 0xd300, 0xff00); // cc + this.addInst("b $lb11", 0xe000, 0xf800, "B"); + this.addInst("bal $lb11", 0xe000, 0xf800, "B"); + // handled specially - 32 bit instruction + this.addInst("bl $lb", 0xf000, 0xf800, "BL"); + // this is normally emitted as 'b' but will be emitted as 'bl' if needed + this.addInst("bb $lb", 0xe000, 0xf800, "B"); + } + ThumbProcessor.prototype.wordSize = function () { + return 4; + }; + ThumbProcessor.prototype.is32bit = function (i) { + return i.name == "bl" || i.name == "bb"; + }; + ThumbProcessor.prototype.postProcessAbsAddress = function (f, v) { + v = v & 0xfffffffe; + v -= f.baseOffset; + return v; + }; + ThumbProcessor.prototype.emit32 = function (v0, v, actual) { + if (v % 2) + return pxtc.assembler.emitErr("uneven BL?", actual); + var off = v / 2; + pxtc.assert(off != null); + if ((off | 0) != off || + // we can actually support more but the board has 256k (128k instructions) + !(-128 * 1024 <= off && off <= 128 * 1024)) + return pxtc.assembler.emitErr("jump out of range", actual); + // note that off is already in instructions, not bytes + var imm11 = off & 0x7ff; + var imm10 = (off >> 11) & 0x3ff; + return { + opcode: (off & 0xf0000000) ? (0xf400 | imm10) : (0xf000 | imm10), + opcode2: (0xf800 | imm11), + stack: 0, + numArgs: [v], + labelName: actual + }; + }; + ThumbProcessor.prototype.getAddressFromLabel = function (f, i, s, wordAligned) { + if (wordAligned === void 0) { wordAligned = false; } + var l = f.lookupLabel(s); + if (l == null) + return null; + var pc = f.location() + 4; + if (wordAligned) + pc = pc & 0xfffffffc; + return l - pc; + }; + ThumbProcessor.prototype.isPop = function (opcode) { + return opcode == 0xbc00; + }; + ThumbProcessor.prototype.isPush = function (opcode) { + return opcode == 0xb400; + }; + ThumbProcessor.prototype.isAddSP = function (opcode) { + return opcode == 0xb000; + }; + ThumbProcessor.prototype.isSubSP = function (opcode) { + return opcode == 0xb080; + }; + ThumbProcessor.prototype.peephole = function (ln, lnNext, lnNext2) { + var lb11 = this.encoders["$lb11"]; + var lb = this.encoders["$lb"]; + var lnop = ln.getOp(); + var isSkipBranch = false; + if (lnop == "bne" || lnop == "beq") { + if (lnNext.getOp() == "b" && ln.numArgs[0] == 0) + isSkipBranch = true; + if (lnNext.getOp() == "bb" && ln.numArgs[0] == 2) + isSkipBranch = true; + } + if (lnop == "bb" && lb11.encode(ln.numArgs[0]) != null) { + // RULE: bb .somewhere -> b .somewhere (if fits) + ln.update("b " + ln.words[1]); + } + else if (lnop == "b" && ln.numArgs[0] == -2) { + // RULE: b .somewhere; .somewhere: -> .somewhere: + ln.update(""); + } + else if (lnop == "bne" && isSkipBranch && lb.encode(lnNext.numArgs[0]) != null) { + // RULE: bne .next; b .somewhere; .next: -> beq .somewhere + ln.update("beq " + lnNext.words[1]); + lnNext.update(""); + } + else if (lnop == "beq" && isSkipBranch && lb.encode(lnNext.numArgs[0]) != null) { + // RULE: beq .next; b .somewhere; .next: -> bne .somewhere + ln.update("bne " + lnNext.words[1]); + lnNext.update(""); + } + else if (lnop == "push" && lnNext.getOp() == "pop" && ln.numArgs[0] == lnNext.numArgs[0]) { + // RULE: push {X}; pop {X} -> nothing + pxtc.assert(ln.numArgs[0] > 0); + ln.update(""); + lnNext.update(""); + } + else if (lnop == "push" && lnNext.getOp() == "pop" && + ln.words.length == 4 && + lnNext.words.length == 4) { + // RULE: push {rX}; pop {rY} -> mov rY, rX + pxtc.assert(ln.words[1] == "{"); + ln.update("mov " + lnNext.words[2] + ", " + ln.words[2]); + lnNext.update(""); + } + else if (lnNext2 && ln.getOpExt() == "movs $r5, $i0" && lnNext.getOpExt() == "mov $r0, $r1" && + ln.numArgs[0] == lnNext.numArgs[1] && + clobbersReg(lnNext2, ln.numArgs[0])) { + // RULE: movs rX, #V; mov rY, rX; clobber rX -> movs rY, #V + ln.update("movs r" + lnNext.numArgs[0] + ", #" + ln.numArgs[1]); + lnNext.update(""); + } + else if (lnop == "pop" && singleReg(ln) >= 0 && lnNext.getOp() == "push" && + singleReg(ln) == singleReg(lnNext)) { + // RULE: pop {rX}; push {rX} -> ldr rX, [sp, #0] + ln.update("ldr r" + singleReg(ln) + ", [sp, #0]"); + lnNext.update(""); + } + else if (lnNext2 && lnop == "push" && singleReg(ln) >= 0 && preservesReg(lnNext, singleReg(ln)) && + lnNext2.getOp() == "pop" && singleReg(ln) == singleReg(lnNext2)) { + // RULE: push {rX}; movs rY, #V; pop {rX} -> movs rY, #V (when X != Y) + ln.update(""); + lnNext2.update(""); + } + }; + ThumbProcessor.prototype.registerNo = function (actual) { + if (!actual) + return null; + actual = actual.toLowerCase(); + switch (actual) { + case "pc": + actual = "r15"; + break; + case "lr": + actual = "r14"; + break; + case "sp": + actual = "r13"; + break; + } + var m = /^r(\d+)$/.exec(actual); + if (m) { + var r = parseInt(m[1], 10); + if (0 <= r && r < 16) + return r; + } + return null; + }; + ThumbProcessor.prototype.testAssembler = function () { + pxtc.assembler.expectError(this, "lsl r0, r0, #8"); + pxtc.assembler.expectError(this, "push {pc,lr}"); + pxtc.assembler.expectError(this, "push {r17}"); + pxtc.assembler.expectError(this, "mov r0, r1 foo"); + pxtc.assembler.expectError(this, "movs r14, #100"); + pxtc.assembler.expectError(this, "push {r0"); + pxtc.assembler.expectError(this, "push lr,r0}"); + pxtc.assembler.expectError(this, "pop {lr,r0}"); + pxtc.assembler.expectError(this, "b #+11"); + pxtc.assembler.expectError(this, "b #+102400"); + pxtc.assembler.expectError(this, "bne undefined_label"); + pxtc.assembler.expectError(this, ".foobar"); + pxtc.assembler.expect(this, "0200 lsls r0, r0, #8\n" + + "b500 push {lr}\n" + + "2064 movs r0, #100 ; 0x64\n" + + "b401 push {r0}\n" + + "bc08 pop {r3}\n" + + "b501 push {r0, lr}\n" + + "bd20 pop {r5, pc}\n" + + "bc01 pop {r0}\n" + + "4770 bx lr\n" + + "0000 .balign 4\n" + + "e6c0 .word -72000\n" + + "fffe\n"); + pxtc.assembler.expect(this, "4291 cmp r1, r2\n" + + "d100 bne l6\n" + + "e000 b l8\n" + + "1840 l6: adds r0, r0, r1\n" + + "4718 l8: bx r3\n"); + pxtc.assembler.expect(this, " @stackmark base\n" + + "b403 push {r0, r1}\n" + + " @stackmark locals\n" + + "9801 ldr r0, [sp, locals@1]\n" + + "b401 push {r0}\n" + + "9802 ldr r0, [sp, locals@1]\n" + + "bc01 pop {r0}\n" + + " @stackempty locals\n" + + "9901 ldr r1, [sp, locals@1]\n" + + "9102 str r1, [sp, base@0]\n" + + " @stackempty locals\n" + + "b002 add sp, #8\n" + + " @stackempty base\n"); + pxtc.assembler.expect(this, "b090 sub sp, #4*16\n" + + "b010 add sp, #4*16\n"); + pxtc.assembler.expect(this, "6261 .string \"abc\"\n" + + "0063 \n"); + pxtc.assembler.expect(this, "6261 .string \"abcde\"\n" + + "6463 \n" + + "0065 \n"); + pxtc.assembler.expect(this, "3042 adds r0, 0x42\n" + + "1c0d adds r5, r1, #0\n" + + "d100 bne #0\n" + + "2800 cmp r0, #0\n" + + "6b28 ldr r0, [r5, #48]\n" + + "0200 lsls r0, r0, #8\n" + + "2063 movs r0, 0x63\n" + + "4240 negs r0, r0\n" + + "46c0 nop\n" + + "b500 push {lr}\n" + + "b401 push {r0}\n" + + "b402 push {r1}\n" + + "b404 push {r2}\n" + + "b408 push {r3}\n" + + "b520 push {r5, lr}\n" + + "bd00 pop {pc}\n" + + "bc01 pop {r0}\n" + + "bc02 pop {r1}\n" + + "bc04 pop {r2}\n" + + "bc08 pop {r3}\n" + + "bd20 pop {r5, pc}\n" + + "9003 str r0, [sp, #4*3]\n"); + }; + return ThumbProcessor; + }(pxtc.assembler.AbstractProcessor)); + thumb.ThumbProcessor = ThumbProcessor; + // if true then instruction doesn't write r and doesn't read/write memory + function preservesReg(ln, n) { + if (ln.getOpExt() == "movs $r5, $i0" && ln.numArgs[0] != n) + return true; + return false; + } + function clobbersReg(ln, n) { + // TODO add some more + if (ln.getOp() == "pop" && ln.numArgs[0] & (1 << n)) + return true; + return false; + } + function singleReg(ln) { + pxtc.assert(ln.getOp() == "push" || ln.getOp() == "pop"); + var k = 0; + var ret = -1; + var v = ln.numArgs[0]; + while (v > 0) { + if (v & 1) { + if (ret == -1) + ret = k; + else + ret = -2; + } + v >>= 1; + k++; + } + if (ret >= 0) + return ret; + else + return -1; + } + })(thumb = pxtc.thumb || (pxtc.thumb = {})); + })(pxtc = ts.pxtc || (ts.pxtc = {})); +})(ts || (ts = {})); +var ts; +(function (ts) { + var pxtc; + (function (pxtc) { + var ir; + (function (ir) { + var U = pxtc.Util; + var assert = U.assert; + (function (EK) { + EK[EK["None"] = 0] = "None"; + EK[EK["NumberLiteral"] = 1] = "NumberLiteral"; + EK[EK["PointerLiteral"] = 2] = "PointerLiteral"; + EK[EK["RuntimeCall"] = 3] = "RuntimeCall"; + EK[EK["ProcCall"] = 4] = "ProcCall"; + EK[EK["SharedRef"] = 5] = "SharedRef"; + EK[EK["SharedDef"] = 6] = "SharedDef"; + EK[EK["FieldAccess"] = 7] = "FieldAccess"; + EK[EK["Store"] = 8] = "Store"; + EK[EK["CellRef"] = 9] = "CellRef"; + EK[EK["Incr"] = 10] = "Incr"; + EK[EK["Decr"] = 11] = "Decr"; + EK[EK["Sequence"] = 12] = "Sequence"; + EK[EK["JmpValue"] = 13] = "JmpValue"; + EK[EK["Nop"] = 14] = "Nop"; + })(ir.EK || (ir.EK = {})); + var EK = ir.EK; + (function (CallingConvention) { + CallingConvention[CallingConvention["Plain"] = 0] = "Plain"; + CallingConvention[CallingConvention["Async"] = 1] = "Async"; + CallingConvention[CallingConvention["Promise"] = 2] = "Promise"; + })(ir.CallingConvention || (ir.CallingConvention = {})); + var CallingConvention = ir.CallingConvention; + var Node = (function () { + function Node() { + } + Node.prototype.isExpr = function () { return false; }; + Node.prototype.isStmt = function () { return false; }; + return Node; + }()); + ir.Node = Node; + var Expr = (function (_super) { + __extends(Expr, _super); + function Expr(exprKind, args, data) { + _super.call(this); + this.exprKind = exprKind; + this.args = args; + this.data = data; + this.callingConvention = CallingConvention.Plain; + } + Expr.clone = function (e) { + var copy = new Expr(e.exprKind, e.args.slice(0), e.data); + if (e.jsInfo) + copy.jsInfo = e.jsInfo; + if (e.totalUses) { + copy.totalUses = e.totalUses; + copy.currUses = e.currUses; + } + copy.callingConvention = e.callingConvention; + return copy; + }; + Expr.prototype.isExpr = function () { return true; }; + Expr.prototype.isPure = function () { + return this.isStateless() || this.exprKind == EK.CellRef; + }; + Expr.prototype.isStateless = function () { + switch (this.exprKind) { + case EK.NumberLiteral: + case EK.PointerLiteral: + case EK.SharedRef: + return true; + default: return false; + } + }; + Expr.prototype.sharingInfo = function () { + var arg0 = this; + if (this.exprKind == EK.SharedRef || this.exprKind == EK.SharedDef) { + arg0 = this.args[0]; + if (!arg0) + arg0 = { currUses: "", totalUses: "" }; + } + return arg0.currUses + "/" + arg0.totalUses; + }; + Expr.prototype.toString = function () { + switch (this.exprKind) { + case EK.NumberLiteral: + return this.data + ""; + case EK.PointerLiteral: + return this.data + ""; + case EK.CellRef: + return this.data.toString(); + case EK.JmpValue: + return "JMPVALUE"; + case EK.Nop: + return "NOP"; + case EK.SharedRef: + return "SHARED_REF(" + this.args[0].toString() + ")"; + case EK.SharedDef: + return "SHARED_DEF(" + this.args[0].toString() + ")"; + case EK.Incr: + return "INCR(" + this.args[0].toString() + ")"; + case EK.Decr: + return "DECR(" + this.args[0].toString() + ")"; + case EK.FieldAccess: + return this.args[0].toString() + "." + this.data.name; + case EK.RuntimeCall: + return this.data + "(" + this.args.map(function (a) { return a.toString(); }).join(", ") + ")"; + case EK.ProcCall: + var procid = this.data; + var name_4 = ""; + if (procid.ifaceIndex != null) + name_4 = "IFACE@" + procid.ifaceIndex; + else if (procid.virtualIndex != null) + name_4 = "VTABLE@" + procid.virtualIndex; + else + name_4 = pxtc.getDeclName(procid.proc.action); + return name_4 + "(" + this.args.map(function (a) { return a.toString(); }).join(", ") + ")"; + case EK.Sequence: + return "(" + this.args.map(function (a) { return a.toString(); }).join("; ") + ")"; + case EK.Store: + return "{ " + this.args[0].toString() + " := " + this.args[1].toString() + " }"; + default: throw pxtc.oops(); + } + }; + Expr.prototype.canUpdateCells = function () { + switch (this.exprKind) { + case EK.NumberLiteral: + case EK.PointerLiteral: + case EK.CellRef: + case EK.JmpValue: + case EK.SharedRef: + case EK.Nop: + return false; + case EK.SharedDef: + case EK.Incr: + case EK.Decr: + case EK.FieldAccess: + return this.args[0].canUpdateCells(); + case EK.RuntimeCall: + case EK.ProcCall: + case EK.Sequence: + return true; + case EK.Store: + return true; + default: throw pxtc.oops(); + } + }; + return Expr; + }(Node)); + ir.Expr = Expr; + (function (SK) { + SK[SK["None"] = 0] = "None"; + SK[SK["Expr"] = 1] = "Expr"; + SK[SK["Label"] = 2] = "Label"; + SK[SK["Jmp"] = 3] = "Jmp"; + SK[SK["StackEmpty"] = 4] = "StackEmpty"; + SK[SK["Breakpoint"] = 5] = "Breakpoint"; + })(ir.SK || (ir.SK = {})); + var SK = ir.SK; + (function (JmpMode) { + JmpMode[JmpMode["Always"] = 1] = "Always"; + JmpMode[JmpMode["IfZero"] = 2] = "IfZero"; + JmpMode[JmpMode["IfNotZero"] = 3] = "IfNotZero"; + JmpMode[JmpMode["IfJmpValEq"] = 4] = "IfJmpValEq"; + })(ir.JmpMode || (ir.JmpMode = {})); + var JmpMode = ir.JmpMode; + var Stmt = (function (_super) { + __extends(Stmt, _super); + function Stmt(stmtKind, expr) { + _super.call(this); + this.stmtKind = stmtKind; + this.expr = expr; + } + Stmt.prototype.isStmt = function () { return true; }; + Stmt.prototype.toString = function () { + var inner = this.expr ? this.expr.toString() : "{null}"; + switch (this.stmtKind) { + case ir.SK.Expr: + return " " + inner + "\n"; + case ir.SK.Jmp: + var fin = "goto " + this.lblName + "\n"; + switch (this.jmpMode) { + case JmpMode.Always: + if (this.expr) + return " { JMPVALUE := " + inner + " } " + fin; + else + return " " + fin; + case JmpMode.IfZero: + return " if (! " + inner + ") " + fin; + case JmpMode.IfNotZero: + return " if (" + inner + ") " + fin; + case JmpMode.IfJmpValEq: + return " if (r0 == " + inner + ") " + fin; + default: throw pxtc.oops(); + } + case ir.SK.StackEmpty: + return " ;\n"; + case ir.SK.Breakpoint: + return " // brk " + (this.breakpointInfo.id) + "\n"; + case ir.SK.Label: + return this.lblName + ":\n"; + default: throw pxtc.oops(); + } + }; + return Stmt; + }(Node)); + ir.Stmt = Stmt; + var Cell = (function () { + function Cell(index, def, info) { + this.index = index; + this.def = def; + this.info = info; + this.isarg = false; + this.iscap = false; + this._isRef = false; + this._isLocal = false; + this._isGlobal = false; + this.bitSize = 0 /* None */; + if (def && info) { + pxtc.setCellProps(this); + } + } + Cell.prototype.getName = function () { + return pxtc.getDeclName(this.def); + }; + Cell.prototype.getDebugInfo = function () { + return { + name: this.getName(), + type: "TODO" + }; + }; + Cell.prototype.toString = function () { + var n = ""; + if (this.def) + n += this.getName() || "?"; + if (this.isarg) + n = "ARG " + n; + if (this.isRef()) + n = "REF " + n; + //if (this.isByRefLocal()) n = "BYREF " + n + return "[" + n + "]"; + }; + Cell.prototype.uniqueName = function () { + if (this.isarg) + return "arg" + this.index; // have to keep names stable for inheritance + return this.getName().replace(/[^\w]/g, "_") + "___" + pxtc.getNodeId(this.def); + }; + Cell.prototype.refSuffix = function () { + if (this.isRef()) + return "Ref"; + else + return ""; + }; + Cell.prototype.isRef = function () { return this._isRef; }; + Cell.prototype.isLocal = function () { return this._isLocal; }; + Cell.prototype.isGlobal = function () { return this._isGlobal; }; + Cell.prototype.loadCore = function () { + return op(EK.CellRef, null, this); + }; + Cell.prototype.load = function () { + var r = this.loadCore(); + if (this.isByRefLocal()) + return rtcall("pxtrt::ldloc" + this.refSuffix(), [r]); + if (this.refCountingHandledHere()) + return op(EK.Incr, [r]); + return r; + }; + Cell.prototype.refCountingHandledHere = function () { + return this.isRef() && !this.isByRefLocal(); + }; + Cell.prototype.isByRefLocal = function () { + return this.isLocal() && this.info.captured && this.info.written; + }; + Cell.prototype.storeDirect = function (src) { + return op(EK.Store, [this.loadCore(), src]); + }; + Cell.prototype.storeByRef = function (src) { + if (this.isByRefLocal()) { + return rtcall("pxtrt::stloc" + this.refSuffix(), [this.loadCore(), src]); + } + else { + if (this.refCountingHandledHere()) { + var tmp = shared(src); + return op(EK.Sequence, [ + tmp, + op(EK.Decr, [this.loadCore()]), + this.storeDirect(tmp) + ]); + } + else { + return this.storeDirect(src); + } + } + }; + Object.defineProperty(Cell.prototype, "isTemporary", { + get: function () { + return false; + }, + enumerable: true, + configurable: true + }); + return Cell; + }()); + ir.Cell = Cell; + //Cells that represent variables that are generated by the compiler as temporaries + //The user cannot access these cells from JS or blocks + var UnnamedCell = (function (_super) { + __extends(UnnamedCell, _super); + function UnnamedCell(index, owningProc) { + _super.call(this, index, null, null); + this.index = index; + this.owningProc = owningProc; + this.uid = UnnamedCell.unnamedCellCounter++; + } + UnnamedCell.prototype.getName = function () { + return "unnamed" + this.uid; + }; + UnnamedCell.prototype.uniqueName = function () { + return this.getName() + "___U" + this.index; + }; + UnnamedCell.prototype.isByRefLocal = function () { + return false; + }; + Object.defineProperty(UnnamedCell.prototype, "isTemporary", { + get: function () { + return true; + }, + enumerable: true, + configurable: true + }); + UnnamedCell.unnamedCellCounter = 0; + return UnnamedCell; + }(Cell)); + ir.UnnamedCell = UnnamedCell; + function noRefCount(e) { + switch (e.exprKind) { + case ir.EK.Sequence: + return noRefCount(e.args[e.args.length - 1]); + case ir.EK.NumberLiteral: + return true; + case ir.EK.RuntimeCall: + switch (e.data) { + case "String_::mkEmpty": + case "pxt::ptrOfLiteral": + return true; + default: + return false; + } + case ir.EK.SharedDef: + case ir.EK.SharedRef: + return noRefCount(e.args[0]); + default: + return false; + } + } + var Procedure = (function (_super) { + __extends(Procedure, _super); + function Procedure() { + _super.apply(this, arguments); + this.numArgs = 0; + this.isRoot = false; + this.locals = []; + this.captured = []; + this.args = []; + this.body = []; + this.lblNo = 0; + } + Procedure.prototype.reset = function () { + this.body = []; + this.lblNo = 0; + this.locals = []; + this.captured = []; + this.args = []; + }; + Procedure.prototype.label = function () { + return pxtc.getFunctionLabel(this.action, this.bindings); + }; + Procedure.prototype.matches = function (id) { + if (this.action == id.action) { + U.assert(this.bindings.length == id.bindings.length); + for (var i = 0; i < this.bindings.length; ++i) + if (this.bindings[i].isRef != id.bindings[i].isRef) + return false; + return true; + } + return false; + }; + Procedure.prototype.toString = function () { + return "\nPROC " + pxtc.getDeclName(this.action) + "\n" + this.body.map(function (s) { return s.toString(); }).join("") + "\n"; + }; + Procedure.prototype.emit = function (stmt) { + this.body.push(stmt); + }; + Procedure.prototype.emitExpr = function (expr) { + this.emit(stmt(SK.Expr, expr)); + }; + Procedure.prototype.mkLabel = function (name) { + var lbl = stmt(SK.Label, null); + lbl.lblName = "." + name + "_" + this.lblNo++ + "_" + this.seqNo; + lbl.lbl = lbl; + return lbl; + }; + Procedure.prototype.emitLbl = function (lbl) { + this.emit(lbl); + }; + Procedure.prototype.emitLblDirect = function (lblName) { + var lbl = stmt(SK.Label, null); + lbl.lblName = lblName; + lbl.lbl = lbl; + this.emit(lbl); + }; + Procedure.prototype.getName = function () { + var text = this.action && this.action.name ? this.action.name.text : null; + return text || "inline"; + }; + Procedure.prototype.mkLocal = function (def, info) { + var l = new Cell(this.locals.length, def, info); + this.locals.push(l); + return l; + }; + Procedure.prototype.mkLocalUnnamed = function (isRef) { + if (isRef === void 0) { isRef = false; } + var uc = new UnnamedCell(this.locals.length, this); + uc._isRef = isRef; + this.locals.push(uc); + return uc; + }; + Procedure.prototype.localIndex = function (l, noargs) { + if (noargs === void 0) { noargs = false; } + return this.captured.filter(function (n) { return n.def == l; })[0] || + this.locals.filter(function (n) { return n.def == l; })[0] || + (noargs ? null : this.args.filter(function (n) { return n.def == l; })[0]); + }; + Procedure.prototype.stackEmpty = function () { + this.emit(stmt(SK.StackEmpty, null)); + }; + Procedure.prototype.emitClrIfRef = function (p) { + assert(!p.isGlobal() && !p.iscap); + if (p.isRef() || p.isByRefLocal()) { + this.emitExpr(op(EK.Decr, [p.loadCore()])); + } + }; + Procedure.prototype.emitClrs = function () { + var _this = this; + if (this.isRoot) + return; + var lst = this.locals.concat(this.args); + lst.forEach(function (p) { return _this.emitClrIfRef(p); }); + }; + Procedure.prototype.emitJmpZ = function (trg, expr) { + this.emitJmp(trg, expr, JmpMode.IfZero); + }; + Procedure.prototype.emitJmp = function (trg, expr, mode, terminate) { + if (mode === void 0) { mode = JmpMode.Always; } + if (terminate === void 0) { terminate = null; } + var jmp = stmt(SK.Jmp, expr); + jmp.jmpMode = mode; + jmp.terminateExpr = terminate; + if (typeof trg == "string") + jmp.lblName = trg; + else { + jmp.lbl = trg; + jmp.lblName = jmp.lbl.lblName; + } + this.emit(jmp); + }; + Procedure.prototype.resolve = function () { + var _this = this; + var iterargs = function (e, f) { + if (e.args) + for (var i = 0; i < e.args.length; ++i) + e.args[i] = f(e.args[i]); + }; + var refdef = function (e) { + switch (e.exprKind) { + case EK.SharedDef: throw U.oops(); + case EK.SharedRef: + var arg = e.args[0]; + if (!arg.totalUses) { + arg.totalUses = -1; + arg.currUses = 0; + var e2 = Expr.clone(e); + e2.exprKind = EK.SharedDef; + e2.args[0] = refdef(e2.args[0]); + return e2; + } + else { + arg.totalUses--; + return e; + } + } + iterargs(e, refdef); + return e; + }; + var opt = function (e) { + if (e.exprKind == EK.SharedRef) + return e; + iterargs(e, opt); + if ((e.exprKind == EK.Decr || e.exprKind == EK.Incr) && noRefCount(e.args[0])) { + return e.args[0]; + } + switch (e.exprKind) { + case EK.Decr: + if (e.args[0].exprKind == EK.Incr) + return e.args[0].args[0]; + break; + case EK.Sequence: + e.args = e.args.filter(function (a, i) { return i == e.args.length - 1 || !a.isPure(); }); + break; + } + return e; + }; + var cntuses = function (e) { + switch (e.exprKind) { + case EK.SharedDef: + var arg = e.args[0]; + //console.log(arg) + U.assert(arg.totalUses < 0); + U.assert(arg.currUses === 0); + if (arg.totalUses == -1) + return cntuses(arg); + else + arg.totalUses = 1; + break; + case EK.SharedRef: + U.assert(e.args[0].totalUses > 0); + e.args[0].totalUses++; + return e; + } + iterargs(e, cntuses); + return e; + }; + this.body = this.body.filter(function (s) { + if (s.expr) { + //console.log("OPT", s.expr.toString()) + s.expr = opt(refdef(s.expr)); + //console.log("INTO", s.expr.toString()) + if (s.stmtKind == ir.SK.Expr && s.expr.isPure()) + return false; + } + return true; + }); + var lbls = U.toDictionary(this.body.filter(function (s) { return s.stmtKind == ir.SK.Label; }), function (s) { return s.lblName; }); + for (var i = 0; i < this.body.length; ++i) + this.body[i].stmtNo = i; + for (var _i = 0, _a = this.body; _i < _a.length; _i++) { + var s = _a[_i]; + if (s.expr) { + //console.log("CNT", s.expr.toString()) + s.expr = cntuses(s.expr); + } + switch (s.stmtKind) { + case ir.SK.Expr: + break; + case ir.SK.Jmp: + s.lbl = U.lookup(lbls, s.lblName); + if (!s.lbl) + pxtc.oops("missing label: " + s.lblName); + s.lbl.lblNumUses++; + break; + case ir.SK.StackEmpty: + case ir.SK.Label: + case ir.SK.Breakpoint: + break; + default: pxtc.oops(); + } + } + var findIdx = 1; + var findNext = function (i) { + var res = []; + var loop = function (i) { + while (i < _this.body.length) { + var s = _this.body[i]; + if (s.findIdx === findIdx) + return; + s.findIdx = findIdx; + switch (s.stmtKind) { + case ir.SK.Jmp: + if (s.jmpMode == ir.JmpMode.Always) + i = s.lbl.stmtNo - 1; + else + loop(s.lbl.stmtNo); // fork + break; + case ir.SK.Breakpoint: + res.push(s.breakpointInfo); + return; + } + i++; + } + }; + findIdx++; + loop(i); + return res; + }; + var allBrkp = []; + for (var _b = 0, _c = this.body; _b < _c.length; _b++) { + var s = _c[_b]; + if (s.stmtKind == ir.SK.Breakpoint) { + s.breakpointInfo.successors = findNext(s.stmtNo + 1).map(function (b) { return b.id; }); + allBrkp[s.breakpointInfo.id] = s.breakpointInfo; + } + } + var debugSucc = false; + if (debugSucc) { + var s = "BRKP: " + this.getName() + ":\n"; + for (var i = 0; i < allBrkp.length; ++i) { + var b = allBrkp[i]; + if (!b) + continue; + s += (b.line + 1) + ": "; + var n = allBrkp[i + 1]; + if (n && b.successors.length == 1 && b.successors[0] == n.id) + s += "."; + else + s += b.successors.map(function (b) { return ("" + (allBrkp[b].line + 1)); }).join(", "); + s += "\n"; + } + console.log(s); + } + }; + return Procedure; + }(Node)); + ir.Procedure = Procedure; + function iterExpr(e, f) { + f(e); + if (e.args) + for (var _i = 0, _a = e.args; _i < _a.length; _i++) { + var a = _a[_i]; + iterExpr(a, f); + } + } + ir.iterExpr = iterExpr; + function stmt(kind, expr) { + return new Stmt(kind, expr); + } + ir.stmt = stmt; + function op(kind, args, data) { + return new Expr(kind, args, data); + } + ir.op = op; + function numlit(v) { + return op(EK.NumberLiteral, null, v); + } + ir.numlit = numlit; + function shared(expr) { + switch (expr.exprKind) { + case EK.NumberLiteral: + case EK.SharedRef: + return expr; + } + return op(EK.SharedRef, [expr]); + } + ir.shared = shared; + function ptrlit(lbl, jsInfo) { + var r = op(EK.PointerLiteral, null, lbl); + r.jsInfo = jsInfo; + return r; + } + ir.ptrlit = ptrlit; + function rtcall(name, args) { + return op(EK.RuntimeCall, args, name); + } + ir.rtcall = rtcall; + function rtcallMask(name, mask, callingConv, args) { + var decrs = []; + args = args.map(function (a, i) { + if (mask & (1 << i)) { + a = shared(a); + decrs.push(op(EK.Decr, [a])); + return a; + } + else + return a; + }); + var r = op(EK.RuntimeCall, args, name); + r.callingConvention = callingConv; + if (decrs.length > 0) { + r = shared(r); + decrs.unshift(r); + decrs.push(r); + r = op(EK.Sequence, decrs); + } + return r; + } + ir.rtcallMask = rtcallMask; + function flattenArgs(topExpr) { + var didStateUpdate = false; + var complexArgs = []; + for (var _i = 0, _a = U.reversed(topExpr.args); _i < _a.length; _i++) { + var a = _a[_i]; + if (a.isStateless()) + continue; + if (a.exprKind == EK.CellRef && !didStateUpdate) + continue; + if (a.canUpdateCells()) + didStateUpdate = true; + complexArgs.push(a); + } + complexArgs.reverse(); + var precomp = []; + var flattened = topExpr.args.map(function (a) { + var idx = complexArgs.indexOf(a); + if (idx >= 0) { + var sharedRef = a; + var sharedDef = a; + if (a.exprKind == EK.SharedDef) { + a.args[0].totalUses++; + sharedRef = ir.op(EK.SharedRef, [a.args[0]]); + } + else { + sharedRef = ir.op(EK.SharedRef, [a]); + sharedDef = ir.op(EK.SharedDef, [a]); + a.totalUses = 2; + a.currUses = 0; + } + precomp.push(sharedDef); + return sharedRef; + } + else + return a; + }); + return { precomp: precomp, flattened: flattened }; + } + ir.flattenArgs = flattenArgs; + })(ir = pxtc.ir || (pxtc.ir = {})); + })(pxtc = ts.pxtc || (ts.pxtc = {})); +})(ts || (ts = {})); +/// +/// +var ts; +(function (ts) { + var pxtc; + (function (pxtc) { + pxtc.assert = pxtc.Util.assert; + pxtc.oops = pxtc.Util.oops; + pxtc.U = pxtc.Util; + pxtc.ON_START_TYPE = "pxt-on-start"; + pxtc.TS_STATEMENT_TYPE = "typescript_statement"; + pxtc.TS_OUTPUT_TYPE = "typescript_expression"; + pxtc.BINARY_JS = "binary.js"; + pxtc.BINARY_HEX = "binary.hex"; + pxtc.BINARY_ASM = "binary.asm"; + pxtc.BINARY_UF2 = "binary.uf2"; + var EK = pxtc.ir.EK; + pxtc.SK = ts.SyntaxKind; + pxtc.numReservedGlobals = 1; + var lastNodeId = 0; + var currNodeWave = 1; + function getNodeId(n) { + var nn = n; + if (nn.pxtNodeWave !== currNodeWave) { + nn.pxtNodeId = ++lastNodeId; + nn.pxtNodeWave = currNodeWave; + } + return nn.pxtNodeId; + } + pxtc.getNodeId = getNodeId; + function stringKind(n) { + if (!n) + return ""; + return ts.SyntaxKind[n.kind]; + } + pxtc.stringKind = stringKind; + function inspect(n) { + console.log(stringKind(n)); + } + // next free error 9261 + function userError(code, msg, secondary) { + if (secondary === void 0) { secondary = false; } + var e = new Error(msg); + e.ksEmitterUserError = true; + e.ksErrorCode = code; + if (secondary && inCatchErrors) { + if (!lastSecondaryError) { + lastSecondaryError = msg; + lastSecondaryErrorCode = code; + } + return e; + } + throw e; + } + function isRefType(t) { + checkType(t); + if (t.flags & ts.TypeFlags.ThisType) + return true; + if (t.flags & ts.TypeFlags.Null) + return false; + if (t.flags & ts.TypeFlags.Undefined) + return false; + if (t.flags & ts.TypeFlags.TypeParameter) { + var b = lookupTypeParameter(t); + if (b) + return b.isRef; + pxtc.U.oops("unbound type parameter: " + checker.typeToString(t)); + } + if (t.flags & (ts.TypeFlags.NumberLike | ts.TypeFlags.Boolean)) + return false; + var sym = t.getSymbol(); + if (sym) { + var decl = sym.valueDeclaration || sym.declarations[0]; + if (decl) { + var attrs = parseComments(decl); + if (attrs.noRefCounting) + return false; + } + } + return true; + } + function isRefDecl(def) { + if (def.isThisParameter) + return true; + //let tp = checker.getDeclaredTypeOfSymbol(def.symbol) + var tp = typeOf(def); + return isRefType(tp); + } + function getBitSize(decl) { + if (!decl || !decl.type) + return 0 /* None */; + if (!(typeOf(decl).flags & ts.TypeFlags.Number)) + return 0 /* None */; + if (decl.type.kind != pxtc.SK.TypeReference) + return 0 /* None */; + switch (decl.type.typeName.getText()) { + case "int8": return 1 /* Int8 */; + case "int16": return 3 /* Int16 */; + case "int32": return 5 /* Int32 */; + case "uint8": return 2 /* UInt8 */; + case "uint16": return 4 /* UInt16 */; + default: return 0 /* None */; + } + } + function sizeOfBitSize(b) { + switch (b) { + case 0 /* None */: return 4; + case 1 /* Int8 */: return 1; + case 3 /* Int16 */: return 2; + case 5 /* Int32 */: return 4; + case 2 /* UInt8 */: return 1; + case 4 /* UInt16 */: return 2; + default: throw pxtc.oops(); + } + } + pxtc.sizeOfBitSize = sizeOfBitSize; + function setCellProps(l) { + l._isRef = isRefDecl(l.def); + l._isLocal = isLocalVar(l.def) || isParameter(l.def); + l._isGlobal = isGlobalVar(l.def); + if (!l.isRef() && typeOf(l.def).flags & ts.TypeFlags.Void) { + pxtc.oops("void-typed variable, " + l.toString()); + } + l.bitSize = getBitSize(l.def); + if (l.isLocal() && l.bitSize != 0 /* None */) { + l.bitSize = 0 /* None */; + userError(9256, lf("bit sizes are not supported for locals and parameters")); + } + } + pxtc.setCellProps = setCellProps; + function isStringLiteral(node) { + switch (node.kind) { + case pxtc.SK.TemplateHead: + case pxtc.SK.TemplateMiddle: + case pxtc.SK.TemplateTail: + case pxtc.SK.StringLiteral: + case pxtc.SK.NoSubstitutionTemplateLiteral: + return true; + default: return false; + } + } + function isEmptyStringLiteral(e) { + return isStringLiteral(e) && e.text == ""; + } + function isStatic(node) { + return node.modifiers && node.modifiers.some(function (m) { return m.kind == pxtc.SK.StaticKeyword; }); + } + function classFunctionPref(node) { + if (!node) + return null; + switch (node.kind) { + case pxtc.SK.MethodDeclaration: return ""; + case pxtc.SK.Constructor: return "new/"; + case pxtc.SK.GetAccessor: return "get/"; + case pxtc.SK.SetAccessor: return "set/"; + default: + return null; + } + } + function classFunctionKey(node) { + return classFunctionPref(node) + getName(node); + } + function isClassFunction(node) { + return classFunctionPref(node) != null; + } + function getEnclosingMethod(node) { + if (!node) + return null; + if (isClassFunction(node)) + return node; + return getEnclosingMethod(node.parent); + } + function isInAnyWayGeneric(node) { + return isGenericFunction(node) || hasGenericParent(node); + } + function hasGenericParent(node) { + var par = getEnclosingFunction(node); + if (par) + return isGenericFunction(par) || hasGenericParent(par); + return false; + } + function getEnclosingFunction(node0) { + var node = node0; + while (true) { + node = node.parent; + if (!node) + userError(9229, lf("cannot determine parent of {0}", stringKind(node0))); + switch (node.kind) { + case pxtc.SK.MethodDeclaration: + case pxtc.SK.Constructor: + case pxtc.SK.GetAccessor: + case pxtc.SK.SetAccessor: + case pxtc.SK.FunctionDeclaration: + case pxtc.SK.ArrowFunction: + case pxtc.SK.FunctionExpression: + return node; + case pxtc.SK.SourceFile: + return null; + } + } + } + function isGlobalVar(d) { + if (!d) + return false; + return (d.kind == pxtc.SK.VariableDeclaration && !getEnclosingFunction(d)) || + (d.kind == pxtc.SK.PropertyDeclaration && isStatic(d)); + } + function isLocalVar(d) { + return d.kind == pxtc.SK.VariableDeclaration && !isGlobalVar(d); + } + function isParameter(d) { + return d.kind == pxtc.SK.Parameter; + } + function isTopLevelFunctionDecl(decl) { + return (decl.kind == pxtc.SK.FunctionDeclaration && !getEnclosingFunction(decl)) || + isClassFunction(decl); + } + function isSideEffectfulInitializer(init) { + if (!init) + return false; + if (isStringLiteral(init)) + return false; + switch (init.kind) { + case pxtc.SK.NullKeyword: + case pxtc.SK.NumericLiteral: + case pxtc.SK.TrueKeyword: + case pxtc.SK.FalseKeyword: + return false; + default: + return true; + } + } + var numberAttributes = ["weight", "imageLiteral"]; + var lf = pxtc.assembler.lf; + var checker; + var lastSecondaryError; + var lastSecondaryErrorCode = 0; + var inCatchErrors = 0; + var typeBindings = []; + function getComments(node) { + if (node.kind == pxtc.SK.VariableDeclaration) + node = node.parent.parent; // we need variable stmt + var cmtCore = function (node) { + var src = ts.getSourceFileOfNode(node); + var doc = ts.getLeadingCommentRangesOfNodeFromText(node, src.text); + if (!doc) + return ""; + var cmt = doc.map(function (r) { return src.text.slice(r.pos, r.end); }).join("\n"); + return cmt; + }; + if (node.symbol && node.symbol.declarations.length > 1) { + return node.symbol.declarations.map(cmtCore).join("\n"); + } + else { + return cmtCore(node); + } + } + pxtc.getComments = getComments; + function parseCommentString(cmt) { + var res = { + paramDefl: {}, + callingConvention: pxtc.ir.CallingConvention.Plain, + _source: cmt + }; + var didSomething = true; + while (didSomething) { + didSomething = false; + cmt = cmt.replace(/\/\/%[ \t]*([\w\.]+)(=(("[^"\n]+")|'([^'\n]+)'|([^\s]*)))?/, function (f, n, d0, d1, v0, v1, v2) { + var v = v0 ? JSON.parse(v0) : (d0 ? (v0 || v1 || v2) : "true"); + if (pxtc.U.endsWith(n, ".defl")) { + res.paramDefl[n.slice(0, n.length - 5)] = v; + } + else if (pxtc.U.endsWith(n, ".min")) { + if (!res.paramMin) + res.paramMin = {}; + res.paramMin[n.slice(0, n.length - 4)] = v; + } + else if (pxtc.U.endsWith(n, ".max")) { + if (!res.paramMax) + res.paramMax = {}; + res.paramMax[n.slice(0, n.length - 4)] = v; + } + else if (pxtc.U.startsWith(n, "blockFieldEditorParams")) { + if (!res.blockFieldEditorParams) + res.blockFieldEditorParams = {}; + res.blockFieldEditorParams[n.slice(23, n.length)] = v; + } + else { + res[n] = v; + } + didSomething = true; + return "//% "; + }); + } + for (var _i = 0, numberAttributes_1 = numberAttributes; _i < numberAttributes_1.length; _i++) { + var n = numberAttributes_1[_i]; + if (typeof res[n] == "string") + res[n] = parseInt(res[n]); + } + if (res.trackArgs) { + res.trackArgs = res.trackArgs.split(/[ ,]+/).map(function (s) { return parseInt(s) || 0; }); + } + res.paramHelp = {}; + res.jsDoc = ""; + cmt = cmt.replace(/\/\*\*([^]*?)\*\//g, function (full, doccmt) { + doccmt = doccmt.replace(/\n\s*(\*\s*)?/g, "\n"); + doccmt = doccmt.replace(/^\s*@param\s+(\w+)\s+(.*)$/mg, function (full, name, desc) { + res.paramHelp[name] = desc; + return ""; + }); + res.jsDoc += doccmt; + return ""; + }); + res.jsDoc = res.jsDoc.trim(); + if (res.async) + res.callingConvention = pxtc.ir.CallingConvention.Async; + if (res.promise) + res.callingConvention = pxtc.ir.CallingConvention.Promise; + if (res.subcategories) { + try { + res.subcategories = JSON.parse(res.subcategories); + } + catch (e) { + res.subcategories = undefined; + } + } + return res; + } + pxtc.parseCommentString = parseCommentString; + function parseCommentsOnSymbol(symbol) { + var cmts = ""; + for (var _i = 0, _a = symbol.declarations; _i < _a.length; _i++) { + var decl = _a[_i]; + cmts += getComments(decl); + } + return parseCommentString(cmts); + } + pxtc.parseCommentsOnSymbol = parseCommentsOnSymbol; + function parseComments(node0) { + if (!node0 || node0.isBogusFunction) + return parseCommentString(""); + var node = node0; + var cached = node.pxtCommentAttrs; + if (cached) + return cached; + var res = parseCommentString(getComments(node)); + res._name = getName(node); + node.pxtCommentAttrs = res; + return res; + } + pxtc.parseComments = parseComments; + function getName(node) { + if (!node.name || node.name.kind != pxtc.SK.Identifier) + return "???"; + return node.name.text; + } + pxtc.getName = getName; + function isArrayType(t) { + return (t.flags & ts.TypeFlags.Reference) && t.symbol.name == "Array"; + } + function isInterfaceType(t) { + return t.flags & ts.TypeFlags.Interface; + } + function genericRoot(t) { + if (t.flags & ts.TypeFlags.Reference) { + var r = t; + if (r.typeArguments && r.typeArguments.length) + return r.target; + } + return null; + } + function isClassType(t) { + // check if we like the class? + return !!(t.flags & ts.TypeFlags.Class) || !!(t.flags & ts.TypeFlags.ThisType); + } + function isPossiblyGenericClassType(t) { + var g = genericRoot(t); + if (g) + return isClassType(g); + return isClassType(t); + } + function arrayElementType(t) { + if (isArrayType(t)) + return checkType(t.typeArguments[0]); + return null; + } + function deconstructFunctionType(t) { + var sigs = checker.getSignaturesOfType(t, ts.SignatureKind.Call); + if (sigs && sigs.length == 1) + return sigs[0]; + return null; + } + function lookupTypeParameter(t) { + if (!(t.flags & ts.TypeFlags.TypeParameter)) + return null; + for (var i = typeBindings.length - 1; i >= 0; --i) + if (typeBindings[i].tp == t) + return typeBindings[i]; + return null; + } + function checkType(t) { + var ok = ts.TypeFlags.String | ts.TypeFlags.Number | ts.TypeFlags.Boolean | + ts.TypeFlags.Void | ts.TypeFlags.Enum | ts.TypeFlags.Null | ts.TypeFlags.Undefined; + if ((t.flags & ok) == 0) { + if (isArrayType(t)) + return t; + if (isClassType(t)) + return t; + if (isInterfaceType(t)) + return t; + if (deconstructFunctionType(t)) + return t; + if (lookupTypeParameter(t)) + return t; + var g = genericRoot(t); + if (g) { + checkType(g); + t.typeArguments.forEach(checkType); + return t; + } + userError(9201, lf("unsupported type: {0} 0x{1}", checker.typeToString(t), t.flags.toString(16)), true); + } + return t; + } + function typeOf(node) { + var r; + if (node.typeOverride) + return node.typeOverride; + if (ts.isExpression(node)) + r = checker.getContextualType(node); + if (!r) { + try { + r = checker.getTypeAtLocation(node); + } + catch (e) { + userError(9203, lf("Unknown type for expression")); + } + } + return checkType(r); + } + function isGenericFunction(fun) { + return getTypeParameters(fun).length > 0; + } + function getTypeParameters(fun) { + // TODO add check for methods of generic classes + if (fun.typeParameters && fun.typeParameters.length) + return fun.typeParameters; + if (isClassFunction(fun) || fun.kind == pxtc.SK.MethodSignature) { + if (fun.parent.kind == pxtc.SK.ClassDeclaration || fun.parent.kind == pxtc.SK.InterfaceDeclaration) { + var tp = fun.parent.typeParameters; + return tp || []; + } + } + return []; + } + function funcHasReturn(fun) { + var sig = checker.getSignatureFromDeclaration(fun); + var rettp = checker.getReturnTypeOfSignature(sig); + return !(rettp.flags & ts.TypeFlags.Void); + } + function getDeclName(node) { + var text = node && node.name ? node.name.text : null; + if (!text && node.kind == pxtc.SK.Constructor) + text = "constructor"; + if (node && node.parent && node.parent.kind == pxtc.SK.ClassDeclaration) + text = node.parent.name.text + "." + text; + text = text || "inline"; + return text; + } + pxtc.getDeclName = getDeclName; + function getTypeBindings(t) { + var g = genericRoot(t); + if (!g) + return []; + return getTypeBindingsCore(g.typeParameters, t.typeArguments); + } + function getTypeBindingsCore(typeParameters, args) { + pxtc.U.assert(typeParameters.length == args.length); + return typeParameters.map(function (tp, i) { return ({ tp: tp, isRef: isRefType(args[i]) }); }); + } + function getEnclosingTypeBindings(func) { + var bindings = []; + addEnclosingTypeBindings(bindings, func); + return bindings; + } + function addEnclosingTypeBindings(bindings, func) { + if (!func) + return; + for (var outer = getEnclosingFunction(func); outer; outer = getEnclosingFunction(outer)) { + var _loop_4 = function(tp) { + var res = checker.getTypeAtLocation(tp); + var binding = typeBindings.filter(function (b) { return b.tp == res; })[0]; + if (!binding) { + pxtc.U.oops("cannot find binding for: " + checker.typeToString(res)); + } + bindings.push(binding); + }; + for (var _i = 0, _a = getTypeParameters(outer); _i < _a.length; _i++) { + var tp = _a[_i]; + _loop_4(tp); + } + } + } + function refMask(types) { + if (!types || !types.length) + return ""; + return "_" + types.map(function (t) { return t.isRef ? "R" : "P"; }).join(""); + } + function getFunctionLabel(node, bindings) { + var text = getDeclName(node); + return "_" + text.replace(/[^\w]+/g, "_") + "_" + getNodeId(node) + refMask(bindings); + } + pxtc.getFunctionLabel = getFunctionLabel; + function mkBogusMethod(info, name) { + var rootFunction = { + kind: pxtc.SK.MethodDeclaration, + parameters: [], + name: { + kind: pxtc.SK.Identifier, + text: name, + pos: 0, + end: 0 + }, + body: { + kind: pxtc.SK.Block, + statements: [] + }, + parent: info.decl, + pos: 0, + end: 0, + isBogusFunction: true, + }; + return rootFunction; + } + function compileBinary(program, host, opts, res) { + var diagnostics = ts.createDiagnosticCollection(); + checker = program.getTypeChecker(); + var classInfos = {}; + var usedDecls = {}; + var usedWorkList = []; + var variableStatus = {}; + var functionInfo = {}; + var irCachesToClear = []; + var ifaceMembers = {}; + var nextIfaceMemberId = 0; + var autoCreateFunctions = {}; + lastNodeId = 0; + currNodeWave++; + if (opts.target.isNative) { + if (!opts.hexinfo) { + // we may have not been able to compile or download the hex file + return { + diagnostics: [{ + file: program.getSourceFiles()[0], + start: 0, + length: 0, + category: ts.DiagnosticCategory.Error, + code: 9043, + messageText: lf("The hex file is not available, please connect to internet and try again.") + }], + emitSkipped: true + }; + } + pxtc.hex.setupFor(opts.target, opts.extinfo || emptyExtInfo(), opts.hexinfo); + pxtc.hex.setupInlineAssembly(opts); + opts.breakpoints = true; + } + var bin = new Binary(); + var proc; + bin.res = res; + bin.options = opts; + bin.target = opts.target; + function reset() { + bin.reset(); + proc = null; + res.breakpoints = [{ + id: 0, + isDebuggerStmt: false, + fileName: "bogus", + start: 0, + length: 0, + line: 0, + column: 0, + successors: null + }]; + } + if (opts.computeUsedSymbols) { + res.usedSymbols = {}; + res.usedArguments = {}; + } + var allStmts = opts.forceEmit && res.diagnostics.length > 0 + ? [] // TODO: panic + : pxtc.Util.concat(program.getSourceFiles().map(function (f) { return f.statements; })); + var src = program.getSourceFiles()[0]; + var rootFunction = { + kind: pxtc.SK.FunctionDeclaration, + parameters: [], + name: { + text: "
", + pos: 0, + end: 0 + }, + body: { + kind: pxtc.SK.Block, + statements: allStmts + }, + parent: src, + pos: 0, + end: 0, + isRootFunction: true, + isBogusFunction: true + }; + markUsed(rootFunction); + usedWorkList = []; + reset(); + emit(rootFunction); + layOutGlobals(); + emitVTables(); + if (diagnostics.getModificationCount() == 0) { + reset(); + bin.finalPass = true; + emit(rootFunction); + catchErrors(rootFunction, finalEmit); + } + return { + diagnostics: diagnostics.getDiagnostics(), + emitSkipped: !!opts.noEmit + }; + function error(node, code, msg, arg0, arg1, arg2) { + diagnostics.add(ts.createDiagnosticForNode(node, { + code: code, + message: msg, + key: msg.replace(/^[a-zA-Z]+/g, "_"), + category: ts.DiagnosticCategory.Error, + }, arg0, arg1, arg2)); + } + function unhandled(n, info, code) { + if (code === void 0) { code = 9202; } + // If we have info then we may as well present that instead + if (info) { + return userError(code, info); + } + if (!n) { + userError(code, lf("Sorry, this language feature isn't supported")); + } + var syntax = stringKind(n); + var maybeSupportInFuture = false; + var alternative = null; + switch (n.kind) { + case ts.SyntaxKind.ForInStatement: + syntax = lf("for in loops"); + break; + case ts.SyntaxKind.ForOfStatement: + syntax = lf("for of loops"); + maybeSupportInFuture = true; + break; + case ts.SyntaxKind.PropertyAccessExpression: + syntax = lf("property access"); + break; + case ts.SyntaxKind.DeleteExpression: + syntax = lf("delete"); + break; + case ts.SyntaxKind.GetAccessor: + syntax = lf("get accessor method"); + maybeSupportInFuture = true; + break; + case ts.SyntaxKind.SetAccessor: + syntax = lf("set accessor method"); + maybeSupportInFuture = true; + break; + case ts.SyntaxKind.TaggedTemplateExpression: + syntax = lf("tagged templates"); + break; + case ts.SyntaxKind.TypeOfExpression: + syntax = lf("typeof"); + break; + case ts.SyntaxKind.SpreadElementExpression: + syntax = lf("spread"); + break; + case ts.SyntaxKind.TryStatement: + case ts.SyntaxKind.CatchClause: + case ts.SyntaxKind.FinallyKeyword: + case ts.SyntaxKind.ThrowStatement: + syntax = lf("throwing and catching exceptions"); + break; + case ts.SyntaxKind.ClassExpression: + syntax = lf("class expressions"); + alternative = lf("declare a class as class C {} not let C = class {}"); + break; + default: + break; + } + var msg = ""; + if (maybeSupportInFuture) { + msg = lf("{0} not currently supported", syntax); + } + else { + msg = lf("{0} not supported", syntax); + } + if (alternative) { + msg += " - " + alternative; + } + return userError(code, msg); + } + function nodeKey(f) { + return getNodeId(f) + ""; + } + function getFunctionInfo(f) { + var key = nodeKey(f); + var info = functionInfo[key]; + if (!info) + functionInfo[key] = info = { + decl: f, + capturedVars: [] + }; + return info; + } + function getVarInfo(v) { + var key = getNodeId(v) + ""; + var info = variableStatus[key]; + if (!info) + variableStatus[key] = info = {}; + return info; + } + function recordUse(v, written) { + if (written === void 0) { written = false; } + var info = getVarInfo(v); + if (written) + info.written = true; + var varParent = getEnclosingFunction(v); + if (varParent == null || varParent == proc.action) { + } + else { + var curr = proc.action; + while (curr && curr != varParent) { + var info2 = getFunctionInfo(curr); + if (info2.capturedVars.indexOf(v) < 0) + info2.capturedVars.push(v); + curr = getEnclosingFunction(curr); + } + info.captured = true; + } + } + function scope(f) { + var prevProc = proc; + var prevBindings = typeBindings.slice(); + try { + f(); + } + finally { + proc = prevProc; + typeBindings = prevBindings; + } + } + function getIfaceMemberId(name) { + var v = pxtc.U.lookup(ifaceMembers, name); + if (v != null) + return v; + for (var _i = 0, _a = bin.usedClassInfos; _i < _a.length; _i++) { + var inf = _a[_i]; + for (var _b = 0, _c = inf.methods; _b < _c.length; _b++) { + var m = _c[_b]; + if (getName(m) == name) + markFunctionUsed(m, inf.bindings); + } + } + v = ifaceMembers[name] = nextIfaceMemberId++; + return v; + } + function finalEmit() { + if (diagnostics.getModificationCount() || opts.noEmit || !host) + return; + bin.writeFile = function (fn, data) { + return host.writeFile(fn, data, false, null); + }; + if (opts.target.isNative) { + if (opts.extinfo.yotta) + bin.writeFile("yotta.json", JSON.stringify(opts.extinfo.yotta, null, 2)); + if (opts.extinfo.platformio) + bin.writeFile("platformio.json", JSON.stringify(opts.extinfo.platformio, null, 2)); + pxtc.processorEmit(bin, opts, res); + } + else { + pxtc.jsEmit(bin); + } + } + function typeCheckVar(decl) { + if (!decl) { + userError(9203, lf("variable has unknown type")); + } + if (typeOf(decl).flags & ts.TypeFlags.Void) { + userError(9203, lf("void-typed variables not supported")); + } + } + function lookupCell(decl) { + if (isGlobalVar(decl)) { + markUsed(decl); + typeCheckVar(decl); + var ex = bin.globals.filter(function (l) { return l.def == decl; })[0]; + if (!ex) { + ex = new pxtc.ir.Cell(null, decl, getVarInfo(decl)); + bin.globals.push(ex); + } + return ex; + } + else { + var res_2 = proc.localIndex(decl); + if (!res_2) { + if (bin.finalPass) + userError(9204, lf("cannot locate identifer")); + else + res_2 = proc.mkLocal(decl, getVarInfo(decl)); + } + return res_2; + } + } + function getBaseClassInfo(node) { + if (node.heritageClauses) + for (var _i = 0, _a = node.heritageClauses; _i < _a.length; _i++) { + var h = _a[_i]; + switch (h.token) { + case pxtc.SK.ExtendsKeyword: + if (!h.types || h.types.length != 1) + throw userError(9228, lf("invalid extends clause")); + var tp = typeOf(h.types[0]); + if (isClassType(tp)) { + return getClassInfo(tp); + } + else { + throw userError(9228, lf("cannot inherit from this type")); + } + // ignore it - implementation of interfaces is implicit + case pxtc.SK.ImplementsKeyword: + break; + default: + throw userError(9228, lf("invalid heritage clause")); + } + } + return null; + } + function getVTable(inf) { + pxtc.assert(inf.isUsed); + if (inf.vtable) + return inf.vtable; + var tbl = inf.baseClassInfo ? getVTable(inf.baseClassInfo).slice(0) : []; + scope(function () { + pxtc.U.pushRange(typeBindings, inf.bindings); + for (var _i = 0, _a = inf.methods; _i < _a.length; _i++) { + var m = _a[_i]; + var minf = getFunctionInfo(m); + if (minf.virtualRoot) { + var key = classFunctionKey(m); + var done = false; + var proc_1 = lookupProc(m, inf.bindings); + for (var i = 0; i < tbl.length; ++i) { + if (classFunctionKey(tbl[i].action) == key) { + tbl[i] = proc_1; + minf.virtualIndex = i; + done = true; + } + } + if (!done) { + minf.virtualIndex = tbl.length; + tbl.push(proc_1); + } + } + } + inf.vtable = tbl; + inf.itable = []; + inf.itableInfo = []; + var storeIface = function (name, proc) { + var id = getIfaceMemberId(name); + inf.itable[id] = proc; + inf.itableInfo[id] = name; + pxtc.assert(!!proc); + }; + var emitSynthetic = function (fn, fill) { + var proc = lookupProc(fn, inf.bindings); + if (!proc) { + scope(function () { + emitFuncCore(fn, inf.bindings); + proc = lookupProc(fn, inf.bindings); + proc.body = []; + fill(proc); + }); + } + pxtc.assert(!!proc); + storeIface(getName(fn), proc); + }; + var _loop_5 = function(fld0) { + var fld = fld0; + var fname = getName(fld); + var setname = "set/" + fname; + if (isIfaceMemberUsed(fname)) { + if (!fld.irGetter) + fld.irGetter = mkBogusMethod(inf, fname); + var idx_2 = fieldIndexCore(inf, fld, typeOf(fld)); + emitSynthetic(fld.irGetter, function (proc) { + // we skip final decr, but the ldfld call will do its own decr + var access = pxtc.ir.op(EK.FieldAccess, [proc.args[0].loadCore()], idx_2); + emitInJmpValue(access); + }); + } + if (isIfaceMemberUsed(setname)) { + if (!fld.irSetter) { + fld.irSetter = mkBogusMethod(inf, setname); + fld.irSetter.parameters.unshift({ + kind: pxtc.SK.Parameter, + name: { text: "v" }, + parent: fld.irSetter, + typeOverride: typeOf(fld) + }); + } + var idx_3 = fieldIndexCore(inf, fld, typeOf(fld)); + emitSynthetic(fld.irSetter, function (proc) { + // decrs work out + var access = pxtc.ir.op(EK.FieldAccess, [proc.args[0].loadCore()], idx_3); + proc.emitExpr(pxtc.ir.op(EK.Store, [access, proc.args[1].loadCore()])); + }); + } + }; + for (var _b = 0, _c = inf.allfields; _b < _c.length; _b++) { + var fld0 = _c[_b]; + _loop_5(fld0); + } + for (var curr = inf; curr; curr = curr.baseClassInfo) { + for (var _d = 0, _e = curr.methods; _d < _e.length; _d++) { + var m = _e[_d]; + var n = getName(m); + if (isIfaceMemberUsed(n)) { + var id = getIfaceMemberId(n); + if (!inf.itable[id]) { + storeIface(n, lookupProc(m, curr.bindings)); + } + } + } + } + for (var i = 0; i < inf.itable.length; ++i) + if (!inf.itable[i]) + inf.itable[i] = null; // avoid undefined + for (var _f = 0, _g = Object.keys(ifaceMembers); _f < _g.length; _f++) { + var k = _g[_f]; + inf.itableInfo[ifaceMembers[k]] = k; + } + }); + return inf.vtable; + } + function getClassInfo(t, decl, bindings) { + if (decl === void 0) { decl = null; } + if (bindings === void 0) { bindings = null; } + if (!decl) + decl = t.symbol.valueDeclaration; + if (!bindings) + bindings = t + ? getTypeBindings(t) + : decl.typeParameters + ? decl.typeParameters.map(function (p) { return ({ isRef: true, tp: checker.getTypeAtLocation(p) }); }) + : []; + var id = "C" + getNodeId(decl) + refMask(bindings); + var info = classInfos[id]; + if (!info) { + var reffields_1 = []; + var primitivefields_1 = []; + info = { + id: id, + numRefFields: 0, + allfields: [], + attrs: parseComments(decl), + decl: decl, + refmask: null, + baseClassInfo: null, + methods: [], + bindings: bindings + }; + if (info.attrs.autoCreate) + autoCreateFunctions[info.attrs.autoCreate] = true; + classInfos[id] = info; + // only do it after storing our in case we run into cycles (which should be errors) + info.baseClassInfo = getBaseClassInfo(decl); + scope(function () { + pxtc.U.pushRange(typeBindings, bindings); + for (var _i = 0, _a = decl.members; _i < _a.length; _i++) { + var mem = _a[_i]; + if (mem.kind == pxtc.SK.PropertyDeclaration) { + var pdecl = mem; + if (isRefType(typeOf(pdecl))) + reffields_1.push(pdecl); + else + primitivefields_1.push(pdecl); + info.allfields.push(pdecl); + } + else if (isClassFunction(mem) && mem.kind != pxtc.SK.Constructor) { + var minf = getFunctionInfo(mem); + minf.parentClassInfo = info; + info.methods.push(mem); + } + } + if (info.baseClassInfo) { + info.allfields = info.baseClassInfo.allfields.concat(info.allfields); + info.numRefFields = -1; + var nameMap = {}; + for (var curr = info.baseClassInfo; !!curr; curr = curr.baseClassInfo) { + for (var _b = 0, _c = curr.methods; _b < _c.length; _b++) { + var m = _c[_b]; + nameMap[classFunctionKey(m)] = m; + } + } + for (var _d = 0, _e = info.methods; _d < _e.length; _d++) { + var m = _e[_d]; + var prev = pxtc.U.lookup(nameMap, classFunctionKey(m)); + if (prev) { + var minf = getFunctionInfo(m); + var pinf = getFunctionInfo(prev); + if (prev.parameters.length != m.parameters.length) + error(m, 9255, lf("the overriding method is currently required to have the same number of arguments as the base one")); + minf.virtualRoot = pinf; + if (!pinf.virtualRoot) + pinf.virtualRoot = pinf; + pxtc.assert(pinf.virtualRoot == pinf); + if (!pinf.virtualInstances) + pinf.virtualInstances = []; + pinf.virtualInstances.push(minf); + } + } + } + else { + info.allfields = reffields_1.concat(primitivefields_1); + info.numRefFields = reffields_1.length; + } + info.refmask = info.allfields.map(function (f) { return isRefType(typeOf(f)); }); + }); + } + return info; + } + function emitImageLiteral(s) { + if (!s) + s = "0 0 0 0 0\n0 0 0 0 0\n0 0 0 0 0\n0 0 0 0 0\n0 0 0 0 0\n"; + var x = 0; + var w = 0; + var h = 0; + var lit = ""; + s += "\n"; + for (var i = 0; i < s.length; ++i) { + switch (s[i]) { + case ".": + case "_": + case "0": + lit += "0,"; + x++; + break; + case "#": + case "*": + case "1": + lit += "1,"; + x++; + break; + case "\t": + case "\r": + case " ": break; + case "\n": + if (x) { + if (w == 0) + w = x; + else if (x != w) + userError(9205, lf("lines in image literal have to have the same width (got {0} and then {1} pixels)", w, x)); + x = 0; + h++; + } + break; + default: + userError(9206, lf("Only 0 . _ (off) and 1 # * (on) are allowed in image literals")); + } + } + var lbl = "_img" + bin.lblNo++; + if (lit.length % 4 != 0) + lit += "42"; // pad + bin.otherLiterals.push("\n.balign 4\n" + lbl + ": .short 0xffff\n .short " + w + ", " + h + "\n .byte " + lit + "\n"); + var jsLit = "new pxsim.Image(" + w + ", [" + lit + "])"; + return { + kind: pxtc.SK.NumericLiteral, + imageLiteral: lbl, + jsLit: jsLit + }; + } + function mkSyntheticInt(v) { + return { + kind: pxtc.SK.NumericLiteral, + text: v.toString() + }; + } + function emitLocalLoad(decl) { + if (isGlobalVar(decl)) { + var attrs = parseComments(decl); + if (attrs.shim) + return emitShim(decl, decl, []); + } + var l = lookupCell(decl); + recordUse(decl); + var r = l.load(); + //console.log("LOADLOC", l.toString(), r.toString()) + return r; + } + function emitFunLiteral(f) { + var attrs = parseComments(f); + if (attrs.shim) + userError(9207, lf("built-in functions cannot be yet used as values; did you forget ()?")); + if (isGenericFunction(f)) + userError(9232, lf("generic functions cannot be yet used as values; did you forget ()?")); + var info = getFunctionInfo(f); + if (info.location) { + return info.location.load(); + } + else { + pxtc.assert(!bin.finalPass || info.capturedVars.length == 0); + return emitFunLitCore(f); + } + } + function emitIdentifier(node) { + var decl = getDecl(node); + if (decl && (decl.kind == pxtc.SK.VariableDeclaration || decl.kind == pxtc.SK.Parameter || decl.kind === pxtc.SK.BindingElement)) { + return emitLocalLoad(decl); + } + else if (decl && decl.kind == pxtc.SK.FunctionDeclaration) { + return emitFunLiteral(decl); + } + else { + if (node.text == "undefined") + return pxtc.ir.numlit(null); + else + throw unhandled(node, lf("Unknown or undeclared identifier"), 9235); + } + } + function emitParameter(node) { } + function emitAccessor(node) { + emitFunctionDeclaration(node); + } + function emitThis(node) { + var meth = getEnclosingMethod(node); + if (!meth) + userError(9208, lf("'this' used outside of a method")); + var inf = getFunctionInfo(meth); + if (!inf.thisParameter) { + //console.log("get this param,", meth.kind, nodeKey(meth)) + //console.log("GET", meth) + pxtc.oops("no this"); + } + return emitLocalLoad(inf.thisParameter); + } + function emitSuper(node) { } + function emitStringLiteral(str) { + if (str == "") { + return pxtc.ir.rtcall("String_::mkEmpty", []); + } + else { + var lbl = bin.emitString(str); + var ptr = pxtc.ir.ptrlit(lbl + "meta", JSON.stringify(str)); + return pxtc.ir.rtcall("pxt::ptrOfLiteral", [ptr]); + } + } + function emitLiteral(node) { + if (node.kind == pxtc.SK.NumericLiteral) { + if (node.imageLiteral) { + return pxtc.ir.ptrlit(node.imageLiteral, node.jsLit); + } + else { + var parsed = parseFloat(node.text); + if (!opts.target.floatingPoint) { + if (Math.floor(parsed) !== parsed) { + userError(9257, lf("Decimal numbers are not supported")); + } + else if (parsed << 0 !== parsed) { + userError(9258, lf("Number is either too big or too small")); + } + } + return pxtc.ir.numlit(parsed); + } + } + else if (isStringLiteral(node)) { + return emitStringLiteral(node.text); + } + else { + throw pxtc.oops(); + } + } + function emitTemplateExpression(node) { + var concat = function (a, b) { + return isEmptyStringLiteral(b) ? a : + pxtc.ir.rtcallMask("String_::concat", 3, pxtc.ir.CallingConvention.Plain, [ + a, + emitAsString(b) + ]); + }; + // TODO could optimize for the case where node.head is empty + var expr = emitAsString(node.head); + for (var _i = 0, _a = node.templateSpans; _i < _a.length; _i++) { + var span = _a[_i]; + expr = concat(expr, span.expression); + expr = concat(expr, span.literal); + } + return expr; + } + function emitTemplateSpan(node) { } + function emitJsxElement(node) { } + function emitJsxSelfClosingElement(node) { } + function emitJsxText(node) { } + function emitJsxExpression(node) { } + function emitQualifiedName(node) { } + function emitObjectBindingPattern(node) { } + function emitArrayBindingPattern(node) { } + function emitArrayLiteral(node) { + var eltT = arrayElementType(typeOf(node)); + var isRef = isRefType(eltT); + var flag = 0; + if (eltT.flags & ts.TypeFlags.String) + flag = 3; + else if (isRef) + flag = 1; + var coll = pxtc.ir.shared(pxtc.ir.rtcall("Array_::mk", [pxtc.ir.numlit(flag)])); + for (var _i = 0, _a = node.elements; _i < _a.length; _i++) { + var elt = _a[_i]; + var e = pxtc.ir.shared(emitExpr(elt)); + proc.emitExpr(pxtc.ir.rtcall("Array_::push", [coll, e])); + if (isRef) { + proc.emitExpr(pxtc.ir.op(EK.Decr, [e])); + } + } + return coll; + } + function emitObjectLiteral(node) { + var expr = pxtc.ir.shared(pxtc.ir.rtcall("pxtrt::mkMap", [])); + node.properties.forEach(function (p) { + var refSuff = ""; + if (isRefCountedExpr(p.initializer)) + refSuff = "Ref"; + proc.emitExpr(pxtc.ir.rtcall("pxtrt::mapSet" + refSuff, [ + pxtc.ir.op(EK.Incr, [expr]), + pxtc.ir.numlit(getIfaceMemberId(p.name.getText())), + emitExpr(p.initializer) + ])); + }); + return expr; + } + function emitPropertyAssignment(node) { + if (isStatic(node)) { + emitVariableDeclaration(node); + return; + } + if (node.initializer) + userError(9209, lf("class field initializers not supported")); + // do nothing + } + function emitShorthandPropertyAssignment(node) { } + function emitComputedPropertyName(node) { } + function emitPropertyAccess(node) { + var decl = getDecl(node); + if (decl.kind == pxtc.SK.GetAccessor) { + return emitCallCore(node, node, [], null); + } + var attrs = parseComments(decl); + var callInfo = { + decl: decl, + qName: pxtc.getFullName(checker, decl.symbol), + attrs: attrs, + args: [], + isExpression: true + }; + node.callInfo = callInfo; + if (decl.kind == pxtc.SK.EnumMember) { + var ev = attrs.enumval; + if (!ev) { + var val = checker.getConstantValue(decl); + if (val == null) { + if (decl.initializer) + return emitExpr(decl.initializer); + userError(9210, lf("Cannot compute enum value")); + } + ev = val + ""; + } + if (/^[+-]?\d+$/.test(ev)) + return pxtc.ir.numlit(parseInt(ev)); + return pxtc.ir.rtcall(ev, []); + } + else if (decl.kind == pxtc.SK.PropertySignature) { + return emitCallCore(node, node, [], null, decl, node.expression); + } + else if (decl.kind == pxtc.SK.PropertyDeclaration) { + if (isStatic(decl)) { + return emitLocalLoad(decl); + } + var idx = fieldIndex(node); + callInfo.args.push(node.expression); + return pxtc.ir.op(EK.FieldAccess, [emitExpr(node.expression)], idx); + } + else if (isClassFunction(decl) || decl.kind == pxtc.SK.MethodSignature) { + throw userError(9211, lf("cannot use method as lambda; did you forget '()' ?")); + } + else if (decl.kind == pxtc.SK.FunctionDeclaration) { + return emitFunLiteral(decl); + } + else if (decl.kind == pxtc.SK.VariableDeclaration) { + return emitLocalLoad(decl); + } + else { + throw unhandled(node, lf("Unknown property access for {0}", stringKind(decl)), 9237); + } + } + function emitIndexedAccess(node, assign) { + if (assign === void 0) { assign = null; } + var t = typeOf(node.expression); + var indexer = null; + if (!assign && t.flags & ts.TypeFlags.String) + indexer = "String_::charAt"; + else if (isArrayType(t)) + indexer = assign ? "Array_::setAt" : "Array_::getAt"; + else if (isInterfaceType(t)) { + var attrs = parseCommentsOnSymbol(t.symbol); + indexer = assign ? attrs.indexerSet : attrs.indexerGet; + } + if (indexer) { + if (typeOf(node.argumentExpression).flags & ts.TypeFlags.NumberLike) { + var args = [node.expression, node.argumentExpression]; + return rtcallMask(indexer, args, pxtc.ir.CallingConvention.Plain, assign ? [assign] : []); + } + else { + throw unhandled(node, lf("non-numeric indexer on {0}", indexer), 9238); + } + } + else { + throw unhandled(node, lf("unsupported indexer"), 9239); + } + } + function isOnDemandDecl(decl) { + var res = (isGlobalVar(decl) && !isSideEffectfulInitializer(decl.initializer)) || + isTopLevelFunctionDecl(decl); + if (opts.testMode && res) { + if (!pxtc.U.startsWith(ts.getSourceFileOfNode(decl).fileName, "pxt_modules")) + return false; + } + return res; + } + function isUsed(decl) { + return !isOnDemandDecl(decl) || usedDecls.hasOwnProperty(nodeKey(decl)); + } + function markFunctionUsed(decl, bindings) { + if (!bindings || !bindings.length) + markUsed(decl); + else { + var info = getFunctionInfo(decl); + if (!info.usages) { + usedDecls[nodeKey(decl)] = decl; + info.usages = []; + info.prePassUsagesEmitted = 0; + if (opts.computeUsedSymbols && decl && decl.symbol) + res.usedSymbols[pxtc.getFullName(checker, decl.symbol)] = null; + } + var mask_1 = refMask(bindings); + if (!info.usages.some(function (u) { return refMask(u) == mask_1; })) { + info.usages.push(bindings); + usedWorkList.push(decl); + } + } + } + function markUsed(decl) { + if (opts.computeUsedSymbols && decl && decl.symbol) + res.usedSymbols[pxtc.getFullName(checker, decl.symbol)] = null; + if (decl && !isUsed(decl)) { + usedDecls[nodeKey(decl)] = decl; + usedWorkList.push(decl); + } + } + function getDecl(node) { + if (!node) + return null; + var sym = checker.getSymbolAtLocation(node); + var decl = sym ? sym.valueDeclaration : null; + markUsed(decl); + return decl; + } + function isRefCountedExpr(e) { + // we generate a fake NULL expression for default arguments + // we also generate a fake numeric literal for image literals + if (e.kind == pxtc.SK.NullKeyword || e.kind == pxtc.SK.NumericLiteral) + return !!e.isRefOverride; + // no point doing the incr/decr for these - they are statically allocated anyways + if (isStringLiteral(e)) + return false; + return isRefType(typeOf(e)); + } + function getMask(args) { + pxtc.assert(args.length <= 8); + var m = 0; + args.forEach(function (a, i) { + if (isRefCountedExpr(a)) + m |= (1 << i); + }); + return m; + } + function emitShim(decl, node, args) { + var attrs = parseComments(decl); + var hasRet = !(typeOf(node).flags & ts.TypeFlags.Void); + var nm = attrs.shim; + if (nm.indexOf('(') >= 0) { + var parse = /(.*)\((\d+)\)$/.exec(nm); + if (parse) { + nm = parse[1]; + args.push(mkSyntheticInt(parseInt(parse[2]))); + } + } + if (nm == "TD_NOOP") { + pxtc.assert(!hasRet); + return pxtc.ir.numlit(0); + } + if (nm == "TD_ID") { + pxtc.assert(args.length == 1); + return emitExpr(args[0]); + } + if (opts.target.isNative) { + pxtc.hex.validateShim(getDeclName(decl), nm, hasRet, args.length); + } + return rtcallMask(nm, args, attrs.callingConvention); + } + function isNumericLiteral(node) { + switch (node.kind) { + case pxtc.SK.NullKeyword: + case pxtc.SK.TrueKeyword: + case pxtc.SK.FalseKeyword: + case pxtc.SK.NumericLiteral: + return true; + default: + return false; + } + } + function addDefaultParameters(sig, args, attrs) { + if (!sig) + return; + var parms = sig.getParameters(); + if (parms.length > args.length) { + parms.slice(args.length).forEach(function (p) { + if (p.valueDeclaration && + p.valueDeclaration.kind == pxtc.SK.Parameter) { + var prm = p.valueDeclaration; + if (!prm.initializer) { + var defl = attrs.paramDefl[getName(prm)]; + args.push(irToNode(defl ? pxtc.ir.numlit(parseInt(defl)) : null)); + } + else { + if (!isNumericLiteral(prm.initializer)) { + userError(9212, lf("only numbers, null, true and false supported as default arguments")); + } + args.push(prm.initializer); + } + } + else { + userError(9213, lf("unsupported default argument (shouldn't happen)")); + } + }); + } + if (attrs.imageLiteral) { + if (!isStringLiteral(args[0])) { + userError(9214, lf("Only image literals (string literals) supported here; {0}", stringKind(args[0]))); + } + args[0] = emitImageLiteral(args[0].text); + } + } + function emitCallExpression(node) { + var sig = checker.getResolvedSignature(node); + return emitCallCore(node, node.expression, node.arguments, sig); + } + function emitCallCore(node, funcExpr, callArgs, sig, decl, recv) { + if (decl === void 0) { decl = null; } + if (recv === void 0) { recv = null; } + if (!decl) + decl = getDecl(funcExpr); + var isMethod = false; + if (decl) + switch (decl.kind) { + case pxtc.SK.PropertySignature: + case pxtc.SK.MethodDeclaration: + case pxtc.SK.MethodSignature: + case pxtc.SK.GetAccessor: + case pxtc.SK.SetAccessor: + isMethod = true; + break; + case pxtc.SK.ModuleDeclaration: + case pxtc.SK.FunctionDeclaration: + // has special handling + break; + default: + decl = null; // no special handling + break; + } + var attrs = parseComments(decl); + var hasRet = !(typeOf(node).flags & ts.TypeFlags.Void); + var args = callArgs.slice(0); + var callInfo = { + decl: decl, + qName: decl ? pxtc.getFullName(checker, decl.symbol) : "?", + attrs: attrs, + args: args.slice(0), + isExpression: hasRet + }; + node.callInfo = callInfo; + if (callInfo.args.length == 0 && pxtc.U.lookup(autoCreateFunctions, callInfo.qName)) + callInfo.isAutoCreate = true; + var bindings = []; + if (sig) { + var trg = sig.target; + var typeParams = sig.typeParameters || (trg ? trg.typeParameters : null) || []; + bindings = getTypeBindingsCore(typeParams, typeParams.map(function (x) { return sig.mapper(x); })); + } + var isSelfGeneric = bindings.length > 0; + addEnclosingTypeBindings(bindings, decl); + if (res.usedArguments && attrs.trackArgs) { + var tracked = attrs.trackArgs.map(function (n) { return args[n]; }).map(function (e) { + var d = getDecl(e); + if (d && d.kind == pxtc.SK.EnumMember) + return pxtc.getFullName(checker, d.symbol); + else + return "*"; + }).join(","); + var fn = pxtc.getFullName(checker, decl.symbol); + var lst = res.usedArguments[fn]; + if (!lst) { + lst = res.usedArguments[fn] = []; + } + if (lst.indexOf(tracked) < 0) + lst.push(tracked); + } + function emitPlain() { + return mkProcCall(decl, args.map(emitExpr), bindings); + } + addDefaultParameters(sig, args, attrs); + if (decl && decl.kind == pxtc.SK.FunctionDeclaration) { + var info = getFunctionInfo(decl); + if (!info.location) { + if (attrs.shim && !hasShimDummy(decl)) { + return emitShim(decl, node, args); + } + markFunctionUsed(decl, bindings); + return emitPlain(); + } + } + if (funcExpr.kind == pxtc.SK.SuperKeyword) { + var baseCtor = proc.classInfo.baseClassInfo.ctor; + pxtc.assert(!bin.finalPass || !!baseCtor); + var ctorArgs = args.map(emitExpr); + ctorArgs.unshift(emitThis(funcExpr)); + return mkProcCallCore(baseCtor, null, ctorArgs); + } + if (isMethod) { + var isSuper = false; + if (isStatic(decl)) { + } + else if (recv || funcExpr.kind == pxtc.SK.PropertyAccessExpression) { + if (!recv) + recv = funcExpr.expression; + if (recv.kind == pxtc.SK.SuperKeyword) { + isSuper = true; + } + args.unshift(recv); + callInfo.args.unshift(recv); + bindings = getTypeBindings(typeOf(recv)).concat(bindings); + } + else + unhandled(node, lf("strange method call"), 9241); + var info = getFunctionInfo(decl); + if (info.virtualRoot) + info = info.virtualRoot; + if (!info.isUsed) { + info.isUsed = true; + for (var _i = 0, _a = info.virtualInstances || []; _i < _a.length; _i++) { + var vinst = _a[_i]; + if (vinst.parentClassInfo.isUsed) + markFunctionUsed(vinst.decl, bindings); + } + } + if (info.virtualRoot && !isSuper) { + pxtc.assert(!bin.finalPass || info.virtualIndex != null); + return mkProcCallCore(null, info.virtualIndex, args.map(emitExpr)); + } + if (attrs.shim && !hasShimDummy(decl)) { + return emitShim(decl, node, args); + } + else if (attrs.helper) { + var syms = checker.getSymbolsInScope(node, ts.SymbolFlags.Module); + var helpersModule = syms.filter(function (s) { return s.name == "helpers"; })[0].valueDeclaration; + var helperStmt = helpersModule.body.statements.filter(function (s) { return s.symbol.name == attrs.helper; })[0]; + if (!helperStmt) + userError(9215, lf("helpers.{0} not found", attrs.helper)); + if (helperStmt.kind != pxtc.SK.FunctionDeclaration) + userError(9216, lf("helpers.{0} isn't a function", attrs.helper)); + decl = helperStmt; + var sig_1 = checker.getSignatureFromDeclaration(decl); + var tp_1 = sig_1.getTypeParameters() || []; + if (tp_1.length != bindings.length) + pxtc.U.oops("helpers type parameter mismatch"); // can it happen? + bindings.forEach(function (b, i) { + b.tp = tp_1[i]; + }); + markFunctionUsed(decl, bindings); + return emitPlain(); + } + else if (decl.kind == pxtc.SK.MethodSignature || decl.kind == pxtc.SK.PropertySignature) { + var name_5 = getName(decl); + var res_3 = mkProcCallCore(null, null, args.map(emitExpr), getIfaceMemberId(name_5)); + if (decl.kind == pxtc.SK.PropertySignature) { + var pid = res_3.data; + pid.mapIdx = pid.ifaceIndex; + var refSuff = ""; + if (args.length == 2) { + if (isRefCountedExpr(args[1])) + refSuff = "Ref"; + pid.ifaceIndex = getIfaceMemberId("set/" + name_5); + pid.mapMethod = "pxtrt::mapSet" + refSuff; + } + else { + if (isRefType(typeOf(node))) + refSuff = "Ref"; + pid.mapMethod = "pxtrt::mapGet" + refSuff; + } + } + return res_3; + } + else { + markFunctionUsed(decl, bindings); + return emitPlain(); + } + } + if (isSelfGeneric) + pxtc.U.oops("invalid generic call"); + if (decl && decl.kind == pxtc.SK.ModuleDeclaration) { + if (getName(decl) == "String") + userError(9219, lf("to convert X to string use: X + \"\"")); + else + userError(9220, lf("namespaces cannot be called directly")); + } + // otherwise we assume a lambda + if (args.length > 3) + userError(9217, lf("lambda functions with more than 3 arguments not supported")); + var suff = args.length + ""; + args.unshift(funcExpr); + callInfo.args.unshift(funcExpr); + // lambdas do not decr() arguments themselves; do it normally with getMask() + return pxtc.ir.rtcallMask("pxt::runAction" + suff, getMask(args), pxtc.ir.CallingConvention.Async, args.map(emitExpr)); + } + function mkProcCallCore(proc, vidx, args, ifaceIdx) { + if (ifaceIdx === void 0) { ifaceIdx = null; } + var data = { + proc: proc, + virtualIndex: vidx, + ifaceIndex: ifaceIdx + }; + return pxtc.ir.op(EK.ProcCall, args, data); + } + function lookupProc(decl, bindings) { + var id = { action: decl, bindings: bindings }; + return bin.procs.filter(function (p) { return p.matches(id); })[0]; + } + function mkProcCall(decl, args, bindings) { + var proc = lookupProc(decl, bindings); + pxtc.assert(!!proc || !bin.finalPass); + return mkProcCallCore(proc, null, args); + } + function layOutGlobals() { + var globals = bin.globals.slice(0); + // stable-sort globals, with smallest first, because "strh/b" have + // smaller immediate range than plain "str" (and same for "ldr") + globals.forEach(function (g, i) { return g.index = i; }); + globals.sort(function (a, b) { + return sizeOfBitSize(a.bitSize) - sizeOfBitSize(b.bitSize) || + a.index - b.index; + }); + var currOff = pxtc.numReservedGlobals * 4; + for (var _i = 0, globals_1 = globals; _i < globals_1.length; _i++) { + var g = globals_1[_i]; + var sz = sizeOfBitSize(g.bitSize); + while (currOff & (sz - 1)) + currOff++; // align + g.index = currOff; + currOff += sz; + } + bin.globalsWords = (currOff + 3) >> 2; + } + function emitVTables() { + for (var _i = 0, _a = bin.usedClassInfos; _i < _a.length; _i++) { + var info = _a[_i]; + getVTable(info); // gets cached + } + } + function getCtor(decl) { + return decl.members.filter(function (m) { return m.kind == pxtc.SK.Constructor; })[0]; + } + function isIfaceMemberUsed(name) { + return pxtc.U.lookup(ifaceMembers, name) != null; + } + function markClassUsed(info) { + if (info.isUsed) + return; + info.isUsed = true; + if (info.baseClassInfo) + markClassUsed(info.baseClassInfo); + bin.usedClassInfos.push(info); + for (var _i = 0, _a = info.methods; _i < _a.length; _i++) { + var m = _a[_i]; + var minf = getFunctionInfo(m); + if (isIfaceMemberUsed(getName(m)) || (minf.virtualRoot && minf.virtualRoot.isUsed)) + markFunctionUsed(m, info.bindings); + } + var ctor = getCtor(info.decl); + if (ctor) { + markFunctionUsed(ctor, info.bindings); + } + } + function emitNewExpression(node) { + var t = typeOf(node); + if (isArrayType(t)) { + throw pxtc.oops(); + } + else if (isPossiblyGenericClassType(t)) { + var classDecl = getDecl(node.expression); + if (classDecl.kind != pxtc.SK.ClassDeclaration) { + userError(9221, lf("new expression only supported on class types")); + } + var ctor = void 0; + var info = getClassInfo(typeOf(node), classDecl); + // find ctor to call in base chain + for (var parinfo = info; parinfo; parinfo = parinfo.baseClassInfo) { + ctor = getCtor(parinfo.decl); + if (ctor) + break; + } + markClassUsed(info); + var lbl = info.id + "_VT"; + var obj = pxtc.ir.rtcall("pxt::mkClassInstance", [pxtc.ir.ptrlit(lbl, lbl)]); + obj = pxtc.ir.shared(obj); + if (ctor) { + markUsed(ctor); + var args = node.arguments.slice(0); + var ctorAttrs = parseComments(ctor); + addDefaultParameters(checker.getResolvedSignature(node), args, ctorAttrs); + var compiled = args.map(emitExpr); + if (ctorAttrs.shim) + // we drop 'obj' variable + return pxtc.ir.rtcall(ctorAttrs.shim, compiled); + compiled.unshift(pxtc.ir.op(EK.Incr, [obj])); + proc.emitExpr(mkProcCall(ctor, compiled, [])); + return obj; + } + else { + if (node.arguments && node.arguments.length) + userError(9222, lf("constructor with arguments not found")); + return obj; + } + } + else { + throw unhandled(node, lf("unknown type for new"), 9243); + } + } + function emitTaggedTemplateExpression(node) { } + function emitTypeAssertion(node) { + return emitExpr(node.expression); + } + function emitAsExpression(node) { + return emitExpr(node.expression); + } + function emitParenExpression(node) { + return emitExpr(node.expression); + } + function getParameters(node) { + var res = node.parameters.slice(0); + if (!isStatic(node) && isClassFunction(node)) { + var info = getFunctionInfo(node); + if (!info.thisParameter) { + info.thisParameter = { + kind: pxtc.SK.Parameter, + name: { text: "this" }, + isThisParameter: true, + parent: node + }; + } + res.unshift(info.thisParameter); + } + return res; + } + function emitFunLitCore(node, raw) { + if (raw === void 0) { raw = false; } + var lbl = getFunctionLabel(node, getEnclosingTypeBindings(node)); + var r = pxtc.ir.ptrlit(lbl + "_Lit", lbl); + if (!raw) { + r = pxtc.ir.rtcall("pxt::ptrOfLiteral", [r]); + } + return r; + } + function emitFuncCore(node, bindings) { + var info = getFunctionInfo(node); + var lit = null; + var isExpression = node.kind == pxtc.SK.ArrowFunction || node.kind == pxtc.SK.FunctionExpression; + var isRef = function (d) { + if (isRefDecl(d)) + return true; + var info = getVarInfo(d); + return (info.captured && info.written); + }; + var refs = info.capturedVars.filter(function (v) { return isRef(v); }); + var prim = info.capturedVars.filter(function (v) { return !isRef(v); }); + var caps = refs.concat(prim); + var locals = caps.map(function (v, i) { + var l = new pxtc.ir.Cell(i, v, getVarInfo(v)); + l.iscap = true; + return l; + }); + // forbid: let x = function(a:T) { } + if (isExpression && isGenericFunction(node)) + userError(9233, lf("function expressions cannot be generic")); + if (caps.length > 0 && isGenericFunction(node)) + userError(9234, lf("nested functions cannot be generic yet")); + // if no captured variables, then we can get away with a plain pointer to code + if (caps.length > 0) { + pxtc.assert(getEnclosingFunction(node) != null); + lit = pxtc.ir.shared(pxtc.ir.rtcall("pxt::mkAction", [pxtc.ir.numlit(refs.length), pxtc.ir.numlit(caps.length), emitFunLitCore(node, true)])); + caps.forEach(function (l, i) { + var loc = proc.localIndex(l); + if (!loc) + userError(9223, lf("cannot find captured value: {0}", checker.symbolToString(l.symbol))); + var v = loc.loadCore(); + if (loc.isRef() || loc.isByRefLocal()) + v = pxtc.ir.op(EK.Incr, [v]); + proc.emitExpr(pxtc.ir.rtcall("pxtrt::stclo", [lit, pxtc.ir.numlit(i), v])); + }); + if (node.kind == pxtc.SK.FunctionDeclaration) { + info.location = proc.mkLocal(node, getVarInfo(node)); + proc.emitExpr(info.location.storeDirect(lit)); + lit = null; + } + } + else { + if (isExpression) { + lit = emitFunLitCore(node); + } + } + pxtc.assert(!!lit == isExpression); + var id = { action: node, bindings: bindings }; + var existing = bin.procs.filter(function (p) { return p.matches(id); })[0]; + if (existing) { + proc = existing; + proc.reset(); + } + else { + pxtc.assert(!bin.finalPass); + proc = new pxtc.ir.Procedure(); + proc.isRoot = !!node.isRootFunction; + proc.action = node; + proc.info = info; + proc.bindings = bindings; + bin.addProc(proc); + } + proc.captured = locals; + if (node.parent.kind == pxtc.SK.ClassDeclaration) { + var parClass = node.parent; + var numTP = parClass.typeParameters ? parClass.typeParameters.length : 0; + pxtc.assert(bindings.length >= numTP); + var classInfo = getClassInfo(null, parClass, bindings.slice(0, numTP)); + if (proc.classInfo) + pxtc.assert(proc.classInfo == classInfo); + else + proc.classInfo = classInfo; + if (node.kind == pxtc.SK.Constructor) { + if (classInfo.ctor) + pxtc.assert(classInfo.ctor == proc); + else + classInfo.ctor = proc; + } + } + pxtc.U.pushRange(typeBindings, bindings); + var destructuredParameters = []; + proc.args = getParameters(node).map(function (p, i) { + if (p.name.kind === pxtc.SK.ObjectBindingPattern) { + destructuredParameters.push(p); + } + var l = new pxtc.ir.Cell(i, p, getVarInfo(p)); + l.isarg = true; + return l; + }); + proc.args.forEach(function (l) { + //console.log(l.toString(), l.info) + if (l.isByRefLocal()) { + // TODO add C++ support function to do this + var tmp = pxtc.ir.shared(pxtc.ir.rtcall("pxtrt::mkloc" + l.refSuffix(), [])); + proc.emitExpr(pxtc.ir.rtcall("pxtrt::stloc" + l.refSuffix(), [tmp, l.loadCore()])); + proc.emitExpr(l.storeDirect(tmp)); + } + }); + destructuredParameters.forEach(function (dp) { return emitVariableDeclaration(dp); }); + if (node.body.kind == pxtc.SK.Block) { + emit(node.body); + } + else { + var v = emitExpr(node.body); + proc.emitJmp(getLabels(node).ret, v, pxtc.ir.JmpMode.Always); + } + proc.emitLblDirect(getLabels(node).ret); + proc.stackEmpty(); + if (funcHasReturn(proc.action)) { + var v = pxtc.ir.shared(pxtc.ir.op(EK.JmpValue, [])); + proc.emitExpr(v); // make sure we save it + proc.emitClrs(); + var lbl = proc.mkLabel("final"); + proc.emitJmp(lbl, v, pxtc.ir.JmpMode.Always); + proc.emitLbl(lbl); + } + else { + proc.emitClrs(); + } + pxtc.assert(!bin.finalPass || usedWorkList.length == 0); + while (usedWorkList.length > 0) { + var f = usedWorkList.pop(); + emit(f); + } + return lit; + } + function hasShimDummy(node) { + if (opts.target.isNative) + return false; + var f = node; + return f.body && (f.body.kind != pxtc.SK.Block || f.body.statements.length > 0); + } + function emitFunctionDeclaration(node) { + if (!isUsed(node)) + return; + var attrs = parseComments(node); + if (attrs.shim != null) { + if (opts.target.isNative) { + pxtc.hex.validateShim(getDeclName(node), attrs.shim, funcHasReturn(node), getParameters(node).length); + } + if (!hasShimDummy(node)) + return; + } + if (node.flags & ts.NodeFlags.Ambient) + return; + if (!node.body) + return; + var info = getFunctionInfo(node); + var lit = null; + if (isGenericFunction(node)) { + if (!info.usages) { + pxtc.assert(opts.testMode && !usedDecls[nodeKey(node)] && !bin.finalPass); + // test mode - make fake binding + var bindings = getTypeParameters(node).map(function (t) { return ({ + tp: checker.getTypeAtLocation(t), + isRef: true + }); }); + addEnclosingTypeBindings(bindings, node); + pxtc.U.assert(bindings.length > 0); + info.usages = [bindings]; + } + pxtc.U.assert(info.usages.length > 0, "no generic usages recorded"); + var todo = info.usages; + if (!bin.finalPass) { + todo = info.usages.slice(info.prePassUsagesEmitted); + info.prePassUsagesEmitted = info.usages.length; + } + var _loop_6 = function(bindings) { + scope(function () { + var nolit = emitFuncCore(node, bindings); + pxtc.U.assert(nolit == null); + }); + }; + for (var _i = 0, todo_1 = todo; _i < todo_1.length; _i++) { + var bindings = todo_1[_i]; + _loop_6(bindings); + } + } + else { + scope(function () { + lit = emitFuncCore(node, getEnclosingTypeBindings(node)); + }); + } + return lit; + } + function emitDeleteExpression(node) { } + function emitTypeOfExpression(node) { } + function emitVoidExpression(node) { } + function emitAwaitExpression(node) { } + function emitPrefixUnaryExpression(node) { + var tp = typeOf(node.operand); + if (node.operator == pxtc.SK.ExclamationToken) { + return pxtc.ir.rtcall("Boolean_::bang", [emitCondition(node.operand)]); + } + if (tp.flags & ts.TypeFlags.Number) { + switch (node.operator) { + case pxtc.SK.PlusPlusToken: + return emitIncrement(node.operand, "thumb::adds", false); + case pxtc.SK.MinusMinusToken: + return emitIncrement(node.operand, "thumb::subs", false); + case pxtc.SK.MinusToken: + return pxtc.ir.rtcall("thumb::subs", [pxtc.ir.numlit(0), emitExpr(node.operand)]); + case pxtc.SK.PlusToken: + return emitExpr(node.operand); // no-op + default: + break; + } + } + throw unhandled(node, lf("unsupported prefix unary operation"), 9245); + } + function doNothing() { } + function needsCache(e) { + var c = e; + c.needsIRCache = true; + irCachesToClear.push(c); + } + function prepForAssignment(trg, src) { + if (src === void 0) { src = null; } + var prev = irCachesToClear.length; + if (trg.kind == pxtc.SK.PropertyAccessExpression || trg.kind == pxtc.SK.ElementAccessExpression) { + needsCache(trg.expression); + } + if (src) + needsCache(src); + if (irCachesToClear.length == prev) + return doNothing; + else + return function () { + for (var i = prev; i < irCachesToClear.length; ++i) { + irCachesToClear[i].cachedIR = null; + irCachesToClear[i].needsIRCache = false; + } + irCachesToClear.splice(prev, irCachesToClear.length - prev); + }; + } + function irToNode(expr, isRef) { + if (isRef === void 0) { isRef = false; } + return { + kind: pxtc.SK.NullKeyword, + isRefOverride: isRef, + valueOverride: expr + }; + } + function emitIncrement(trg, meth, isPost, one) { + if (one === void 0) { one = null; } + var cleanup = prepForAssignment(trg); + var oneExpr = one ? emitExpr(one) : pxtc.ir.numlit(1); + var prev = pxtc.ir.shared(emitExpr(trg)); + var result = pxtc.ir.shared(pxtc.ir.rtcall(meth, [prev, oneExpr])); + emitStore(trg, irToNode(result)); + cleanup(); + return isPost ? prev : result; + } + function emitPostfixUnaryExpression(node) { + var tp = typeOf(node.operand); + if (tp.flags & ts.TypeFlags.Number) { + switch (node.operator) { + case pxtc.SK.PlusPlusToken: + return emitIncrement(node.operand, "thumb::adds", true); + case pxtc.SK.MinusMinusToken: + return emitIncrement(node.operand, "thumb::subs", true); + default: + break; + } + } + throw unhandled(node, lf("unsupported postfix unary operation"), 9246); + } + function fieldIndexCore(info, fld, t) { + var attrs = parseComments(fld); + return { + idx: info.allfields.indexOf(fld), + name: getName(fld), + isRef: isRefType(t), + shimName: attrs.shim + }; + } + function fieldIndex(pacc) { + var tp = typeOf(pacc.expression); + if (isPossiblyGenericClassType(tp)) { + var info = getClassInfo(tp); + return fieldIndexCore(info, getFieldInfo(info, pacc.name.text), typeOf(pacc)); + } + else { + throw unhandled(pacc, lf("bad field access"), 9247); + } + } + function getFieldInfo(info, fieldName) { + var field = info.allfields.filter(function (f) { return f.name.text == fieldName; })[0]; + if (!field) { + userError(9224, lf("field {0} not found", fieldName)); + } + return field; + } + function emitStore(trg, src) { + var decl = getDecl(trg); + var isGlobal = isGlobalVar(decl); + if (trg.kind == pxtc.SK.Identifier || isGlobal) { + if (decl && (isGlobal || decl.kind == pxtc.SK.VariableDeclaration || decl.kind == pxtc.SK.Parameter)) { + var l = lookupCell(decl); + recordUse(decl, true); + proc.emitExpr(l.storeByRef(emitExpr(src))); + } + else { + unhandled(trg, lf("bad target identifier"), 9248); + } + } + else if (trg.kind == pxtc.SK.PropertyAccessExpression) { + var decl_1 = getDecl(trg); + if (decl_1 && decl_1.kind == pxtc.SK.GetAccessor) { + decl_1 = ts.getDeclarationOfKind(decl_1.symbol, pxtc.SK.SetAccessor); + if (!decl_1) { + unhandled(trg, lf("setter not available"), 9253); + } + proc.emitExpr(emitCallCore(trg, trg, [src], null, decl_1)); + } + else if (decl_1 && decl_1.kind == pxtc.SK.PropertySignature) { + proc.emitExpr(emitCallCore(trg, trg, [src], null, decl_1)); + } + else { + proc.emitExpr(pxtc.ir.op(EK.Store, [emitExpr(trg), emitExpr(src)])); + } + } + else if (trg.kind == pxtc.SK.ElementAccessExpression) { + proc.emitExpr(emitIndexedAccess(trg, emitExpr(src))); + } + else { + unhandled(trg, lf("bad assignment target"), 9249); + } + } + function handleAssignment(node) { + var cleanup = prepForAssignment(node.left, node.right); + emitStore(node.left, node.right); + var res = emitExpr(node.right); + cleanup(); + return res; + } + function rtcallMask(name, args, callingConv, append) { + if (callingConv === void 0) { callingConv = pxtc.ir.CallingConvention.Plain; } + if (append === void 0) { append = null; } + var args2 = args.map(emitExpr); + if (append) + args2 = args2.concat(append); + return pxtc.ir.rtcallMask(name, getMask(args), callingConv, args2); + } + function emitInJmpValue(expr) { + var lbl = proc.mkLabel("ldjmp"); + proc.emitJmp(lbl, expr, pxtc.ir.JmpMode.Always); + proc.emitLbl(lbl); + } + function emitLazyBinaryExpression(node) { + var lbl = proc.mkLabel("lazy"); + var left = emitExpr(node.left); + var isString = typeOf(node.left).flags & ts.TypeFlags.String; + if (node.operatorToken.kind == pxtc.SK.BarBarToken) { + if (isString) + left = pxtc.ir.rtcall("pxtrt::emptyToNull", [left]); + proc.emitJmp(lbl, left, pxtc.ir.JmpMode.IfNotZero); + } + else if (node.operatorToken.kind == pxtc.SK.AmpersandAmpersandToken) { + left = pxtc.ir.shared(left); + if (isString) { + var slbl = proc.mkLabel("lazyStr"); + proc.emitJmp(slbl, pxtc.ir.rtcall("pxtrt::emptyToNull", [left]), pxtc.ir.JmpMode.IfNotZero); + proc.emitJmp(lbl, left, pxtc.ir.JmpMode.Always, left); + proc.emitLbl(slbl); + if (isRefCountedExpr(node.left)) + proc.emitExpr(pxtc.ir.op(EK.Decr, [left])); + else + // make sure we have reference and the stack is cleared + proc.emitExpr(pxtc.ir.rtcall("thumb::ignore", [left])); + } + else { + if (isRefCountedExpr(node.left)) + proc.emitExpr(pxtc.ir.op(EK.Decr, [left])); + proc.emitJmpZ(lbl, left); + } + } + else { + pxtc.oops(); + } + proc.emitJmp(lbl, emitExpr(node.right), pxtc.ir.JmpMode.Always); + proc.emitLbl(lbl); + return pxtc.ir.op(EK.JmpValue, []); + } + function stripEquals(k) { + switch (k) { + case pxtc.SK.PlusEqualsToken: return pxtc.SK.PlusToken; + case pxtc.SK.MinusEqualsToken: return pxtc.SK.MinusToken; + case pxtc.SK.AsteriskEqualsToken: return pxtc.SK.AsteriskToken; + case pxtc.SK.AsteriskAsteriskEqualsToken: return pxtc.SK.AsteriskAsteriskToken; + case pxtc.SK.SlashEqualsToken: return pxtc.SK.SlashToken; + case pxtc.SK.PercentEqualsToken: return pxtc.SK.PercentToken; + case pxtc.SK.LessThanLessThanEqualsToken: return pxtc.SK.LessThanLessThanToken; + case pxtc.SK.GreaterThanGreaterThanEqualsToken: return pxtc.SK.GreaterThanGreaterThanToken; + case pxtc.SK.GreaterThanGreaterThanGreaterThanEqualsToken: return pxtc.SK.GreaterThanGreaterThanGreaterThanToken; + case pxtc.SK.AmpersandEqualsToken: return pxtc.SK.AmpersandToken; + case pxtc.SK.BarEqualsToken: return pxtc.SK.BarToken; + case pxtc.SK.CaretEqualsToken: return pxtc.SK.CaretToken; + default: return pxtc.SK.Unknown; + } + } + function emitBrk(node) { + var src = ts.getSourceFileOfNode(node); + if (opts.justMyCode && pxtc.U.startsWith(src.fileName, "pxt_modules")) + return; + var pos = node.pos; + while (/^\s$/.exec(src.text[pos])) + pos++; + var p = ts.getLineAndCharacterOfPosition(src, pos); + var e = ts.getLineAndCharacterOfPosition(src, node.end); + var brk = { + id: res.breakpoints.length, + isDebuggerStmt: node.kind == pxtc.SK.DebuggerStatement, + fileName: src.fileName, + start: pos, + length: node.end - pos, + line: p.line, + endLine: e.line, + column: p.character, + endColumn: e.character, + successors: null + }; + res.breakpoints.push(brk); + var st = pxtc.ir.stmt(pxtc.ir.SK.Breakpoint, null); + st.breakpointInfo = brk; + proc.emit(st); + } + function simpleInstruction(k) { + switch (k) { + case pxtc.SK.PlusToken: return "thumb::adds"; + case pxtc.SK.MinusToken: return "thumb::subs"; + // we could expose __aeabi_idiv directly... + case pxtc.SK.SlashToken: return "Number_::div"; + case pxtc.SK.PercentToken: return "Number_::mod"; + case pxtc.SK.AsteriskToken: return "thumb::muls"; + case pxtc.SK.AmpersandToken: return "thumb::ands"; + case pxtc.SK.BarToken: return "thumb::orrs"; + case pxtc.SK.CaretToken: return "thumb::eors"; + case pxtc.SK.LessThanLessThanToken: return "thumb::lsls"; + case pxtc.SK.GreaterThanGreaterThanToken: return "thumb::asrs"; + case pxtc.SK.GreaterThanGreaterThanGreaterThanToken: return "thumb::lsrs"; + // these could be compiled to branches butthis is more code-size efficient + case pxtc.SK.LessThanEqualsToken: return "Number_::le"; + case pxtc.SK.LessThanToken: return "Number_::lt"; + case pxtc.SK.GreaterThanEqualsToken: return "Number_::ge"; + case pxtc.SK.GreaterThanToken: return "Number_::gt"; + case pxtc.SK.EqualsEqualsToken: + case pxtc.SK.EqualsEqualsEqualsToken: + return "Number_::eq"; + case pxtc.SK.ExclamationEqualsEqualsToken: + case pxtc.SK.ExclamationEqualsToken: + return "Number_::neq"; + default: return null; + } + } + function emitBinaryExpression(node) { + if (node.operatorToken.kind == pxtc.SK.EqualsToken) { + return handleAssignment(node); + } + var lt = typeOf(node.left); + var rt = typeOf(node.right); + if (node.operatorToken.kind == pxtc.SK.PlusToken) { + if (lt.flags & ts.TypeFlags.String || rt.flags & ts.TypeFlags.String) { + node.exprInfo = { leftType: checker.typeToString(lt), rightType: checker.typeToString(rt) }; + } + } + var shim = function (n) { return rtcallMask(n, [node.left, node.right]); }; + if (node.operatorToken.kind == pxtc.SK.CommaToken) { + if (isNoopExpr(node.left)) + return emitExpr(node.right); + else { + var v = emitIgnored(node.left); + return pxtc.ir.op(EK.Sequence, [v, emitExpr(node.right)]); + } + } + switch (node.operatorToken.kind) { + case pxtc.SK.BarBarToken: + case pxtc.SK.AmpersandAmpersandToken: + return emitLazyBinaryExpression(node); + } + if ((lt.flags & ts.TypeFlags.NumberLike) && (rt.flags & ts.TypeFlags.NumberLike)) { + var noEq = stripEquals(node.operatorToken.kind); + var shimName = simpleInstruction(noEq || node.operatorToken.kind); + if (!shimName) + unhandled(node.operatorToken, lf("unsupported numeric operator"), 9250); + if (noEq) + return emitIncrement(node.left, shimName, false, node.right); + return shim(shimName); + } + if (node.operatorToken.kind == pxtc.SK.PlusToken) { + if ((lt.flags & ts.TypeFlags.String) || (rt.flags & ts.TypeFlags.String)) { + return pxtc.ir.rtcallMask("String_::concat", 3, pxtc.ir.CallingConvention.Plain, [ + emitAsString(node.left), + emitAsString(node.right)]); + } + } + if (node.operatorToken.kind == pxtc.SK.PlusEqualsToken && + (lt.flags & ts.TypeFlags.String)) { + var cleanup = prepForAssignment(node.left); + var post = pxtc.ir.shared(pxtc.ir.rtcallMask("String_::concat", 3, pxtc.ir.CallingConvention.Plain, [ + emitExpr(node.left), + emitAsString(node.right)])); + emitStore(node.left, irToNode(post)); + cleanup(); + return pxtc.ir.op(EK.Incr, [post]); + } + if ((lt.flags & ts.TypeFlags.String) && (rt.flags & ts.TypeFlags.String)) { + switch (node.operatorToken.kind) { + case pxtc.SK.LessThanEqualsToken: + case pxtc.SK.LessThanToken: + case pxtc.SK.GreaterThanEqualsToken: + case pxtc.SK.GreaterThanToken: + case pxtc.SK.EqualsEqualsToken: + case pxtc.SK.EqualsEqualsEqualsToken: + case pxtc.SK.ExclamationEqualsEqualsToken: + case pxtc.SK.ExclamationEqualsToken: + return pxtc.ir.rtcall(simpleInstruction(node.operatorToken.kind), [shim("String_::compare"), pxtc.ir.numlit(0)]); + default: + unhandled(node.operatorToken, lf("unknown string operator"), 9251); + } + } + switch (node.operatorToken.kind) { + case pxtc.SK.EqualsEqualsToken: + case pxtc.SK.EqualsEqualsEqualsToken: + return shim("Number_::eq"); + case pxtc.SK.ExclamationEqualsEqualsToken: + case pxtc.SK.ExclamationEqualsToken: + return shim("Number_::neq"); + default: + throw unhandled(node.operatorToken, lf("unknown generic operator"), 9252); + } + } + function emitAsString(e) { + var r = emitExpr(e); + // TS returns 'any' as type of template elements + if (isStringLiteral(e)) + return r; + var tp = typeOf(e); + if (tp.flags & ts.TypeFlags.NumberLike) + return pxtc.ir.rtcall("Number_::toString", [r]); + else if (tp.flags & ts.TypeFlags.Boolean) + return pxtc.ir.rtcall("Boolean_::toString", [r]); + else if (tp.flags & ts.TypeFlags.String) + return r; // OK + else { + var decl = tp.symbol ? tp.symbol.valueDeclaration : null; + if (decl && (decl.kind == pxtc.SK.ClassDeclaration || decl.kind == pxtc.SK.InterfaceDeclaration)) { + var classDecl = decl; + var toString_1 = classDecl.members.filter(function (m) { + return (m.kind == pxtc.SK.MethodDeclaration || m.kind == pxtc.SK.MethodSignature) && + m.parameters.length == 0 && + getName(m) == "toString"; + })[0]; + if (toString_1) { + var ee = e; + return emitCallCore(ee, ee, [], null, toString_1, ee); + } + else { + throw userError(9254, lf("type {0} lacks toString() method", getName(decl))); + } + } + throw userError(9225, lf("don't know how to convert to string")); + } + } + function emitConditionalExpression(node) { + var els = proc.mkLabel("condexprz"); + var fin = proc.mkLabel("condexprfin"); + proc.emitJmp(els, emitCondition(node.condition), pxtc.ir.JmpMode.IfZero); + proc.emitJmp(fin, emitExpr(node.whenTrue), pxtc.ir.JmpMode.Always); + proc.emitLbl(els); + proc.emitJmp(fin, emitExpr(node.whenFalse), pxtc.ir.JmpMode.Always); + proc.emitLbl(fin); + var v = pxtc.ir.shared(pxtc.ir.op(EK.JmpValue, [])); + proc.emitExpr(v); // make sure we save it + return v; + } + function emitSpreadElementExpression(node) { } + function emitYieldExpression(node) { } + function emitBlock(node) { + node.statements.forEach(emit); + } + function checkForLetOrConst(declList) { + if ((declList.flags & ts.NodeFlags.Let) || (declList.flags & ts.NodeFlags.Const)) { + return true; + } + throw userError(9260, lf("variable needs to be defined using 'let' instead of 'var'")); + } + function emitVariableStatement(node) { + if (node.flags & ts.NodeFlags.Ambient) + return; + checkForLetOrConst(node.declarationList); + node.declarationList.declarations.forEach(emit); + } + function emitExpressionStatement(node) { + emitExprAsStmt(node.expression); + } + function emitCondition(expr) { + var inner = emitExpr(expr); + // in both cases unref is internal, so no mask + if (typeOf(expr).flags & ts.TypeFlags.String) { + return pxtc.ir.rtcall("pxtrt::stringToBool", [inner]); + } + else if (isRefCountedExpr(expr)) { + return pxtc.ir.rtcall("pxtrt::ptrToBool", [inner]); + } + else { + return inner; + } + } + function emitIfStatement(node) { + emitBrk(node); + var elseLbl = proc.mkLabel("else"); + proc.emitJmpZ(elseLbl, emitCondition(node.expression)); + emit(node.thenStatement); + var afterAll = proc.mkLabel("afterif"); + proc.emitJmp(afterAll); + proc.emitLbl(elseLbl); + if (node.elseStatement) + emit(node.elseStatement); + proc.emitLbl(afterAll); + } + function getLabels(stmt) { + var id = getNodeId(stmt); + return { + fortop: ".fortop." + id, + cont: ".cont." + id, + brk: ".brk." + id, + ret: ".ret." + id + }; + } + function emitDoStatement(node) { + emitBrk(node); + var l = getLabels(node); + proc.emitLblDirect(l.cont); + emit(node.statement); + proc.emitJmpZ(l.brk, emitCondition(node.expression)); + proc.emitJmp(l.cont); + proc.emitLblDirect(l.brk); + } + function emitWhileStatement(node) { + emitBrk(node); + var l = getLabels(node); + proc.emitLblDirect(l.cont); + proc.emitJmpZ(l.brk, emitCondition(node.expression)); + emit(node.statement); + proc.emitJmp(l.cont); + proc.emitLblDirect(l.brk); + } + function isNoopExpr(node) { + if (!node) + return true; + switch (node.kind) { + case pxtc.SK.Identifier: + case pxtc.SK.StringLiteral: + case pxtc.SK.NumericLiteral: + case pxtc.SK.NullKeyword: + return true; // no-op + } + return false; + } + function emitIgnored(node) { + var v = emitExpr(node); + var a = typeOf(node); + if (!(a.flags & ts.TypeFlags.Void)) { + if (isRefType(a)) { + v = pxtc.ir.op(EK.Decr, [v]); + } + } + return v; + } + function emitExprAsStmt(node) { + if (isNoopExpr(node)) + return; + emitBrk(node); + var v = emitIgnored(node); + proc.emitExpr(v); + proc.stackEmpty(); + } + function emitForStatement(node) { + if (node.initializer && node.initializer.kind == pxtc.SK.VariableDeclarationList) { + checkForLetOrConst(node.initializer); + node.initializer.declarations.forEach(emit); + } + else { + emitExprAsStmt(node.initializer); + } + emitBrk(node); + var l = getLabels(node); + proc.emitLblDirect(l.fortop); + if (node.condition) + proc.emitJmpZ(l.brk, emitCondition(node.condition)); + emit(node.statement); + proc.emitLblDirect(l.cont); + emitExprAsStmt(node.incrementor); + proc.emitJmp(l.fortop); + proc.emitLblDirect(l.brk); + } + function emitForOfStatement(node) { + if (!(node.initializer && node.initializer.kind == pxtc.SK.VariableDeclarationList)) { + unhandled(node, "only a single variable may be used to iterate a collection"); + return; + } + var declList = node.initializer; + if (declList.declarations.length != 1) { + unhandled(node, "only a single variable may be used to iterate a collection"); + return; + } + checkForLetOrConst(declList); + //Typecheck the expression being iterated over + var t = typeOf(node.expression); + var indexer = ""; + var length = ""; + if (t.flags & ts.TypeFlags.String) { + indexer = "String_::charAt"; + length = "String_::length"; + } + else if (isArrayType(t)) { + indexer = "Array_::getAt"; + length = "Array_::length"; + } + else { + unhandled(node.expression, "cannot use for...of with this expression"); + return; + } + //As the iterator isn't declared in the usual fashion we must mark it as used, otherwise no cell will be allocated for it + markUsed(declList.declarations[0]); + var iterVar = emitVariableDeclaration(declList.declarations[0]); // c + //Start with null, TODO: Is this necessary + proc.emitExpr(iterVar.storeByRef(pxtc.ir.numlit(0))); + proc.stackEmpty(); + // Store the expression (it could be a string literal, for example) for the collection being iterated over + // Note that it's alaways a ref-counted type + var collectionVar = proc.mkLocalUnnamed(true); // a + proc.emitExpr(collectionVar.storeByRef(emitExpr(node.expression))); + // Declaration of iterating variable + var intVarIter = proc.mkLocalUnnamed(); // i + proc.emitExpr(intVarIter.storeByRef(pxtc.ir.numlit(0))); + proc.stackEmpty(); + emitBrk(node); + var l = getLabels(node); + proc.emitLblDirect(l.fortop); + // i < a.length() + // we use loadCore() on collection variable so that it doesn't get incr()ed + // we could have used load() and rtcallMask to be more regular + proc.emitJmpZ(l.brk, pxtc.ir.rtcall("Number_::lt", [intVarIter.load(), pxtc.ir.rtcall(length, [collectionVar.loadCore()])])); + // c = a[i] + proc.emitExpr(iterVar.storeByRef(pxtc.ir.rtcall(indexer, [collectionVar.loadCore(), intVarIter.load()]))); + emit(node.statement); + proc.emitLblDirect(l.cont); + // i = i + 1 + proc.emitExpr(intVarIter.storeByRef(pxtc.ir.rtcall("thumb::adds", [intVarIter.load(), pxtc.ir.numlit(1)]))); + proc.emitJmp(l.fortop); + proc.emitLblDirect(l.brk); + proc.emitExpr(collectionVar.storeByRef(pxtc.ir.numlit(0))); // clear it, so it gets GCed + } + function emitForInOrForOfStatement(node) { } + function emitBreakOrContinueStatement(node) { + emitBrk(node); + var label = node.label ? node.label.text : null; + var isBreak = node.kind == pxtc.SK.BreakStatement; + function findOuter(parent) { + if (!parent) + return null; + if (label && parent.kind == pxtc.SK.LabeledStatement && + parent.label.text == label) + return parent.statement; + if (parent.kind == pxtc.SK.SwitchStatement && !label && isBreak) + return parent; + if (!label && ts.isIterationStatement(parent, false)) + return parent; + return findOuter(parent.parent); + } + var stmt = findOuter(node); + if (!stmt) + error(node, 9230, lf("cannot find outer loop")); + else { + var l = getLabels(stmt); + if (node.kind == pxtc.SK.ContinueStatement) { + if (!ts.isIterationStatement(stmt, false)) + error(node, 9231, lf("continue on non-loop")); + else + proc.emitJmp(l.cont); + } + else if (node.kind == pxtc.SK.BreakStatement) { + proc.emitJmp(l.brk); + } + else { + pxtc.oops(); + } + } + } + function emitReturnStatement(node) { + emitBrk(node); + var v = null; + if (node.expression) { + v = emitExpr(node.expression); + } + else if (funcHasReturn(proc.action)) { + v = pxtc.ir.numlit(null); // == return undefined + } + proc.emitJmp(getLabels(proc.action).ret, v, pxtc.ir.JmpMode.Always); + } + function emitWithStatement(node) { } + function emitSwitchStatement(node) { + emitBrk(node); + var switchType = typeOf(node.expression); + var isNumber = !!(switchType.flags & ts.TypeFlags.NumberLike); + var l = getLabels(node); + var defaultLabel; + var quickCmpMode = isNumber; + var expr = pxtc.ir.shared(emitExpr(node.expression)); + var plainExpr = expr; + if (isNumber) { + emitInJmpValue(expr); + } + var lbls = node.caseBlock.clauses.map(function (cl) { + var lbl = proc.mkLabel("switch"); + if (cl.kind == pxtc.SK.CaseClause) { + var cc = cl; + var cmpExpr = emitExpr(cc.expression); + if (switchType.flags & ts.TypeFlags.String) { + var cmpCall = pxtc.ir.rtcallMask("String_::compare", isRefCountedExpr(cc.expression) ? 3 : 2, pxtc.ir.CallingConvention.Plain, [cmpExpr, expr]); + expr = pxtc.ir.op(EK.Incr, [expr]); + proc.emitJmp(lbl, cmpCall, pxtc.ir.JmpMode.IfZero, plainExpr); + } + else if (isRefCountedExpr(cc.expression)) { + var cmpCall = pxtc.ir.rtcallMask("Number_::eq", 3, pxtc.ir.CallingConvention.Plain, [cmpExpr, expr]); + quickCmpMode = false; + expr = pxtc.ir.op(EK.Incr, [expr]); + proc.emitJmp(lbl, cmpCall, pxtc.ir.JmpMode.IfNotZero, plainExpr); + } + else { + if (cmpExpr.exprKind == EK.NumberLiteral) { + if (!quickCmpMode) { + emitInJmpValue(expr); + quickCmpMode = true; + } + proc.emitJmp(lbl, cmpExpr, pxtc.ir.JmpMode.IfJmpValEq, plainExpr); + } + else { + var cmpCall = pxtc.ir.rtcallMask("Number_::eq", 0, pxtc.ir.CallingConvention.Plain, [cmpExpr, expr]); + quickCmpMode = false; + proc.emitJmp(lbl, cmpCall, pxtc.ir.JmpMode.IfNotZero, plainExpr); + } + } + } + else if (cl.kind == pxtc.SK.DefaultClause) { + // Save default label for emit at the end of the + // tests section. Default label doesn't have to come at the + // end in JS. + pxtc.assert(!defaultLabel); + defaultLabel = lbl; + } + else { + pxtc.oops(); + } + return lbl; + }); + if (defaultLabel) + proc.emitJmp(defaultLabel, plainExpr); + else + proc.emitJmp(l.brk, plainExpr); + node.caseBlock.clauses.forEach(function (cl, i) { + proc.emitLbl(lbls[i]); + cl.statements.forEach(emit); + }); + proc.emitLblDirect(l.brk); + } + function emitCaseOrDefaultClause(node) { } + function emitLabeledStatement(node) { + var l = getLabels(node.statement); + emit(node.statement); + proc.emitLblDirect(l.brk); + } + function emitThrowStatement(node) { } + function emitTryStatement(node) { } + function emitCatchClause(node) { } + function emitDebuggerStatement(node) { + emitBrk(node); + } + function emitVariableDeclaration(node) { + if (node.name.kind === pxtc.SK.ObjectBindingPattern) { + if (!node.initializer) { + node.name.elements.forEach(function (e) { return emitVariableDeclaration(e); }); + return null; + } + else { + userError(9259, "Object destructuring with initializers is not supported"); + } + } + typeCheckVar(node); + if (!isUsed(node)) { + return null; + } + var loc = isGlobalVar(node) ? + lookupCell(node) : proc.mkLocal(node, getVarInfo(node)); + if (loc.isByRefLocal()) { + proc.emitClrIfRef(loc); // we might be in a loop + proc.emitExpr(loc.storeDirect(pxtc.ir.rtcall("pxtrt::mkloc" + loc.refSuffix(), []))); + } + if (node.kind === pxtc.SK.BindingElement) { + emitBrk(node); + proc.emitExpr(loc.storeByRef(bindingElementAccessExpression(node)[0])); + proc.stackEmpty(); + } + else if (node.initializer) { + // TODO make sure we don't emit code for top-level globals being initialized to zero + emitBrk(node); + proc.emitExpr(loc.storeByRef(emitExpr(node.initializer))); + proc.stackEmpty(); + } + return loc; + } + function bindingElementAccessExpression(bindingElement) { + var target = bindingElement.parent.parent; + var parentAccess; + var parentType; + if (target.kind === pxtc.SK.BindingElement) { + var parent_1 = bindingElementAccessExpression(target); + parentAccess = parent_1[0]; + parentType = parent_1[1]; + } + else { + parentType = typeOf(target); + } + var propertyName = (bindingElement.propertyName || bindingElement.name); + if (isPossiblyGenericClassType(parentType)) { + var info = getClassInfo(parentType); + parentAccess = parentAccess || emitLocalLoad(target); + var myType = checker.getTypeOfSymbolAtLocation(checker.getPropertyOfType(parentType, propertyName.text), bindingElement); + return [ + pxtc.ir.op(EK.FieldAccess, [parentAccess], fieldIndexCore(info, getFieldInfo(info, propertyName.text), myType)), + myType + ]; + } + else { + throw unhandled(bindingElement, lf("bad field access"), 9247); + } + } + function emitClassExpression(node) { } + function emitClassDeclaration(node) { + getClassInfo(null, node); + node.members.forEach(emit); + } + function emitInterfaceDeclaration(node) { + var attrs = parseComments(node); + if (attrs.autoCreate) + autoCreateFunctions[attrs.autoCreate] = true; + } + function emitEnumDeclaration(node) { + //No code needs to be generated, enum names are replaced by constant values in generated code + } + function emitEnumMember(node) { } + function emitModuleDeclaration(node) { + if (node.flags & ts.NodeFlags.Ambient) + return; + emit(node.body); + } + function emitImportDeclaration(node) { } + function emitImportEqualsDeclaration(node) { } + function emitExportDeclaration(node) { } + function emitExportAssignment(node) { } + function emitSourceFileNode(node) { + node.statements.forEach(emit); + } + function catchErrors(node, f) { + var prevErr = lastSecondaryError; + inCatchErrors++; + try { + lastSecondaryError = null; + var res_4 = f(node); + if (lastSecondaryError) + userError(lastSecondaryErrorCode, lastSecondaryError); + lastSecondaryError = prevErr; + inCatchErrors--; + return res_4; + } + catch (e) { + inCatchErrors--; + lastSecondaryError = null; + if (!e.ksEmitterUserError) + console.log(e.stack); + var code = e.ksErrorCode || 9200; + error(node, code, e.message); + return null; + } + } + function emitExpr(node0) { + var node = node0; + if (node.cachedIR) { + if (isRefCountedExpr(node0)) + return pxtc.ir.op(EK.Incr, [node.cachedIR]); + return node.cachedIR; + } + var res = catchErrors(node, emitExprInner) || pxtc.ir.numlit(0); + if (node.needsIRCache) { + node.cachedIR = pxtc.ir.shared(res); + return node.cachedIR; + } + return res; + } + function emitExprInner(node) { + var expr = emitExprCore(node); + if (expr.isExpr()) + return expr; + throw new Error("expecting expression"); + } + function emit(node) { + catchErrors(node, emitNodeCore); + } + function emitNodeCore(node) { + switch (node.kind) { + case pxtc.SK.SourceFile: + return emitSourceFileNode(node); + case pxtc.SK.InterfaceDeclaration: + return emitInterfaceDeclaration(node); + case pxtc.SK.VariableStatement: + return emitVariableStatement(node); + case pxtc.SK.ModuleDeclaration: + return emitModuleDeclaration(node); + case pxtc.SK.EnumDeclaration: + return emitEnumDeclaration(node); + //case SyntaxKind.MethodSignature: + case pxtc.SK.FunctionDeclaration: + case pxtc.SK.Constructor: + case pxtc.SK.MethodDeclaration: + emitFunctionDeclaration(node); + return; + case pxtc.SK.ExpressionStatement: + return emitExpressionStatement(node); + case pxtc.SK.Block: + case pxtc.SK.ModuleBlock: + return emitBlock(node); + case pxtc.SK.VariableDeclaration: + emitVariableDeclaration(node); + return; + case pxtc.SK.IfStatement: + return emitIfStatement(node); + case pxtc.SK.WhileStatement: + return emitWhileStatement(node); + case pxtc.SK.DoStatement: + return emitDoStatement(node); + case pxtc.SK.ForStatement: + return emitForStatement(node); + case pxtc.SK.ForOfStatement: + return emitForOfStatement(node); + case pxtc.SK.ContinueStatement: + case pxtc.SK.BreakStatement: + return emitBreakOrContinueStatement(node); + case pxtc.SK.LabeledStatement: + return emitLabeledStatement(node); + case pxtc.SK.ReturnStatement: + return emitReturnStatement(node); + case pxtc.SK.ClassDeclaration: + return emitClassDeclaration(node); + case pxtc.SK.PropertyDeclaration: + case pxtc.SK.PropertyAssignment: + return emitPropertyAssignment(node); + case pxtc.SK.SwitchStatement: + return emitSwitchStatement(node); + case pxtc.SK.TypeAliasDeclaration: + // skip + return; + case pxtc.SK.DebuggerStatement: + return emitDebuggerStatement(node); + case pxtc.SK.GetAccessor: + case pxtc.SK.SetAccessor: + return emitAccessor(node); + case pxtc.SK.ImportEqualsDeclaration: + // this doesn't do anything in compiled code + return emitImportEqualsDeclaration(node); + case pxtc.SK.EmptyStatement: + return; + default: + unhandled(node); + } + } + function emitExprCore(node) { + switch (node.kind) { + case pxtc.SK.NullKeyword: + var v = node.valueOverride; + if (v) + return v; + return pxtc.ir.numlit(null); + case pxtc.SK.TrueKeyword: + return pxtc.ir.numlit(true); + case pxtc.SK.FalseKeyword: + return pxtc.ir.numlit(false); + case pxtc.SK.TemplateHead: + case pxtc.SK.TemplateMiddle: + case pxtc.SK.TemplateTail: + case pxtc.SK.NumericLiteral: + case pxtc.SK.StringLiteral: + case pxtc.SK.NoSubstitutionTemplateLiteral: + //case SyntaxKind.RegularExpressionLiteral: + return emitLiteral(node); + case pxtc.SK.PropertyAccessExpression: + return emitPropertyAccess(node); + case pxtc.SK.BinaryExpression: + return emitBinaryExpression(node); + case pxtc.SK.PrefixUnaryExpression: + return emitPrefixUnaryExpression(node); + case pxtc.SK.PostfixUnaryExpression: + return emitPostfixUnaryExpression(node); + case pxtc.SK.ElementAccessExpression: + return emitIndexedAccess(node); + case pxtc.SK.ParenthesizedExpression: + return emitParenExpression(node); + case pxtc.SK.TypeAssertionExpression: + return emitTypeAssertion(node); + case pxtc.SK.ArrayLiteralExpression: + return emitArrayLiteral(node); + case pxtc.SK.NewExpression: + return emitNewExpression(node); + case pxtc.SK.SuperKeyword: + case pxtc.SK.ThisKeyword: + return emitThis(node); + case pxtc.SK.CallExpression: + return emitCallExpression(node); + case pxtc.SK.FunctionExpression: + case pxtc.SK.ArrowFunction: + return emitFunctionDeclaration(node); + case pxtc.SK.Identifier: + return emitIdentifier(node); + case pxtc.SK.ConditionalExpression: + return emitConditionalExpression(node); + case pxtc.SK.AsExpression: + return emitAsExpression(node); + case pxtc.SK.TemplateExpression: + return emitTemplateExpression(node); + case pxtc.SK.ObjectLiteralExpression: + return emitObjectLiteral(node); + default: + unhandled(node); + return null; + } + } + } + pxtc.compileBinary = compileBinary; + function emptyExtInfo() { + var pio = pxt.appTarget.compileService && !!pxt.appTarget.compileService.platformioIni; + var r = { + functions: [], + generatedFiles: {}, + extensionFiles: {}, + sha: "", + compileData: "", + shimsDTS: "", + enumsDTS: "", + onlyPublic: true + }; + if (pio) + r.platformio = { dependencies: {} }; + else + r.yotta = { config: {}, dependencies: {} }; + return r; + } + pxtc.emptyExtInfo = emptyExtInfo; + var Binary = (function () { + function Binary() { + this.procs = []; + this.globals = []; + this.finalPass = false; + this.writeFile = function (fn, cont) { }; + this.usedClassInfos = []; + this.sourceHash = ""; + this.strings = {}; + this.otherLiterals = []; + this.codeHelpers = {}; + this.lblNo = 0; + } + Binary.prototype.reset = function () { + this.lblNo = 0; + this.otherLiterals = []; + this.strings = {}; + }; + Binary.prototype.addProc = function (proc) { + pxtc.assert(!this.finalPass); + this.procs.push(proc); + proc.seqNo = this.procs.length; + //proc.binary = this + }; + Binary.prototype.emitString = function (s) { + if (this.strings.hasOwnProperty(s)) + return this.strings[s]; + var lbl = "_str" + this.lblNo++; + this.strings[s] = lbl; + return lbl; + }; + return Binary; + }()); + pxtc.Binary = Binary; + })(pxtc = ts.pxtc || (ts.pxtc = {})); +})(ts || (ts = {})); +/// +/// +// Enforce order: +/// +/// +/// +/// +/// +/// +/// +/// +/// +var ts; +(function (ts) { + var pxtc; + (function (pxtc) { + function computeUsedParts(resp, ignoreBuiltin) { + if (ignoreBuiltin === void 0) { ignoreBuiltin = false; } + if (!resp.usedSymbols || !pxt.appTarget.simulator || !pxt.appTarget.simulator.parts) + return []; + var parts = []; + for (var symbol in resp.usedSymbols) { + var info = resp.usedSymbols[symbol]; + if (info && info.attributes.parts) { + var partsRaw = info.attributes.parts; + if (partsRaw) { + var partsSplit = partsRaw.split(/[ ,]+/); + partsSplit.forEach(function (p) { + if (0 < p.length && parts.indexOf(p) < 0) { + parts.push(p); + } + }); + } + } + } + if (ignoreBuiltin) { + var builtinParts_1 = pxt.appTarget.simulator.boardDefinition.onboardComponents; + if (builtinParts_1) + parts = parts.filter(function (p) { return builtinParts_1.indexOf(p) < 0; }); + } + //sort parts (so breadboarding layout is stable w.r.t. code ordering) + parts.sort(); + parts = parts.reverse(); //not strictly necessary, but it's a little + // nicer for demos to have "ledmatrix" + // before "buttonpair" + return parts; + } + pxtc.computeUsedParts = computeUsedParts; + function getTsCompilerOptions(opts) { + var options = ts.getDefaultCompilerOptions(); + options.target = ts.ScriptTarget.ES5; + options.module = ts.ModuleKind.None; + options.noImplicitAny = true; + options.noImplicitReturns = true; + options.allowUnreachableCode = true; + return options; + } + pxtc.getTsCompilerOptions = getTsCompilerOptions; + function nodeLocationInfo(node) { + var file = ts.getSourceFileOfNode(node); + var _a = ts.getLineAndCharacterOfPosition(file, node.pos), line = _a.line, character = _a.character; + var _b = ts.getLineAndCharacterOfPosition(file, node.end), endLine = _b.line, endChar = _b.character; + var r = { + start: node.pos, + length: node.end - node.pos, + line: line, + column: character, + endLine: endLine, + endColumn: endChar, + fileName: file.fileName, + }; + return r; + } + pxtc.nodeLocationInfo = nodeLocationInfo; + function patchUpDiagnostics(diags) { + var highPri = diags.filter(function (d) { return d.code == 1148; }); + if (highPri.length > 0) + diags = highPri; + return diags.map(function (d) { + if (!d.file) { + var rr = { + code: d.code, + start: d.start, + length: d.length, + line: 0, + column: 0, + messageText: d.messageText, + category: d.category, + fileName: "?", + }; + return rr; + } + var pos = ts.getLineAndCharacterOfPosition(d.file, d.start); + var r = { + code: d.code, + start: d.start, + length: d.length, + line: pos.line, + column: pos.character, + messageText: d.messageText, + category: d.category, + fileName: d.file.fileName, + }; + if (r.code == 1148) + r.messageText = pxtc.Util.lf("all symbols in top-level scope are always exported; please use a namespace if you want to export only some"); + return r; + }); + } + pxtc.patchUpDiagnostics = patchUpDiagnostics; + function compile(opts) { + var startTime = Date.now(); + var res = { + outfiles: {}, + diagnostics: [], + success: false, + times: {}, + }; + var fileText = {}; + for (var fileName in opts.fileSystem) { + fileText[normalizePath(fileName)] = opts.fileSystem[fileName]; + } + var setParentNodes = true; + var options = getTsCompilerOptions(opts); + var host = { + getSourceFile: function (fn, v, err) { + fn = normalizePath(fn); + var text = ""; + if (fileText.hasOwnProperty(fn)) { + text = fileText[fn]; + } + else { + if (err) + err("File not found: " + fn); + } + return ts.createSourceFile(fn, text, v, setParentNodes); + }, + fileExists: function (fn) { + fn = normalizePath(fn); + return fileText.hasOwnProperty(fn); + }, + getCanonicalFileName: function (fn) { return fn; }, + getDefaultLibFileName: function () { return "no-default-lib.d.ts"; }, + writeFile: function (fileName, data, writeByteOrderMark, onError) { + res.outfiles[fileName] = data; + }, + getCurrentDirectory: function () { return "."; }, + useCaseSensitiveFileNames: function () { return true; }, + getNewLine: function () { return "\n"; }, + readFile: function (fn) { + fn = normalizePath(fn); + return fileText[fn] || ""; + }, + directoryExists: function (dn) { return true; }, + }; + if (!opts.sourceFiles) + opts.sourceFiles = Object.keys(opts.fileSystem); + var tsFiles = opts.sourceFiles.filter(function (f) { return pxtc.U.endsWith(f, ".ts"); }); + var program = ts.createProgram(tsFiles, options, host); + // First get and report any syntactic errors. + res.diagnostics = patchUpDiagnostics(program.getSyntacticDiagnostics()); + if (res.diagnostics.length > 0) { + if (opts.forceEmit) { + pxt.debug('syntactic errors, forcing emit'); + pxtc.compileBinary(program, host, opts, res); + } + return res; + } + // If we didn't have any syntactic errors, then also try getting the global and + // semantic errors. + res.diagnostics = patchUpDiagnostics(program.getOptionsDiagnostics().concat(program.getGlobalDiagnostics())); + if (res.diagnostics.length == 0) { + res.diagnostics = patchUpDiagnostics(program.getSemanticDiagnostics()); + } + var emitStart = Date.now(); + res.times["typescript"] = emitStart - startTime; + if (opts.ast) { + res.ast = program; + } + if (opts.ast || opts.forceEmit || res.diagnostics.length == 0) { + var binOutput = pxtc.compileBinary(program, host, opts, res); + res.times["compilebinary"] = Date.now() - emitStart; + res.diagnostics = patchUpDiagnostics(binOutput.diagnostics); + } + if (res.diagnostics.length == 0) + res.success = true; + for (var _i = 0, _a = opts.sourceFiles; _i < _a.length; _i++) { + var f = _a[_i]; + if (pxtc.Util.startsWith(f, "built/")) + res.outfiles[f.slice(6)] = opts.fileSystem[f]; + } + return res; + } + pxtc.compile = compile; + function decompile(opts, fileName) { + var resp = compile(opts); + if (!resp.success) + return resp; + var file = resp.ast.getSourceFile(fileName); + var apis = pxtc.getApiInfo(resp.ast); + var blocksInfo = pxtc.getBlocksInfo(apis); + var bresp = pxtc.decompiler.decompileToBlocks(blocksInfo, file, { snippetMode: false }, pxtc.decompiler.buildRenameMap(resp.ast, file)); + return bresp; + } + pxtc.decompile = decompile; + function normalizePath(path) { + path = path.replace(/\\/g, "/"); + var parts = []; + path.split("/").forEach(function (part) { + if (part === ".." && parts.length) { + parts.pop(); + } + else if (part !== ".") { + parts.push(part); + } + }); + return parts.join("/"); + } + })(pxtc = ts.pxtc || (ts.pxtc = {})); +})(ts || (ts = {})); +var ts; +(function (ts) { + var pxtc; + (function (pxtc) { + var TokenKind; + (function (TokenKind) { + TokenKind[TokenKind["None"] = 0] = "None"; + TokenKind[TokenKind["Whitespace"] = 1] = "Whitespace"; + TokenKind[TokenKind["Identifier"] = 2] = "Identifier"; + TokenKind[TokenKind["Keyword"] = 3] = "Keyword"; + TokenKind[TokenKind["Operator"] = 4] = "Operator"; + TokenKind[TokenKind["CommentLine"] = 5] = "CommentLine"; + TokenKind[TokenKind["CommentBlock"] = 6] = "CommentBlock"; + TokenKind[TokenKind["NewLine"] = 7] = "NewLine"; + TokenKind[TokenKind["Literal"] = 8] = "Literal"; + TokenKind[TokenKind["Tree"] = 9] = "Tree"; + TokenKind[TokenKind["Block"] = 10] = "Block"; + TokenKind[TokenKind["EOF"] = 11] = "EOF"; + })(TokenKind || (TokenKind = {})); + var inputForMsg = ""; + function lookupKind(k) { + for (var _i = 0, _a = Object.keys(ts.SyntaxKind); _i < _a.length; _i++) { + var o = _a[_i]; + if (ts.SyntaxKind[o] === k) + return o; + } + return "?"; + } + var SK = ts.SyntaxKind; + function showMsg(t, msg) { + var pos = t.pos; + var ctx = inputForMsg.slice(pos - 20, pos) + "<*>" + inputForMsg.slice(pos, pos + 20); + console.log(ctx.replace(/\n/g, ""), ": L ", t.lineNo, msg); + } + function infixOperatorPrecedence(kind) { + switch (kind) { + case SK.CommaToken: + return 2; + case SK.EqualsToken: + case SK.PlusEqualsToken: + case SK.MinusEqualsToken: + case SK.AsteriskEqualsToken: + case SK.AsteriskAsteriskEqualsToken: + case SK.SlashEqualsToken: + case SK.PercentEqualsToken: + case SK.LessThanLessThanEqualsToken: + case SK.GreaterThanGreaterThanEqualsToken: + case SK.GreaterThanGreaterThanGreaterThanEqualsToken: + case SK.AmpersandEqualsToken: + case SK.BarEqualsToken: + case SK.CaretEqualsToken: + return 5; + case SK.QuestionToken: + case SK.ColonToken: + return 7; // ternary operator + case SK.BarBarToken: + return 10; + case SK.AmpersandAmpersandToken: + return 20; + case SK.BarToken: + return 30; + case SK.CaretToken: + return 40; + case SK.AmpersandToken: + return 50; + case SK.EqualsEqualsToken: + case SK.ExclamationEqualsToken: + case SK.EqualsEqualsEqualsToken: + case SK.ExclamationEqualsEqualsToken: + return 60; + case SK.LessThanToken: + case SK.GreaterThanToken: + case SK.LessThanEqualsToken: + case SK.GreaterThanEqualsToken: + case SK.InstanceOfKeyword: + case SK.InKeyword: + case SK.AsKeyword: + return 70; + case SK.LessThanLessThanToken: + case SK.GreaterThanGreaterThanToken: + case SK.GreaterThanGreaterThanGreaterThanToken: + return 80; + case SK.PlusToken: + case SK.MinusToken: + return 90; + case SK.AsteriskToken: + case SK.SlashToken: + case SK.PercentToken: + return 100; + case SK.AsteriskAsteriskToken: + return 101; + case SK.DotToken: + return 120; + default: + return 0; + } + } + function getTokKind(kind) { + switch (kind) { + case SK.EndOfFileToken: + return TokenKind.EOF; + case SK.SingleLineCommentTrivia: + return TokenKind.CommentLine; + case SK.MultiLineCommentTrivia: + return TokenKind.CommentBlock; + case SK.NewLineTrivia: + return TokenKind.NewLine; + case SK.WhitespaceTrivia: + return TokenKind.Whitespace; + case SK.ShebangTrivia: + case SK.ConflictMarkerTrivia: + return TokenKind.CommentBlock; + case SK.NumericLiteral: + case SK.StringLiteral: + case SK.RegularExpressionLiteral: + case SK.NoSubstitutionTemplateLiteral: + case SK.TemplateHead: + case SK.TemplateMiddle: + case SK.TemplateTail: + return TokenKind.Literal; + case SK.Identifier: + return TokenKind.Identifier; + default: + if (kind < SK.Identifier) + return TokenKind.Operator; + return TokenKind.Keyword; + } + } + var brokenRegExps = false; + function tokenize(input) { + inputForMsg = input; + var scanner = ts.createScanner(ts.ScriptTarget.Latest, false, ts.LanguageVariant.Standard, input, function (msg) { + var pos = scanner.getTextPos(); + console.log("scanner error", pos, msg.message); + }); + var tokens = []; + var braceBalance = 0; + var templateLevel = -1; + while (true) { + var kind = scanner.scan(); + if (kind == SK.CloseBraceToken && braceBalance == templateLevel) { + templateLevel = -1; + kind = scanner.reScanTemplateToken(); + } + if (brokenRegExps && kind == SK.SlashToken || kind == SK.SlashEqualsToken) { + var tmp = scanner.reScanSlashToken(); + if (tmp == SK.RegularExpressionLiteral) + kind = tmp; + } + if (kind == SK.GreaterThanToken) { + kind = scanner.reScanGreaterToken(); + } + var tok = { + kind: getTokKind(kind), + synKind: kind, + lineNo: 0, + pos: scanner.getTokenPos(), + text: scanner.getTokenText(), + }; + if (kind == SK.OpenBraceToken) + braceBalance++; + if (kind == SK.CloseBraceToken) { + if (--braceBalance < 0) + braceBalance = -10000000; + } + tokens.push(tok); + if (kind == SK.TemplateHead || kind == SK.TemplateMiddle) { + templateLevel = braceBalance; + } + if (tok.kind == TokenKind.EOF) + break; + } + // Util.assert(tokens.map(t => t.text).join("") == input) + return { tokens: tokens, braceBalance: braceBalance }; + } + function skipWhitespace(tokens, i) { + while (tokens[i] && tokens[i].kind == TokenKind.Whitespace) + i++; + return i; + } + // We do not want empty lines in the source to get lost - they serve as a sort of comment dividing parts of code + // We turn them into empty comments here + function emptyLinesToComments(tokens, cursorPos) { + var output = []; + var atLineBeg = true; + var lineNo = 1; + for (var i = 0; i < tokens.length; ++i) { + if (atLineBeg) { + var bkp = i; + i = skipWhitespace(tokens, i); + if (tokens[i].kind == TokenKind.NewLine) { + var isCursor = false; + if (cursorPos >= 0 && tokens[i].pos >= cursorPos) { + cursorPos = -1; + isCursor = true; + } + output.push({ + text: "", + kind: TokenKind.CommentLine, + pos: tokens[i].pos, + lineNo: lineNo, + synKind: SK.SingleLineCommentTrivia, + isCursor: isCursor + }); + } + else { + i = bkp; + } + } + output.push(tokens[i]); + tokens[i].lineNo = lineNo; + if (tokens[i].kind == TokenKind.NewLine) { + atLineBeg = true; + lineNo++; + } + else { + atLineBeg = false; + } + if (cursorPos >= 0 && tokens[i].pos >= cursorPos) { + cursorPos = -1; + } + } + return output; + } + // Add Tree tokens where needed + function matchBraces(tokens) { + var braceStack = []; + var braceTop = function () { return braceStack[braceStack.length - 1]; }; + braceStack.push({ + synKind: SK.EndOfFileToken, + token: { + children: [], + }, + }); + var pushClose = function (tok, synKind) { + var token = tok; + token.children = []; + token.kind = TokenKind.Tree; + braceStack.push({ synKind: synKind, token: token }); + }; + for (var i = 0; i < tokens.length; ++i) { + var token = tokens[i]; + var top_1 = braceStack[braceStack.length - 1]; + top_1.token.children.push(token); + switch (token.kind) { + case TokenKind.Operator: + switch (token.synKind) { + case SK.OpenBraceToken: + case SK.OpenParenToken: + case SK.OpenBracketToken: + pushClose(token, token.synKind + 1); + break; + case SK.CloseBraceToken: + case SK.CloseParenToken: + case SK.CloseBracketToken: + top_1.token.children.pop(); + while (true) { + top_1 = braceStack.pop(); + if (top_1.synKind == token.synKind) { + top_1.token.endToken = token; + break; + } + // don't go past brace with other closing parens + if (braceStack.length == 0 || top_1.synKind == SK.CloseBraceToken) { + braceStack.push(top_1); + break; + } + } + break; + default: + break; + } + break; + } + } + return braceStack[0].token.children; + } + function mkEOF() { + return { + kind: TokenKind.EOF, + synKind: SK.EndOfFileToken, + pos: 0, + lineNo: 0, + text: "" + }; + } + function mkSpace(t, s) { + return { + kind: TokenKind.Whitespace, + synKind: SK.WhitespaceTrivia, + pos: t.pos - s.length, + lineNo: t.lineNo, + text: s + }; + } + function mkNewLine(t) { + return { + kind: TokenKind.NewLine, + synKind: SK.NewLineTrivia, + pos: t.pos, + lineNo: t.lineNo, + text: "\n" + }; + } + function mkBlock(toks) { + return { + kind: TokenKind.Block, + synKind: SK.OpenBraceToken, + pos: toks[0].pos, + lineNo: toks[0].lineNo, + stmts: [{ tokens: toks }], + text: "{", + endToken: null + }; + } + function mkVirtualTree(toks) { + return { + kind: TokenKind.Tree, + synKind: SK.WhitespaceTrivia, + pos: toks[0].pos, + lineNo: toks[0].lineNo, + children: toks, + endToken: null, + text: "" + }; + } + function isExprEnd(t) { + if (!t) + return false; + switch (t.synKind) { + case SK.IfKeyword: + case SK.ElseKeyword: + case SK.LetKeyword: + case SK.ConstKeyword: + case SK.VarKeyword: + case SK.DoKeyword: + case SK.WhileKeyword: + case SK.SwitchKeyword: + case SK.CaseKeyword: + case SK.DefaultKeyword: + case SK.ForKeyword: + case SK.ReturnKeyword: + case SK.BreakKeyword: + case SK.ContinueKeyword: + case SK.TryKeyword: + case SK.CatchKeyword: + case SK.FinallyKeyword: + case SK.DeleteKeyword: + case SK.FunctionKeyword: + case SK.ClassKeyword: + case SK.YieldKeyword: + case SK.DebuggerKeyword: + return true; + default: + return false; + } + } + function delimitStmts(tokens, inStmtCtx, ctxToken) { + if (ctxToken === void 0) { ctxToken = null; } + var res = []; + var i = 0; + var currCtxToken; + var didBlock = false; + tokens = tokens.concat([mkEOF()]); + while (tokens[i].kind != TokenKind.EOF) { + var stmtBeg = i; + skipToStmtEnd(); + pxtc.Util.assert(i > stmtBeg, "Error at " + tokens[i].text); + addStatement(tokens.slice(stmtBeg, i)); + } + return res; + function addStatement(tokens) { + if (inStmtCtx) + tokens = trimWhitespace(tokens); + if (tokens.length == 0) + return; + tokens.forEach(delimitIn); + tokens = injectBlocks(tokens); + var merge = false; + if (inStmtCtx && res.length > 0) { + var prev = res[res.length - 1]; + var prevKind = prev.tokens[0].synKind; + var thisKind = tokens[0].synKind; + if ((prevKind == SK.IfKeyword && thisKind == SK.ElseKeyword) || + (prevKind == SK.TryKeyword && thisKind == SK.CatchKeyword) || + (prevKind == SK.TryKeyword && thisKind == SK.FinallyKeyword) || + (prevKind == SK.CatchKeyword && thisKind == SK.FinallyKeyword)) { + tokens.unshift(mkSpace(tokens[0], " ")); + pxtc.Util.pushRange(res[res.length - 1].tokens, tokens); + return; + } + } + res.push({ + tokens: tokens + }); + } + function injectBlocks(tokens) { + var output = []; + var i = 0; + while (i < tokens.length) { + if (tokens[i].blockSpanLength) { + var inner = tokens.slice(i, i + tokens[i].blockSpanLength); + var isVirtual = !!inner[0].blockSpanIsVirtual; + delete inner[0].blockSpanLength; + delete inner[0].blockSpanIsVirtual; + i += inner.length; + inner = injectBlocks(inner); + if (isVirtual) { + output.push(mkVirtualTree(inner)); + } + else { + output.push(mkSpace(inner[0], " ")); + output.push(mkBlock(trimWhitespace(inner))); + } + } + else { + output.push(tokens[i++]); + } + } + return output; + } + function delimitIn(t) { + if (t.kind == TokenKind.Tree) { + var tree = t; + tree.children = pxtc.Util.concat(delimitStmts(tree.children, false, tree).map(function (s) { return s.tokens; })); + } + } + function nextNonWs(stopOnNewLine) { + if (stopOnNewLine === void 0) { stopOnNewLine = false; } + while (true) { + i++; + switch (tokens[i].kind) { + case TokenKind.Whitespace: + case TokenKind.CommentBlock: + case TokenKind.CommentLine: + break; + case TokenKind.NewLine: + if (stopOnNewLine) + break; + break; + default: + return; + } + } + } + function skipOptionalNewLine() { + while (tokens[i].kind == TokenKind.Whitespace) { + i++; + } + if (tokens[i].kind == TokenKind.NewLine) + i++; + } + function skipUntilBlock() { + while (true) { + i++; + switch (tokens[i].kind) { + case TokenKind.EOF: + return; + case TokenKind.Tree: + if (tokens[i].synKind == SK.OpenBraceToken) { + i--; + expectBlock(); + return; + } + break; + } + } + } + function handleBlock() { + pxtc.Util.assert(tokens[i].synKind == SK.OpenBraceToken); + var tree = tokens[i]; + pxtc.Util.assert(tree.kind == TokenKind.Tree); + var blk = tokens[i]; + blk.stmts = delimitStmts(tree.children, true, currCtxToken); + delete tree.children; + blk.kind = TokenKind.Block; + i++; + didBlock = true; + } + function expectBlock() { + var begIdx = i + 1; + nextNonWs(); + if (tokens[i].synKind == SK.OpenBraceToken) { + handleBlock(); + skipOptionalNewLine(); + } + else { + skipToStmtEnd(); + tokens[begIdx].blockSpanLength = i - begIdx; + } + } + function skipToStmtEnd() { + while (true) { + var t = tokens[i]; + var bkp = i; + currCtxToken = t; + didBlock = false; + if (t.kind == TokenKind.EOF) + return; + if (inStmtCtx && t.synKind == SK.SemicolonToken) { + i++; + skipOptionalNewLine(); + return; + } + if (t.synKind == SK.EqualsGreaterThanToken) { + nextNonWs(); + if (tokens[i].synKind == SK.OpenBraceToken) { + handleBlock(); + continue; + } + else { + var begIdx = i; + skipToStmtEnd(); + var j = i; + while (tokens[j].kind == TokenKind.NewLine) + j--; + tokens[begIdx].blockSpanLength = j - begIdx; + tokens[begIdx].blockSpanIsVirtual = true; + return; + } + } + if (inStmtCtx && infixOperatorPrecedence(t.synKind)) { + var begIdx = i; + // an infix operator at the end of the line prevents the newline from ending the statement + nextNonWs(); + if (isExprEnd(tokens[i])) { + // unless next line starts with something statement-like + i = begIdx; + } + else { + continue; + } + } + if (inStmtCtx && t.kind == TokenKind.NewLine) { + nextNonWs(); + t = tokens[i]; + // if we get a infix operator other than +/- after newline, it's a continuation + if (infixOperatorPrecedence(t.synKind) && t.synKind != SK.PlusToken && t.synKind != SK.MinusToken) { + continue; + } + else { + i = bkp + 1; + return; + } + } + if (t.synKind == SK.OpenBraceToken && ctxToken && ctxToken.synKind == SK.ClassKeyword) { + var jj = i - 1; + while (jj >= 0 && tokens[jj].kind == TokenKind.Whitespace) + jj--; + if (jj < 0 || tokens[jj].synKind != SK.EqualsToken) { + i--; + expectBlock(); // method body + return; + } + } + pxtc.Util.assert(bkp == i); + switch (t.synKind) { + case SK.ForKeyword: + case SK.WhileKeyword: + case SK.IfKeyword: + case SK.CatchKeyword: + nextNonWs(); + if (tokens[i].synKind == SK.OpenParenToken) { + expectBlock(); + } + else { + continue; // just continue until new line + } + return; + case SK.DoKeyword: + expectBlock(); + i--; + nextNonWs(); + if (tokens[i].synKind == SK.WhileKeyword) { + i++; + continue; + } + else { + return; + } + case SK.ElseKeyword: + nextNonWs(); + if (tokens[i].synKind == SK.IfKeyword) { + continue; // 'else if' - keep scanning + } + else { + i = bkp; + expectBlock(); + return; + } + case SK.TryKeyword: + case SK.FinallyKeyword: + expectBlock(); + return; + case SK.ClassKeyword: + case SK.NamespaceKeyword: + case SK.ModuleKeyword: + case SK.InterfaceKeyword: + case SK.FunctionKeyword: + skipUntilBlock(); + return; + } + pxtc.Util.assert(!didBlock, "forgot continue/return after expectBlock"); + i++; + } + } + } + function isWhitespaceOrNewLine(tok) { + return tok && (tok.kind == TokenKind.Whitespace || tok.kind == TokenKind.NewLine); + } + function removeIndent(tokens) { + var output = []; + var atLineBeg = false; + for (var i = 0; i < tokens.length; ++i) { + if (atLineBeg) + i = skipWhitespace(tokens, i); + if (tokens[i]) { + output.push(tokens[i]); + atLineBeg = tokens[i].kind == TokenKind.NewLine; + } + } + return output; + } + function trimWhitespace(toks) { + toks = toks.slice(0); + while (isWhitespaceOrNewLine(toks[0])) + toks.shift(); + while (isWhitespaceOrNewLine(toks[toks.length - 1])) + toks.pop(); + return toks; + } + function normalizeSpace(tokens) { + var output = []; + var i = 0; + var lastNonTrivialToken = mkEOF(); + tokens = tokens.concat([mkEOF()]); + while (i < tokens.length) { + i = skipWhitespace(tokens, i); + var token = tokens[i]; + if (token.kind == TokenKind.EOF) + break; + var j = skipWhitespace(tokens, i + 1); + if (token.kind == TokenKind.NewLine && tokens[j].synKind == SK.OpenBraceToken) { + i = j; // skip NL + continue; + } + var needsSpace = true; + var last = output.length == 0 ? mkNewLine(token) : output[output.length - 1]; + switch (last.synKind) { + case SK.ExclamationToken: + case SK.TildeToken: + case SK.DotToken: + needsSpace = false; + break; + case SK.PlusToken: + case SK.MinusToken: + case SK.PlusPlusToken: + case SK.MinusMinusToken: + if (last.isPrefix) + needsSpace = false; + break; + } + switch (token.synKind) { + case SK.DotToken: + case SK.CommaToken: + case SK.NewLineTrivia: + case SK.ColonToken: + case SK.SemicolonToken: + case SK.OpenBracketToken: + needsSpace = false; + break; + case SK.PlusPlusToken: + case SK.MinusMinusToken: + if (last.kind == TokenKind.Tree || last.kind == TokenKind.Identifier || last.kind == TokenKind.Keyword) + needsSpace = false; + /* fall through */ + case SK.PlusToken: + case SK.MinusToken: + if (lastNonTrivialToken.kind == TokenKind.EOF || + infixOperatorPrecedence(lastNonTrivialToken.synKind) || + lastNonTrivialToken.synKind == SK.SemicolonToken) + token.isPrefix = true; + break; + case SK.OpenParenToken: + if (last.kind == TokenKind.Identifier) + needsSpace = false; + if (last.kind == TokenKind.Keyword) + switch (last.synKind) { + case SK.IfKeyword: + case SK.ForKeyword: + case SK.WhileKeyword: + case SK.SwitchKeyword: + case SK.ReturnKeyword: + case SK.ThrowKeyword: + case SK.CatchKeyword: + break; + default: + needsSpace = false; + } + break; + } + if (last.kind == TokenKind.NewLine) + needsSpace = false; + if (needsSpace) + output.push(mkSpace(token, " ")); + output.push(token); + if (token.kind != TokenKind.NewLine) + lastNonTrivialToken = token; + i++; + } + return output; + } + function finalFormat(ind, token) { + if (token.synKind == SK.NoSubstitutionTemplateLiteral && + /^`[\s\.#01]*`$/.test(token.text)) { + var lines = token.text.slice(1, token.text.length - 1).split("\n").map(function (l) { return l.replace(/\s/g, ""); }).filter(function (l) { return !!l; }); + if (lines.length < 4 || lines.length > 5) + return; + var numFrames = Math.floor((Math.max.apply(Math, lines.map(function (l) { return l.length; })) + 2) / 5); + if (numFrames <= 0) + numFrames = 1; + var out = "`\n"; + for (var i = 0; i < 5; ++i) { + var l = lines[i] || ""; + while (l.length < numFrames * 5) + l += "."; + l = l.replace(/0/g, "."); + l = l.replace(/1/g, "#"); + l = l.replace(/...../g, function (m) { return "/" + m; }); + out += ind + l.replace(/./g, function (m) { return " " + m; }).replace(/\//g, " ").slice(3) + "\n"; + } + out += ind + "`"; + token.text = out; + } + } + function toStr(v) { + if (Array.isArray(v)) + return "[[ " + v.map(toStr).join(" ") + " ]]"; + if (typeof v.text == "string") + return JSON.stringify(v.text); + return v + ""; + } + pxtc.toStr = toStr; + function format(input, pos) { + var r = tokenize(input); + //if (r.braceBalance != 0) return null + var topTokens = r.tokens; + topTokens = emptyLinesToComments(topTokens, pos); + topTokens = matchBraces(topTokens); + var topStmts = delimitStmts(topTokens, true); + var ind = ""; + var output = ""; + var outpos = -1; + var indIncrLine = 0; + topStmts.forEach(ppStmt); + topStmts.forEach(function (s) { return s.tokens.forEach(findNonBlocks); }); + if (outpos == -1) + outpos = output.length; + return { + formatted: output, + pos: outpos + }; + function findNonBlocks(t) { + if (t.kind == TokenKind.Tree) { + var tree = t; + if (t.synKind == SK.OpenBraceToken) { + } + tree.children.forEach(findNonBlocks); + } + else if (t.kind == TokenKind.Block) { + t.stmts.forEach(function (s) { return s.tokens.forEach(findNonBlocks); }); + } + } + function incrIndent(parToken, f) { + if (indIncrLine == parToken.lineNo) { + f(); + } + else { + indIncrLine = parToken.lineNo; + var prev = ind; + ind += " "; + f(); + ind = prev; + } + } + function ppStmt(s) { + var toks = removeIndent(s.tokens); + if (toks.length == 1 && !toks[0].isCursor && toks[0].text == "") { + output += "\n"; + return; + } + output += ind; + incrIndent(toks[0], function () { + ppToks(toks); + }); + if (output[output.length - 1] != "\n") + output += "\n"; + } + function writeToken(t) { + if (outpos == -1 && t.pos + t.text.length >= pos) { + outpos = output.length + (pos - t.pos); + } + output += t.text; + } + function ppToks(tokens) { + tokens = normalizeSpace(tokens); + var _loop_7 = function(i) { + var t = tokens[i]; + finalFormat(ind, t); + writeToken(t); + switch (t.kind) { + case TokenKind.Tree: + var tree_1 = t; + incrIndent(t, function () { + ppToks(removeIndent(tree_1.children)); + }); + if (tree_1.endToken) { + writeToken(tree_1.endToken); + } + break; + case TokenKind.Block: + var blk = t; + if (blk.stmts.length == 0) { + output += " "; + } + else { + output += "\n"; + blk.stmts.forEach(ppStmt); + output += ind.slice(4); + } + if (blk.endToken) + writeToken(blk.endToken); + else + output += "}"; + break; + case TokenKind.NewLine: + if (tokens[i + 1] && tokens[i + 1].kind == TokenKind.CommentLine && + tokens[i + 1].text == "" && !tokens[i + 1].isCursor) + break; // no indent for empty line + if (i == tokens.length - 1) + output += ind.slice(4); + else + output += ind; + break; + case TokenKind.Whitespace: + break; + } + }; + for (var i = 0; i < tokens.length; ++i) { + _loop_7(i); + } + } + } + pxtc.format = format; + })(pxtc = ts.pxtc || (ts.pxtc = {})); +})(ts || (ts = {})); +var ts; +(function (ts) { + var pxtc; + (function (pxtc) { + // HEX file documentation at: https://en.wikipedia.org/wiki/Intel_HEX + /* From above: + This example shows a file that has four data records followed by an end-of-file record: + + :10010000214601360121470136007EFE09D2190140 + :100110002146017E17C20001FF5F16002148011928 + :10012000194E79234623965778239EDA3F01B2CAA7 + :100130003F0156702B5E712B722B732146013421C7 + :00000001FF + + A record (line of text) consists of six fields (parts) that appear in order from left to right: + - Start code, one character, an ASCII colon ':'. + - Byte count, two hex digits, indicating the number of bytes (hex digit pairs) in the data field. + The maximum byte count is 255 (0xFF). 16 (0x10) and 32 (0x20) are commonly used byte counts. + - Address, four hex digits, representing the 16-bit beginning memory address offset of the data. + The physical address of the data is computed by adding this offset to a previously established + base address, thus allowing memory addressing beyond the 64 kilobyte limit of 16-bit addresses. + The base address, which defaults to zero, can be changed by various types of records. + Base addresses and address offsets are always expressed as big endian values. + - Record type (see record types below), two hex digits, 00 to 05, defining the meaning of the data field. + - Data, a sequence of n bytes of data, represented by 2n hex digits. Some records omit this field (n equals zero). + The meaning and interpretation of data bytes depends on the application. + - Checksum, two hex digits, a computed value that can be used to verify the record has no errors. + + */ + pxtc.vtableShift = 2; + var UF2; + (function (UF2) { + UF2.startMagic = "UF2\x0AWQ]\x9E"; + UF2.endMagic = "0o\xB1\x0A"; + UF2.UF2_MAGIC_START0 = 0x0A324655; // "UF2\n" + UF2.UF2_MAGIC_START1 = 0x9E5D5157; // Randomly selected + UF2.UF2_MAGIC_END = 0x0AB16F30; // Ditto + function parseBlock(block) { + var wordAt = function (k) { + return (block[k] + (block[k + 1] << 8) + (block[k + 2] << 16) + (block[k + 3] << 24)) >>> 0; + }; + if (!block || block.length != 512 || + wordAt(0) != UF2.UF2_MAGIC_START0 || wordAt(4) != UF2.UF2_MAGIC_START1 || + wordAt(block.length - 4) != UF2.UF2_MAGIC_END) + return null; + return { + flags: wordAt(8), + targetAddr: wordAt(12), + payloadSize: wordAt(16), + blockNo: wordAt(20), + numBlocks: wordAt(24), + data: block.slice(32, 512 - 4) + }; + } + UF2.parseBlock = parseBlock; + function parseFile(blocks) { + var r = []; + for (var i = 0; i < blocks.length; i += 512) { + var b = parseBlock(blocks.slice(i, i + 512)); + if (b) + r.push(b); + } + return r; + } + UF2.parseFile = parseFile; + function toBin(blocks) { + if (blocks.length < 512) + return null; + var curraddr = -1; + var appstartaddr = -1; + var bufs = []; + for (var i = 0; i < blocks.length; ++i) { + var ptr = i * 512; + var bl = parseBlock(blocks.slice(ptr, ptr + 512)); + if (!bl) + continue; + if (curraddr == -1) { + curraddr = bl.targetAddr; + appstartaddr = curraddr; + } + var padding = bl.targetAddr - curraddr; + if (padding < 0 || padding % 4 || padding > 1024 * 1024) + continue; + if (padding > 0) + bufs.push(new Uint8Array(padding)); + bufs.push(blocks.slice(ptr + 32, ptr + 32 + bl.payloadSize)); + curraddr = bl.targetAddr + bl.payloadSize; + } + var len = 0; + for (var _i = 0, bufs_1 = bufs; _i < bufs_1.length; _i++) { + var b = bufs_1[_i]; + len += b.length; + } + if (len == 0) + return null; + var r = new Uint8Array(len); + var dst = 0; + for (var _a = 0, bufs_2 = bufs; _a < bufs_2.length; _a++) { + var b = bufs_2[_a]; + for (var i = 0; i < b.length; ++i) + r[dst++] = b[i]; + } + return { + buf: r, + start: appstartaddr, + }; + } + UF2.toBin = toBin; + function setWord(block, ptr, v) { + block[ptr] = (v & 0xff); + block[ptr + 1] = ((v >> 8) & 0xff); + block[ptr + 2] = ((v >> 16) & 0xff); + block[ptr + 3] = ((v >> 24) & 0xff); + } + function newBlockFile() { + return { + currBlock: null, + currPtr: -1, + blocks: [], + ptrs: [] + }; + } + UF2.newBlockFile = newBlockFile; + function serializeFile(f) { + for (var i = 0; i < f.blocks.length; ++i) { + setWord(f.blocks[i], 24, f.blocks.length); + } + var res = ""; + for (var _i = 0, _a = f.blocks; _i < _a.length; _i++) { + var b = _a[_i]; + res += pxtc.Util.uint8ArrayToString(b); + } + return res; + } + UF2.serializeFile = serializeFile; + function hasAddr(b, a) { + if (!b) + return false; + return b.targetAddr <= a && a < b.targetAddr + b.payloadSize; + } + function readBytes(blocks, addr, length) { + var res = new Uint8Array(length); + var bl; + for (var i = 0; i < length; ++i, ++addr) { + if (!hasAddr(bl, addr)) + bl = blocks.filter(function (b) { return hasAddr(b, addr); })[0]; + if (bl) + res[i] = bl.data[addr - bl.targetAddr]; + } + return res; + } + UF2.readBytes = readBytes; + function writeBytes(f, addr, bytes) { + var currBlock = f.currBlock; + var needAddr = addr >> 8; + // account for unaligned writes + // this function is only used to write small chunks, so recursion is fine + var firstChunk = 256 - (addr & 0xff); + if (bytes.length > firstChunk) { + writeBytes(f, addr, bytes.slice(0, firstChunk)); + writeBytes(f, addr + firstChunk, bytes.slice(firstChunk)); + return; + } + if (needAddr != f.currPtr) { + var i = 0; + currBlock = null; + for (var i_1 = 0; i_1 < f.ptrs.length; ++i_1) { + if (f.ptrs[i_1] == needAddr) { + currBlock = f.blocks[i_1]; + break; + } + } + if (!currBlock) { + currBlock = new Uint8Array(512); + setWord(currBlock, 0, UF2.UF2_MAGIC_START0); + setWord(currBlock, 4, UF2.UF2_MAGIC_START1); + setWord(currBlock, 12, needAddr << 8); + setWord(currBlock, 16, 256); + setWord(currBlock, 20, f.blocks.length); + setWord(currBlock, 512 - 4, UF2.UF2_MAGIC_END); + f.blocks.push(currBlock); + f.ptrs.push(needAddr); + } + f.currPtr = needAddr; + f.currBlock = currBlock; + } + var p = (addr & 0xff) + 32; + for (var i = 0; i < bytes.length; ++i) + currBlock[p + i] = bytes[i]; + } + UF2.writeBytes = writeBytes; + function writeHex(f, hex) { + var upperAddr = "0000"; + for (var i = 0; i < hex.length; ++i) { + var m = /:02000004(....)/.exec(hex[i]); + if (m) { + upperAddr = m[1]; + } + m = /^:..(....)00(.*)[0-9A-F][0-9A-F]$/.exec(hex[i]); + if (m) { + var newAddr = parseInt(upperAddr + m[1], 16); + var hh = m[2]; + var arr = []; + for (var j = 0; j < hh.length; j += 2) { + arr.push(parseInt(hh[j] + hh[j + 1], 16)); + } + writeBytes(f, newAddr, arr); + } + } + } + UF2.writeHex = writeHex; + })(UF2 = pxtc.UF2 || (pxtc.UF2 = {})); + // TODO should be internal + var hex; + (function (hex_2) { + var funcInfo; + var hex; + var jmpStartAddr; + var jmpStartIdx; + var bytecodePaddingSize; + var bytecodeStartAddr; + var bytecodeStartIdx; + var asmLabels = {}; + hex_2.asmTotalSource = ""; + hex_2.defaultPageSize = 0x400; + // utility function + function swapBytes(str) { + var r = ""; + var i = 0; + for (; i < str.length; i += 2) + r = str[i] + str[i + 1] + r; + pxtc.assert(i == str.length); + return r; + } + function parseChecksumBlock(buf, pos) { + if (pos === void 0) { pos = 0; } + var magic = pxt.HF2.read32(buf, pos); + if ((magic & 0x7fffffff) != 0x07eeb07c) { + pxt.log("no checksum block magic"); + return null; + } + var endMarkerPos = pxt.HF2.read32(buf, pos + 4); + var endMarker = pxt.HF2.read32(buf, pos + 8); + if (endMarkerPos & 3) { + pxt.log("invalid end marker position"); + return null; + } + var pageSize = 1 << (endMarker & 0xff); + if (pageSize != pxt.appTarget.compile.flashCodeAlign) { + pxt.log("invalid page size: " + pageSize); + return null; + } + var blk = { + magic: magic, + endMarkerPos: endMarkerPos, + endMarker: endMarker, + regions: [] + }; + for (var i = pos + 12; i < buf.length - 7; i += 8) { + var r = { + start: pageSize * pxt.HF2.read16(buf, i), + length: pageSize * pxt.HF2.read16(buf, i + 2), + checksum: pxt.HF2.read32(buf, i + 4) + }; + if (r.length && r.checksum) { + blk.regions.push(r); + } + else { + break; + } + } + //console.log(hexDump(buf), blk) + return blk; + } + hex_2.parseChecksumBlock = parseChecksumBlock; + function hexDump(bytes, startOffset) { + if (startOffset === void 0) { startOffset = 0; } + function toHex(n, len) { + if (len === void 0) { len = 8; } + var r = n.toString(16); + while (r.length < len) + r = "0" + r; + return r; + } + var r = ""; + for (var i = 0; i < bytes.length; i += 16) { + r += toHex(startOffset + i) + ": "; + var t = ""; + for (var j = 0; j < 16; j++) { + if ((j & 3) == 0) + r += " "; + var v = bytes[i + j]; + if (v == null) { + r += " "; + continue; + } + r += toHex(v, 2) + " "; + if (32 <= v && v < 127) + t += String.fromCharCode(v); + else + t += "."; + } + r += " " + t + "\n"; + } + return r; + } + hex_2.hexDump = hexDump; + function setupInlineAssembly(opts) { + asmLabels = {}; + var asmSources = opts.sourceFiles.filter(function (f) { return pxtc.U.endsWith(f, ".asm"); }); + hex_2.asmTotalSource = ""; + var asmIdx = 0; + for (var _i = 0, asmSources_1 = asmSources; _i < asmSources_1.length; _i++) { + var f = asmSources_1[_i]; + var src = opts.fileSystem[f]; + src.replace(/^\s*(\w+):/mg, function (f, lbl) { + asmLabels[lbl] = true; + return ""; + }); + var code = ".section code\n" + + "@stackmark func\n" + + "@scope user" + asmIdx++ + "\n" + + src + "\n" + + "@stackempty func\n" + + "@scope\n"; + hex_2.asmTotalSource += code; + } + } + hex_2.setupInlineAssembly = setupInlineAssembly; + function isSetupFor(extInfo) { + return currentSetup == extInfo.sha; + } + hex_2.isSetupFor = isSetupFor; + function parseHexBytes(bytes) { + bytes = bytes.replace(/^[\s:]/, ""); + if (!bytes) + return []; + var m = /^([a-f0-9][a-f0-9])/i.exec(bytes); + if (m) + return [parseInt(m[1], 16)].concat(parseHexBytes(bytes.slice(2))); + else + throw pxtc.oops("bad bytes " + bytes); + } + var currentSetup = null; + // setup for a particular .hex template file (which corresponds to the C++ source in included packages and the board) + function flashCodeAlign(opts) { + return opts.flashCodeAlign || hex_2.defaultPageSize; + } + hex_2.flashCodeAlign = flashCodeAlign; + // some hex files use '02' records instead of '04' record for addresses. go figure. + function patchSegmentHex(hex) { + for (var i = 0; i < hex.length; ++i) { + // :020000021000EC + if (hex[i][8] == '2') { + var m = /^:02....02(....)..$/.exec(hex[i]); + pxtc.U.assert(!!m); + var upaddr = parseInt(m[1], 16) * 16; + pxtc.U.assert((upaddr & 0xffff) == 0); + hex[i] = hexBytes([0x02, 0x00, 0x00, 0x04, 0x00, upaddr >> 16]); + } + } + } + function setupFor(opts, extInfo, hexinfo) { + if (isSetupFor(extInfo)) + return; + currentSetup = extInfo.sha; + hex_2.currentHexInfo = hexinfo; + hex = hexinfo.hex; + patchSegmentHex(hex); + var i = 0; + var upperAddr = "0000"; + var lastAddr = 0; + var lastIdx = 0; + bytecodeStartAddr = 0; + var hitEnd = function () { + if (!bytecodeStartAddr) { + var bytes = parseHexBytes(hex[lastIdx]); + var missing = (0x10 - ((lastAddr + bytes[0]) & 0xf)) & 0xf; + if (missing) + if (bytes[2] & 0xf) { + var next = lastAddr + bytes[0]; + var newline = [missing, next >> 8, next & 0xff, 0x00]; + for (var i_2 = 0; i_2 < missing; ++i_2) + newline.push(0x00); + lastIdx++; + hex.splice(lastIdx, 0, hexBytes(newline)); + bytecodeStartAddr = next + missing; + } + else { + if (bytes[0] != 0x10) { + bytes.pop(); // checksum + bytes[0] = 0x10; + while (bytes.length < 20) + bytes.push(0x00); + hex[lastIdx] = hexBytes(bytes); + } + bytecodeStartAddr = lastAddr + 16; + } + else { + bytecodeStartAddr = lastAddr + bytes[0]; + } + bytecodeStartIdx = lastIdx + 1; + var pageSize = flashCodeAlign(opts); + hex_2.bytecodeStartAddrPadded = (bytecodeStartAddr & ~(pageSize - 1)) + pageSize; + var paddingBytes = hex_2.bytecodeStartAddrPadded - bytecodeStartAddr; + pxtc.assert((paddingBytes & 0xf) == 0); + bytecodePaddingSize = paddingBytes; + } + }; + for (; i < hex.length; ++i) { + var m = /:02000004(....)/.exec(hex[i]); + if (m) { + upperAddr = m[1]; + } + m = /^:..(....)00/.exec(hex[i]); + if (m) { + var newAddr = parseInt(upperAddr + m[1], 16); + if (newAddr >= 0x3C000) + hitEnd(); + lastIdx = i; + lastAddr = newAddr; + } + if (/^:00000001/.test(hex[i])) + hitEnd(); + // random magic number, which marks the beginning of the array of function pointers in the .hex file + // it is defined in pxt-microbit-core + m = /^:10....000108010842424242010801083ED8E98D/.exec(hex[i]); + if (m) { + jmpStartAddr = lastAddr; + jmpStartIdx = i; + } + } + if (!jmpStartAddr) + pxtc.oops("No hex start"); + if (!bytecodeStartAddr) + pxtc.oops("No hex end"); + funcInfo = {}; + var funs = extInfo.functions; + for (var i_3 = jmpStartIdx + 1; i_3 < hex.length; ++i_3) { + var m = /^:10(....)00(.{16})/.exec(hex[i_3]); + if (!m) + continue; + var s = hex[i_3].slice(9); + var step = opts.shortPointers ? 4 : 8; + while (s.length >= step) { + var inf = funs.shift(); + if (!inf) + return; + funcInfo[inf.name] = inf; + var hexb = s.slice(0, step); + //console.log(inf.name, hexb) + inf.value = parseInt(swapBytes(hexb), 16); + if (!inf.value) { + pxtc.U.oops("No value for " + inf.name + " / " + hexb); + } + s = s.slice(step); + } + } + pxtc.oops(); + } + hex_2.setupFor = setupFor; + function validateShim(funname, shimName, hasRet, numArgs) { + if (shimName == "TD_ID" || shimName == "TD_NOOP") + return; + if (pxtc.U.lookup(asmLabels, shimName)) + return; + var nm = funname + "(...) (shim=" + shimName + ")"; + var inf = lookupFunc(shimName); + if (inf) { + if (!hasRet) { + if (inf.type != "P") + pxtc.U.userError("expecting procedure for " + nm); + } + else { + if (inf.type != "F") + pxtc.U.userError("expecting function for " + nm); + } + if (numArgs != inf.args) + pxtc.U.userError("argument number mismatch: " + numArgs + " vs " + inf.args + " in C++"); + } + else { + pxtc.U.userError("function not found: " + nm); + } + } + hex_2.validateShim = validateShim; + function lookupFunc(name) { + return funcInfo[name]; + } + hex_2.lookupFunc = lookupFunc; + function lookupFunctionAddr(name) { + var inf = lookupFunc(name); + if (inf) + return inf.value; + return null; + } + hex_2.lookupFunctionAddr = lookupFunctionAddr; + function hexTemplateHash() { + var sha = currentSetup ? currentSetup.slice(0, 16) : ""; + while (sha.length < 16) + sha += "0"; + return sha.toUpperCase(); + } + hex_2.hexTemplateHash = hexTemplateHash; + function hexPrelude() { + return " .startaddr 0x" + hex_2.bytecodeStartAddrPadded.toString(16) + "\n"; + } + hex_2.hexPrelude = hexPrelude; + function hexBytes(bytes) { + var chk = 0; + var r = ":"; + bytes.forEach(function (b) { return chk += b; }); + bytes.push((-chk) & 0xff); + bytes.forEach(function (b) { return r += ("0" + b.toString(16)).slice(-2); }); + return r.toUpperCase(); + } + function patchHex(bin, buf, shortForm, useuf2) { + var myhex = hex.slice(0, bytecodeStartIdx); + pxtc.assert(buf.length < 32000); + // store the size of the program (in 16 bit words) + buf[17] = buf.length; + var zeros = []; + for (var i = 0; i < bytecodePaddingSize >> 1; ++i) + zeros.push(0); + buf = zeros.concat(buf); + var ptr = 0; + function nextLine(buf, addr) { + var bytes = [0x10, (addr >> 8) & 0xff, addr & 0xff, 0]; + for (var j = 0; j < 8; ++j) { + bytes.push((buf[ptr] || 0) & 0xff); + bytes.push((buf[ptr] || 0) >>> 8); + ptr++; + } + return bytes; + } + // 0x4209 is the version number matching pxt-microbit-core + var hd = [0x4209, 0, hex_2.bytecodeStartAddrPadded & 0xffff, hex_2.bytecodeStartAddrPadded >>> 16]; + var tmp = hexTemplateHash(); + for (var i = 0; i < 4; ++i) + hd.push(parseInt(swapBytes(tmp.slice(i * 4, i * 4 + 4)), 16)); + var uf2 = useuf2 ? UF2.newBlockFile() : null; + if (uf2) { + UF2.writeHex(uf2, myhex); + UF2.writeBytes(uf2, jmpStartAddr, nextLine(hd, jmpStartIdx).slice(4)); + if (bin.checksumBlock) { + var bytes = []; + for (var _i = 0, _a = bin.checksumBlock; _i < _a.length; _i++) { + var w = _a[_i]; + bytes.push(w & 0xff, w >> 8); + } + UF2.writeBytes(uf2, bin.target.flashChecksumAddr, bytes); + } + } + else { + myhex[jmpStartIdx] = hexBytes(nextLine(hd, jmpStartAddr)); + if (bin.checksumBlock) { + pxtc.U.oops("checksum block in HEX not implemented yet"); + } + } + ptr = 0; + if (shortForm) + myhex = []; + var addr = bytecodeStartAddr; + var upper = (addr - 16) >> 16; + while (ptr < buf.length) { + if (uf2) { + UF2.writeBytes(uf2, addr, nextLine(buf, addr).slice(4)); + } + else { + if ((addr >> 16) != upper) { + upper = addr >> 16; + myhex.push(hexBytes([0x02, 0x00, 0x00, 0x04, upper >> 8, upper & 0xff])); + } + myhex.push(hexBytes(nextLine(buf, addr))); + } + addr += 16; + } + if (!shortForm) { + var app = hex.slice(bytecodeStartIdx); + if (uf2) + UF2.writeHex(uf2, app); + else + pxtc.Util.pushRange(myhex, app); + } + if (uf2) + return [UF2.serializeFile(uf2)]; + else + return myhex; + } + hex_2.patchHex = patchHex; + })(hex = pxtc.hex || (pxtc.hex = {})); + function asmline(s) { + if (!/(^[\s;])|(:$)/.test(s)) + s = " " + s; + return s + "\n"; + } + pxtc.asmline = asmline; + function stringLiteral(s) { + var r = "\""; + for (var i = 0; i < s.length; ++i) { + // TODO generate warning when seeing high character ? + var c = s.charCodeAt(i) & 0xff; + var cc = String.fromCharCode(c); + if (cc == "\\" || cc == "\"") + r += "\\" + cc; + else if (cc == "\n") + r += "\\n"; + else if (c <= 0xf) + r += "\\x0" + c.toString(16); + else if (c < 32 || c > 127) + r += "\\x" + c.toString(16); + else + r += cc; + } + return r + "\""; + } + function emitStrings(bin) { + for (var _i = 0, _a = Object.keys(bin.strings); _i < _a.length; _i++) { + var s = _a[_i]; + var lbl = bin.strings[s]; + // string representation of DAL - 0xffff in general for ref-counted objects means it's static and shouldn't be incr/decred + bin.otherLiterals.push("\n.balign 4\n" + lbl + "meta: .short 0xffff, " + s.length + "\n" + lbl + ": .string " + stringLiteral(s) + "\n"); + } + } + function vtableToAsm(info) { + var s = "\n .balign " + (1 << pxtc.vtableShift) + "\n" + info.id + "_VT:\n .short " + (info.refmask.length * 4 + 4) + " ; size in bytes\n .byte " + (info.vtable.length + 2) + ", 0 ; num. methods\n"; + s += " .word " + info.id + "_IfaceVT\n"; + s += " .word pxt::RefRecord_destroy|1\n"; + s += " .word pxt::RefRecord_print|1\n"; + for (var _i = 0, _a = info.vtable; _i < _a.length; _i++) { + var m = _a[_i]; + s += " .word " + m.label() + "|1\n"; + } + var refmask = info.refmask.map(function (v) { return v ? "1" : "0"; }); + while (refmask.length < 2 || refmask.length % 2 != 0) + refmask.push("0"); + s += " .byte " + refmask.join(",") + "\n"; + // VTable for interface method is just linear. If we ever have lots of interface + // methods and lots of classes this could become a problem. We could use a table + // of (iface-member-id, function-addr) pairs and binary search. + // See https://codethemicrobit.com/nymuaedeou for Thumb binary search. + s += "\n .balign 4\n" + info.id + "_IfaceVT:\n"; + for (var _b = 0, _c = info.itable; _b < _c.length; _b++) { + var m = _c[_b]; + s += " .word " + (m ? m.label() + "|1" : "0") + "\n"; + } + s += "\n"; + return s; + } + function serialize(bin, opts) { + var asmsource = "; start\n" + hex.hexPrelude() + " \n .hex 708E3B92C615A841C49866C975EE5197 ; magic number\n .hex " + hex.hexTemplateHash() + " ; hex template hash\n .hex 0000000000000000 ; @SRCHASH@\n .short " + bin.globalsWords + " ; num. globals\n .short 0 ; patched with number of words resulting from assembly\n .word 0 ; reserved\n .word 0 ; reserved\n .word 0 ; reserved\n"; + var snippets = null; + if (opts.target.nativeType == "AVR") + snippets = new pxtc.AVRSnippets(); + else + snippets = new pxtc.ThumbSnippets(); + bin.procs.forEach(function (p) { + var p2a = new pxtc.ProctoAssembler(snippets, bin, p); + asmsource += "\n" + p2a.getAssembly() + "\n"; + }); + bin.usedClassInfos.forEach(function (info) { + asmsource += vtableToAsm(info); + }); + pxtc.U.iterMap(bin.codeHelpers, function (code, lbl) { + asmsource += " .section code\n" + lbl + ":\n" + code + "\n"; + }); + asmsource += hex.asmTotalSource; + asmsource += "_js_end:\n"; + emitStrings(bin); + asmsource += bin.otherLiterals.join(""); + asmsource += "_program_end:\n"; + return asmsource; + } + function patchSrcHash(bin, src) { + var sha = pxtc.U.sha256(src); + bin.sourceHash = sha; + return src.replace(/\n.*@SRCHASH@\n/, "\n .hex " + sha.slice(0, 16).toUpperCase() + " ; program hash\n"); + } + function processorInlineAssemble(nativeType, src) { + var b = mkProcessorFile(nativeType); + b.disablePeepHole = true; + b.emit(src); + throwAssemblerErrors(b); + var res = []; + for (var i = 0; i < b.buf.length; i += 2) { + res.push((((b.buf[i + 1] || 0) << 16) | b.buf[i]) >>> 0); + } + return res; + } + pxtc.processorInlineAssemble = processorInlineAssemble; + function mkProcessorFile(nativeType) { + var processor = null; + if (nativeType == "AVR") + processor = new pxtc.avr.AVRProcessor(); + else + processor = new pxtc.thumb.ThumbProcessor(); + processor.testAssembler(); // just in case + var b = new pxtc.assembler.File(processor); + b.lookupExternalLabel = hex.lookupFunctionAddr; + b.normalizeExternalLabel = function (s) { + var inf = hex.lookupFunc(s); + if (inf) + return inf.name; + return s; + }; + // b.throwOnError = true; + return b; + } + function throwAssemblerErrors(b) { + if (b.errors.length > 0) { + var userErrors_1 = ""; + b.errors.forEach(function (e) { + var m = /^user(\d+)/.exec(e.scope); + if (m) { + // This generally shouldn't happen, but it may for certin kind of global + // errors - jump range and label redefinitions + var no = parseInt(m[1]); // TODO lookup assembly file name + userErrors_1 += pxtc.U.lf("At inline assembly:\n"); + userErrors_1 += e.message; + } + }); + if (userErrors_1) { + //TODO + console.log(pxtc.U.lf("errors in inline assembly")); + console.log(userErrors_1); + throw new Error(b.errors[0].message); + } + else { + throw new Error(b.errors[0].message); + } + } + } + var peepDbg = false; + function assemble(nativeType, bin, src) { + var b = mkProcessorFile(nativeType); + b.emit(src); + src = b.getSource(!peepDbg); + throwAssemblerErrors(b); + return { + src: src, + buf: b.buf, + thumbFile: b + }; + } + function addSource(meta, binstring) { + var metablob = pxtc.Util.toUTF8(meta); + var totallen = metablob.length + binstring.length; + if (totallen > 40000) { + return "; program too long\n"; + } + var str = "\n .balign 16\n .hex 41140E2FB82FA2BB\n .short " + metablob.length + "\n .short " + binstring.length + "\n .short 0, 0 ; future use\n\n_stored_program: .string \""; + var addblob = function (b) { + for (var i = 0; i < b.length; ++i) { + var v = b.charCodeAt(i) & 0xff; + if (v <= 0xf) + str += "\\x0" + v.toString(16); + else + str += "\\x" + v.toString(16); + } + }; + addblob(metablob); + addblob(binstring); + str += "\"\n"; + return str; + } + function processorEmit(bin, opts, cres) { + var src = serialize(bin, opts); + src = patchSrcHash(bin, src); + if (opts.embedBlob) + src += addSource(opts.embedMeta, pxtc.decodeBase64(opts.embedBlob)); + var checksumWords = 8; + var pageSize = hex.flashCodeAlign(opts.target); + if (opts.target.flashChecksumAddr) { + var k = 0; + while (pageSize > (1 << k)) + k++; + var endMarker = parseInt(bin.sourceHash.slice(0, 8), 16); + var progStart = hex.bytecodeStartAddrPadded / pageSize; + endMarker = (endMarker & 0xffffff00) | k; + var templBeg = 0; + var templSize = progStart; + // we exclude the checksum block from the template + if (opts.target.flashChecksumAddr < hex.bytecodeStartAddrPadded) { + templBeg = Math.ceil((opts.target.flashChecksumAddr + 32) / pageSize); + templSize -= templBeg; + } + src += "\n .balign 4\n__end_marker:\n .word " + endMarker + "\n\n; ------- this will get removed from the final binary ------\n__flash_checksums:\n .word 0x87eeb07c ; magic\n .word __end_marker ; end marker position\n .word " + endMarker + " ; end marker\n ; template region\n .short " + templBeg + ", " + templSize + "\n .word 0x" + hex.hexTemplateHash().slice(0, 8) + "\n ; user region\n .short " + progStart + ", 0xffff\n .word 0x" + bin.sourceHash.slice(0, 8) + "\n .word 0x0 ; terminator\n"; + } + bin.writeFile(pxtc.BINARY_ASM, src); + var res = assemble(opts.target.nativeType, bin, src); + if (res.src) + bin.writeFile(pxtc.BINARY_ASM, res.src); + if (res.buf) { + if (opts.target.flashChecksumAddr) { + var pos = res.thumbFile.lookupLabel("__flash_checksums") / 2; + pxtc.U.assert(pos == res.buf.length - checksumWords * 2); + var chk = res.buf.slice(res.buf.length - checksumWords * 2); + res.buf.splice(res.buf.length - checksumWords * 2, checksumWords * 2); + var len = Math.ceil(res.buf.length * 2 / pageSize); + chk[chk.length - 5] = len; + bin.checksumBlock = chk; + } + if (opts.target.useUF2) { + var myhex = btoa(hex.patchHex(bin, res.buf, false, true)[0]); + bin.writeFile(pxtc.BINARY_UF2, myhex); + } + else { + var myhex = hex.patchHex(bin, res.buf, false, false).join("\r\n") + "\r\n"; + bin.writeFile(pxtc.BINARY_HEX, myhex); + } + } + for (var _i = 0, _a = cres.breakpoints; _i < _a.length; _i++) { + var bkpt = _a[_i]; + var lbl = pxtc.U.lookup(res.thumbFile.getLabels(), "__brkp_" + bkpt.id); + if (lbl != null) + bkpt.binAddr = lbl; + } + for (var _b = 0, _c = bin.procs; _b < _c.length; _b++) { + var proc = _c[_b]; + proc.fillDebugInfo(res.thumbFile); + } + cres.procDebugInfo = bin.procs.map(function (p) { return p.debugInfo; }); + } + pxtc.processorEmit = processorEmit; + pxtc.validateShim = hex.validateShim; + })(pxtc = ts.pxtc || (ts.pxtc = {})); +})(ts || (ts = {})); +var ts; +(function (ts) { + var pxtc; + (function (pxtc) { + var reportDiagnostic = reportDiagnosticSimply; + function reportDiagnostics(diagnostics, host) { + for (var _i = 0, diagnostics_1 = diagnostics; _i < diagnostics_1.length; _i++) { + var diagnostic = diagnostics_1[_i]; + reportDiagnostic(diagnostic, host); + } + } + function reportDiagnosticSimply(diagnostic, host) { + var output = ""; + if (diagnostic.file) { + var _a = ts.getLineAndCharacterOfPosition(diagnostic.file, diagnostic.start), line = _a.line, character = _a.character; + var relativeFileName = diagnostic.file.fileName; + output += relativeFileName + "(" + (line + 1) + "," + (character + 1) + "): "; + } + var category = ts.DiagnosticCategory[diagnostic.category].toLowerCase(); + output += category + " TS" + diagnostic.code + ": " + ts.flattenDiagnosticMessageText(diagnostic.messageText, ts.sys.newLine) + ts.sys.newLine; + ts.sys.write(output); + } + function plainTsc(dir) { + var commandLine = ts.parseCommandLine([]); + var configFileName = ts.findConfigFile(dir, ts.sys.fileExists); + return performCompilation(); + function parseConfigFile() { + var cachedConfigFileText = ts.sys.readFile(configFileName); + var result = ts.parseConfigFileTextToJson(configFileName, cachedConfigFileText); + var configObject = result.config; + if (!configObject) { + reportDiagnostics([result.error], /* compilerHost */ undefined); + ts.sys.exit(ts.ExitStatus.DiagnosticsPresent_OutputsSkipped); + return; + } + var configParseResult = ts.parseJsonConfigFileContent(configObject, ts.sys, dir, commandLine.options, configFileName); + if (configParseResult.errors.length > 0) { + reportDiagnostics(configParseResult.errors, /* compilerHost */ undefined); + ts.sys.exit(ts.ExitStatus.DiagnosticsPresent_OutputsSkipped); + return; + } + return configParseResult; + } + function performCompilation() { + var configParseResult = parseConfigFile(); + var compilerHost = ts.createCompilerHost(configParseResult.options); + compilerHost.getDefaultLibFileName = function () { return "node_modules/typescript/lib/lib.d.ts"; }; + return compile(configParseResult.fileNames, configParseResult.options, compilerHost); + } + } + pxtc.plainTsc = plainTsc; + function compile(fileNames, compilerOptions, compilerHost) { + var program = ts.createProgram(fileNames, compilerOptions, compilerHost); + compileProgram(); + return program; + function compileProgram() { + var diagnostics = program.getSyntacticDiagnostics(); + if (diagnostics.length === 0) { + diagnostics = program.getOptionsDiagnostics().concat(program.getGlobalDiagnostics()); + if (diagnostics.length === 0) { + diagnostics = program.getSemanticDiagnostics(); + } + } + reportDiagnostics(diagnostics, compilerHost); + //const emitOutput = program.emit(); + //diagnostics = diagnostics.concat(emitOutput.diagnostics); + } + } + })(pxtc = ts.pxtc || (ts.pxtc = {})); +})(ts || (ts = {})); +/// +var ts; +(function (ts) { + var pxtc; + (function (pxtc) { + (function (SymbolKind) { + SymbolKind[SymbolKind["None"] = 0] = "None"; + SymbolKind[SymbolKind["Method"] = 1] = "Method"; + SymbolKind[SymbolKind["Property"] = 2] = "Property"; + SymbolKind[SymbolKind["Function"] = 3] = "Function"; + SymbolKind[SymbolKind["Variable"] = 4] = "Variable"; + SymbolKind[SymbolKind["Module"] = 5] = "Module"; + SymbolKind[SymbolKind["Enum"] = 6] = "Enum"; + SymbolKind[SymbolKind["EnumMember"] = 7] = "EnumMember"; + SymbolKind[SymbolKind["Class"] = 8] = "Class"; + SymbolKind[SymbolKind["Interface"] = 9] = "Interface"; + })(pxtc.SymbolKind || (pxtc.SymbolKind = {})); + var SymbolKind = pxtc.SymbolKind; + pxtc.placeholderChar = "◊"; + pxtc.defaultImgLit = "\n. . . . .\n. . . . .\n. . # . .\n. . . . .\n. . . . .\n"; + function localizeApisAsync(apis, mainPkg) { + var lang = pxtc.Util.userLanguage(); + if (pxtc.Util.userLanguage() == "en") + return Promise.resolve(apis); + return mainPkg.localizationStringsAsync(lang) + .then(function (loc) { return pxtc.Util.values(apis.byQName).forEach(function (fn) { + var jsDoc = loc[fn.qName]; + if (jsDoc) { + fn.attributes.jsDoc = jsDoc; + if (fn.parameters) + fn.parameters.forEach(function (pi) { return pi.description = loc[(fn.qName + "|param|" + pi.name)] || pi.description; }); + } + if (fn.attributes.block) { + var locBlock = loc[(fn.qName + "|block")]; + if (locBlock) { + fn.attributes.block = locBlock; + } + } + var nsDoc = loc['{id:category}' + pxtc.Util.capitalize(fn.qName)]; + if (nsDoc) { + fn.attributes.block = nsDoc; + } + }); }) + .then(function () { return apis; }); + } + pxtc.localizeApisAsync = localizeApisAsync; + /** + * Unlocalized category name for a symbol + */ + function blocksCategory(si) { + var n = !si ? undefined : (si.attributes.blockNamespace || si.namespace); + return n ? pxtc.Util.capitalize(n.split('.')[0]) : undefined; + } + pxtc.blocksCategory = blocksCategory; + function renderDefaultVal(apis, p, imgLit, cursorMarker) { + if (p.initializer) + return p.initializer; + if (p.defaults) + return p.defaults[0]; + if (p.type == "number") + return "0"; + if (p.type == "boolean") + return "false"; + else if (p.type == "string") { + if (imgLit) { + imgLit = false; + return "`" + pxtc.defaultImgLit + cursorMarker + "`"; + } + return "\"" + cursorMarker + "\""; + } + var si = apis ? pxtc.Util.lookup(apis.byQName, p.type) : undefined; + if (si && si.kind == SymbolKind.Enum) { + var en = pxtc.Util.values(apis.byQName).filter(function (e) { return e.namespace == p.type; })[0]; + if (en) + return en.namespace + "." + en.name; + } + var m = /^\((.*)\) => (.*)$/.exec(p.type); + if (m) + return "(" + m[1] + ") => {\n " + cursorMarker + "\n}"; + return pxtc.placeholderChar; + } + function renderCall(apiInfo, si) { + return si.namespace + "." + si.name + renderParameters(apiInfo, si) + ";"; + } + pxtc.renderCall = renderCall; + function renderParameters(apis, si, cursorMarker) { + if (cursorMarker === void 0) { cursorMarker = ''; } + if (si.parameters) { + var imgLit_1 = !!si.attributes.imageLiteral; + return "(" + si.parameters + .filter(function (p) { return !p.initializer; }) + .map(function (p) { return renderDefaultVal(apis, p, imgLit_1, cursorMarker); }).join(", ") + ")"; + } + return ''; + } + pxtc.renderParameters = renderParameters; + function getSymbolKind(node) { + switch (node.kind) { + case pxtc.SK.MethodDeclaration: + case pxtc.SK.MethodSignature: + return SymbolKind.Method; + case pxtc.SK.PropertyDeclaration: + case pxtc.SK.PropertySignature: + return SymbolKind.Property; + case pxtc.SK.FunctionDeclaration: + return SymbolKind.Function; + case pxtc.SK.VariableDeclaration: + return SymbolKind.Variable; + case pxtc.SK.ModuleDeclaration: + return SymbolKind.Module; + case pxtc.SK.EnumDeclaration: + return SymbolKind.Enum; + case pxtc.SK.EnumMember: + return SymbolKind.EnumMember; + case pxtc.SK.ClassDeclaration: + return SymbolKind.Class; + case pxtc.SK.InterfaceDeclaration: + return SymbolKind.Interface; + default: + return SymbolKind.None; + } + } + function isExported(decl) { + if (decl.modifiers && decl.modifiers.some(function (m) { return m.kind == pxtc.SK.PrivateKeyword || m.kind == pxtc.SK.ProtectedKeyword; })) + return false; + var symbol = decl.symbol; + if (!symbol) + return false; + while (true) { + var parSymbol = symbol.parent; + if (parSymbol) + symbol = parSymbol; + else + break; + } + var topDecl = symbol.valueDeclaration || symbol.declarations[0]; + if (topDecl.kind == pxtc.SK.VariableDeclaration) + topDecl = topDecl.parent.parent; + if (topDecl.parent && topDecl.parent.kind == pxtc.SK.SourceFile) + return true; + else + return false; + } + function isInKsModule(decl) { + while (decl) { + if (decl.kind == pxtc.SK.SourceFile) { + var src = decl; + return src.fileName.indexOf("pxt_modules") >= 0; + } + decl = decl.parent; + } + return false; + } + function createSymbolInfo(typechecker, qName, stmt) { + function typeOf(tn, n, stripParams) { + if (stripParams === void 0) { stripParams = false; } + var t = typechecker.getTypeAtLocation(n); + if (!t) + return "None"; + if (stripParams) { + t = t.getCallSignatures()[0].getReturnType(); + } + return typechecker.typeToString(t, null, ts.TypeFormatFlags.UseFullyQualifiedType); + } + var kind = getSymbolKind(stmt); + if (kind != SymbolKind.None) { + var decl = stmt; + var attributes_1 = pxtc.parseComments(decl); + if (attributes_1.weight < 0) + return null; + var m = /^(.*)\.(.*)/.exec(qName); + var hasParams = kind == SymbolKind.Function || kind == SymbolKind.Method; + var pkg = null; + var src = ts.getSourceFileOfNode(stmt); + if (src) { + var m_4 = /^pxt_modules\/([^\/]+)/.exec(src.fileName); + if (m_4) + pkg = m_4[1]; + } + var extendsTypes = undefined; + if (kind == SymbolKind.Class || kind == SymbolKind.Interface) { + var cl = stmt; + extendsTypes = []; + if (cl.heritageClauses) + for (var _i = 0, _a = cl.heritageClauses; _i < _a.length; _i++) { + var h = _a[_i]; + if (h.types) { + for (var _b = 0, _c = h.types; _b < _c.length; _b++) { + var t = _c[_b]; + extendsTypes.push(typeOf(t, t)); + } + } + } + } + return { + kind: kind, + namespace: m ? m[1] : "", + name: m ? m[2] : qName, + attributes: attributes_1, + pkg: pkg, + extendsTypes: extendsTypes, + retType: kind == SymbolKind.Module ? "" : typeOf(decl.type, decl, hasParams), + parameters: !hasParams ? null : (decl.parameters || []).map(function (p) { + var n = pxtc.getName(p); + var desc = attributes_1.paramHelp[n] || ""; + var minVal = attributes_1.paramMin ? attributes_1.paramMin[n] : undefined; + var maxVal = attributes_1.paramMax ? attributes_1.paramMax[n] : undefined; + var m = /\beg\.?:\s*(.+)/.exec(desc); + var props; + if (attributes_1.mutate && p.type.kind === pxtc.SK.FunctionType) { + var callBackSignature = typechecker.getSignatureFromDeclaration(p.type); + var callbackParameters_1 = callBackSignature.getParameters(); + pxtc.assert(callbackParameters_1.length > 0); + props = typechecker.getTypeAtLocation(callbackParameters_1[0].valueDeclaration).getProperties().map(function (prop) { + return { name: prop.getName(), type: typechecker.typeToString(typechecker.getTypeOfSymbolAtLocation(prop, callbackParameters_1[0].valueDeclaration)) }; + }); + } + var options = {}; + if (minVal) + options['min'] = { value: minVal }; + if (maxVal) + options['max'] = { value: maxVal }; + return { + name: n, + description: desc, + type: typeOf(p.type, p), + initializer: p.initializer ? p.initializer.getText() : attributes_1.paramDefl[n], + defaults: m && m[1].trim() ? m[1].split(/,\s*/).map(function (e) { return e.trim(); }) : undefined, + properties: props, + options: options + }; + }) + }; + } + return null; + } + function getBlocksInfo(info) { + var blocks = pxtc.Util.values(info.byQName) + .filter(function (s) { return !!s.attributes.block && !!s.attributes.blockId && (s.kind != pxtc.SymbolKind.EnumMember); }); + return { + apis: info, + blocks: blocks, + blocksById: pxt.Util.toDictionary(blocks, function (b) { return b.attributes.blockId; }) + }; + } + pxtc.getBlocksInfo = getBlocksInfo; + function genMarkdown(pkg, apiInfo, options) { + if (options === void 0) { options = {}; } + var files = {}; + var infos = pxtc.Util.values(apiInfo.byQName); + var namespaces = infos.filter(function (si) { return si.kind == SymbolKind.Module; }).sort(compareSymbol); + var enumMembers = infos.filter(function (si) { return si.kind == SymbolKind.EnumMember; }).sort(compareSymbol); + var calls = {}; + infos.filter(function (si) { return !!si.qName; }).forEach(function (si) { return calls[si.qName] = renderCall(apiInfo, si); }); + var locStrings = {}; + var jsdocStrings = {}; + var helpPages = {}; + var reference = ""; + var nameToFilename = function (n) { return n.replace(/([A-Z])/g, function (m) { return '-' + m.toLowerCase(); }); }; + var writeRef = function (s) { return reference += s + "\n"; }; + var writeLoc = function (si) { + if (!options.locs || !si.qName) { + return; + } + // must match blockly loader + var ns = ts.pxtc.blocksCategory(si); + if (ns) + locStrings[("{id:category}" + ns)] = ns; + if (si.attributes.jsDoc) + jsdocStrings[si.qName] = si.attributes.jsDoc; + if (si.attributes.block) + locStrings[(si.qName + "|block")] = si.attributes.block; + if (si.parameters) + si.parameters.filter(function (pi) { return !!pi.description; }).forEach(function (pi) { + jsdocStrings[(si.qName + "|param|" + pi.name)] = pi.description; + }); + }; + var sipkg = pkg && pkg != "core" ? "```package\n" + pkg + "\n```\n" : ''; + var writeApi = function (ns, si, call) { + if (!options.docs || !si.qName) + return; + var api = "# " + si.name.replace(/[A-Z]/g, function (m) { return ' ' + m; }) + "\n\n" + si.attributes.jsDoc.split(/\n\./)[0] + "\n\n```sig\n" + call + "\n```\n\n## Parameters\n" + (si.parameters || []).map(function (p) { return ("\n* **" + p.name + "**: [" + p.type + "](/reference/blocks/" + p.type + "), " + p.description); }) + "\n\n## Example\n\n```blocks\n" + call + "\n```\n\n## See Also\n\n" + (ns.namespace ? "[" + ns.namespace + "](/reference/" + nameToFilename(ns.namespace) + ")" : "") + "\n" + sipkg + "\n"; + files[("reference/" + nameToFilename(ns.name) + "/" + nameToFilename(si.name) + ".md")] = api; + }; + var mapLocs = function (m, name) { + if (!options.locs) + return; + var locs = {}; + Object.keys(m).sort().forEach(function (l) { return locs[l] = m[l]; }); + files[pkg + name + "-strings.json"] = JSON.stringify(locs, null, 2); + }; + var writePackage = function (w) { + if (options.package) { + w(""); + w("```package"); + w(pkg); + w("```"); + } + }; + var writeHelpPages = function (h, w) { + w(""); + w("### See Also"); + w(""); + w(Object.keys(h).map(function (k) { return ("[" + k + "](/reference/" + h[k] + ")"); }).join(', ')); + }; + writeRef("# " + pkg + " Reference"); + writeRef(''); + writeRef('```namespaces'); + var _loop_8 = function(ns) { + var nsHelpPages = {}; + var syms = infos + .filter(function (si) { return si.namespace == ns.name && !!si.attributes.jsDoc; }) + .sort(compareSymbol); + if (!syms.length) + return "continue"; + if (!ns.attributes.block) + ns.attributes.block = ns.name; // reusing this field to store localized namespace name + writeLoc(ns); + helpPages[ns.name] = ns.name.replace("s+", "-"); + var nsmd = ""; + var writeNs = function (s) { + nsmd += s + "\n"; + }; + writeNs("# " + capitalize(ns.name)); + writeNs(''); + if (ns.attributes.jsDoc) { + writeNs("" + ns.attributes.jsDoc); + writeNs(''); + } + writeNs('```cards'); + syms.forEach(function (si, i) { + writeLoc(si); + if (si.attributes.help) + nsHelpPages[si.name] = si.attributes.help; + var call = calls[si.qName]; + if (i == 0) + writeRef(call); + writeNs(call); + if (!si.attributes.help) + writeApi(ns, si, call); + }); + writeNs('```'); + writePackage(writeNs); + writeHelpPages(nsHelpPages, writeNs); + if (options.docs) + files["reference/" + nameToFilename(ns.name) + '.md'] = nsmd; + }; + for (var _i = 0, namespaces_1 = namespaces; _i < namespaces_1.length; _i++) { + var ns = namespaces_1[_i]; + var state_8 = _loop_8(ns); + if (state_8 === "continue") continue; + } + if (options.locs) + enumMembers.forEach(function (em) { + if (em.attributes.block) + locStrings[(em.qName + "|block")] = em.attributes.block; + if (em.attributes.jsDoc) + locStrings[em.qName] = em.attributes.jsDoc; + }); + writeRef('```'); + writePackage(writeRef); + writeHelpPages(helpPages, writeRef); + if (options.docs) + files[pkg + "-reference.md"] = reference; + mapLocs(locStrings, ""); + mapLocs(jsdocStrings, "-jsdoc"); + return files; + function hasBlock(sym) { + return !!sym.attributes.block && !!sym.attributes.blockId; + } + function capitalize(name) { + return name[0].toUpperCase() + name.slice(1); + } + function urlify(name) { + return name.replace(/[A-Z]/g, '-$&').toLowerCase(); + } + function compareSymbol(l, r) { + var c = -(hasBlock(l) ? 1 : -1) + (hasBlock(r) ? 1 : -1); + if (c) + return c; + c = -(l.attributes.weight || 50) + (r.attributes.weight || 50); + if (c) + return c; + return pxtc.U.strcmp(l.name, r.name); + } + } + pxtc.genMarkdown = genMarkdown; + function getApiInfo(program, legacyOnly) { + if (legacyOnly === void 0) { legacyOnly = false; } + var res = { + byQName: {} + }; + var typechecker = program.getTypeChecker(); + var collectDecls = function (stmt) { + if (stmt.kind == pxtc.SK.VariableStatement) { + var vs = stmt; + vs.declarationList.declarations.forEach(collectDecls); + return; + } + // if (!isExported(stmt as Declaration)) return; ? + if (isExported(stmt)) { + if (!stmt.symbol) { + console.warn("no symbol", stmt); + return; + } + var qName = getFullName(typechecker, stmt.symbol); + var si_1 = createSymbolInfo(typechecker, qName, stmt); + if (si_1) { + var existing = pxtc.U.lookup(res.byQName, qName); + if (existing) { + si_1.attributes = pxtc.parseCommentString(existing.attributes._source + "\n" + + si_1.attributes._source); + if (existing.extendsTypes) { + si_1.extendsTypes = si_1.extendsTypes || []; + existing.extendsTypes.forEach(function (t) { + if (si_1.extendsTypes.indexOf(t) === -1) { + si_1.extendsTypes.push(t); + } + }); + } + } + res.byQName[qName] = si_1; + } + } + if (stmt.kind == pxtc.SK.ModuleDeclaration) { + var mod = stmt; + if (mod.body.kind == pxtc.SK.ModuleBlock) { + var blk = mod.body; + blk.statements.forEach(collectDecls); + } + } + else if (stmt.kind == pxtc.SK.InterfaceDeclaration) { + var iface = stmt; + iface.members.forEach(collectDecls); + } + else if (stmt.kind == pxtc.SK.ClassDeclaration) { + var iface = stmt; + iface.members.forEach(collectDecls); + } + else if (stmt.kind == pxtc.SK.EnumDeclaration) { + var e = stmt; + e.members.forEach(collectDecls); + } + }; + for (var _i = 0, _a = program.getSourceFiles(); _i < _a.length; _i++) { + var srcFile = _a[_i]; + srcFile.statements.forEach(collectDecls); + } + var toclose = []; + // store qName in symbols + for (var qName in res.byQName) { + var si = res.byQName[qName]; + si.qName = qName; + si.attributes._source = null; + if (si.extendsTypes && si.extendsTypes.length) + toclose.push(si); + } + // transitive closure of inheritance + var closed = {}; + var closeSi = function (si) { + if (pxtc.U.lookup(closed, si.qName)) + return; + closed[si.qName] = true; + var mine = {}; + mine[si.qName] = true; + for (var _i = 0, _a = si.extendsTypes || []; _i < _a.length; _i++) { + var e = _a[_i]; + mine[e] = true; + var psi = res.byQName[e]; + if (psi) { + closeSi(psi); + for (var _b = 0, _c = psi.extendsTypes; _b < _c.length; _b++) { + var ee = _c[_b]; + mine[ee] = true; + } + } + } + si.extendsTypes = Object.keys(mine); + }; + toclose.forEach(closeSi); + if (legacyOnly) { + // conflicts with pins.map() + delete res.byQName["Array.map"]; + } + return res; + } + pxtc.getApiInfo = getApiInfo; + function getFullName(typechecker, symbol) { + return typechecker.getFullyQualifiedName(symbol); + } + pxtc.getFullName = getFullName; + function fillCompletionEntries(program, symbols, r, apiInfo) { + var typechecker = program.getTypeChecker(); + for (var _i = 0, symbols_1 = symbols; _i < symbols_1.length; _i++) { + var s = symbols_1[_i]; + var qName = getFullName(typechecker, s); + if (!r.isMemberCompletion && pxtc.Util.lookup(apiInfo.byQName, qName)) + continue; // global symbol + if (pxtc.Util.lookup(r.entries, qName)) + continue; + var decl = s.valueDeclaration || (s.declarations || [])[0]; + if (!decl) + continue; + var si = createSymbolInfo(typechecker, qName, decl); + if (!si) + continue; + si.isContextual = true; + //let tmp = ts.getLocalSymbolForExportDefault(s) + //let name = typechecker.symbolToString(tmp || s) + r.entries[qName] = si; + } + } + pxtc.fillCompletionEntries = fillCompletionEntries; + })(pxtc = ts.pxtc || (ts.pxtc = {})); +})(ts || (ts = {})); +var ts; +(function (ts) { + var pxtc; + (function (pxtc) { + var service; + (function (service_1) { + var emptyOptions = { + fileSystem: {}, + sourceFiles: [], + target: { isNative: false, hasHex: false }, + hexinfo: null + }; + var Host = (function () { + function Host() { + this.opts = emptyOptions; + this.fileVersions = {}; + this.projectVer = 0; + } + Host.prototype.getProjectVersion = function () { + return this.projectVer + ""; + }; + Host.prototype.setFile = function (fn, cont) { + if (this.opts.fileSystem[fn] != cont) { + this.fileVersions[fn] = (this.fileVersions[fn] || 0) + 1; + this.opts.fileSystem[fn] = cont; + this.projectVer++; + } + }; + Host.prototype.setOpts = function (o) { + var _this = this; + pxtc.Util.iterMap(o.fileSystem, function (fn, v) { + if (_this.opts.fileSystem[fn] != v) { + _this.fileVersions[fn] = (_this.fileVersions[fn] || 0) + 1; + } + }); + this.opts = o; + this.projectVer++; + }; + Host.prototype.getCompilationSettings = function () { + return pxtc.getTsCompilerOptions(this.opts); + }; + Host.prototype.getScriptFileNames = function () { + return this.opts.sourceFiles.filter(function (f) { return pxtc.U.endsWith(f, ".ts"); }); + }; + Host.prototype.getScriptVersion = function (fileName) { + return (this.fileVersions[fileName] || 0).toString(); + }; + Host.prototype.getScriptSnapshot = function (fileName) { + var f = this.opts.fileSystem[fileName]; + if (f) + return ts.ScriptSnapshot.fromString(f); + else + return null; + }; + Host.prototype.getNewLine = function () { return "\n"; }; + Host.prototype.getCurrentDirectory = function () { return "."; }; + Host.prototype.getDefaultLibFileName = function (options) { return null; }; + Host.prototype.log = function (s) { console.log("LOG", s); }; + Host.prototype.trace = function (s) { console.log("TRACE", s); }; + Host.prototype.error = function (s) { console.error("ERROR", s); }; + Host.prototype.useCaseSensitiveFileNames = function () { return true; }; + return Host; + }()); + var service; + var host; + var lastApiInfo; + var lastBlocksInfo; + var lastFuse; + var builtinItems; + var tbSubset; + function fileDiags(fn) { + if (!/\.ts$/.test(fn)) + return []; + var d = service.getSyntacticDiagnostics(fn); + if (!d || !d.length) + d = service.getSemanticDiagnostics(fn); + if (!d) + d = []; + return d; + } + var blocksInfoOp = function () { return lastBlocksInfo || (lastBlocksInfo = pxtc.getBlocksInfo(lastApiInfo)); }; + var operations = { + reset: function () { + service.cleanupSemanticCache(); + host.setOpts(emptyOptions); + }, + setOptions: function (v) { + host.setOpts(v.options); + }, + getCompletions: function (v) { + if (v.fileContent) { + host.setFile(v.fileName, v.fileContent); + } + var program = service.getProgram(); // this synchornizes host data as well + var data = service.getCompletionData(v.fileName, v.position); + if (!data) + return {}; + var typechecker = program.getTypeChecker(); + var r = { + entries: {}, + isMemberCompletion: data.isMemberCompletion, + isNewIdentifierLocation: data.isNewIdentifierLocation, + isTypeLocation: false // TODO + }; + pxtc.fillCompletionEntries(program, data.symbols, r, lastApiInfo); + return r; + }, + compile: function (v) { + return pxtc.compile(v.options); + }, + decompile: function (v) { + return pxtc.decompile(v.options, v.fileName); + }, + assemble: function (v) { + return { + words: pxtc.processorInlineAssemble(host.opts.target.nativeType, v.fileContent) + }; + }, + fileDiags: function (v) { return pxtc.patchUpDiagnostics(fileDiags(v.fileName)); }, + allDiags: function () { + var global = service.getCompilerOptionsDiagnostics() || []; + var byFile = host.getScriptFileNames().map(fileDiags); + var allD = global.concat(pxtc.Util.concat(byFile)); + if (allD.length == 0) { + var res = { + outfiles: {}, + diagnostics: [], + success: true, + times: {} + }; + var binOutput = pxtc.compileBinary(service.getProgram(), null, host.opts, res); + allD = binOutput.diagnostics; + } + return pxtc.patchUpDiagnostics(allD); + }, + apiInfo: function () { + lastBlocksInfo = undefined; + lastFuse = undefined; + return lastApiInfo = pxtc.getApiInfo(service.getProgram()); + }, + blocksInfo: blocksInfoOp, + apiSearch: function (v) { + var SEARCH_RESULT_COUNT = 7; + var search = v.search; + var blockInfo = blocksInfoOp(); // cache + if (!builtinItems) { + builtinItems = []; + var helpResources = pxt.blocks.helpResources(); + var _loop_9 = function(id) { + var helpItem = helpResources[id]; + if (helpItem.operators) { + var _loop_10 = function(op) { + var opValues = helpItem.operators[op]; + opValues.forEach(function (v) { return builtinItems.push({ + id: id, + name: helpItem.name, + jsdoc: helpItem.tooltip, + block: v, + field: [op, v] + }); }); + }; + for (var op in helpItem.operators) { + _loop_10(op); + } + } + else { + builtinItems.push({ + id: id, + name: helpItem.name, + jsdoc: helpItem.tooltip + }); + } + }; + for (var id in helpResources) { + _loop_9(id); + } + } + var subset; + var fnweight = function (fn) { + var fnw = fn.attributes.weight || 50; + var nsInfo = blockInfo.apis.byQName[fn.namespace]; + var nsw = nsInfo ? (nsInfo.attributes.weight || 50) : 50; + var ad = (nsInfo ? nsInfo.attributes.advanced : false) || fn.attributes.advanced; + var weight = (nsw * 1000 + fnw) * (ad ? 1 : 1e6); + return weight; + }; + if (!lastFuse) { + var blockInfo_1 = blocksInfoOp(); // cache + var weights_1 = {}; + var builtinSearchSet = void 0; + if (search.subset) { + tbSubset = search.subset; + builtinSearchSet = builtinItems.filter(function (s) { return tbSubset[s.id]; }); + } + if (tbSubset) { + subset = blockInfo_1.blocks.filter(function (s) { return tbSubset[s.attributes.blockId]; }); + } + else { + subset = blockInfo_1.blocks; + builtinSearchSet = builtinItems; + } + var searchSet = subset.map(function (s) { + return { + id: s.attributes.blockId, + qName: s.qName, + name: s.name, + nameSpace: s.namespace, + block: s.attributes.block, + jsDoc: s.attributes.jsDoc + }; + }); + var mw_1 = 0; + subset.forEach(function (b) { + var w = weights_1[b.qName] = fnweight(b); + mw_1 = Math.max(mw_1, w); + }); + searchSet = searchSet.concat(builtinSearchSet); + var fuseOptions = { + shouldSort: true, + threshold: 0.6, + location: 0, + distance: 100, + maxPatternLength: 16, + minMatchCharLength: 2, + findAllMatches: false, + caseSensitive: false, + keys: [ + { name: 'name', weight: 0.5 }, + { name: 'namespace', weight: 0.3 }, + { name: 'block', weight: 0.7 }, + { name: 'jsDoc', weight: 0.1 } + ], + sortFn: function (a, b) { + var wa = a.qName ? 1 - weights_1[a.item.qName] / mw_1 : 1; + var wb = b.qName ? 1 - weights_1[b.item.qName] / mw_1 : 1; + // allow 10% wiggle room for weights + return a.score * (1 + wa / 10) - b.score * (1 + wb / 10); + } + }; + lastFuse = new Fuse(searchSet, fuseOptions); + } + var fns = lastFuse.search(search.term) + .slice(0, SEARCH_RESULT_COUNT); + return fns; + } + }; + function performOperation(op, arg) { + init(); + var res = null; + if (operations.hasOwnProperty(op)) { + try { + res = operations[op](arg) || {}; + } + catch (e) { + res = { + errorMessage: e.stack + }; + } + } + else { + res = { + errorMessage: "No such operation: " + op + }; + } + return res; + } + service_1.performOperation = performOperation; + function init() { + if (!service) { + host = new Host(); + service = ts.createLanguageService(host); + } + } + })(service = pxtc.service || (pxtc.service = {})); + })(pxtc = ts.pxtc || (ts.pxtc = {})); +})(ts || (ts = {})); diff --git a/pxtrequire.js b/pxtrequire.js new file mode 100644 index 00000000..bdf02d23 --- /dev/null +++ b/pxtrequire.js @@ -0,0 +1,7 @@ +/// +/// +"use strict"; +var path = require("path"); +exports.pxtCore = require("pxt-core"); +// require.resolve() gives path to [pxt dir]/built/pxt.js, so move up twice to get pxt root dir +exports.pxtCoreDir = path.resolve(require.resolve("pxt-core"), "..", ".."); diff --git a/pxtrunner.js b/pxtrunner.js new file mode 100644 index 00000000..7f9aa58e --- /dev/null +++ b/pxtrunner.js @@ -0,0 +1,1147 @@ +var pxt; +(function (pxt) { + var runner; + (function (runner) { + /** + * Starts the simulator and injects it into the provided container. + * the simulator will attempt to establish a websocket connection + * to the debugger's user interface on port 3234. + * + * @param container The container to inject the simulator into + */ + function startDebuggerAsync(container) { + var debugRunner = new DebugRunner(container); + debugRunner.start(); + } + runner.startDebuggerAsync = startDebuggerAsync; + /** + * Runner for the debugger that handles communication with the user + * interface. Also talks to the server for anything to do with + * the filesystem (like reading code) + */ + var DebugRunner = (function () { + function DebugRunner(container) { + this.container = container; + this.pkgLoaded = false; + this.intervalRunning = false; + } + DebugRunner.prototype.start = function () { + var _this = this; + this.initializeWebsocket(); + if (!this.intervalRunning) { + this.intervalRunning = true; + this.intervalId = setInterval(function () { + if (!_this.ws) { + try { + _this.initializeWebsocket(); + } + catch (e) { + console.warn("Connection to server failed, retrying in " + DebugRunner.RETRY_MS + " ms"); + } + } + }, DebugRunner.RETRY_MS); + } + this.session = new pxsim.SimDebugSession(this.container); + this.session.start(this); + }; + DebugRunner.prototype.initializeWebsocket = function () { + var _this = this; + if (!pxt.Cloud.isLocalHost() || !pxt.Cloud.localToken) + return; + pxt.debug('initializing debug pipe'); + this.ws = new WebSocket('ws://localhost:3234/' + pxt.Cloud.localToken + '/simdebug'); + this.ws.onopen = function (ev) { + pxt.debug('debug: socket opened'); + }; + this.ws.onclose = function (ev) { + pxt.debug('debug: socket closed'); + if (_this.closeListener) { + _this.closeListener(); + } + _this.session.stopSimulator(); + _this.ws = undefined; + }; + this.ws.onerror = function (ev) { + pxt.debug('debug: socket closed due to error'); + if (_this.errorListener) { + _this.errorListener(ev.type); + } + _this.session.stopSimulator(); + _this.ws = undefined; + }; + this.ws.onmessage = function (ev) { + var message; + try { + message = JSON.parse(ev.data); + } + catch (e) { + pxt.debug('debug: could not parse message'); + } + if (message) { + // FIXME: ideally, we should just open two websockets instead of adding to the + // debug protocol. One for the debugger, one for meta-information and file + // system requests + if (message.type === 'runner') { + _this.handleRunnerMessage(message); + } + else { + // Intercept the launch configuration and notify the server-side debug runner + if (message.type === "request" && message.command === "launch") { + _this.sendRunnerMessage("configure", { + projectDir: message.arguments.projectDir + }); + } + _this.dataListener(message); + } + } + }; + }; + DebugRunner.prototype.send = function (msg) { + this.ws.send(msg); + }; + DebugRunner.prototype.onData = function (cb) { + this.dataListener = cb; + }; + DebugRunner.prototype.onError = function (cb) { + this.errorListener = cb; + }; + DebugRunner.prototype.onClose = function (cb) { + this.closeListener = cb; + }; + DebugRunner.prototype.close = function () { + if (this.session) { + this.session.stopSimulator(true); + } + if (this.intervalRunning) { + clearInterval(this.intervalId); + this.intervalId = undefined; + } + if (this.ws) { + this.ws.close(); + } + }; + DebugRunner.prototype.handleRunnerMessage = function (msg) { + switch (msg.subtype) { + case "ready": + this.sendRunnerMessage("ready"); + break; + case "runcode": + this.runCode(msg); + break; + } + }; + DebugRunner.prototype.runCode = function (msg) { + var breakpoints = []; + // The breakpoints are in the format returned by the compiler + // and need to be converted to the format used by the DebugProtocol + msg.breakpoints.forEach(function (bp) { + breakpoints.push([bp.id, { + verified: true, + line: bp.line, + column: bp.column, + endLine: bp.endLine, + endColumn: bp.endColumn, + source: { + path: bp.fileName + } + }]); + }); + this.session.runCode(msg.code, msg.usedParts, msg.usedArguments, new pxsim.BreakpointMap(breakpoints), pxt.appTarget.simulator.boardDefinition); + }; + DebugRunner.prototype.sendRunnerMessage = function (subtype, msg) { + if (msg === void 0) { msg = {}; } + msg["subtype"] = subtype; + msg["type"] = "runner"; + this.send(JSON.stringify(msg)); + }; + DebugRunner.RETRY_MS = 2500; + return DebugRunner; + }()); + runner.DebugRunner = DebugRunner; + })(runner = pxt.runner || (pxt.runner = {})); +})(pxt || (pxt = {})); +var pxt; +(function (pxt) { + var runner; + (function (runner) { + function appendBlocks($parent, $svg) { + $parent.append($('
').append($svg)); + } + function appendJs($parent, $js, woptions) { + $parent.append($('
').append($js)); + $('code.highlight').each(function (i, block) { + var hljs = pxt.docs.requireHighlightJs(); + if (hljs) + hljs.highlightBlock(block); + }); + } + function fillWithWidget(options, $container, $js, $svg, woptions) { + if (woptions === void 0) { woptions = {}; } + if (!$svg || !$svg[0]) { + var $c_1 = $('
'); + $c_1.append($js); + $container.replaceWith($c_1); + return; + } + var cdn = pxt.webConfig.pxtCdnUrl; + var images = cdn + "images"; + var $h = $(''); + var $c = $('
'); + var $menu = $h.find('.right.menu'); + if (options.showJavaScript) { + // blocks + $c.append($js); + // js menu + if ($svg) { + var $svgBtn = $('').click(function () { + if ($c.find('.blocks')[0]) + $c.find('.blocks').remove(); + else { + if ($js) + appendBlocks($js.parent(), $svg); + else + appendBlocks($c, $svg); + } + }); + $menu.append($svgBtn); + } + } + else { + // blocks + $c.append($svg); + // js menu + if (woptions.showJs) { + appendJs($c, $js, woptions); + } + else { + var $jsBtn = $('').click(function () { + if ($c.find('.js')[0]) + $c.find('.js').remove(); + else { + if ($svg) + appendJs($svg.parent(), $js, woptions); + else + appendJs($c, $js, woptions); + } + }); + $menu.append($jsBtn); + } + } + // runner menu + if (woptions.run) { + var $runBtn = $('').click(function () { + if ($c.find('.sim')[0]) + $c.find('.sim').remove(); // remove previous simulators + else { + var padding = '81.97%'; + if (pxt.appTarget.simulator) + padding = (100 / pxt.appTarget.simulator.aspectRatio) + '%'; + var $embed = $("
"); + $c.append($embed); + } + }); + $menu.append($runBtn); + } + if (woptions.hexname && woptions.hex) { + var $hexBtn = $('').click(function () { + pxt.BrowserUtils.browserDownloadBinText(woptions.hex, woptions.hexname, pxt.appTarget.compile.hexMimeType); + }); + $menu.append($hexBtn); + } + var r = [$c]; + // don't add menu if empty + if ($menu.children().length) + r.push($h); + // inject container + $container.replaceWith(r); + // download screenshots + if (options.downloadScreenshots && woptions.hexname) { + pxt.debug("Downloading screenshot for: " + woptions.hexname); + var filename_1 = woptions.hexname.substr(0, woptions.hexname.lastIndexOf('.')); + var fontSize = window.getComputedStyle($svg.get(0).querySelector(".blocklyText")).getPropertyValue("font-size"); + var customCss = "\n.blocklyMainBackground {\n stroke:none !important;\n}\n\n.blocklyText {\n font-family:'Monaco', 'Menlo', 'Ubuntu Mono', 'Consolas', 'source-code-pro', monospace !important;\n font-size:" + fontSize + " !important; \n}\n\n.blocklyCheckbox,\n.blocklyLed {\n fill: #ff3030 !important;\n text-shadow: 0px 0px 6px #f00;\n font-size: 17pt !important;\n}"; + var svgElement = $svg.get(0); + var bbox = $svg.get(0).getBoundingClientRect(); + pxt.blocks.layout.svgToPngAsync(svgElement, customCss, 0, 0, bbox.width, bbox.height) + .done(function (uri) { + if (uri) + pxt.BrowserUtils.browserDownloadDataUri(uri, (name || (pxt.appTarget.nickname || pxt.appTarget.id) + "-" + filename_1) + ".png"); + }); + } + } + function renderNextSnippetAsync(cls, render, options) { + if (!cls) + return Promise.resolve(); + var $el = $("." + cls).first(); + if (!$el[0]) + return Promise.resolve(); + if (!options.emPixels) + options.emPixels = 14; + if (!options.layout) + options.layout = pxt.blocks.BlockLayout.Flow; + return pxt.runner.decompileToBlocksAsync($el.text(), options) + .then(function (r) { + try { + render($el, r); + } + catch (e) { + console.error('error while rendering ' + $el.html()); + $el.append($('
').addClass("ui segment warning").text(e.message)); + } + $el.removeClass(cls); + return Promise.delay(1, renderNextSnippetAsync(cls, render, options)); + }); + } + function renderSnippetsAsync(options) { + if (options.tutorial) { + // don't render chrome for tutorials + return renderNextSnippetAsync(options.snippetClass, function (c, r) { + var s = r.blocksSvg; + if (options.snippetReplaceParent) + c = c.parent(); + var segment = $('
').append(s); + c.replaceWith(segment); + }, { package: options.package, snippetMode: false }); + } + var snippetCount = 0; + return renderNextSnippetAsync(options.snippetClass, function (c, r) { + var s = r.compileBlocks && r.compileBlocks.success ? $(r.blocksSvg) : undefined; + var js = $('').text(c.text().trim()); + if (options.snippetReplaceParent) + c = c.parent(); + var compiled = r.compileJS && r.compileJS.success; + var hex = options.hex && compiled && r.compileJS.outfiles[pxtc.BINARY_HEX] + ? r.compileJS.outfiles[pxtc.BINARY_HEX] : undefined; + var hexname = (pxt.appTarget.nickname || pxt.appTarget.id) + "-" + (options.hexName || '') + "-" + snippetCount++ + ".hex"; + fillWithWidget(options, c, js, s, { + run: options.simulator && compiled, + hexname: hexname, + hex: hex, + }); + }, { package: options.package }); + } + function decompileCallInfo(stmt) { + if (!stmt || stmt.kind != ts.SyntaxKind.ExpressionStatement) + return null; + var estmt = stmt; + if (!estmt.expression || estmt.expression.kind != ts.SyntaxKind.CallExpression) + return null; + var call = estmt.expression; + var info = call.callInfo; + return info; + } + function renderSignaturesAsync(options) { + return renderNextSnippetAsync(options.signatureClass, function (c, r) { + var cjs = r.compileJS; + if (!cjs) + return; + var file = r.compileJS.ast.getSourceFile("main.ts"); + var info = decompileCallInfo(file.statements[0]); + if (!info) + return; + var s = r.compileBlocks && r.compileBlocks.success ? $(r.blocksSvg) : undefined; + var sig = info.decl.getText().replace(/^export/, ''); + sig = sig.slice(0, sig.indexOf('{')).trim() + ';'; + var js = $('').text(sig); + if (options.snippetReplaceParent) + c = c.parent(); + fillWithWidget(options, c, js, s, { showJs: true, hideGutter: true }); + }, { package: options.package, snippetMode: true }); + } + function renderShuffleAsync(options) { + return renderNextSnippetAsync(options.shuffleClass, function (c, r) { + var s = r.blocksSvg; + if (options.snippetReplaceParent) + c = c.parent(); + var segment = $('
').append(s); + c.replaceWith(segment); + }, { + emPixels: 14, layout: pxt.blocks.BlockLayout.Shuffle, aspectRatio: options.blocksAspectRatio, + package: options.package + }); + } + function renderBlocksAsync(options) { + return renderNextSnippetAsync(options.blocksClass, function (c, r) { + var s = r.blocksSvg; + if (options.snippetReplaceParent) + c = c.parent(); + var segment = $('
').append(s); + c.replaceWith(segment); + }, { package: options.package, snippetMode: true }); + } + function renderInlineBlocksAsync(options) { + options = pxt.Util.clone(options); + options.emPixels = 18; + options.snippetMode = true; + var $els = $(":not(pre) > code"); + var i = 0; + function renderNextAsync() { + if (i >= $els.length) + return Promise.resolve(); + var $el = $($els[i++]); + var text = $el.text(); + var mbtn = /^(\|+)([^\|]+)\|+$/.exec(text); + if (mbtn) { + var lev = mbtn[1].length == 1 ? "primary" : ""; + var txt = mbtn[2]; + $el.replaceWith($(""); + $(content).find('#tryagain').click(function () { + render(doctype, src); + }); + // notify parent iframe that docs weren't loaded + if (window.parent) + window.parent.postMessage({ + type: "docfailed", + docType: doctype, + src: src + }, "*"); + }).finally(function () { + $(loading).hide(); + $(content).show(); + }) + .done(function () { }); + } + function renderHash() { + var m = /^#(doc|md|tutorial):([^&?:]+)(:([^&?:]+):([^&?:]+))?/i.exec(window.location.hash); + if (m) { + // navigation occured + var p = m[4] ? setEditorContextAsync(/^blocks$/.test(m[4]) ? LanguageMode.Blocks : LanguageMode.TypeScript, m[5]) : Promise.resolve(); + p.then(function () { return render(m[1], decodeURIComponent(m[2])); }); + } + } + window.addEventListener("message", receiveDocMessage, false); + window.addEventListener("hashchange", function () { + renderHash(); + }, false); + parent.postMessage({ type: "sidedocready" }, "*"); + // delay load doc page to allow simulator to load first + setTimeout(function () { return renderHash(); }, 1); + } + runner.startDocsServer = startDocsServer; + function renderProjectAsync(content, projectid, template) { + if (template === void 0) { template = "blocks"; } + return pxt.Cloud.privateGetTextAsync(projectid + "/text") + .then(function (txt) { return JSON.parse(txt); }) + .then(function (files) { + var md = "```" + template + "\n" + files["main.ts"] + "\n```"; + return renderMarkdownAsync(content, md); + }); + } + runner.renderProjectAsync = renderProjectAsync; + function renderDocAsync(content, docid) { + docid = docid.replace(/^\//, ""); + return pxt.Cloud.downloadMarkdownAsync(docid, runner.editorLocale, pxt.Util.localizeLive) + .then(function (md) { return renderMarkdownAsync(content, md, { path: docid }); }); + } + var template = "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n@breadcrumb@\n@body@"; + function renderMarkdownAsync(content, md, options) { + if (options === void 0) { options = {}; } + var path = options.path; + var parts = (path || '').split('/'); + var bc = !path ? null : parts.map(function (e, i) { + return { + href: "/" + parts.slice(0, i + 1).join("/"), + name: e + }; + }); + var html = pxt.docs.renderMarkdown(template, md, pxt.appTarget.appTheme, null, bc); + $(content).html(html); + $(content).find('a').attr('target', '_blank'); + return pxt.runner.renderAsync({ + blocksAspectRatio: 0.5, + snippetClass: 'lang-blocks', + signatureClass: 'lang-sig', + blocksClass: 'lang-block', + shuffleClass: 'lang-shuffle', + simulatorClass: 'lang-sim', + linksClass: 'lang-cards', + namespacesClass: 'lang-namespaces', + codeCardClass: 'lang-codecard', + packageClass: 'lang-package', + projectClass: 'lang-project', + snippetReplaceParent: true, + simulator: true, + hex: true, + tutorial: !!options.tutorial, + showJavaScript: runner.languageMode == LanguageMode.TypeScript, + hexName: pxt.appTarget.id + }).then(function () { + // patch a elements + $(content).find('a[href^="/"]').removeAttr('target').each(function (i, a) { + $(a).attr('href', '#doc:' + $(a).attr('href').replace(/^\//, '')); + }); + // enable embeds + $(content).find('.ui.embed').embed(); + }); + } + runner.renderMarkdownAsync = renderMarkdownAsync; + function renderTutorialAsync(content, tutorialid, step) { + tutorialid = tutorialid.replace(/^\//, ""); + return pxt.Cloud.downloadMarkdownAsync(tutorialid, runner.editorLocale, pxt.Util.localizeLive) + .then(function (tutorialmd) { + var steps = tutorialmd.split(/\###.*(?!$)/i); + if (steps.length < 1) + return; + var options = steps[0]; + steps = steps.slice(1, steps.length); + // Extract toolbox block ids + var uptoSteps = steps.slice(0, step + 1).join(); + uptoSteps = uptoSteps.replace(/((?!.)\s)+/g, "\n"); + var regex = /```(sim|block|blocks|shuffle)\n([\s\S]*?)\n```/gmi; + var match; + var code = ''; + while ((match = regex.exec(uptoSteps)) != null) { + code += match[2] + "\n"; + } + // Render current step + return renderMarkdownAsync(content, steps[step], { tutorial: true }) + .then(function () { + if (code == '') + return; + // Convert all blocks to blocks + return pxt.runner.decompileToBlocksAsync(code, { + emPixels: 14, + layout: pxt.blocks.BlockLayout.Flow, + package: undefined + }).then(function (r) { + var blocksxml = r.compileBlocks.outfiles['main.blocks']; + var toolboxSubset = {}; + if (blocksxml) { + var headless = pxt.blocks.loadWorkspaceXml(blocksxml); + var allblocks = headless.getAllBlocks(); + for (var bi = 0; bi < allblocks.length; ++bi) { + var blk = allblocks[bi]; + toolboxSubset[blk.type] = 1; + } + } + if (toolboxSubset != {}) { + window.parent.postMessage({ + type: "tutorial", + tutorial: tutorialid, + subtype: "steploaded", + data: toolboxSubset, + location: "bottom" + }, "*"); + } + }); + }); + }); + } + runner.renderTutorialAsync = renderTutorialAsync; + function decompileToBlocksAsync(code, options) { + return loadPackageAsync(options && options.package ? "docs:" + options.package : null, code) + .then(function () { return getCompileOptionsAsync(pxt.appTarget.compile ? pxt.appTarget.compile.hasHex : false); }) + .then(function (opts) { + // compile + opts.fileSystem["main.ts"] = code; + opts.ast = true; + var resp = pxtc.compile(opts); + if (resp.diagnostics && resp.diagnostics.length > 0) + resp.diagnostics.forEach(function (diag) { return console.error(diag.messageText); }); + if (!resp.success) + return Promise.resolve({ compileJS: resp }); + // decompile to blocks + var apis = pxtc.getApiInfo(resp.ast); + return ts.pxtc.localizeApisAsync(apis, runner.mainPkg) + .then(function () { + var blocksInfo = pxtc.getBlocksInfo(apis); + pxt.blocks.initBlocks(blocksInfo); + var bresp = pxtc.decompiler.decompileToBlocks(blocksInfo, resp.ast.getSourceFile("main.ts"), { snippetMode: options && options.snippetMode }); + if (bresp.diagnostics && bresp.diagnostics.length > 0) + bresp.diagnostics.forEach(function (diag) { return console.error(diag.messageText); }); + if (!bresp.success) + return { compileJS: resp, compileBlocks: bresp }; + pxt.debug(bresp.outfiles["main.blocks"]); + return { + compileJS: resp, + compileBlocks: bresp, + blocksSvg: pxt.blocks.render(bresp.outfiles["main.blocks"], options) + }; + }); + }); + } + runner.decompileToBlocksAsync = decompileToBlocksAsync; + runner.initCallbacks = []; + function init() { + initInnerAsync() + .done(function () { + for (var i = 0; i < runner.initCallbacks.length; ++i) { + runner.initCallbacks[i](); + } + }); + } + runner.init = init; + function windowLoad() { + var f = window.ksRunnerWhenLoaded; + if (f) + f(); + } + windowLoad(); + })(runner = pxt.runner || (pxt.runner = {})); +})(pxt || (pxt = {})); diff --git a/pxtsim.js b/pxtsim.js new file mode 100644 index 00000000..95816df2 --- /dev/null +++ b/pxtsim.js @@ -0,0 +1,6880 @@ +var __extends = (this && this.__extends) || function (d, b) { + for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); +}; +var pxsim; +(function (pxsim) { + var GROUND_COLOR = "blue"; + var POWER_COLOR = "red"; + ; + ; + ; + ; + ; + ; + function isOnBreadboardBottom(location) { + var isBot = false; + if (typeof location !== "string" && location.type === "breadboard") { + var bbLoc = location; + var row = bbLoc.row; + isBot = 0 <= ["a", "b", "c", "d", "e"].indexOf(row); + } + return isBot; + } + var arrCount = function (a) { return a.reduce(function (p, n) { return p + (n ? 1 : 0); }, 0); }; + var arrAny = function (a) { return arrCount(a) > 0; }; + function computePowerUsage(wire) { + var ends = [wire.start, wire.end]; + var endIsGround = ends.map(function (e) { return e === "ground"; }); + var endIsThreeVolt = ends.map(function (e) { return e === "threeVolt"; }); + var endIsBot = ends.map(function (e) { return isOnBreadboardBottom(e); }); + var hasGround = arrAny(endIsGround); + var hasThreeVolt = arrAny(endIsThreeVolt); + var hasBot = arrAny(endIsBot); + return { + topGround: hasGround && !hasBot, + topThreeVolt: hasThreeVolt && !hasBot, + bottomGround: hasGround && hasBot, + bottomThreeVolt: hasThreeVolt && hasBot, + singleGround: hasGround, + singleThreeVolt: hasThreeVolt + }; + } + function mergePowerUsage(powerUsages) { + var finalPowerUsage = powerUsages.reduce(function (p, n) { return ({ + topGround: p.topGround || n.topGround, + topThreeVolt: p.topThreeVolt || n.topThreeVolt, + bottomGround: p.bottomGround || n.bottomGround, + bottomThreeVolt: p.bottomThreeVolt || n.bottomThreeVolt, + singleGround: n.singleGround ? p.singleGround === null : p.singleGround, + singleThreeVolt: n.singleThreeVolt ? p.singleThreeVolt === null : p.singleThreeVolt, + }); }, { + topGround: false, + topThreeVolt: false, + bottomGround: false, + bottomThreeVolt: false, + singleGround: null, + singleThreeVolt: null, + }); + if (finalPowerUsage.singleGround) + finalPowerUsage.topGround = finalPowerUsage.bottomGround = false; + if (finalPowerUsage.singleThreeVolt) + finalPowerUsage.topThreeVolt = finalPowerUsage.bottomThreeVolt = false; + return finalPowerUsage; + } + function copyDoubleArray(a) { + return a.map(function (b) { return b.map(function (p) { return p; }); }); + } + function merge2(a, b) { + var res = {}; + for (var aKey in a) + res[aKey] = a[aKey]; + for (var bKey in b) + res[bKey] = b[bKey]; + return res; + } + function merge3(a, b, c) { + return merge2(merge2(a, b), c); + } + function readPin(arg) { + pxsim.U.assert(!!arg, "Invalid pin: " + arg); + var pin = /^([A-Z]\w+)Pin\.(P\d+)$/.exec(arg); + return pin ? pin[2] : undefined; + } + pxsim.readPin = readPin; + function mkReverseMap(map) { + var origKeys = []; + var origVals = []; + for (var key in map) { + origKeys.push(key); + origVals.push(map[key]); + } + var newMap = {}; + for (var i = 0; i < origKeys.length; i++) { + var newKey = origVals[i]; + var newVal = origKeys[i]; + newMap[newKey] = newVal; + } + return newMap; + } + function isConnectedToBB(pin) { + return pin.orientation === "-Z" && pin.style === "male"; + } + var Allocator = (function () { + function Allocator(opts) { + this.availablePowerPins = { + top: { + threeVolt: pxsim.mkRange(26, 51).map(function (n) { return { type: "breadboard", row: "+", col: "" + n }; }), + ground: pxsim.mkRange(26, 51).map(function (n) { return { type: "breadboard", row: "-", col: "" + n }; }), + }, + bottom: { + threeVolt: pxsim.mkRange(1, 26).map(function (n) { return { type: "breadboard", row: "+", col: "" + n }; }), + ground: pxsim.mkRange(1, 26).map(function (n) { return { type: "breadboard", row: "-", col: "" + n }; }), + }, + }; + this.opts = opts; + } + Allocator.prototype.allocPartIRs = function (def, name, bbFit) { + var partIRs = []; + var mkIR = function (def, name, instPins, partParams) { + var pinIRs = []; + for (var i = 0; i < def.numberOfPins; i++) { + var pinDef = def.pinDefinitions[i]; + var pinTarget = void 0; + if (typeof pinDef.target === "string") { + pinTarget = pinDef.target; + } + else { + var instIdx = pinDef.target.pinInstantiationIdx; + pxsim.U.assert(!!instPins && instPins[instIdx] !== undefined, "No pin found for PinInstantiationIdx: " + instIdx + ". (Is the part missing an ArguementRole or \"trackArgs=\" annotations?)"); + pinTarget = instPins[instIdx]; + } + var pinLoc = def.visual.pinLocations[i]; + var adjustedY = bbFit.yOffset + pinLoc.y; + var relativeRowIdx = Math.round(adjustedY / def.visual.pinDistance); + var relativeYOffset = adjustedY - relativeRowIdx * def.visual.pinDistance; + var adjustedX = bbFit.xOffset + pinLoc.x; + var relativeColIdx = Math.round(adjustedX / def.visual.pinDistance); + var relativeXOffset = adjustedX - relativeColIdx * def.visual.pinDistance; + var pinBBFit = { + partRelativeRowIdx: relativeRowIdx, + partRelativeColIdx: relativeColIdx, + xOffset: relativeXOffset, + yOffset: relativeYOffset + }; + pinIRs.push({ + def: pinDef, + loc: pinLoc, + target: pinTarget, + bbFit: pinBBFit, + }); + } + return { + name: name, + def: def, + pins: pinIRs, + partParams: partParams || {}, + bbFit: bbFit + }; + }; + if (def.instantiation.kind === "singleton") { + partIRs.push(mkIR(def, name)); + } + else if (def.instantiation.kind === "function") { + var fnAlloc_1 = def.instantiation; + var fnNm_1 = fnAlloc_1.fullyQualifiedName; + var callsitesTrackedArgs = this.opts.fnArgs[fnNm_1]; + pxsim.U.assert(!!callsitesTrackedArgs && !!callsitesTrackedArgs.length, "Failed to read pin(s) from callsite for: " + fnNm_1); + callsitesTrackedArgs.forEach(function (fnArgsStr) { + var fnArgsSplit = fnArgsStr.split(","); + pxsim.U.assert(fnArgsSplit.length === fnAlloc_1.argumentRoles.length, "Mismatch between number of arguments at callsite (function name: " + fnNm_1 + ") vs number of argument roles in part definition (part: " + name + ")."); + var instPins = []; + var paramArgs = {}; + fnArgsSplit.forEach(function (arg, idx) { + var role = fnAlloc_1.argumentRoles[idx]; + if (role.partParameter !== undefined) { + paramArgs[role.partParameter] = arg; + } + if (role.pinInstantiationIdx !== undefined) { + var instIdx = role.pinInstantiationIdx; + var pin = readPin(arg); + instPins[instIdx] = pin; + } + }); + partIRs.push(mkIR(def, name, instPins, paramArgs)); + }); + } + return partIRs; + }; + Allocator.prototype.computePartDimensions = function (def, name) { + var pinLocs = def.visual.pinLocations; + var pinDefs = def.pinDefinitions; + var numPins = def.numberOfPins; + pxsim.U.assert(pinLocs.length === numPins, "Mismatch between \"numberOfPins\" and length of \"visual.pinLocations\" for \"" + name + "\""); + pxsim.U.assert(pinDefs.length === numPins, "Mismatch between \"numberOfPins\" and length of \"pinDefinitions\" for \"" + name + "\""); + pxsim.U.assert(numPins > 0, "Part \"" + name + "\" has no pins"); + var pins = pinLocs.map(function (loc, idx) { return merge3({ idx: idx }, loc, pinDefs[idx]); }); + var bbPins = pins.filter(function (p) { return p.orientation === "-Z"; }); + var hasBBPins = bbPins.length > 0; + var pinDist = def.visual.pinDistance; + var xOff; + var yOff; + var colCount; + var rowCount; + if (hasBBPins) { + var refPin = bbPins[0]; + var refPinColIdx = Math.ceil(refPin.x / pinDist); + var refPinRowIdx = Math.ceil(refPin.y / pinDist); + xOff = refPinColIdx * pinDist - refPin.x; + yOff = refPinRowIdx * pinDist - refPin.y; + colCount = Math.ceil((xOff + def.visual.width) / pinDist) + 1; + rowCount = Math.ceil((yOff + def.visual.height) / pinDist) + 1; + } + else { + colCount = Math.ceil(def.visual.width / pinDist); + rowCount = Math.ceil(def.visual.height / pinDist); + xOff = colCount * pinDist - def.visual.width; + yOff = rowCount * pinDist - def.visual.height; + } + return { + xOffset: xOff, + yOffset: yOff, + rowCount: rowCount, + colCount: colCount + }; + }; + Allocator.prototype.allocColumns = function (colCounts) { + var partsCount = colCounts.length; + var totalColumnsCount = pxsim.visuals.BREADBOARD_MID_COLS; //TODO allow multiple breadboards + var totalSpaceNeeded = colCounts.map(function (d) { return d.colCount; }).reduce(function (p, n) { return p + n; }, 0); + var extraSpace = totalColumnsCount - totalSpaceNeeded; + if (extraSpace <= 0) { + console.log("Not enough breadboard space!"); + } + var padding = Math.floor(extraSpace / (partsCount - 1 + 2)); + var partSpacing = padding; //Math.floor(extraSpace/(partsCount-1)); + var totalPartPadding = extraSpace - partSpacing * (partsCount - 1); + var leftPadding = Math.floor(totalPartPadding / 2); + var rightPadding = Math.ceil(totalPartPadding / 2); + var nextAvailableCol = 1 + leftPadding; + var partStartCol = colCounts.map(function (part) { + var col = nextAvailableCol; + nextAvailableCol += part.colCount + partSpacing; + return col; + }); + return partStartCol; + }; + Allocator.prototype.placeParts = function (parts) { + var totalRowsCount = pxsim.visuals.BREADBOARD_MID_ROWS + 2; // 10 letters + 2 for the middle gap + var startColumnIndices = this.allocColumns(parts.map(function (p) { return p.bbFit; })); + var startRowIndicies = parts.map(function (p) { + var extraRows = totalRowsCount - p.bbFit.rowCount; + var topPad = Math.floor(extraRows / 2); + var startIdx = topPad; + if (startIdx > 4) + startIdx = 4; + if (startIdx < 1) + startIdx = 1; + return startIdx; + }); + var placements = parts.map(function (p, idx) { + var row = startRowIndicies[idx]; + var col = startColumnIndices[idx]; + return merge2({ startColumnIdx: col, startRowIdx: row }, p); + }); + return placements; + }; + Allocator.prototype.nextColor = function () { + if (!this.availableWireColors || this.availableWireColors.length <= 0) { + this.availableWireColors = pxsim.visuals.GPIO_WIRE_COLORS.map(function (c) { return c; }); + } + return this.availableWireColors.pop(); + }; + Allocator.prototype.allocWireIRs = function (part) { + var _this = this; + var groupToColor = []; + var wires = part.pins.map(function (pin, pinIdx) { + var end = pin.target; + var start; + var colIdx = part.startColumnIdx + pin.bbFit.partRelativeColIdx; + var colName = pxsim.visuals.getColumnName(colIdx); + var pinRowIdx = part.startRowIdx + pin.bbFit.partRelativeRowIdx; + if (pinRowIdx >= 7) + pinRowIdx -= 2; + if (isConnectedToBB(pin.def)) { + //make a wire from bb top or bottom to target + var connectedToTop = pinRowIdx < 5; + var rowName = connectedToTop ? "j" : "a"; + start = { + type: "breadboard", + row: rowName, + col: colName, + style: pin.def.style + }; + } + else { + //make a wire directly from pin to target + var rowName = pxsim.visuals.getRowName(pinRowIdx); + start = { + type: "breadboard", + row: rowName, + col: colName, + xOffset: pin.bbFit.xOffset / part.def.visual.pinDistance, + yOffset: pin.bbFit.yOffset / part.def.visual.pinDistance, + style: pin.def.style + }; + } + var color; + if (end === "ground") { + color = GROUND_COLOR; + } + else if (end === "threeVolt") { + color = POWER_COLOR; + } + else if (typeof pin.def.colorGroup === "number") { + if (groupToColor[pin.def.colorGroup]) { + color = groupToColor[pin.def.colorGroup]; + } + else { + color = groupToColor[pin.def.colorGroup] = _this.nextColor(); + } + } + else { + color = _this.nextColor(); + } + return { + start: start, + end: end, + color: color, + pinIdx: pinIdx, + }; + }); + return merge2(part, { wires: wires }); + }; + Allocator.prototype.allocLocation = function (location, opts) { + var _this = this; + if (location === "ground" || location === "threeVolt") { + //special case if there is only a single ground or three volt pin in the whole build + if (location === "ground" && this.powerUsage.singleGround) { + var boardGroundPin = this.getBoardGroundPin(); + return { type: "dalboard", pin: boardGroundPin }; + } + else if (location === "threeVolt" && this.powerUsage.singleThreeVolt) { + var boardThreeVoltPin = this.getBoardThreeVoltPin(); + return { type: "dalboard", pin: boardThreeVoltPin }; + } + pxsim.U.assert(!!opts.referenceBBPin); + var nearestCoord = this.opts.getBBCoord(opts.referenceBBPin); + var firstTopAndBot = [ + this.availablePowerPins.top.ground[0] || this.availablePowerPins.top.threeVolt[0], + this.availablePowerPins.bottom.ground[0] || this.availablePowerPins.bottom.threeVolt[0] + ].map(function (loc) { + return _this.opts.getBBCoord(loc); + }); + if (!firstTopAndBot[0] || !firstTopAndBot[1]) { + console.debug("No more available \"" + location + "\" locations!"); + } + var nearTop = pxsim.visuals.findClosestCoordIdx(nearestCoord, firstTopAndBot) == 0; + var barPins = void 0; + if (nearTop) { + if (location === "ground") { + barPins = this.availablePowerPins.top.ground; + } + else if (location === "threeVolt") { + barPins = this.availablePowerPins.top.threeVolt; + } + } + else { + if (location === "ground") { + barPins = this.availablePowerPins.bottom.ground; + } + else if (location === "threeVolt") { + barPins = this.availablePowerPins.bottom.threeVolt; + } + } + var pinCoords = barPins.map(function (rowCol) { + return _this.opts.getBBCoord(rowCol); + }); + var closestPinIdx = pxsim.visuals.findClosestCoordIdx(nearestCoord, pinCoords); + var pin = barPins[closestPinIdx]; + if (nearTop) { + this.availablePowerPins.top.ground.splice(closestPinIdx, 1); + this.availablePowerPins.top.threeVolt.splice(closestPinIdx, 1); + } + else { + this.availablePowerPins.bottom.ground.splice(closestPinIdx, 1); + this.availablePowerPins.bottom.threeVolt.splice(closestPinIdx, 1); + } + return pin; + } + else if (location.type === "breadboard") { + return location; + } + else if (location === "MOSI" || location === "MISO" || location === "SCK") { + if (!this.opts.boardDef.spiPins) + console.debug("No SPI pin mappings found!"); + var pin = this.opts.boardDef.spiPins[location]; + return { type: "dalboard", pin: pin }; + } + else if (location === "SDA" || location === "SCL") { + if (!this.opts.boardDef.i2cPins) + console.debug("No I2C pin mappings found!"); + var pin = this.opts.boardDef.i2cPins[location]; + return { type: "dalboard", pin: pin }; + } + else { + //it must be a MicrobitPin + pxsim.U.assert(typeof location === "string", "Unknown location type: " + location); + var mbPin = location; + var boardPin = this.opts.boardDef.gpioPinMap[mbPin]; + pxsim.U.assert(!!boardPin, "Unknown pin: " + location); + return { type: "dalboard", pin: boardPin }; + } + }; + Allocator.prototype.getBoardGroundPin = function () { + var boardGround = this.opts.boardDef.groundPins[0] || null; + if (!boardGround) { + console.log("No available ground pin on board!"); + } + return boardGround; + }; + Allocator.prototype.getBoardThreeVoltPin = function () { + var threeVoltPin = this.opts.boardDef.threeVoltPins[0] || null; + if (!threeVoltPin) { + console.log("No available 3.3V pin on board!"); + } + return threeVoltPin; + }; + Allocator.prototype.allocPowerWires = function (powerUsage) { + var boardGroundPin = this.getBoardGroundPin(); + var threeVoltPin = this.getBoardThreeVoltPin(); + var topLeft = { type: "breadboard", row: "-", col: "26" }; + var botLeft = { type: "breadboard", row: "-", col: "1" }; + var topRight = { type: "breadboard", row: "-", col: "50" }; + var botRight = { type: "breadboard", row: "-", col: "25" }; + var top, bot; + if (this.opts.boardDef.attachPowerOnRight) { + top = topRight; + bot = botRight; + } + else { + top = topLeft; + bot = botLeft; + } + var groundWires = []; + var threeVoltWires = []; + if (powerUsage.bottomGround && powerUsage.topGround) { + //bb top - <==> bb bot - + groundWires.push({ + start: this.allocLocation("ground", { referenceBBPin: top }), + end: this.allocLocation("ground", { referenceBBPin: bot }), + color: GROUND_COLOR, + }); + } + if (powerUsage.topGround) { + //board - <==> bb top - + groundWires.push({ + start: this.allocLocation("ground", { referenceBBPin: top }), + end: { type: "dalboard", pin: boardGroundPin }, + color: GROUND_COLOR, + }); + } + else if (powerUsage.bottomGround) { + //board - <==> bb bot - + groundWires.push({ + start: this.allocLocation("ground", { referenceBBPin: bot }), + end: { type: "dalboard", pin: boardGroundPin }, + color: GROUND_COLOR, + }); + } + if (powerUsage.bottomThreeVolt && powerUsage.bottomGround) { + //bb top + <==> bb bot + + threeVoltWires.push({ + start: this.allocLocation("threeVolt", { referenceBBPin: top }), + end: this.allocLocation("threeVolt", { referenceBBPin: bot }), + color: POWER_COLOR, + }); + } + if (powerUsage.topThreeVolt) { + //board + <==> bb top + + threeVoltWires.push({ + start: this.allocLocation("threeVolt", { referenceBBPin: top }), + end: { type: "dalboard", pin: threeVoltPin }, + color: POWER_COLOR, + }); + } + else if (powerUsage.bottomThreeVolt) { + //board + <==> bb bot + + threeVoltWires.push({ + start: this.allocLocation("threeVolt", { referenceBBPin: bot }), + end: { type: "dalboard", pin: threeVoltPin }, + color: POWER_COLOR, + }); + } + var assembly = []; + if (groundWires.length > 0) + assembly.push({ wireIndices: groundWires.map(function (w, i) { return i; }) }); + var numGroundWires = groundWires.length; + if (threeVoltWires.length > 0) + assembly.push({ wireIndices: threeVoltWires.map(function (w, i) { return i + numGroundWires; }) }); + return { + wires: groundWires.concat(threeVoltWires), + assembly: assembly + }; + }; + Allocator.prototype.allocWire = function (wireIR) { + var _this = this; + var ends = [wireIR.start, wireIR.end]; + var endIsPower = ends.map(function (e) { return e === "ground" || e === "threeVolt"; }); + //allocate non-power first so we know the nearest pin for the power end + var endInsts = ends.map(function (e, idx) { return !endIsPower[idx] ? _this.allocLocation(e, {}) : null; }); + //allocate power pins closest to the other end of the wire + endInsts = endInsts.map(function (e, idx) { + if (e) + return e; + var locInst = endInsts[1 - idx]; // non-power end + var l = _this.allocLocation(ends[idx], { + referenceBBPin: locInst, + }); + return l; + }); + return { start: endInsts[0], end: endInsts[1], color: wireIR.color }; + }; + Allocator.prototype.allocPart = function (ir) { + var bbConnections = ir.pins + .filter(function (p) { return isConnectedToBB(p.def); }) + .map(function (p) { + var rowIdx = ir.startRowIdx + p.bbFit.partRelativeRowIdx; + if (rowIdx >= 7) + rowIdx -= 2; + var rowName = pxsim.visuals.getRowName(rowIdx); + var colIdx = ir.startColumnIdx + p.bbFit.partRelativeColIdx; + var colName = pxsim.visuals.getColumnName(colIdx); + return { + type: "breadboard", + row: rowName, + col: colName, + }; + }); + var part = { + name: ir.name, + visual: ir.def.visual, + bbFit: ir.bbFit, + startColumnIdx: ir.startColumnIdx, + startRowIdx: ir.startRowIdx, + breadboardConnections: bbConnections, + params: ir.partParams, + simulationBehavior: ir.def.simulationBehavior + }; + return part; + }; + Allocator.prototype.allocAll = function () { + var _this = this; + var partNmAndDefs = this.opts.partsList + .map(function (partName) { return { name: partName, def: _this.opts.partDefs[partName] }; }) + .filter(function (d) { return !!d.def; }); + if (partNmAndDefs.length > 0) { + var partNmsList = partNmAndDefs.map(function (p) { return p.name; }); + var partDefsList = partNmAndDefs.map(function (p) { return p.def; }); + var dimensions_1 = partNmAndDefs.map(function (nmAndPart) { return _this.computePartDimensions(nmAndPart.def, nmAndPart.name); }); + var partIRs_1 = []; + partNmAndDefs.forEach(function (nmAndDef, idx) { + var dims = dimensions_1[idx]; + var irs = _this.allocPartIRs(nmAndDef.def, nmAndDef.name, dims); + partIRs_1 = partIRs_1.concat(irs); + }); + var partPlacements = this.placeParts(partIRs_1); + var partsAndWireIRs = partPlacements.map(function (p) { return _this.allocWireIRs(p); }); + var allWireIRs = partsAndWireIRs.map(function (p) { return p.wires; }).reduce(function (p, n) { return p.concat(n); }, []); + var allPowerUsage = allWireIRs.map(function (w) { return computePowerUsage(w); }); + this.powerUsage = mergePowerUsage(allPowerUsage); + var basicWires = this.allocPowerWires(this.powerUsage); + var partsAndWires = partsAndWireIRs.map(function (irs, idx) { + var part = _this.allocPart(irs); + var wires = irs.wires.map(function (w) { return _this.allocWire(w); }); + var pinIdxToWireIdx = []; + irs.wires.forEach(function (wIR, idx) { + pinIdxToWireIdx[wIR.pinIdx] = idx; + }); + var assembly = irs.def.assembly.map(function (stepDef) { + return { + part: stepDef.part, + wireIndices: (stepDef.pinIndices || []).map(function (i) { return pinIdxToWireIdx[i]; }) + }; + }); + return { + part: part, + wires: wires, + assembly: assembly + }; + }); + var all = [basicWires].concat(partsAndWires); + // hide breadboard if not used + var requiresBreadboard = all.some(function (r) { + return (r.part && r.part.breadboardConnections && r.part.breadboardConnections.length > 0) + || r.wires && r.wires.some(function (w) { return (w.end.type == "breadboard" && w.end.style != "croc") || (w.start.type == "breadboard" && w.start.style != "croc"); }); + }); + return { + partsAndWires: all, + requiresBreadboard: requiresBreadboard + }; + } + else { + return { + partsAndWires: [] + }; + } + }; + return Allocator; + }()); + function allocateDefinitions(opts) { + return new Allocator(opts).allocAll(); + } + pxsim.allocateDefinitions = allocateDefinitions; +})(pxsim || (pxsim = {})); +/// +/** + * Heavily adapted from https://github.com/Microsoft/vscode-debugadapter-node + * and altered to run in a browser and communcate via JSON over a websocket + * rather than through stdin and stdout + */ +var pxsim; +(function (pxsim) { + var protocol; + (function (protocol) { + var Message = (function () { + function Message(type) { + this.seq = 0; + this.type = type; + } + return Message; + }()); + protocol.Message = Message; + var Response = (function (_super) { + __extends(Response, _super); + function Response(request, message) { + _super.call(this, 'response'); + this.request_seq = request.seq; + this.command = request.command; + if (message) { + this.success = false; + this.message = message; + } + else { + this.success = true; + } + } + return Response; + }(Message)); + protocol.Response = Response; + var Event = (function (_super) { + __extends(Event, _super); + function Event(event, body) { + _super.call(this, 'event'); + this.event = event; + if (body) { + this.body = body; + } + } + return Event; + }(Message)); + protocol.Event = Event; + var Source = (function () { + function Source(name, path, id, origin, data) { + if (id === void 0) { id = 0; } + this.name = name; + this.path = path; + this.sourceReference = id; + if (origin) { + this.origin = origin; + } + if (data) { + this.adapterData = data; + } + } + return Source; + }()); + protocol.Source = Source; + var Scope = (function () { + function Scope(name, reference, expensive) { + if (expensive === void 0) { expensive = false; } + this.name = name; + this.variablesReference = reference; + this.expensive = expensive; + } + return Scope; + }()); + protocol.Scope = Scope; + var StackFrame = (function () { + function StackFrame(i, nm, src, ln, col) { + if (ln === void 0) { ln = 0; } + if (col === void 0) { col = 0; } + this.id = i; + this.source = src; + this.line = ln; + this.column = col; + this.name = nm; + } + return StackFrame; + }()); + protocol.StackFrame = StackFrame; + var Thread = (function () { + function Thread(id, name) { + this.id = id; + if (name) { + this.name = name; + } + else { + this.name = 'Thread #' + id; + } + } + return Thread; + }()); + protocol.Thread = Thread; + var Variable = (function () { + function Variable(name, value, ref, indexedVariables, namedVariables) { + if (ref === void 0) { ref = 0; } + this.name = name; + this.value = value; + this.variablesReference = ref; + if (typeof namedVariables === 'number') { + this.namedVariables = namedVariables; + } + if (typeof indexedVariables === 'number') { + this.indexedVariables = indexedVariables; + } + } + return Variable; + }()); + protocol.Variable = Variable; + var Breakpoint = (function () { + function Breakpoint(verified, line, column, source) { + this.verified = verified; + var e = this; + if (typeof line === 'number') { + e.line = line; + } + if (typeof column === 'number') { + e.column = column; + } + if (source) { + e.source = source; + } + } + return Breakpoint; + }()); + protocol.Breakpoint = Breakpoint; + var Module = (function () { + function Module(id, name) { + this.id = id; + this.name = name; + } + return Module; + }()); + protocol.Module = Module; + var CompletionItem = (function () { + function CompletionItem(label, start, length) { + if (length === void 0) { length = 0; } + this.label = label; + this.start = start; + this.length = length; + } + return CompletionItem; + }()); + protocol.CompletionItem = CompletionItem; + var StoppedEvent = (function (_super) { + __extends(StoppedEvent, _super); + function StoppedEvent(reason, threadId, exception_text) { + if (exception_text === void 0) { exception_text = null; } + _super.call(this, 'stopped'); + this.body = { + reason: reason, + threadId: threadId + }; + if (exception_text) { + var e = this; + e.body.text = exception_text; + } + } + return StoppedEvent; + }(Event)); + protocol.StoppedEvent = StoppedEvent; + var ContinuedEvent = (function (_super) { + __extends(ContinuedEvent, _super); + function ContinuedEvent(threadId, allThreadsContinued) { + _super.call(this, 'continued'); + this.body = { + threadId: threadId + }; + if (typeof allThreadsContinued === 'boolean') { + this.body.allThreadsContinued = allThreadsContinued; + } + } + return ContinuedEvent; + }(Event)); + protocol.ContinuedEvent = ContinuedEvent; + var InitializedEvent = (function (_super) { + __extends(InitializedEvent, _super); + function InitializedEvent() { + _super.call(this, 'initialized'); + } + return InitializedEvent; + }(Event)); + protocol.InitializedEvent = InitializedEvent; + var TerminatedEvent = (function (_super) { + __extends(TerminatedEvent, _super); + function TerminatedEvent(restart) { + _super.call(this, 'terminated'); + if (typeof restart === 'boolean') { + var e = this; + e.body = { + restart: restart + }; + } + } + return TerminatedEvent; + }(Event)); + protocol.TerminatedEvent = TerminatedEvent; + var OutputEvent = (function (_super) { + __extends(OutputEvent, _super); + function OutputEvent(output, category, data) { + if (category === void 0) { category = 'console'; } + _super.call(this, 'output'); + this.body = { + category: category, + output: output + }; + if (data !== undefined) { + this.body.data = data; + } + } + return OutputEvent; + }(Event)); + protocol.OutputEvent = OutputEvent; + var ThreadEvent = (function (_super) { + __extends(ThreadEvent, _super); + function ThreadEvent(reason, threadId) { + _super.call(this, 'thread'); + this.body = { + reason: reason, + threadId: threadId + }; + } + return ThreadEvent; + }(Event)); + protocol.ThreadEvent = ThreadEvent; + var BreakpointEvent = (function (_super) { + __extends(BreakpointEvent, _super); + function BreakpointEvent(reason, breakpoint) { + _super.call(this, 'breakpoint'); + this.body = { + reason: reason, + breakpoint: breakpoint + }; + } + return BreakpointEvent; + }(Event)); + protocol.BreakpointEvent = BreakpointEvent; + var ModuleEvent = (function (_super) { + __extends(ModuleEvent, _super); + function ModuleEvent(reason, module) { + _super.call(this, 'module'); + this.body = { + reason: reason, + module: module + }; + } + return ModuleEvent; + }(Event)); + protocol.ModuleEvent = ModuleEvent; + var ProtocolServer = (function () { + function ProtocolServer() { + this._pendingRequests = {}; + } + ProtocolServer.prototype.start = function (host) { + var _this = this; + this._sequence = 1; + this.host = host; + this.host.onData(function (msg) { + if (msg.type === 'request') { + _this.dispatchRequest(msg); + } + else if (msg.type === 'response') { + var response = msg; + var clb = _this._pendingRequests[response.seq]; + if (clb) { + delete _this._pendingRequests[response.seq]; + clb(response); + } + } + }); + }; + ProtocolServer.prototype.stop = function () { + if (this.host) { + this.host.close(); + } + }; + ProtocolServer.prototype.sendEvent = function (event) { + this.send('event', event); + }; + ProtocolServer.prototype.sendResponse = function (response) { + if (response.seq > 0) { + console.error("attempt to send more than one response for command " + response.command); + } + else { + this.send('response', response); + } + }; + ProtocolServer.prototype.sendRequest = function (command, args, timeout, cb) { + var _this = this; + var request = { + command: command + }; + if (args && Object.keys(args).length > 0) { + request.arguments = args; + } + this.send('request', request); + if (cb) { + this._pendingRequests[request.seq] = cb; + var timer_1 = setTimeout(function () { + clearTimeout(timer_1); + var clb = _this._pendingRequests[request.seq]; + if (clb) { + delete _this._pendingRequests[request.seq]; + clb(new protocol.Response(request, 'timeout')); + } + }, timeout); + } + }; + ProtocolServer.prototype.send = function (typ, message) { + message.type = typ; + message.seq = this._sequence++; + if (this.host) { + var json = JSON.stringify(message); + this.host.send(json); + } + }; + // ---- protected ---------------------------------------------------------- + ProtocolServer.prototype.dispatchRequest = function (request) { + }; + return ProtocolServer; + }()); + protocol.ProtocolServer = ProtocolServer; + var DebugSession = (function (_super) { + __extends(DebugSession, _super); + function DebugSession() { + _super.apply(this, arguments); + this._debuggerLinesStartAt1 = false; + this._debuggerColumnsStartAt1 = false; + this._clientLinesStartAt1 = true; + this._clientColumnsStartAt1 = true; + } + DebugSession.prototype.shutdown = function () { + }; + DebugSession.prototype.dispatchRequest = function (request) { + var response = new protocol.Response(request); + try { + if (request.command === 'initialize') { + var args = request.arguments; + if (typeof args.linesStartAt1 === 'boolean') { + this._clientLinesStartAt1 = args.linesStartAt1; + } + if (typeof args.columnsStartAt1 === 'boolean') { + this._clientColumnsStartAt1 = args.columnsStartAt1; + } + if (args.pathFormat !== 'path') { + this.sendErrorResponse(response, 2018, 'debug adapter only supports native paths', null); + } + else { + var initializeResponse = response; + initializeResponse.body = {}; + this.initializeRequest(initializeResponse, args); + } + } + else if (request.command === 'launch') { + this.launchRequest(response, request.arguments); + } + else if (request.command === 'attach') { + this.attachRequest(response, request.arguments); + } + else if (request.command === 'disconnect') { + this.disconnectRequest(response, request.arguments); + } + else if (request.command === 'setBreakpoints') { + this.setBreakPointsRequest(response, request.arguments); + } + else if (request.command === 'setFunctionBreakpoints') { + this.setFunctionBreakPointsRequest(response, request.arguments); + } + else if (request.command === 'setExceptionBreakpoints') { + this.setExceptionBreakPointsRequest(response, request.arguments); + } + else if (request.command === 'configurationDone') { + this.configurationDoneRequest(response, request.arguments); + } + else if (request.command === 'continue') { + this.continueRequest(response, request.arguments); + } + else if (request.command === 'next') { + this.nextRequest(response, request.arguments); + } + else if (request.command === 'stepIn') { + this.stepInRequest(response, request.arguments); + } + else if (request.command === 'stepOut') { + this.stepOutRequest(response, request.arguments); + } + else if (request.command === 'stepBack') { + this.stepBackRequest(response, request.arguments); + } + else if (request.command === 'restartFrame') { + this.restartFrameRequest(response, request.arguments); + } + else if (request.command === 'goto') { + this.gotoRequest(response, request.arguments); + } + else if (request.command === 'pause') { + this.pauseRequest(response, request.arguments); + } + else if (request.command === 'stackTrace') { + this.stackTraceRequest(response, request.arguments); + } + else if (request.command === 'scopes') { + this.scopesRequest(response, request.arguments); + } + else if (request.command === 'variables') { + this.variablesRequest(response, request.arguments); + } + else if (request.command === 'setVariable') { + this.setVariableRequest(response, request.arguments); + } + else if (request.command === 'source') { + this.sourceRequest(response, request.arguments); + } + else if (request.command === 'threads') { + this.threadsRequest(response); + } + else if (request.command === 'evaluate') { + this.evaluateRequest(response, request.arguments); + } + else if (request.command === 'stepInTargets') { + this.stepInTargetsRequest(response, request.arguments); + } + else if (request.command === 'gotoTargets') { + this.gotoTargetsRequest(response, request.arguments); + } + else if (request.command === 'completions') { + this.completionsRequest(response, request.arguments); + } + else { + this.customRequest(request.command, response, request.arguments); + } + } + catch (e) { + this.sendErrorResponse(response, 1104, '{_stack}', { _exception: e.message, _stack: e.stack }); + } + }; + DebugSession.prototype.initializeRequest = function (response, args) { + // This default debug adapter does not support conditional breakpoints. + response.body.supportsConditionalBreakpoints = false; + // This default debug adapter does not support hit conditional breakpoints. + response.body.supportsHitConditionalBreakpoints = false; + // This default debug adapter does not support function breakpoints. + response.body.supportsFunctionBreakpoints = false; + // This default debug adapter implements the 'configurationDone' request. + response.body.supportsConfigurationDoneRequest = true; + // This default debug adapter does not support hovers based on the 'evaluate' request. + response.body.supportsEvaluateForHovers = false; + // This default debug adapter does not support the 'stepBack' request. + response.body.supportsStepBack = false; + // This default debug adapter does not support the 'setVariable' request. + response.body.supportsSetVariable = false; + // This default debug adapter does not support the 'restartFrame' request. + response.body.supportsRestartFrame = false; + // This default debug adapter does not support the 'stepInTargetsRequest' request. + response.body.supportsStepInTargetsRequest = false; + // This default debug adapter does not support the 'gotoTargetsRequest' request. + response.body.supportsGotoTargetsRequest = false; + // This default debug adapter does not support the 'completionsRequest' request. + response.body.supportsCompletionsRequest = false; + this.sendResponse(response); + }; + DebugSession.prototype.disconnectRequest = function (response, args) { + this.sendResponse(response); + this.shutdown(); + }; + DebugSession.prototype.launchRequest = function (response, args) { + this.sendResponse(response); + }; + DebugSession.prototype.attachRequest = function (response, args) { + this.sendResponse(response); + }; + DebugSession.prototype.setBreakPointsRequest = function (response, args) { + this.sendResponse(response); + }; + DebugSession.prototype.setFunctionBreakPointsRequest = function (response, args) { + this.sendResponse(response); + }; + DebugSession.prototype.setExceptionBreakPointsRequest = function (response, args) { + this.sendResponse(response); + }; + DebugSession.prototype.configurationDoneRequest = function (response, args) { + this.sendResponse(response); + }; + DebugSession.prototype.continueRequest = function (response, args) { + this.sendResponse(response); + }; + DebugSession.prototype.nextRequest = function (response, args) { + this.sendResponse(response); + }; + DebugSession.prototype.stepInRequest = function (response, args) { + this.sendResponse(response); + }; + DebugSession.prototype.stepOutRequest = function (response, args) { + this.sendResponse(response); + }; + DebugSession.prototype.stepBackRequest = function (response, args) { + this.sendResponse(response); + }; + DebugSession.prototype.restartFrameRequest = function (response, args) { + this.sendResponse(response); + }; + DebugSession.prototype.gotoRequest = function (response, args) { + this.sendResponse(response); + }; + DebugSession.prototype.pauseRequest = function (response, args) { + this.sendResponse(response); + }; + DebugSession.prototype.sourceRequest = function (response, args) { + this.sendResponse(response); + }; + DebugSession.prototype.threadsRequest = function (response) { + this.sendResponse(response); + }; + DebugSession.prototype.stackTraceRequest = function (response, args) { + this.sendResponse(response); + }; + DebugSession.prototype.scopesRequest = function (response, args) { + this.sendResponse(response); + }; + DebugSession.prototype.variablesRequest = function (response, args) { + this.sendResponse(response); + }; + DebugSession.prototype.setVariableRequest = function (response, args) { + this.sendResponse(response); + }; + DebugSession.prototype.evaluateRequest = function (response, args) { + this.sendResponse(response); + }; + DebugSession.prototype.stepInTargetsRequest = function (response, args) { + this.sendResponse(response); + }; + DebugSession.prototype.gotoTargetsRequest = function (response, args) { + this.sendResponse(response); + }; + DebugSession.prototype.completionsRequest = function (response, args) { + this.sendResponse(response); + }; + /** + * Override this hook to implement custom requests. + */ + DebugSession.prototype.customRequest = function (command, response, args) { + this.sendErrorResponse(response, 1014, 'unrecognized request', null); + }; + DebugSession.prototype.sendErrorResponse = function (response, codeOrMessage, format, variables) { + var msg; + if (typeof codeOrMessage === 'number') { + msg = { + id: codeOrMessage, + format: format + }; + if (variables) { + msg.variables = variables; + } + msg.showUser = true; + } + else { + msg = codeOrMessage; + } + response.success = false; + DebugSession.formatPII(msg.format, true, msg.variables); + if (!response.body) { + response.body = {}; + } + response.body.error = msg; + this.sendResponse(response); + }; + DebugSession.prototype.convertClientLineToDebugger = function (line) { + if (this._debuggerLinesStartAt1) { + return this._clientLinesStartAt1 ? line : line + 1; + } + return this._clientLinesStartAt1 ? line - 1 : line; + }; + DebugSession.prototype.convertDebuggerLineToClient = function (line) { + if (this._debuggerLinesStartAt1) { + return this._clientLinesStartAt1 ? line : line - 1; + } + return this._clientLinesStartAt1 ? line + 1 : line; + }; + DebugSession.prototype.convertClientColumnToDebugger = function (column) { + if (this._debuggerColumnsStartAt1) { + return this._clientColumnsStartAt1 ? column : column + 1; + } + return this._clientColumnsStartAt1 ? column - 1 : column; + }; + DebugSession.prototype.convertDebuggerColumnToClient = function (column) { + if (this._debuggerColumnsStartAt1) { + return this._clientColumnsStartAt1 ? column : column - 1; + } + return this._clientColumnsStartAt1 ? column + 1 : column; + }; + DebugSession.prototype.convertClientPathToDebugger = function (clientPath) { + if (this._clientPathsAreURIs != this._debuggerPathsAreURIs) { + if (this._clientPathsAreURIs) { + return DebugSession.uri2path(clientPath); + } + else { + return DebugSession.path2uri(clientPath); + } + } + return clientPath; + }; + DebugSession.prototype.convertDebuggerPathToClient = function (debuggerPath) { + if (this._debuggerPathsAreURIs != this._clientPathsAreURIs) { + if (this._debuggerPathsAreURIs) { + return DebugSession.uri2path(debuggerPath); + } + else { + return DebugSession.path2uri(debuggerPath); + } + } + return debuggerPath; + }; + DebugSession.path2uri = function (str) { + var pathName = str.replace(/\\/g, '/'); + if (pathName[0] !== '/') { + pathName = '/' + pathName; + } + return encodeURI('file://' + pathName); + }; + DebugSession.uri2path = function (url) { + return url; + //return Url.parse(url).pathname; + }; + /* + * If argument starts with '_' it is OK to send its value to telemetry. + */ + DebugSession.formatPII = function (format, excludePII, args) { + return format.replace(DebugSession._formatPIIRegexp, function (match, paramName) { + if (excludePII && paramName.length > 0 && paramName[0] !== '_') { + return match; + } + return args[paramName] && args.hasOwnProperty(paramName) ? + args[paramName] : + match; + }); + }; + DebugSession._formatPIIRegexp = /{([^}]+)}/g; + return DebugSession; + }(ProtocolServer)); + protocol.DebugSession = DebugSession; + })(protocol = pxsim.protocol || (pxsim.protocol = {})); +})(pxsim || (pxsim = {})); +var pxsim; +(function (pxsim) { + var util; + (function (util) { + function injectPolyphils() { + // Polyfill for Uint8Array.slice for IE and Safari + // https://tc39.github.io/ecma262/#sec-%typedarray%.prototype.slice + // TODO: Move this polyfill to a more appropriate file. It is left here for now because moving it causes a crash in IE; see PXT issue #1301. + if (!Uint8Array.prototype.slice) { + Object.defineProperty(Uint8Array.prototype, 'slice', { + value: Array.prototype.slice, + writable: true, + enumerable: true + }); + } + // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/fill + if (!Uint8Array.prototype.fill) { + Object.defineProperty(Uint8Array.prototype, 'fill', { + writable: true, + enumerable: true, + value: function (value) { + // Steps 1-2. + if (this == null) { + throw new TypeError('this is null or not defined'); + } + var O = Object(this); + // Steps 3-5. + var len = O.length >>> 0; + // Steps 6-7. + var start = arguments[1]; + var relativeStart = start >> 0; + // Step 8. + var k = relativeStart < 0 ? + Math.max(len + relativeStart, 0) : + Math.min(relativeStart, len); + // Steps 9-10. + var end = arguments[2]; + var relativeEnd = end === undefined ? + len : end >> 0; + // Step 11. + var final = relativeEnd < 0 ? + Math.max(len + relativeEnd, 0) : + Math.min(relativeEnd, len); + // Step 12. + while (k < final) { + O[k] = value; + k++; + } + // Step 13. + return O; + } + }); + } + } + util.injectPolyphils = injectPolyphils; + var Lazy = (function () { + function Lazy(_func) { + this._func = _func; + this._evaluated = false; + } + Object.defineProperty(Lazy.prototype, "value", { + get: function () { + if (!this._evaluated) { + this._value = this._func(); + this._evaluated = true; + } + return this._value; + }, + enumerable: true, + configurable: true + }); + return Lazy; + }()); + util.Lazy = Lazy; + function getNormalizedParts(path) { + path = path.replace(/\\/g, "/"); + var parts = []; + path.split("/").forEach(function (part) { + if (part === ".." && parts.length) { + parts.pop(); + } + else if (part && part !== ".") { + parts.push(part); + } + }); + return parts; + } + util.getNormalizedParts = getNormalizedParts; + function normalizePath(path) { + return getNormalizedParts(path).join("/"); + } + util.normalizePath = normalizePath; + function relativePath(fromDir, toFile) { + var fParts = getNormalizedParts(fromDir); + var tParts = getNormalizedParts(toFile); + var i = 0; + while (fParts[i] === tParts[i]) { + i++; + if (i === fParts.length || i === tParts.length) { + break; + } + } + var fRemainder = fParts.slice(i); + var tRemainder = tParts.slice(i); + for (var i_1 = 0; i_1 < fRemainder.length; i_1++) { + tRemainder.unshift(".."); + } + return tRemainder.join("/"); + } + util.relativePath = relativePath; + function pathJoin() { + var paths = []; + for (var _i = 0; _i < arguments.length; _i++) { + paths[_i - 0] = arguments[_i]; + } + var result = ""; + paths.forEach(function (path) { + path.replace(/\\/g, "/"); + if (path.lastIndexOf("/") === path.length - 1) { + path = path.slice(0, path.length - 1); + } + result += "/" + path; + }); + return result; + } + util.pathJoin = pathJoin; + })(util = pxsim.util || (pxsim.util = {})); +})(pxsim || (pxsim = {})); +/// +/// +var pxsim; +(function (pxsim) { + function getWarningMessage(msg) { + var r = { + type: "debugger", + subtype: "warning", + breakpointIds: [], + message: msg + }; + var s = pxsim.runtime.currFrame; + while (s != null) { + r.breakpointIds.push(s.lastBrkId); + s = s.parent; + } + return r; + } + pxsim.getWarningMessage = getWarningMessage; + var BreakpointMap = (function () { + function BreakpointMap(breakpoints) { + var _this = this; + this.fileMap = {}; + this.idMap = {}; + breakpoints.forEach(function (tuple) { + var id = tuple[0], bp = tuple[1]; + if (!_this.fileMap[bp.source.path]) { + _this.fileMap[bp.source.path] = []; + } + _this.fileMap[bp.source.path].push(tuple); + _this.idMap[id] = bp; + }); + for (var file in this.fileMap) { + var bps = this.fileMap[file]; + // Sort the breakpoints to make finding the closest breakpoint to a + // given line easier later. Order first by start line and then from + // worst to best choice for each line. + this.fileMap[file] = bps.sort(function (_a, _b) { + var a = _a[1]; + var b = _b[1]; + if (a.line === b.line) { + if (b.endLine === a.endLine) { + return a.column - b.column; + } + // We want the closest breakpoint, so give preference to breakpoints + // that span fewer lines (i.e. breakpoints that are "tighter" around + // the line being searched for) + return b.endLine - a.endLine; + } + return a.line - b.line; + }); + } + } + BreakpointMap.prototype.getById = function (id) { + return this.idMap[id]; + }; + BreakpointMap.prototype.verifyBreakpoint = function (path, breakpoint) { + var breakpoints = this.fileMap[path]; + var best; + if (breakpoints) { + // Breakpoints are pre-sorted for each file. The last matching breakpoint + // in the list should be the best match + for (var _i = 0, breakpoints_1 = breakpoints; _i < breakpoints_1.length; _i++) { + var _a = breakpoints_1[_i], id = _a[0], bp = _a[1]; + if (bp.line <= breakpoint.line && bp.endLine >= breakpoint.line) { + best = [id, bp]; + } + } + } + if (best) { + best[1].verified = true; + return best; + } + return [-1, { verified: false }]; + }; + return BreakpointMap; + }()); + pxsim.BreakpointMap = BreakpointMap; + function getBreakpointMsg(s, brkId) { + function valToJSON(v) { + switch (typeof v) { + case "string": + case "number": + case "boolean": + return v; + case "function": + return { text: "(function)" }; + case "undefined": + return null; + case "object": + if (!v) + return null; + if (v instanceof pxsim.RefObject) + return { id: v.id }; + return { text: "(object)" }; + default: + throw new Error(); + } + } + function frameVars(frame) { + var r = {}; + for (var _i = 0, _a = Object.keys(frame); _i < _a.length; _i++) { + var k = _a[_i]; + if (/___\d+$/.test(k)) { + r[k] = valToJSON(frame[k]); + } + } + return r; + } + var r = { + type: "debugger", + subtype: "breakpoint", + breakpointId: brkId, + globals: frameVars(pxsim.runtime.globals), + stackframes: [] + }; + while (s != null) { + var info = s.fn ? s.fn.info : null; + if (info) + r.stackframes.push({ + locals: frameVars(s), + funcInfo: info, + breakpointId: s.lastBrkId + }); + s = s.parent; + } + return r; + } + pxsim.getBreakpointMsg = getBreakpointMsg; + var SimDebugSession = (function (_super) { + __extends(SimDebugSession, _super); + function SimDebugSession(container) { + var _this = this; + _super.call(this); + var options = { + onDebuggerBreakpoint: function (b) { return _this.onDebuggerBreakpoint(b); }, + onDebuggerWarning: function (w) { return _this.onDebuggerWarning(w); }, + onDebuggerResume: function () { return _this.onDebuggerResume(); }, + onStateChanged: function (s) { return _this.onStateChanged(s); } + }; + this.driver = new pxsim.SimulatorDriver(container, options); + } + SimDebugSession.prototype.runCode = function (js, parts, fnArgs, breakpoints, board) { + this.breakpoints = breakpoints; + if (this.projectDir) { + this.fixBreakpoints(); + } + this.sendEvent(new pxsim.protocol.InitializedEvent()); + this.driver.run(js, { parts: parts, fnArgs: fnArgs, boardDefinition: board }); + }; + SimDebugSession.prototype.stopSimulator = function (unload) { + if (unload === void 0) { unload = false; } + this.driver.stop(unload); + }; + SimDebugSession.prototype.initializeRequest = function (response, args) { + response.body.supportsConditionalBreakpoints = false; + response.body.supportsHitConditionalBreakpoints = false; + response.body.supportsFunctionBreakpoints = false; + response.body.supportsEvaluateForHovers = false; + response.body.supportsStepBack = false; + response.body.supportsSetVariable = false; + response.body.supportsRestartFrame = false; + response.body.supportsStepInTargetsRequest = false; + response.body.supportsGotoTargetsRequest = false; + response.body.supportsCompletionsRequest = false; + // This default debug adapter implements the 'configurationDone' request. + response.body.supportsConfigurationDoneRequest = true; + this.sendResponse(response); + }; + SimDebugSession.prototype.disconnectRequest = function (response, args) { + this.sendResponse(response); + this.shutdown(); + }; + SimDebugSession.prototype.launchRequest = function (response, args) { + if (!this.projectDir) { + this.projectDir = pxsim.util.normalizePath(args.projectDir); + if (this.breakpoints) { + this.fixBreakpoints(); + } + } + this.sendResponse(response); + }; + SimDebugSession.prototype.setBreakPointsRequest = function (response, args) { + var _this = this; + response.body = { breakpoints: [] }; + var ids = []; + args.breakpoints.forEach(function (requestedBp) { + if (_this.breakpoints) { + var _a = _this.breakpoints.verifyBreakpoint(pxsim.util.relativePath(_this.projectDir, args.source.path), requestedBp), id = _a[0], bp = _a[1]; + response.body.breakpoints.push(bp); + if (bp.verified) { + ids.push(id); + } + } + else { + response.body.breakpoints.push({ verified: false }); + } + }); + this.driver.setBreakpoints(ids); + this.sendResponse(response); + }; + SimDebugSession.prototype.continueRequest = function (response, args) { + this.driver.resume(pxsim.SimulatorDebuggerCommand.Resume); + this.sendResponse(response); + }; + SimDebugSession.prototype.nextRequest = function (response, args) { + this.driver.resume(pxsim.SimulatorDebuggerCommand.StepOver); + this.sendResponse(response); + }; + SimDebugSession.prototype.stepInRequest = function (response, args) { + this.driver.resume(pxsim.SimulatorDebuggerCommand.StepInto); + this.sendResponse(response); + }; + SimDebugSession.prototype.stepOutRequest = function (response, args) { + this.driver.resume(pxsim.SimulatorDebuggerCommand.StepOut); + this.sendResponse(response); + }; + SimDebugSession.prototype.pauseRequest = function (response, args) { + this.driver.resume(pxsim.SimulatorDebuggerCommand.Pause); + this.sendResponse(response); + }; + SimDebugSession.prototype.threadsRequest = function (response) { + response.body = { threads: [{ id: SimDebugSession.THREAD_ID, name: "main" }] }; + this.sendResponse(response); + }; + SimDebugSession.prototype.stackTraceRequest = function (response, args) { + if (this.lastBreak) { + var frames_1 = this.state.getFrames(); + response.body = { stackFrames: frames_1 }; + } + this.sendResponse(response); + }; + SimDebugSession.prototype.scopesRequest = function (response, args) { + if (this.state) { + response.body = { scopes: this.state.getScopes(args.frameId) }; + } + this.sendResponse(response); + }; + SimDebugSession.prototype.variablesRequest = function (response, args) { + if (this.state) { + response.body = { variables: this.state.getVariables(args.variablesReference) }; + } + this.sendResponse(response); + }; + SimDebugSession.prototype.onDebuggerBreakpoint = function (breakMsg) { + this.lastBreak = breakMsg; + this.state = new StoppedState(this.lastBreak, this.breakpoints, this.projectDir); + if (breakMsg.exceptionMessage) { + this.sendEvent(new pxsim.protocol.StoppedEvent("exception", SimDebugSession.THREAD_ID, breakMsg.exceptionMessage)); + } + else { + this.sendEvent(new pxsim.protocol.StoppedEvent("breakpoint", SimDebugSession.THREAD_ID)); + } + }; + SimDebugSession.prototype.onDebuggerWarning = function (warnMsg) { + }; + SimDebugSession.prototype.onDebuggerResume = function () { + this.sendEvent(new pxsim.protocol.ContinuedEvent(SimDebugSession.THREAD_ID, true)); + }; + SimDebugSession.prototype.onStateChanged = function (state) { + switch (state) { + case pxsim.SimulatorState.Paused: + // Sending a stopped event here would be redundant + break; + case pxsim.SimulatorState.Running: + this.sendEvent(new pxsim.protocol.ContinuedEvent(SimDebugSession.THREAD_ID, true)); + break; + case pxsim.SimulatorState.Stopped: + this.sendEvent(new pxsim.protocol.TerminatedEvent()); + break; + case pxsim.SimulatorState.Unloaded: + default: + } + }; + SimDebugSession.prototype.fixBreakpoints = function () { + // Fix breakpoint locations from the debugger's format to the client's + for (var bpId in this.breakpoints.idMap) { + var bp = this.breakpoints.idMap[bpId]; + bp.source.path = pxsim.util.pathJoin(this.projectDir, bp.source.path); + bp.line = this.convertDebuggerLineToClient(bp.line); + bp.endLine = this.convertDebuggerLineToClient(bp.endLine); + bp.column = this.convertDebuggerColumnToClient(bp.column); + bp.endColumn = this.convertDebuggerColumnToClient(bp.endColumn); + } + }; + // We only have one thread + // TODO: We could theoretically visualize the individual fibers + SimDebugSession.THREAD_ID = 1; + return SimDebugSession; + }(pxsim.protocol.DebugSession)); + pxsim.SimDebugSession = SimDebugSession; + /** + * Maintains the state at the current breakpoint and handles lazy + * queries for stack frames, scopes, variables, etc. The protocol + * expects requests to be made in the order: + * Frames -> Scopes -> Variables + */ + var StoppedState = (function () { + function StoppedState(_message, _map, _dir) { + this._message = _message; + this._map = _map; + this._dir = _dir; + this._currentId = 1; + this._frames = {}; + this._vars = {}; + var globalId = this.nextId(); + this._vars[globalId] = this.getVariableValues(this._message.globals); + this._globalScope = { + name: "Globals", + variablesReference: globalId, + expensive: false + }; + } + /** + * Get stack frames for current breakpoint. + */ + StoppedState.prototype.getFrames = function () { + var _this = this; + return this._message.stackframes.map(function (s, i) { + ; + var bp = _this._map.getById(s.breakpointId); + if (bp) { + _this._frames[s.breakpointId] = s; + return { + id: s.breakpointId, + name: s.funcInfo ? s.funcInfo.functionName : (i === 0 ? "main" : "anonymous"), + line: bp.line, + column: bp.column, + endLine: bp.endLine, + endColumn: bp.endLine, + source: bp.source + }; + } + return undefined; + }).filter(function (b) { return !!b; }); + }; + /** + * Returns scopes visible to the given stack frame. + * + * TODO: Currently, we only support locals and globals (no closures) + */ + StoppedState.prototype.getScopes = function (frameId) { + var frame = this._frames[frameId]; + if (frame) { + var localId = this.nextId(); + this._vars[localId] = this.getVariableValues(frame.locals); + return [{ + name: "Locals", + variablesReference: localId, + expensive: false + }, this._globalScope]; + } + return [this._globalScope]; + }; + /** + * Returns variable information (and object properties) + */ + StoppedState.prototype.getVariables = function (variablesReference) { + var lz = this._vars[variablesReference]; + return (lz && lz.value) || []; + }; + StoppedState.prototype.getVariableValues = function (v) { + var _this = this; + return new pxsim.util.Lazy(function () { + var result = []; + for (var name_1 in v) { + var value = v[name_1]; + var vString = void 0; + var variablesReference = 0; + if (value === null) { + vString = "null"; + } + else if (value === undefined) { + vString = "undefined"; + } + else if (typeof value === "object") { + vString = "(object)"; + variablesReference = _this.nextId(); + // Variables should be requested lazily, so reference loops aren't an issue + _this._vars[variablesReference] = _this.getVariableValues(value); + } + else { + vString = value.toString(); + } + // Remove the metadata from the name + var displayName = name_1.substr(0, name_1.lastIndexOf("___")); + result.push({ + name: displayName, + value: vString, + variablesReference: variablesReference + }); + } + return result; + }); + }; + StoppedState.prototype.nextId = function () { + return this._currentId++; + }; + return StoppedState; + }()); +})(pxsim || (pxsim = {})); +/// +var pxsim; +(function (pxsim) { + var Embed; + (function (Embed) { + function start() { + window.addEventListener("message", receiveMessage, false); + var frameid = window.location.hash.slice(1); + pxsim.Runtime.postMessage({ type: 'ready', frameid: frameid }); + } + Embed.start = start; + function receiveMessage(event) { + var origin = event.origin; // || (event).originalEvent.origin; + // TODO: test origins + var data = event.data || {}; + var type = data.type || ''; + if (!type) + return; + switch (type || '') { + case 'run': + run(data); + break; + case 'stop': + stop(); + break; + case 'mute': + mute(data.mute); + break; + case 'custom': + if (pxsim.handleCustomMessage) + pxsim.handleCustomMessage(data); + break; + case 'pxteditor': + break; //handled elsewhere + case 'debugger': + if (runtime) { + runtime.handleDebuggerMsg(data); + } + break; + default: + queue(data); + break; + } + } + // TODO remove this; this should be using Runtime.runtime which gets + // set correctly depending on which runtime is currently running + var runtime; + function stop() { + if (runtime) { + runtime.kill(); + if (runtime.board) + runtime.board.kill(); + } + } + Embed.stop = stop; + function run(msg) { + stop(); + if (msg.mute) + mute(msg.mute); + runtime = new pxsim.Runtime(msg.code); + runtime.id = msg.id; + runtime.board.initAsync(msg) + .done(function () { + runtime.run(function (v) { + pxsim.dumpLivePointers(); + }); + }); + } + Embed.run = run; + function mute(mute) { + pxsim.AudioContextManager.mute(mute); + } + function queue(msg) { + if (!runtime || runtime.dead) { + return; + } + runtime.board.receiveMessage(msg); + } + })(Embed = pxsim.Embed || (pxsim.Embed = {})); +})(pxsim || (pxsim = {})); +pxsim.util.injectPolyphils(); +if (typeof window !== 'undefined') { + window.addEventListener('load', function (ev) { + pxsim.Embed.start(); + }); +} +/// +var pxsim; +(function (pxsim) { + var instructions; + (function (instructions) { + var LOC_LBL_SIZE = 10; + var QUANT_LBL_SIZE = 30; + var QUANT_LBL = function (q) { return (q + "x"); }; + var WIRE_QUANT_LBL_SIZE = 20; + var LBL_VERT_PAD = 3; + var LBL_RIGHT_PAD = 5; + var LBL_LEFT_PAD = 5; + var REQ_WIRE_HEIGHT = 45; + var REQ_CMP_HEIGHT = 55; + var REQ_CMP_SCALE = 0.5 * 3; + var ORIENTATION = "portrait"; + var PPI = 96.0; + var PAGE_SCALAR = 0.95; + var _a = (ORIENTATION == "portrait" ? [PPI * 8.5 * PAGE_SCALAR, PPI * 11.0 * PAGE_SCALAR] : [PPI * 11.0 * PAGE_SCALAR, PPI * 8.5 * PAGE_SCALAR]), FULL_PAGE_WIDTH = _a[0], FULL_PAGE_HEIGHT = _a[1]; + var PAGE_MARGIN = PPI * 0.45; + var PAGE_WIDTH = FULL_PAGE_WIDTH - PAGE_MARGIN * 2; + var PAGE_HEIGHT = FULL_PAGE_HEIGHT - PAGE_MARGIN * 2; + var BORDER_COLOR = "gray"; + var BORDER_RADIUS = 5 * 4; + var BORDER_WIDTH = 2 * 2; + var _b = [1, 1], PANEL_ROWS = _b[0], PANEL_COLS = _b[1]; + var PANEL_MARGIN = 20; + var PANEL_PADDING = 8 * 3; + var PANEL_WIDTH = PAGE_WIDTH / PANEL_COLS - (PANEL_MARGIN + PANEL_PADDING + BORDER_WIDTH) * PANEL_COLS; + var PANEL_HEIGHT = PAGE_HEIGHT / PANEL_ROWS - (PANEL_MARGIN + PANEL_PADDING + BORDER_WIDTH) * PANEL_ROWS; + var BOARD_WIDTH = 465; + var BOARD_LEFT = (PANEL_WIDTH - BOARD_WIDTH) / 2.0 + PANEL_PADDING; + var BOARD_BOT = PANEL_PADDING; + var NUM_BOX_SIZE = 120; + var NUM_FONT = 80; + var NUM_MARGIN = 10; + var FRONT_PAGE_BOARD_WIDTH = 400; + var PART_SCALAR = 2.3; + var PARTS_BOARD_SCALE = 0.17; + var PARTS_BB_SCALE = 0.25; + var PARTS_CMP_SCALE = 0.3; + var PARTS_WIRE_SCALE = 0.23; + var BACK_PAGE_BOARD_WIDTH = PANEL_WIDTH - PANEL_PADDING * 1.5; + var STYLE = "\n .instr-panel {\n margin: " + PANEL_MARGIN + "px;\n padding: " + PANEL_PADDING + "px;\n border-width: " + BORDER_WIDTH + "px;\n border-color: " + BORDER_COLOR + ";\n border-style: solid;\n border-radius: " + BORDER_RADIUS + "px;\n display: inline-block;\n width: " + PANEL_WIDTH + "px;\n height: " + PANEL_HEIGHT + "px;\n position: relative;\n overflow: hidden;\n page-break-inside: avoid;\n }\n .board-svg {\n margin: 0 auto;\n display: block;\n position: absolute;\n bottom: " + BOARD_BOT + "px;\n left: " + BOARD_LEFT + "px;\n }\n .panel-num-outer {\n position: absolute;\n left: " + -BORDER_WIDTH + "px;\n top: " + -BORDER_WIDTH + "px;\n width: " + NUM_BOX_SIZE + "px;\n height: " + NUM_BOX_SIZE + "px;\n border-width: " + BORDER_WIDTH + "px;\n border-style: solid;\n border-color: " + BORDER_COLOR + ";\n border-radius: " + BORDER_RADIUS + "px 0 " + BORDER_RADIUS + "px 0;\n }\n .panel-num {\n margin: " + NUM_MARGIN + "px 0;\n text-align: center;\n font-size: " + NUM_FONT + "px;\n }\n .cmp-div {\n display: inline-block;\n }\n .reqs-div {\n margin-left: " + (PANEL_PADDING + NUM_BOX_SIZE) + "px;\n margin-top: 5px;\n }\n .partslist-wire,\n .partslist-cmp {\n margin: 10px;\n }\n .partslist-wire {\n display: inline-block;\n }\n "; + function addClass(el, cls) { + //TODO move to library + if (el.classList) + el.classList.add(cls); + else if (el.className.indexOf(cls) < 0) + el.className += " " + cls; + } + function mkTxt(p, txt, size) { + var el = pxsim.svg.elt("text"); + var x = p[0], y = p[1]; + pxsim.svg.hydrate(el, { x: x, y: y, style: "font-size:" + size + "px;" }); + el.textContent = txt; + return el; + } + function mkBoardImgSvg(def) { + var boardView = pxsim.visuals.mkBoardView({ + visual: def + }); + return boardView.getView(); + } + function mkBBSvg() { + var bb = new pxsim.visuals.Breadboard({}); + return bb.getSVGAndSize(); + } + function wrapSvg(el, opts) { + //TODO: Refactor this function; it is too complicated. There is a lot of error-prone math being done + // to scale and place all elements which could be simplified with more forethought. + var svgEl = document.createElementNS("http://www.w3.org/2000/svg", "svg"); + var dims = { l: 0, t: 0, w: 0, h: 0 }; + var cmpSvgEl = document.createElementNS("http://www.w3.org/2000/svg", "svg"); + svgEl.appendChild(cmpSvgEl); + cmpSvgEl.appendChild(el.el); + var cmpSvgAtts = { + "viewBox": el.x + " " + el.y + " " + el.w + " " + el.h, + "preserveAspectRatio": "xMidYMid", + }; + dims.w = el.w; + dims.h = el.h; + var scale = function (scaler) { + dims.h *= scaler; + dims.w *= scaler; + cmpSvgAtts.width = dims.w; + cmpSvgAtts.height = dims.h; + }; + if (opts.cmpScale) { + scale(opts.cmpScale); + } + if (opts.cmpWidth && opts.cmpWidth < dims.w) { + scale(opts.cmpWidth / dims.w); + } + else if (opts.cmpHeight && opts.cmpHeight < dims.h) { + scale(opts.cmpHeight / dims.h); + } + pxsim.svg.hydrate(cmpSvgEl, cmpSvgAtts); + var elDims = { l: dims.l, t: dims.t, w: dims.w, h: dims.h }; + var updateL = function (newL) { + if (newL < dims.l) { + var extraW = dims.l - newL; + dims.l = newL; + dims.w += extraW; + } + }; + var updateR = function (newR) { + var oldR = dims.l + dims.w; + if (oldR < newR) { + var extraW = newR - oldR; + dims.w += extraW; + } + }; + var updateT = function (newT) { + if (newT < dims.t) { + var extraH = dims.t - newT; + dims.t = newT; + dims.h += extraH; + } + }; + var updateB = function (newB) { + var oldB = dims.t + dims.h; + if (oldB < newB) { + var extraH = newB - oldB; + dims.h += extraH; + } + }; + //labels + var _a = [-0.3, 0.3], xOff = _a[0], yOff = _a[1]; //HACK: these constants tweak the way "mkTxt" knows how to center the text + var txtAspectRatio = [1.4, 1.0]; + if (opts && opts.top) { + var size = opts.topSize; + var txtW = size / txtAspectRatio[0]; + var txtH = size / txtAspectRatio[1]; + var _b = [elDims.l + elDims.w / 2, elDims.t - LBL_VERT_PAD - txtH / 2], cx = _b[0], y = _b[1]; + var lbl = pxsim.visuals.mkTxt(cx, y, size, 0, opts.top, xOff, yOff); + pxsim.svg.addClass(lbl, "cmp-lbl"); + svgEl.appendChild(lbl); + var len = txtW * opts.top.length; + updateT(y - txtH / 2); + updateL(cx - len / 2); + updateR(cx + len / 2); + } + if (opts && opts.bot) { + var size = opts.botSize; + var txtW = size / txtAspectRatio[0]; + var txtH = size / txtAspectRatio[1]; + var _c = [elDims.l + elDims.w / 2, elDims.t + elDims.h + LBL_VERT_PAD + txtH / 2], cx = _c[0], y = _c[1]; + var lbl = pxsim.visuals.mkTxt(cx, y, size, 0, opts.bot, xOff, yOff); + pxsim.svg.addClass(lbl, "cmp-lbl"); + svgEl.appendChild(lbl); + var len = txtW * opts.bot.length; + updateB(y + txtH / 2); + updateL(cx - len / 2); + updateR(cx + len / 2); + } + if (opts && opts.right) { + var size = opts.rightSize; + var txtW = size / txtAspectRatio[0]; + var txtH = size / txtAspectRatio[1]; + var len = txtW * opts.right.length; + var _d = [elDims.l + elDims.w + LBL_RIGHT_PAD + len / 2, elDims.t + elDims.h / 2], cx = _d[0], cy = _d[1]; + var lbl = pxsim.visuals.mkTxt(cx, cy, size, 0, opts.right, xOff, yOff); + pxsim.svg.addClass(lbl, "cmp-lbl"); + svgEl.appendChild(lbl); + updateT(cy - txtH / 2); + updateR(cx + len / 2); + updateB(cy + txtH / 2); + } + if (opts && opts.left) { + var size = opts.leftSize; + var txtW = size / txtAspectRatio[0]; + var txtH = size / txtAspectRatio[1]; + var len = txtW * opts.left.length; + var _e = [elDims.l - LBL_LEFT_PAD - len / 2, elDims.t + elDims.h / 2], cx = _e[0], cy = _e[1]; + var lbl = pxsim.visuals.mkTxt(cx, cy, size, 0, opts.left, xOff, yOff); + pxsim.svg.addClass(lbl, "cmp-lbl"); + svgEl.appendChild(lbl); + updateT(cy - txtH / 2); + updateL(cx - len / 2); + updateB(cy + txtH / 2); + } + var svgAtts = { + "viewBox": dims.l + " " + dims.t + " " + dims.w + " " + dims.h, + "width": dims.w * PART_SCALAR, + "height": dims.h * PART_SCALAR, + "preserveAspectRatio": "xMidYMid", + }; + pxsim.svg.hydrate(svgEl, svgAtts); + var div = document.createElement("div"); + div.appendChild(svgEl); + return div; + } + function mkCmpDiv(cmp, opts) { + var state = pxsim.runtime.board; + var el; + if (cmp == "wire") { + el = pxsim.visuals.mkWirePart([0, 0], opts.wireClr || "red", opts.crocClips); + } + else { + var partVis = cmp; + if (typeof partVis.builtIn == "string") { + var cnstr = state.builtinPartVisuals[partVis.builtIn]; + el = cnstr([0, 0]); + } + else { + el = pxsim.visuals.mkGenericPartSVG(partVis); + } + } + return wrapSvg(el, opts); + } + function mkBoardProps(allocOpts) { + var allocRes = pxsim.allocateDefinitions(allocOpts); + var stepToWires = []; + var stepToCmps = []; + var stepOffset = 1; + allocRes.partsAndWires.forEach(function (cAndWs) { + var part = cAndWs.part; + var wires = cAndWs.wires; + cAndWs.assembly.forEach(function (step, idx) { + if (step.part && part) + stepToCmps[stepOffset + idx] = [part]; + if (step.wireIndices && step.wireIndices.length > 0 && wires) + stepToWires[stepOffset + idx] = step.wireIndices.map(function (i) { return wires[i]; }); + }); + stepOffset += cAndWs.assembly.length; + }); + var numSteps = stepOffset; + var lastStep = numSteps - 1; + var allCmps = allocRes.partsAndWires.map(function (r) { return r.part; }).filter(function (p) { return !!p; }); + var allWires = allocRes.partsAndWires.map(function (r) { return r.wires || []; }).reduce(function (p, n) { return p.concat(n); }, []); + var colorToWires = {}; + var allWireColors = []; + allWires.forEach(function (w) { + if (!colorToWires[w.color]) { + colorToWires[w.color] = []; + allWireColors.push(w.color); + } + colorToWires[w.color].push(w); + }); + return { + boardDef: allocOpts.boardDef, + cmpDefs: allocOpts.partDefs, + fnArgs: allocOpts.fnArgs, + allAlloc: allocRes, + stepToWires: stepToWires, + stepToCmps: stepToCmps, + allWires: allWires, + allCmps: allCmps, + lastStep: lastStep, + colorToWires: colorToWires, + allWireColors: allWireColors, + }; + } + function mkBlankBoardAndBreadboard(props, width, buildMode) { + if (buildMode === void 0) { buildMode = false; } + var state = pxsim.runtime.board; + var opts = { + state: state, + boardDef: props.boardDef, + forceBreadboardLayout: true, + forceBreadboardRender: props.allAlloc.requiresBreadboard, + partDefs: props.cmpDefs, + maxWidth: width + "px", + fnArgs: props.fnArgs, + wireframe: buildMode, + partsList: [] + }; + var boardHost = new pxsim.visuals.BoardHost(pxsim.visuals.mkBoardView({ + visual: opts.boardDef.visual, + wireframe: opts.wireframe + }), opts); + var view = boardHost.getView(); + pxsim.svg.addClass(view, "board-svg"); + //set smiley + //HACK + // let img = board.board.displayCmp.image; + // img.set(1, 0, 255); + // img.set(3, 0, 255); + // img.set(0, 2, 255); + // img.set(1, 3, 255); + // img.set(2, 3, 255); + // img.set(3, 3, 255); + // img.set(4, 2, 255); + // board.updateState(); + return boardHost; + } + function drawSteps(board, step, props) { + var view = board.getView(); + if (step > 0) { + pxsim.svg.addClass(view, "grayed"); + } + var _loop_1 = function(i) { + var cmps = props.stepToCmps[i]; + if (cmps) { + cmps.forEach(function (partInst) { + var cmp = board.addPart(partInst); + //last step + if (i === step) { + //highlight locations pins + partInst.breadboardConnections.forEach(function (bbLoc) { return board.highlightBreadboardPin(bbLoc); }); + pxsim.svg.addClass(cmp.element, "notgrayed"); + } + }); + } + var wires = props.stepToWires[i]; + if (wires) { + wires.forEach(function (w) { + var wire = board.addWire(w); + //last step + if (i === step) { + //location highlights + if (w.start.type == "breadboard") { + var lbls = board.highlightBreadboardPin(w.start); + } + else { + board.highlightBoardPin(w.start.pin); + } + if (w.end.type == "breadboard") { + var lbls = board.highlightBreadboardPin(w.end); + } + else { + board.highlightBoardPin(w.end.pin); + } + //highlight wire + board.highlightWire(wire); + } + }); + } + }; + for (var i = 0; i <= step; i++) { + _loop_1(i); + } + } + function mkPanel() { + //panel + var panel = document.createElement("div"); + addClass(panel, "instr-panel"); + return panel; + } + function mkPartsPanel(props) { + var panel = mkPanel(); + // board and breadboard + var boardImg = mkBoardImgSvg(props.boardDef.visual); + var board = wrapSvg(boardImg, { left: QUANT_LBL(1), leftSize: QUANT_LBL_SIZE, cmpScale: PARTS_BOARD_SCALE }); + panel.appendChild(board); + var bbRaw = mkBBSvg(); + var bb = wrapSvg(bbRaw, { left: QUANT_LBL(1), leftSize: QUANT_LBL_SIZE, cmpScale: PARTS_BB_SCALE }); + panel.appendChild(bb); + // components + var cmps = props.allCmps; + cmps.forEach(function (c) { + var quant = 1; + // TODO: don't special case this + if (c.visual.builtIn === "buttonpair") { + quant = 2; + } + var cmp = mkCmpDiv(c.visual, { + left: QUANT_LBL(quant), + leftSize: QUANT_LBL_SIZE, + cmpScale: PARTS_CMP_SCALE, + }); + addClass(cmp, "partslist-cmp"); + panel.appendChild(cmp); + }); + // wires + props.allWireColors.forEach(function (clr) { + var quant = props.colorToWires[clr].length; + var cmp = mkCmpDiv("wire", { + left: QUANT_LBL(quant), + leftSize: WIRE_QUANT_LBL_SIZE, + wireClr: clr, + cmpScale: PARTS_WIRE_SCALE, + crocClips: props.boardDef.useCrocClips + }); + addClass(cmp, "partslist-wire"); + panel.appendChild(cmp); + }); + return panel; + } + function mkStepPanel(step, props) { + var panel = mkPanel(); + //board + var board = mkBlankBoardAndBreadboard(props, BOARD_WIDTH, true); + drawSteps(board, step, props); + panel.appendChild(board.getView()); + //number + var numDiv = document.createElement("div"); + addClass(numDiv, "panel-num-outer"); + addClass(numDiv, "noselect"); + panel.appendChild(numDiv); + var num = document.createElement("div"); + addClass(num, "panel-num"); + num.textContent = (step + 1) + ""; + numDiv.appendChild(num); + // add requirements + var reqsDiv = document.createElement("div"); + addClass(reqsDiv, "reqs-div"); + panel.appendChild(reqsDiv); + var wires = (props.stepToWires[step] || []); + var mkLabel = function (loc) { + if (loc.type === "breadboard") { + var _a = loc, row = _a.row, col = _a.col; + return "(" + row + "," + col + ")"; + } + else + return loc.pin; + }; + wires.forEach(function (w) { + var cmp = mkCmpDiv("wire", { + top: mkLabel(w.end), + topSize: LOC_LBL_SIZE, + bot: mkLabel(w.start), + botSize: LOC_LBL_SIZE, + wireClr: w.color, + cmpHeight: REQ_WIRE_HEIGHT, + crocClips: props.boardDef.useCrocClips + }); + addClass(cmp, "cmp-div"); + reqsDiv.appendChild(cmp); + }); + var cmps = (props.stepToCmps[step] || []); + cmps.forEach(function (c) { + var locs; + if (c.visual.builtIn === "buttonpair") { + //TODO: don't special case this + locs = [c.breadboardConnections[0], c.breadboardConnections[2]]; + } + else { + locs = [c.breadboardConnections[0]]; + } + locs.forEach(function (l, i) { + var topLbl; + if (l) { + var row = l.row, col = l.col; + topLbl = "(" + row + "," + col + ")"; + } + else { + topLbl = ""; + } + var scale = REQ_CMP_SCALE; + if (c.visual.builtIn === "buttonpair") + scale *= 0.5; //TODO: don't special case + var cmp = mkCmpDiv(c.visual, { + top: topLbl, + topSize: LOC_LBL_SIZE, + cmpHeight: REQ_CMP_HEIGHT, + cmpScale: scale + }); + addClass(cmp, "cmp-div"); + reqsDiv.appendChild(cmp); + }); + }); + return panel; + } + function updateFrontPanel(props) { + var panel = document.getElementById("front-panel"); + var board = mkBlankBoardAndBreadboard(props, FRONT_PAGE_BOARD_WIDTH, false); + board.addAll(props.allAlloc); + panel.appendChild(board.getView()); + return [panel, props]; + } + function mkFinalPanel(props) { + var panel = mkPanel(); + addClass(panel, "back-panel"); + var board = mkBlankBoardAndBreadboard(props, BACK_PAGE_BOARD_WIDTH, false); + board.addAll(props.allAlloc); + panel.appendChild(board.getView()); + return panel; + } + function renderParts(options) { + var COMP_CODE = ""; + pxsim.runtime = new pxsim.Runtime(COMP_CODE); + pxsim.runtime.board = null; + pxsim.initCurrentRuntime(); + var style = document.createElement("style"); + document.head.appendChild(style); + style.textContent += STYLE; + var cmpDefs = options.partDefinitions; + //props + var dummyBreadboard = new pxsim.visuals.Breadboard({}); + var props = mkBoardProps({ + boardDef: options.boardDef, + partDefs: cmpDefs, + partsList: options.parts, + fnArgs: options.fnArgs, + getBBCoord: dummyBreadboard.getCoord.bind(dummyBreadboard) + }); + //front page + var frontPanel = updateFrontPanel(props); + //all required parts + var partsPanel = mkPartsPanel(props); + document.body.appendChild(partsPanel); + //steps + for (var s = 0; s <= props.lastStep; s++) { + var p = mkStepPanel(s, props); + document.body.appendChild(p); + } + //final + var finalPanel = mkFinalPanel(props); + document.body.appendChild(finalPanel); + } + instructions.renderParts = renderParts; + })(instructions = pxsim.instructions || (pxsim.instructions = {})); +})(pxsim || (pxsim = {})); +// APIs for language/runtime support (records, locals, function values) +var pxsim; +(function (pxsim) { + pxsim.quiet = false; + function check(cond) { + if (!cond) { + debugger; + throw new Error("sim: check failed"); + } + } + pxsim.check = check; + var refObjId = 1; + var liveRefObjs = {}; + var stringLiterals; + var stringRefCounts = {}; + var refCounting = true; + function noRefCounting() { + refCounting = false; + } + pxsim.noRefCounting = noRefCounting; + var RefObject = (function () { + function RefObject() { + this.id = refObjId++; + this.refcnt = 1; + liveRefObjs[this.id + ""] = this; + } + RefObject.prototype.destroy = function () { }; + RefObject.prototype.print = function () { + console.log("RefObject id:" + this.id + " refs:" + this.refcnt); + }; + return RefObject; + }()); + pxsim.RefObject = RefObject; + function noLeakTracking(r) { + delete liveRefObjs[r.id + ""]; + } + pxsim.noLeakTracking = noLeakTracking; + var FnWrapper = (function () { + function FnWrapper(func, caps, a0, a1, a2, cb) { + this.func = func; + this.caps = caps; + this.a0 = a0; + this.a1 = a1; + this.a2 = a2; + this.cb = cb; + } + return FnWrapper; + }()); + pxsim.FnWrapper = FnWrapper; + var RefRecord = (function (_super) { + __extends(RefRecord, _super); + function RefRecord() { + _super.apply(this, arguments); + this.fields = []; + } + RefRecord.prototype.destroy = function () { + var refmask = this.vtable.refmask; + for (var i = 0; i < refmask.length; ++i) + if (refmask[i]) + decr(this.fields[i]); + this.fields = null; + this.vtable = null; + }; + RefRecord.prototype.isRef = function (idx) { + check(0 <= idx && idx < this.fields.length); + return !!this.vtable.refmask[idx]; + }; + RefRecord.prototype.print = function () { + console.log("RefInstance id:" + this.id + " (" + this.vtable.name + ") len:" + this.fields.length); + }; + return RefRecord; + }(RefObject)); + pxsim.RefRecord = RefRecord; + var RefAction = (function (_super) { + __extends(RefAction, _super); + function RefAction() { + _super.apply(this, arguments); + this.fields = []; + } + RefAction.prototype.isRef = function (idx) { + check(0 <= idx && idx < this.fields.length); + return idx < this.reflen; + }; + RefAction.prototype.ldclo = function (n) { + n >>= 2; + check(0 <= n && n < this.fields.length); + return this.fields[n]; + }; + RefAction.prototype.destroy = function () { + for (var i = 0; i < this.reflen; ++i) + decr(this.fields[i]); + this.fields = null; + this.func = null; + }; + RefAction.prototype.print = function () { + console.log("RefAction id:" + this.id + " refs:" + this.refcnt + " len:" + this.fields.length); + }; + return RefAction; + }(RefObject)); + pxsim.RefAction = RefAction; + var pxtcore; + (function (pxtcore) { + function mkAction(reflen, len, fn) { + var r = new RefAction(); + r.reflen = reflen; + r.func = fn; + for (var i = 0; i < len; ++i) + r.fields.push(null); + return r; + } + pxtcore.mkAction = mkAction; + function runAction3(a, a0, a1, a2) { + var cb = pxsim.getResume(); + if (a instanceof RefAction) { + pxtrt.incr(a); + cb(new FnWrapper(a.func, a.fields, a0, a1, a2, function () { + pxtrt.decr(a); + })); + } + else { + // no-closure case + cb(new FnWrapper(a, null, a0, a1, a2, null)); + } + } + pxtcore.runAction3 = runAction3; + function runAction2(a, a0, a1) { + runAction3(a, a0, a1, null); + } + pxtcore.runAction2 = runAction2; + function runAction1(a, v) { + runAction3(a, v, null, null); + } + pxtcore.runAction1 = runAction1; + function runAction0(a) { + runAction3(a, null, null, null); + } + pxtcore.runAction0 = runAction0; + })(pxtcore = pxsim.pxtcore || (pxsim.pxtcore = {})); + var RefLocal = (function (_super) { + __extends(RefLocal, _super); + function RefLocal() { + _super.apply(this, arguments); + this.v = 0; + } + RefLocal.prototype.print = function () { + console.log("RefLocal id:" + this.id + " refs:" + this.refcnt + " v:" + this.v); + }; + return RefLocal; + }(RefObject)); + pxsim.RefLocal = RefLocal; + var RefRefLocal = (function (_super) { + __extends(RefRefLocal, _super); + function RefRefLocal() { + _super.apply(this, arguments); + this.v = null; + } + RefRefLocal.prototype.destroy = function () { + decr(this.v); + }; + RefRefLocal.prototype.print = function () { + console.log("RefRefLocal id:" + this.id + " refs:" + this.refcnt + " v:" + this.v); + }; + return RefRefLocal; + }(RefObject)); + pxsim.RefRefLocal = RefRefLocal; + var RefMap = (function (_super) { + __extends(RefMap, _super); + function RefMap() { + _super.apply(this, arguments); + this.vtable = 42; + this.data = []; + } + RefMap.prototype.findIdx = function (key) { + for (var i = 0; i < this.data.length; ++i) { + if (this.data[i].key >> 1 == key) + return i; + } + return -1; + }; + RefMap.prototype.destroy = function () { + _super.prototype.destroy.call(this); + for (var i = 0; i < this.data.length; ++i) { + if (this.data[i].key & 1) { + decr(this.data[i].val); + } + this.data[i].val = 0; + } + this.data = []; + }; + RefMap.prototype.print = function () { + console.log("RefMap id:" + this.id + " refs:" + this.refcnt + " size:" + this.data.length); + }; + return RefMap; + }(RefObject)); + pxsim.RefMap = RefMap; + function num(v) { + if (v === undefined) + return 0; + return v; + } + function ref(v) { + if (v === undefined) + return null; + return v; + } + function decr(v) { + if (!refCounting) + return; + if (v instanceof RefObject) { + var o = v; + check(o.refcnt > 0); + if (--o.refcnt == 0) { + delete liveRefObjs[o.id + ""]; + o.destroy(); + } + } + else if (typeof v == "string") { + if (stringLiterals && !stringLiterals.hasOwnProperty(v)) { + stringRefDelta(v, -1); + } + } + else if (!v) { + } + else if (typeof v == "function") { + } + else { + throw new Error("bad decr"); + } + } + pxsim.decr = decr; + function setupStringLiterals(strings) { + // reset + liveRefObjs = {}; + stringRefCounts = {}; + // and set up strings + strings[""] = 1; + strings["true"] = 1; + strings["false"] = 1; + // comment out next line to disable string ref counting + stringLiterals = strings; + } + pxsim.setupStringLiterals = setupStringLiterals; + function stringRefDelta(s, n) { + if (!stringRefCounts.hasOwnProperty(s)) + stringRefCounts[s] = 0; + var r = (stringRefCounts[s] += n); + if (r == 0) + delete stringRefCounts[s]; + else + check(r > 0); + return r; + } + function initString(v) { + if (!v || !stringLiterals) + return v; + if (typeof v == "string" && !stringLiterals.hasOwnProperty(v)) + stringRefDelta(v, 1); + return v; + } + pxsim.initString = initString; + function incr(v) { + if (!refCounting) + return v; + if (v instanceof RefObject) { + var o = v; + check(o.refcnt > 0); + o.refcnt++; + } + else if (stringLiterals && typeof v == "string" && !stringLiterals.hasOwnProperty(v)) { + var k = stringRefDelta(v, 1); + check(k > 1); + } + return v; + } + pxsim.incr = incr; + function dumpLivePointers() { + if (!refCounting) + return; + Object.keys(liveRefObjs).forEach(function (k) { + liveRefObjs[k].print(); + }); + Object.keys(stringRefCounts).forEach(function (k) { + var n = stringRefCounts[k]; + console.log("Live String:", JSON.stringify(k), "refcnt=", n); + }); + } + pxsim.dumpLivePointers = dumpLivePointers; + var pxtcore; + (function (pxtcore) { + pxtcore.incr = pxsim.incr; + pxtcore.decr = pxsim.decr; + function ptrOfLiteral(v) { + return v; + } + pxtcore.ptrOfLiteral = ptrOfLiteral; + function debugMemLeaks() { + dumpLivePointers(); + } + pxtcore.debugMemLeaks = debugMemLeaks; + function allocate() { + pxsim.U.userError("allocate() called in simulator"); + } + pxtcore.allocate = allocate; + function templateHash() { + return 0; + } + pxtcore.templateHash = templateHash; + function programHash() { + return 0; + } + pxtcore.programHash = programHash; + })(pxtcore = pxsim.pxtcore || (pxsim.pxtcore = {})); + var pxtrt; + (function (pxtrt) { + pxtrt.incr = pxsim.incr; + pxtrt.decr = pxsim.decr; + function toInt8(v) { + return ((v & 0xff) << 24) >> 24; + } + pxtrt.toInt8 = toInt8; + function toInt16(v) { + return ((v & 0xffff) << 16) >> 16; + } + pxtrt.toInt16 = toInt16; + function toInt32(v) { + return v | 0; + } + pxtrt.toInt32 = toInt32; + function toUInt8(v) { + return v & 0xff; + } + pxtrt.toUInt8 = toUInt8; + function toUInt16(v) { + return v & 0xffff; + } + pxtrt.toUInt16 = toUInt16; + function nullFix(v) { + if (v === null || v === undefined || v === false) + return 0; + if (v === true) + return 1; + return v; + } + pxtrt.nullFix = nullFix; + function nullCheck(v) { + if (!v) + pxsim.U.userError("Using null value."); + } + pxtrt.nullCheck = nullCheck; + function panic(code) { + pxsim.U.userError("PANIC! Code " + code); + } + pxtrt.panic = panic; + function stringToBool(s) { + pxtrt.decr(s); + return s ? 1 : 0; + } + pxtrt.stringToBool = stringToBool; + function ptrToBool(v) { + pxtrt.decr(v); + return v ? 1 : 0; + } + pxtrt.ptrToBool = ptrToBool; + function emptyToNull(s) { + if (s == "") + return 0; + return s; + } + pxtrt.emptyToNull = emptyToNull; + function ldfld(r, idx) { + nullCheck(r); + check(!r.isRef(idx)); + var v = num(r.fields[idx]); + pxtrt.decr(r); + return v; + } + pxtrt.ldfld = ldfld; + function stfld(r, idx, v) { + nullCheck(r); + check(!r.isRef(idx)); + r.fields[idx] = v; + pxtrt.decr(r); + } + pxtrt.stfld = stfld; + function ldfldRef(r, idx) { + nullCheck(r); + check(r.isRef(idx)); + var v = pxtrt.incr(ref(r.fields[idx])); + pxtrt.decr(r); + return v; + } + pxtrt.ldfldRef = ldfldRef; + function stfldRef(r, idx, v) { + nullCheck(r); + check(r.isRef(idx)); + pxtrt.decr(r.fields[idx]); + r.fields[idx] = v; + pxtrt.decr(r); + } + pxtrt.stfldRef = stfldRef; + function ldloc(r) { + return r.v; + } + pxtrt.ldloc = ldloc; + function ldlocRef(r) { + return pxtrt.incr(r.v); + } + pxtrt.ldlocRef = ldlocRef; + function stloc(r, v) { + r.v = v; + } + pxtrt.stloc = stloc; + function stlocRef(r, v) { + pxtrt.decr(r.v); + r.v = v; + } + pxtrt.stlocRef = stlocRef; + function mkloc() { + return new RefLocal(); + } + pxtrt.mkloc = mkloc; + function mklocRef() { + return new RefRefLocal(); + } + pxtrt.mklocRef = mklocRef; + // Store a captured local in a closure. It returns the action, so it can be chained. + function stclo(a, idx, v) { + check(0 <= idx && idx < a.fields.length); + check(a.fields[idx] === null); + //console.log(`STCLO [${idx}] = ${v}`) + a.fields[idx] = v; + return a; + } + pxtrt.stclo = stclo; + function runtimeWarning(msg) { + pxsim.Runtime.postMessage(pxsim.getWarningMessage(msg)); + } + pxtrt.runtimeWarning = runtimeWarning; + function mkMap() { + return new RefMap(); + } + pxtrt.mkMap = mkMap; + function mapGet(map, key) { + var i = map.findIdx(key); + if (i < 0) { + pxtrt.decr(map); + return 0; + } + var r = map.data[i].val; + pxtrt.decr(map); + return r; + } + pxtrt.mapGet = mapGet; + function mapGetRef(map, key) { + var i = map.findIdx(key); + if (i < 0) { + pxtrt.decr(map); + return 0; + } + var r = pxtrt.incr(map.data[i].val); + pxtrt.decr(map); + return r; + } + pxtrt.mapGetRef = mapGetRef; + function mapSet(map, key, val) { + var i = map.findIdx(key); + if (i < 0) { + map.data.push({ + key: key << 1, + val: val + }); + } + else { + if (map.data[i].key & 1) { + pxtrt.decr(map.data[i].val); + map.data[i].key = key << 1; + } + map.data[i].val = val; + } + pxtrt.decr(map); + } + pxtrt.mapSet = mapSet; + function mapSetRef(map, key, val) { + var i = map.findIdx(key); + if (i < 0) { + map.data.push({ + key: (key << 1) | 1, + val: val + }); + } + else { + if (map.data[i].key & 1) { + pxtrt.decr(map.data[i].val); + } + else { + map.data[i].key = (key << 1) | 1; + } + map.data[i].val = val; + } + pxtrt.decr(map); + } + pxtrt.mapSetRef = mapSetRef; + })(pxtrt = pxsim.pxtrt || (pxsim.pxtrt = {})); + var pxtcore; + (function (pxtcore) { + function mkClassInstance(vtable) { + check(!!vtable.methods); + check(!!vtable.refmask); + var r = new RefRecord(); + r.vtable = vtable; + var len = vtable.refmask.length; + for (var i = 0; i < len; ++i) + r.fields.push(0); + return r; + } + pxtcore.mkClassInstance = mkClassInstance; + })(pxtcore = pxsim.pxtcore || (pxsim.pxtcore = {})); + var thread; + (function (thread) { + thread.panic = pxtrt.panic; + function pause(ms) { + var cb = pxsim.getResume(); + setTimeout(function () { cb(); }, ms); + } + thread.pause = pause; + function runInBackground(a) { + pxsim.runtime.runFiberAsync(a).done(); + } + thread.runInBackground = runInBackground; + function forever(a) { + function loop() { + pxsim.runtime.runFiberAsync(a) + .then(function () { return Promise.delay(20); }) + .then(loop) + .done(); + } + pxtrt.nullCheck(a); + incr(a); + loop(); + } + thread.forever = forever; + })(thread = pxsim.thread || (pxsim.thread = {})); +})(pxsim || (pxsim = {})); +var pxsim; +(function (pxsim) { + // A ref-counted collection of either primitive or ref-counted objects (String, Image, + // user-defined record, another collection) + var RefCollection = (function (_super) { + __extends(RefCollection, _super); + //undefiend or null values need to be handled specially to support default values + //default values of boolean, string, number & object arrays are respectively, false, null, 0, null + //All of the default values are implemented by mapping undefined\null to zero. + // 1 - collection of refs (need decr) + // 2 - collection of strings (in fact we always have 3, never 2 alone) + function RefCollection(flags) { + _super.call(this); + this.flags = flags; + this.data = []; + } + RefCollection.prototype.destroy = function () { + var data = this.data; + if (this.flags & 1) + for (var i = 0; i < data.length; ++i) { + pxsim.decr(data[i]); + data[i] = 0; + } + this.data = []; + }; + RefCollection.prototype.isValidIndex = function (x) { + return (x >= 0 && x < this.data.length); + }; + RefCollection.prototype.push = function (x) { + this.data.push(x); + }; + RefCollection.prototype.pop = function () { + var x = this.data.pop(); + if (x != undefined) { + return 0; + } + return x; + }; + RefCollection.prototype.getLength = function () { + return this.data.length; + }; + RefCollection.prototype.setLength = function (x) { + this.data.length = x; + }; + RefCollection.prototype.getAt = function (x) { + if (this.data[x] != undefined) { + return this.data[x]; + } + return 0; + }; + RefCollection.prototype.setAt = function (x, y) { + this.data[x] = y; + }; + RefCollection.prototype.insertAt = function (x, y) { + this.data.splice(x, 0, y); + }; + RefCollection.prototype.removeAt = function (x) { + var ret = this.data.splice(x, 1); + if (ret[0] == undefined) { + return 0; + } + return ret[0]; //return the deleted element. + }; + RefCollection.prototype.indexOf = function (x, start) { + if (x != 0) { + return this.data.indexOf(x, start); + } + //As we treat undefined same as 0 which is default value for all the arrays, will need to search both. + var defaultValueIndex = this.data.indexOf(x, start); + var undefinedIndex = -1; + for (var i = start; i < this.data.length; i++) { + if (this.data[i] == undefined) { + undefinedIndex = i; + break; + } + } + if (defaultValueIndex < undefinedIndex || undefinedIndex == -1) { + return defaultValueIndex; + } + return undefinedIndex; + }; + RefCollection.prototype.print = function () { + console.log("RefCollection id:" + this.id + " refs:" + this.refcnt + " len:" + this.data.length + " flags:" + this.flags + " d0:" + this.data[0]); + }; + return RefCollection; + }(pxsim.RefObject)); + pxsim.RefCollection = RefCollection; + var Array_; + (function (Array_) { + function mk(f) { + return new RefCollection(f); + } + Array_.mk = mk; + function length(c) { + return c.getLength(); + } + Array_.length = length; + function setLength(c, x) { + c.setLength(x); + } + Array_.setLength = setLength; + function push(c, x) { + if (c.flags & 1) + pxsim.incr(x); + c.push(x); + } + Array_.push = push; + function pop(c, x) { + var ret = c.pop(); + if (c.flags & 1) + pxsim.decr(ret); + return ret; + } + Array_.pop = pop; + function getAt(c, x) { + var tmp = c.getAt(x); + if (c.flags & 1) + pxsim.incr(tmp); + return tmp; + } + Array_.getAt = getAt; + function removeAt(c, x) { + if (!c.isValidIndex(x)) + return; + if (c.flags & 1) { + pxsim.decr(c.getAt(x)); + } + return c.removeAt(x); + } + Array_.removeAt = removeAt; + function insertAt(c, x, y) { + if (c.flags & 1) + pxsim.incr(y); + c.insertAt(x, y); + } + Array_.insertAt = insertAt; + function setAt(c, x, y) { + if (c.isValidIndex(x) && (c.flags & 1)) { + //if there is an existing element handle refcount + pxsim.decr(c.getAt(x)); + pxsim.incr(y); + } + c.setAt(x, y); + } + Array_.setAt = setAt; + function indexOf(c, x, start) { + return c.indexOf(x, start); + } + Array_.indexOf = indexOf; + function removeElement(c, x) { + var idx = indexOf(c, x, 0); + if (idx >= 0) { + removeAt(c, idx); + return 1; + } + return 0; + } + Array_.removeElement = removeElement; + })(Array_ = pxsim.Array_ || (pxsim.Array_ = {})); + var Math_; + (function (Math_) { + function sqrt(n) { + return Math.sqrt(n) >>> 0; + } + Math_.sqrt = sqrt; + function pow(x, y) { + return Math.pow(x, y) >>> 0; + } + Math_.pow = pow; + function random(max) { + if (max < 1) + return 0; + var r = 0; + do { + r = Math.floor(Math.random() * max); + } while (r == max); + return r; + } + Math_.random = random; + })(Math_ = pxsim.Math_ || (pxsim.Math_ = {})); + // for explanations see: + // http://stackoverflow.com/questions/3428136/javascript-integer-math-incorrect-results (second answer) + // (but the code below doesn't come from there; I wrote it myself) + // TODO use Math.imul if available + function intMult(a, b) { + return (((a & 0xffff) * (b >>> 16) + (b & 0xffff) * (a >>> 16)) << 16) + ((a & 0xffff) * (b & 0xffff)); + } + var Number_; + (function (Number_) { + function lt(x, y) { return x < y; } + Number_.lt = lt; + function le(x, y) { return x <= y; } + Number_.le = le; + function neq(x, y) { return !eq(x, y); } + Number_.neq = neq; + function eq(x, y) { return pxsim.pxtrt.nullFix(x) == pxsim.pxtrt.nullFix(y); } + Number_.eq = eq; + function gt(x, y) { return x > y; } + Number_.gt = gt; + function ge(x, y) { return x >= y; } + Number_.ge = ge; + function div(x, y) { return Math.floor(x / y) | 0; } + Number_.div = div; + function mod(x, y) { return x % y; } + Number_.mod = mod; + function toString(x) { return pxsim.initString(x + ""); } + Number_.toString = toString; + })(Number_ = pxsim.Number_ || (pxsim.Number_ = {})); + var thumb; + (function (thumb) { + function adds(x, y) { return (x + y) | 0; } + thumb.adds = adds; + function subs(x, y) { return (x - y) | 0; } + thumb.subs = subs; + function divs(x, y) { return Math.floor(x / y) | 0; } + thumb.divs = divs; + function muls(x, y) { return intMult(x, y); } + thumb.muls = muls; + function ands(x, y) { return x & y; } + thumb.ands = ands; + function orrs(x, y) { return x | y; } + thumb.orrs = orrs; + function eors(x, y) { return x ^ y; } + thumb.eors = eors; + function lsls(x, y) { return x << y; } + thumb.lsls = lsls; + function lsrs(x, y) { return x >>> y; } + thumb.lsrs = lsrs; + function asrs(x, y) { return x >> y; } + thumb.asrs = asrs; + function cmp_lt(x, y) { return x < y; } + thumb.cmp_lt = cmp_lt; + function cmp_le(x, y) { return x <= y; } + thumb.cmp_le = cmp_le; + function cmp_ne(x, y) { return !cmp_eq(x, y); } + thumb.cmp_ne = cmp_ne; + function cmp_eq(x, y) { return pxsim.pxtrt.nullFix(x) == pxsim.pxtrt.nullFix(y); } + thumb.cmp_eq = cmp_eq; + function cmp_gt(x, y) { return x > y; } + thumb.cmp_gt = cmp_gt; + function cmp_ge(x, y) { return x >= y; } + thumb.cmp_ge = cmp_ge; + function ignore(v) { return v; } + thumb.ignore = ignore; + })(thumb = pxsim.thumb || (pxsim.thumb = {})); + var String_; + (function (String_) { + function mkEmpty() { + return ""; + } + String_.mkEmpty = mkEmpty; + function fromCharCode(code) { + return pxsim.initString(String.fromCharCode(code)); + } + String_.fromCharCode = fromCharCode; + function toNumber(s) { + return parseInt(s); + } + String_.toNumber = toNumber; + // TODO check edge-conditions + function concat(a, b) { + return pxsim.initString(a + b); + } + String_.concat = concat; + function substring(s, i, j) { + return pxsim.initString(s.slice(i, i + j)); + } + String_.substring = substring; + function equals(s1, s2) { + return s1 == s2; + } + String_.equals = equals; + function compare(s1, s2) { + if (s1 == s2) + return 0; + if (s1 < s2) + return -1; + return 1; + } + String_.compare = compare; + function length(s) { + return s.length; + } + String_.length = length; + function isEmpty(s) { + return s == null || s.length == 0; + } + String_.isEmpty = isEmpty; + function substr(s, start, length) { + return pxsim.initString(s.substr(start, length)); + } + String_.substr = substr; + function inRange(s, i) { return 0 <= i && i < s.length; } + function charAt(s, i) { + return inRange(s, i) ? pxsim.initString(s.charAt(i)) : null; + } + String_.charAt = charAt; + function charCodeAt(s, i) { + return inRange(s, i) ? s.charCodeAt(i) : 0; + } + String_.charCodeAt = charCodeAt; + })(String_ = pxsim.String_ || (pxsim.String_ = {})); + var Boolean_; + (function (Boolean_) { + function toString(v) { + return v ? "true" : "false"; + } + Boolean_.toString = toString; + function bang(v) { + return !v; + } + Boolean_.bang = bang; + })(Boolean_ = pxsim.Boolean_ || (pxsim.Boolean_ = {})); + var RefBuffer = (function (_super) { + __extends(RefBuffer, _super); + function RefBuffer(data) { + _super.call(this); + this.data = data; + } + RefBuffer.prototype.print = function () { + console.log("RefBuffer id:" + this.id + " refs:" + this.refcnt + " len:" + this.data.length + " d0:" + this.data[0]); + }; + return RefBuffer; + }(pxsim.RefObject)); + pxsim.RefBuffer = RefBuffer; + var BufferMethods; + (function (BufferMethods) { + // keep in sync with C++! + (function (NumberFormat) { + NumberFormat[NumberFormat["Int8LE"] = 1] = "Int8LE"; + NumberFormat[NumberFormat["UInt8LE"] = 2] = "UInt8LE"; + NumberFormat[NumberFormat["Int16LE"] = 3] = "Int16LE"; + NumberFormat[NumberFormat["UInt16LE"] = 4] = "UInt16LE"; + NumberFormat[NumberFormat["Int32LE"] = 5] = "Int32LE"; + NumberFormat[NumberFormat["Int8BE"] = 6] = "Int8BE"; + NumberFormat[NumberFormat["UInt8BE"] = 7] = "UInt8BE"; + NumberFormat[NumberFormat["Int16BE"] = 8] = "Int16BE"; + NumberFormat[NumberFormat["UInt16BE"] = 9] = "UInt16BE"; + NumberFormat[NumberFormat["Int32BE"] = 10] = "Int32BE"; + })(BufferMethods.NumberFormat || (BufferMethods.NumberFormat = {})); + var NumberFormat = BufferMethods.NumberFormat; + ; + function fmtInfoCore(fmt) { + switch (fmt) { + case NumberFormat.Int8LE: return -1; + case NumberFormat.UInt8LE: return 1; + case NumberFormat.Int16LE: return -2; + case NumberFormat.UInt16LE: return 2; + case NumberFormat.Int32LE: return -4; + case NumberFormat.Int8BE: return -10; + case NumberFormat.UInt8BE: return 10; + case NumberFormat.Int16BE: return -20; + case NumberFormat.UInt16BE: return 20; + case NumberFormat.Int32BE: return -40; + default: throw pxsim.U.userError("bad format"); + } + } + function fmtInfo(fmt) { + var size = fmtInfoCore(fmt); + var signed = false; + if (size < 0) { + signed = true; + size = -size; + } + var swap = false; + if (size >= 10) { + swap = true; + size /= 10; + } + return { size: size, signed: signed, swap: swap }; + } + function getNumber(buf, fmt, offset) { + var inf = fmtInfo(fmt); + var r = 0; + for (var i = 0; i < inf.size; ++i) { + r <<= 8; + var off = inf.swap ? offset + i : offset + inf.size - i - 1; + r |= buf.data[off]; + } + if (inf.signed) { + var missingBits = 32 - (inf.size * 8); + r = (r << missingBits) >> missingBits; + } + return r; + } + BufferMethods.getNumber = getNumber; + function setNumber(buf, fmt, offset, r) { + var inf = fmtInfo(fmt); + for (var i = 0; i < inf.size; ++i) { + var off = !inf.swap ? offset + i : offset + inf.size - i - 1; + buf.data[off] = (r & 0xff); + r >>= 8; + } + } + BufferMethods.setNumber = setNumber; + function createBuffer(size) { + return new RefBuffer(new Uint8Array(size)); + } + BufferMethods.createBuffer = createBuffer; + function getBytes(buf) { + // not sure if this is any useful... + return buf.data; + } + BufferMethods.getBytes = getBytes; + function inRange(buf, off) { + return 0 <= off && off < buf.data.length; + } + function getByte(buf, off) { + if (inRange(buf, off)) + return buf.data[off]; + else + return 0; + } + BufferMethods.getByte = getByte; + function setByte(buf, off, v) { + if (inRange(buf, off)) + buf.data[off] = v; + } + BufferMethods.setByte = setByte; + function length(buf) { + return buf.data.length; + } + BufferMethods.length = length; + function fill(buf, value, offset, length) { + if (offset === void 0) { offset = 0; } + if (length === void 0) { length = -1; } + if (offset < 0 || offset > buf.data.length) + return; + if (length < 0) + length = buf.data.length; + length = Math.min(length, buf.data.length - offset); + buf.data.fill(value, offset, offset + length); + } + BufferMethods.fill = fill; + function slice(buf, offset, length) { + offset = Math.min(buf.data.length, offset); + if (length < 0) + length = buf.data.length; + length = Math.min(length, buf.data.length - offset); + return new RefBuffer(buf.data.slice(offset, offset + length)); + } + BufferMethods.slice = slice; + function memmove(dst, dstOff, src, srcOff, len) { + if (src.buffer === dst.buffer) { + memmove(dst, dstOff, src.slice(srcOff, srcOff + len), 0, len); + } + else { + for (var i = 0; i < len; ++i) + dst[dstOff + i] = src[srcOff + i]; + } + } + var INT_MIN = -0x80000000; + function shift(buf, offset, start, len) { + if (len < 0) + len = buf.data.length - start; + if (start < 0 || start + len > buf.data.length || start + len < start + || len == 0 || offset == 0 || offset == INT_MIN) + return; + if (len == 0 || offset == 0 || offset == INT_MIN) + return; + if (offset <= -len || offset >= len) { + fill(buf, 0); + return; + } + if (offset < 0) { + offset = -offset; + memmove(buf.data, start + offset, buf.data, start, len - offset); + buf.data.fill(0, start, start + offset); + } + else { + len = len - offset; + memmove(buf.data, start, buf.data, start + offset, len); + buf.data.fill(0, start + len, start + len + offset); + } + } + BufferMethods.shift = shift; + function rotate(buf, offset, start, len) { + if (len < 0) + len = buf.data.length - start; + if (start < 0 || start + len > buf.data.length || start + len < start + || len == 0 || offset == 0 || offset == INT_MIN) + return; + if (offset < 0) + offset += len << 8; // try to make it positive + offset %= len; + if (offset < 0) + offset += len; + var data = buf.data; + var n_first = offset; + var first = 0; + var next = n_first; + var last = len; + while (first != next) { + var tmp = data[first + start]; + data[first++ + start] = data[next + start]; + data[next++ + start] = tmp; + if (next == last) { + next = n_first; + } + else if (first == n_first) { + n_first = next; + } + } + } + BufferMethods.rotate = rotate; + function write(buf, dstOffset, src, srcOffset, length) { + if (srcOffset === void 0) { srcOffset = 0; } + if (length === void 0) { length = -1; } + if (length < 0) + length = src.data.length; + if (srcOffset < 0 || dstOffset < 0 || dstOffset > buf.data.length) + return; + length = Math.min(src.data.length - srcOffset, buf.data.length - dstOffset); + if (length < 0) + return; + memmove(buf.data, dstOffset, src.data, srcOffset, length); + } + BufferMethods.write = write; + })(BufferMethods = pxsim.BufferMethods || (pxsim.BufferMethods = {})); +})(pxsim || (pxsim = {})); +var pxsim; +(function (pxsim) { + var logs; + (function (logs) { + var TrendChartElement = (function () { + function TrendChartElement(log, className) { + this.log = log; + this.vpw = 80; + this.vph = 15; + this.log = log; + this.element = pxsim.svg.elt("svg"); + pxsim.svg.hydrate(this.element, { class: className, viewBox: "0 0 " + this.vpw + " " + this.vph }); + this.g = pxsim.svg.child(this.element, "g"); + this.line = pxsim.svg.child(this.g, "polyline"); + } + TrendChartElement.prototype.render = function () { + var _this = this; + var data = this.log.accvalues.slice(-25); // take last 10 entry + var margin = 2; + var times = data.map(function (d) { return d.t; }); + var values = data.map(function (d) { return d.v; }); + var maxt = Math.max.apply(null, times); + var mint = Math.min.apply(null, times); + var maxv = Math.max.apply(null, values); + var minv = Math.min.apply(null, values); + var h = (maxv - minv) || 10; + var w = (maxt - mint) || 10; + var points = data.map(function (d) { return ((d.t - mint) / w * _this.vpw + "," + (_this.vph - (d.v - minv) / h * (_this.vph - 2 * margin) - margin)); }).join(' '); + pxsim.svg.hydrate(this.line, { points: points }); + }; + return TrendChartElement; + }()); + var LogViewElement = (function () { + function LogViewElement(props) { + var _this = this; + this.props = props; + this.shouldScroll = false; + this.entries = []; + this.serialBuffers = {}; + this.dropSim = false; // drop simulator events + this.registerEvents(); + this.registerChromeSerial(); + this.element = document.createElement("div"); + this.element.className = "ui segment hideempty logs"; + if (this.props.onClick) + this.element.onclick = function () { return _this.props.onClick(_this.rows()); }; + } + LogViewElement.prototype.setLabel = function (text, theme) { + if (this.labelElement && this.labelElement.innerText == text) + return; + if (this.labelElement) { + if (this.labelElement.parentElement) + this.labelElement.parentElement.removeChild(this.labelElement); + this.labelElement = undefined; + } + if (text) { + this.labelElement = document.createElement("a"); + this.labelElement.className = "ui " + theme + " top right attached mini label"; + this.labelElement.appendChild(document.createTextNode(text)); + } + }; + LogViewElement.prototype.hasTrends = function () { + return this.entries.some(function (entry) { return !!entry.chartElement; }); + }; + // creates a deep clone of the log entries + LogViewElement.prototype.rows = function () { + return this.entries.map(function (e) { + return { + id: e.id, + theme: e.theme, + variable: e.variable, + accvalues: e.accvalues ? e.accvalues.slice(0) : undefined, + time: e.time, + value: e.value, + source: e.source, + count: e.count + }; + }); + }; + LogViewElement.prototype.streamPayload = function (startTime) { + // filter out data + var es = this.entries.filter(function (e) { return !!e.accvalues && e.time + e.accvalues[e.accvalues.length - 1].t >= startTime; }); + if (es.length == 0) + return undefined; + var fields = { "timestamp": 1, "partition": 1 }; + var rows = []; + function entryVariable(e) { + return /^\s*$/.test(e.variable) ? 'data' : e.variable; + } + // collect fields + es.forEach(function (e) { + var n = entryVariable(e); + if (!fields[n]) + fields[n] = 1; + }); + // collapse data and fill values + var fs = Object.keys(fields); + es.forEach(function (e) { + var n = entryVariable(e); + var ei = fs.indexOf(n); + e.accvalues + .filter(function (v) { return (e.time + v.t) >= startTime; }) + .forEach(function (v) { + var row = [e.time + v.t, 0]; + for (var i = 2; i < fs.length; ++i) + row.push(i == ei ? v.v : null); + rows.push(row); + }); + }); + return { fields: fs, values: rows }; + }; + LogViewElement.prototype.registerChromeSerial = function () { + var _this = this; + var buffers = {}; + var chrome = window.chrome; + if (chrome && chrome.runtime) { + var port = chrome.runtime.connect("cihhkhnngbjlhahcfmhekmbnnjcjdbge", { name: "micro:bit" }); + port.onMessage.addListener(function (msg) { + if (msg.type == "serial") { + if (!_this.dropSim) { + _this.clear(); + _this.dropSim = true; + } + var buf = (buffers[msg.id] || "") + msg.data; + var i = buf.lastIndexOf("\n"); + if (i >= 0) { + var msgb = buf.substring(0, i + 1); + msgb.split('\n').filter(function (line) { return !!line; }).forEach(function (line) { return _this.appendEntry('microbit' + msg.id, line, 'black'); }); + buf = buf.slice(i + 1); + } + buffers[msg.id] = buf; + } + }); + } + }; + LogViewElement.prototype.registerEvents = function () { + var _this = this; + window.addEventListener('message', function (ev) { + var msg = ev.data; + switch (msg.type || '') { + case 'serial': + var smsg = msg; + if (_this.dropSim && smsg.sim) { + // drop simulated event since we are receiving real events + return; + } + else if (!_this.dropSim && !smsg.sim) { + // first non-simulator serial event, drop all previous events + _this.clear(); + _this.dropSim = true; + } + var value = smsg.data || ''; + var source = smsg.id || '?'; + var theme = source.split('-')[0] || ''; + if (!/^[a-z]+$/.test(theme)) + theme = 'black'; + var buffer = _this.serialBuffers[source] || ''; + for (var i = 0; i < value.length; ++i) { + switch (value.charCodeAt(i)) { + case 10: + _this.appendEntry(source, buffer, theme); + buffer = ''; + break; + case 13: + break; + default: + buffer += value[i]; + break; + } + } + _this.serialBuffers[source] = buffer; + break; + } + }, false); + }; + LogViewElement.prototype.appendEntry = function (source, value, theme) { + var _this = this; + if (this.labelElement && !this.labelElement.parentElement) + this.element.insertBefore(this.labelElement, this.element.firstElementChild); + var ens = this.entries; + while (ens.length > this.props.maxEntries) { + var po = ens.shift(); + if (po.element && po.element.parentElement) + po.element.parentElement.removeChild(po.element); + } + // find the entry with same source + var last = undefined; + var m = /^\s*(([^:]+):)?\s*(-?\d+)/i.exec(value); + var variable = m ? (m[2] || ' ') : undefined; + var nvalue = m ? parseInt(m[3]) : null; + for (var i = ens.length - 1; i >= 0; --i) { + if (ens[i].source == source && + ((i == ens.length - 1 && ens[i].value == value) || + (variable && ens[i].variable == variable))) { + last = ens[i]; + break; + } + } + if (last) { + last.value = value; + if (last.accvalues) { + last.accvalues.push({ + t: Date.now() - last.time, + v: nvalue + }); + if (last.accvalues.length > this.props.maxAccValues) + last.accvalues.shift(); + } + else if (!last.countElement) { + last.countElement = document.createElement("span"); + last.countElement.className = 'ui log counter'; + last.element.insertBefore(last.countElement, last.element.firstChild); + } + last.count++; + this.scheduleRender(last); + } + else { + var e_1 = { + id: LogViewElement.counter++, + theme: theme, + time: Date.now(), + value: value, + source: source, + count: 1, + dirty: true, + variable: variable, + accvalues: nvalue != null ? [{ t: 0, v: nvalue }] : undefined, + element: document.createElement("div"), + valueElement: document.createTextNode('') + }; + e_1.element.className = "ui log " + e_1.theme; + var raiseTrends = false; + if (e_1.accvalues) { + e_1.accvaluesElement = document.createElement('span'); + e_1.accvaluesElement.className = "ui log " + e_1.theme + " gauge"; + e_1.chartElement = new TrendChartElement(e_1, "ui trend " + e_1.theme); + if (this.props.onTrendChartClick) { + e_1.chartElement.element.onclick = function () { return _this.props.onTrendChartClick(e_1); }; + e_1.chartElement.element.className += " link"; + } + e_1.element.appendChild(e_1.accvaluesElement); + e_1.element.appendChild(e_1.chartElement.element); + raiseTrends = true; + } + e_1.element.appendChild(e_1.valueElement); + ens.push(e_1); + this.element.appendChild(e_1.element); + this.scheduleRender(e_1); + if (raiseTrends && this.props.onTrendChartChanged) + this.props.onTrendChartChanged(); + } + }; + LogViewElement.prototype.scheduleRender = function (e) { + var _this = this; + e.dirty = true; + if (!this.renderFiberId) + this.renderFiberId = setTimeout(function () { return _this.render(); }, 50); + }; + LogViewElement.prototype.clear = function () { + this.entries = []; + if (this.labelElement && this.labelElement.parentElement) + this.labelElement.parentElement.removeChild(this.labelElement); + this.element.innerHTML = ''; + this.serialBuffers = {}; + this.dropSim = false; + if (this.props.onTrendChartChanged) + this.props.onTrendChartChanged(); + }; + LogViewElement.prototype.render = function () { + this.entries.forEach(function (entry) { + if (!entry.dirty) + return; + if (entry.countElement) + entry.countElement.innerText = entry.count.toString(); + if (entry.accvaluesElement) + entry.accvaluesElement.innerText = entry.value; + if (entry.chartElement) + entry.chartElement.render(); + entry.valueElement.textContent = entry.accvalues ? '' : entry.value; + entry.dirty = false; + }); + this.renderFiberId = 0; + }; + LogViewElement.counter = 0; + return LogViewElement; + }()); + logs.LogViewElement = LogViewElement; + function entriesToCSV(entries) { + // first log all data entries to CSV + var dataEntries = []; + var rows = entries.length; + entries.forEach(function (e) { + if (e.accvalues && e.accvalues.length > 0) { + dataEntries.push(e); + rows = Math.max(e.accvalues.length, rows); + } + }); + var csv = ''; + // name columns + csv += dataEntries.map(function (entry) { return (entry.theme + " time, " + entry.theme + " " + (entry.variable.trim() || "data")); }) + .concat(['log time', 'log source', 'log message']) + .join(', '); + csv += '\n'; + var _loop_2 = function(i) { + var cols = []; + dataEntries.forEach(function (entry) { + var t0 = entry.accvalues[0].t; + if (i < entry.accvalues.length) { + cols.push(((entry.accvalues[i].t - t0) / 1000).toString()); + cols.push(entry.accvalues[i].v.toString()); + } + else { + cols.push(' '); + cols.push(' '); + } + }); + if (i < entries.length) { + var t0 = entries[0].time; + cols.push(((entries[i].time - t0) / 1000).toString()); + cols.push(entries[i].source); + cols.push(entries[i].value); + } + csv += cols.join(', ') + '\n'; + }; + for (var i = 0; i < rows; ++i) { + _loop_2(i); + } + return csv; + } + logs.entriesToCSV = entriesToCSV; + function entryToCSV(entry) { + var t0 = entry.accvalues.length > 0 ? entry.accvalues[0].t : 0; + var csv = (entry.theme + " time, " + (entry.variable.trim() || "data") + "\n") + + entry.accvalues.map(function (v) { return ((v.t - t0) / 1000) + ", " + v.v; }).join('\n'); + return csv; + } + logs.entryToCSV = entryToCSV; + })(logs = pxsim.logs || (pxsim.logs = {})); +})(pxsim || (pxsim = {})); +/// +/// +var pxsim; +(function (pxsim) { + var U; + (function (U) { + function addClass(el, cls) { + if (el.classList) + el.classList.add(cls); + else if (el.className.indexOf(cls) < 0) + el.className += ' ' + cls; + } + U.addClass = addClass; + function removeClass(el, cls) { + if (el.classList) + el.classList.remove(cls); + else + el.className = el.className.replace(cls, '').replace(/\s{2,}/, ' '); + } + U.removeClass = removeClass; + function assert(cond, msg) { + if (msg === void 0) { msg = "Assertion failed"; } + if (!cond) { + debugger; + throw new Error(msg); + } + } + U.assert = assert; + function repeatMap(n, fn) { + n = n || 0; + var r = []; + for (var i = 0; i < n; ++i) + r.push(fn(i)); + return r; + } + U.repeatMap = repeatMap; + function userError(msg) { + var e = new Error(msg); + e.isUserError = true; + throw e; + } + U.userError = userError; + function now() { + return Date.now(); + } + U.now = now; + function nextTick(f) { + Promise._async._schedule(f); + } + U.nextTick = nextTick; + })(U = pxsim.U || (pxsim.U = {})); + function getResume() { return pxsim.runtime.getResume(); } + pxsim.getResume = getResume; + var BaseBoard = (function () { + function BaseBoard() { + this.serialOutBuffer = ''; + } + BaseBoard.prototype.updateView = function () { }; + BaseBoard.prototype.receiveMessage = function (msg) { }; + BaseBoard.prototype.initAsync = function (msg) { + this.runOptions = msg; + return Promise.resolve(); + }; + BaseBoard.prototype.kill = function () { }; + BaseBoard.prototype.writeSerial = function (s) { + if (!s) + return; + for (var i = 0; i < s.length; ++i) { + var c = s[i]; + switch (c) { + case '\n': + Runtime.postMessage({ + type: 'serial', + data: this.serialOutBuffer + '\n', + id: pxsim.runtime.id, + sim: true + }); + this.serialOutBuffer = ''; + break; + case '\r': continue; + default: this.serialOutBuffer += c; + } + } + }; + return BaseBoard; + }()); + pxsim.BaseBoard = BaseBoard; + var CoreBoard = (function (_super) { + __extends(CoreBoard, _super); + function CoreBoard() { + var _this = this; + _super.call(this); + this.id = "b" + pxsim.Math_.random(2147483647); + this.bus = new pxsim.EventBus(pxsim.runtime); + // updates + this.updateSubscribers = []; + this.updateView = function () { + _this.updateSubscribers.forEach(function (sub) { return sub(); }); + }; + this.builtinParts = {}; + this.builtinVisuals = {}; + this.builtinPartVisuals = {}; + } + CoreBoard.prototype.kill = function () { + _super.prototype.kill.call(this); + pxsim.AudioContextManager.stop(); + }; + return CoreBoard; + }(BaseBoard)); + pxsim.CoreBoard = CoreBoard; + var BareBoard = (function (_super) { + __extends(BareBoard, _super); + function BareBoard() { + _super.apply(this, arguments); + } + return BareBoard; + }(BaseBoard)); + function initBareRuntime() { + pxsim.runtime.board = new BareBoard(); + var myRT = pxsim; + myRT.basic = { + pause: pxsim.thread.pause, + showNumber: function (n) { + var cb = getResume(); + console.log("SHOW NUMBER:", n); + U.nextTick(cb); + } + }; + myRT.serial = { + writeString: function (s) { return pxsim.runtime.board.writeSerial(s); }, + }; + myRT.pins = { + createBuffer: pxsim.BufferMethods.createBuffer, + }; + myRT.control = { + inBackground: pxsim.thread.runInBackground + }; + } + pxsim.initBareRuntime = initBareRuntime; + var EventQueue = (function () { + function EventQueue(runtime) { + this.runtime = runtime; + this.max = 5; + this.events = []; + } + EventQueue.prototype.push = function (e) { + if (!this.handler || this.events.length > this.max) + return; + this.events.push(e); + // if this is the first event pushed - start processing + if (this.events.length == 1) + this.poke(); + }; + EventQueue.prototype.poke = function () { + var _this = this; + var top = this.events.shift(); + this.runtime.runFiberAsync(this.handler, top) + .done(function () { + // we're done processing the current event, if there is still something left to do, do it + if (_this.events.length > 0) + _this.poke(); + }); + }; + Object.defineProperty(EventQueue.prototype, "handler", { + get: function () { + return this.mHandler; + }, + set: function (a) { + if (this.mHandler) { + pxsim.pxtcore.decr(this.mHandler); + } + this.mHandler = a; + if (this.mHandler) { + pxsim.pxtcore.incr(this.mHandler); + } + }, + enumerable: true, + configurable: true + }); + return EventQueue; + }()); + pxsim.EventQueue = EventQueue; + // overriden at loadtime by specific implementation + pxsim.initCurrentRuntime = undefined; + pxsim.handleCustomMessage = undefined; + var Runtime = (function () { + function Runtime(code) { + var _this = this; + this.numGlobals = 1000; + this.dead = false; + this.running = false; + this.startTime = 0; + this.globals = {}; + this.numDisplayUpdates = 0; + U.assert(!!pxsim.initCurrentRuntime); + var yieldMaxSteps = 100; + // These variables are used by the generated code as well + // --- + var entryPoint; + var pxtrt = pxsim.pxtrt; + var breakpoints = null; + var breakAlways = false; + var globals = this.globals; + var yieldSteps = yieldMaxSteps; + // --- + var currResume; + var dbgResume; + var breakFrame = null; // for step-over + var lastYield = Date.now(); + var __this = this; + function oops(msg) { + throw new Error("sim error: " + msg); + } + // referenced from eval()ed code + function doNothing(s) { + s.pc = -1; + return leave(s, s.parent.retval); + } + function maybeYield(s, pc, r0) { + yieldSteps = yieldMaxSteps; + var now = Date.now(); + if (now - lastYield >= 20) { + lastYield = now; + s.pc = pc; + s.r0 = r0; + var cont = function () { + if (__this.dead) + return; + U.assert(s.pc == pc); + return loop(s); + }; + //U.nextTick(cont) + setTimeout(cont, 5); + return true; + } + return false; + } + function setupDebugger(numBreakpoints) { + breakpoints = new Uint8Array(numBreakpoints); + breakAlways = true; + } + function isBreakFrame(s) { + if (!breakFrame) + return true; // nothing specified + for (var p = breakFrame; p; p = p.parent) { + if (p == s) + return true; + } + return false; + } + function breakpoint(s, retPC, brkId, r0) { + U.assert(!dbgResume); + s.pc = retPC; + s.r0 = r0; + Runtime.postMessage(pxsim.getBreakpointMsg(s, brkId)); + dbgResume = function (m) { + dbgResume = null; + if (__this.dead) + return; + pxsim.runtime = __this; + U.assert(s.pc == retPC); + breakAlways = false; + breakFrame = null; + switch (m.subtype) { + case "resume": + break; + case "stepover": + breakAlways = true; + breakFrame = s; + break; + case "stepinto": + breakAlways = true; + break; + case "stepout": + breakAlways = true; + breakFrame = s.parent || s; + break; + } + return loop(s); + }; + return null; + } + function handleDebuggerMsg(msg) { + switch (msg.subtype) { + case "config": + var cfg = msg; + if (cfg.setBreakpoints) { + breakpoints.fill(0); + for (var _i = 0, _a = cfg.setBreakpoints; _i < _a.length; _i++) { + var n = _a[_i]; + breakpoints[n] = 1; + } + } + break; + case "pause": + breakAlways = true; + breakFrame = null; + break; + case "resume": + case "stepover": + case "stepinto": + case "stepout": + if (dbgResume) + dbgResume(msg); + break; + } + } + function loop(p) { + if (__this.dead) { + console.log("Runtime terminated"); + return; + } + try { + pxsim.runtime = __this; + while (!!p) { + __this.currFrame = p; + __this.currFrame.overwrittenPC = false; + p = p.fn(p); + __this.maybeUpdateDisplay(); + if (__this.currFrame.overwrittenPC) + p = __this.currFrame; + } + } + catch (e) { + if (__this.errorHandler) + __this.errorHandler(e); + else { + console.error("Simulator crashed, no error handler", e.stack); + var msg = pxsim.getBreakpointMsg(p, p.lastBrkId); + msg.exceptionMessage = e.message; + msg.exceptionStack = e.stack; + Runtime.postMessage(msg); + if (__this.postError) + __this.postError(e); + } + } + } + function actionCall(s, cb) { + if (cb) + s.finalCallback = cb; + s.depth = s.parent.depth + 1; + if (s.depth > 1000) { + U.userError("Stack overflow"); + } + s.pc = 0; + return s; + } + function leave(s, v) { + s.parent.retval = v; + if (s.finalCallback) + s.finalCallback(v); + return s.parent; + } + function setupTop(cb) { + var s = setupTopCore(cb); + setupResume(s, 0); + return s; + } + function setupTopCore(cb) { + var frame = { + parent: null, + pc: 0, + depth: 0, + fn: function () { + if (cb) + cb(frame.retval); + return null; + } + }; + return frame; + } + function topCall(fn, cb) { + U.assert(!!__this.board); + U.assert(!__this.running); + __this.setRunning(true); + var topFrame = setupTopCore(cb); + var frame = { + parent: topFrame, + fn: fn, + depth: 0, + pc: 0 + }; + loop(actionCall(frame)); + } + function checkResumeConsumed() { + if (currResume) + oops("getResume() not called"); + } + function setupResume(s, retPC) { + currResume = buildResume(s, retPC); + } + function buildResume(s, retPC) { + if (currResume) + oops("already has resume"); + s.pc = retPC; + return function (v) { + if (__this.dead) + return; + pxsim.runtime = __this; + U.assert(s.pc == retPC); + // TODO should loop() be called here using U.nextTick? + // This matters if the simulator function calls cb() + // synchronously. + if (v instanceof pxsim.FnWrapper) { + var w = v; + var frame = { + parent: s, + fn: w.func, + lambdaArgs: [w.a0, w.a1, w.a2], + pc: 0, + caps: w.caps, + depth: s.depth + 1, + finalCallback: w.cb, + }; + return loop(actionCall(frame)); + } + s.retval = v; + return loop(s); + }; + } + // tslint:disable-next-line + eval(code); + this.run = function (cb) { return topCall(entryPoint, cb); }; + this.getResume = function () { + if (!currResume) + oops("noresume"); + var r = currResume; + currResume = null; + return r; + }; + this.setupTop = setupTop; + this.handleDebuggerMsg = handleDebuggerMsg; + this.entry = entryPoint; + this.overwriteResume = function (retPC) { + currResume = null; + if (retPC >= 0) + _this.currFrame.pc = retPC; + _this.currFrame.overwrittenPC = true; + }; + pxsim.runtime = this; + pxsim.initCurrentRuntime(); + } + Runtime.prototype.runningTime = function () { + return U.now() - this.startTime; + }; + Runtime.prototype.runFiberAsync = function (a, arg0, arg1, arg2) { + var _this = this; + pxsim.incr(a); + return new Promise(function (resolve, reject) { + return U.nextTick(function () { + pxsim.runtime = _this; + _this.setupTop(resolve); + pxsim.pxtcore.runAction3(a, arg0, arg1, arg2); + pxsim.decr(a); // if it's still running, action.run() has taken care of incrementing the counter + }); + }); + }; + Runtime.postMessage = function (data) { + if (!data) + return; + // TODO: origins + if (typeof window !== 'undefined' && window.parent && window.parent.postMessage) { + window.parent.postMessage(data, "*"); + } + if (Runtime.messagePosted) + Runtime.messagePosted(data); + }; + Runtime.prototype.kill = function () { + this.dead = true; + // TODO fix this + this.setRunning(false); + }; + Runtime.prototype.updateDisplay = function () { + this.board.updateView(); + }; + Runtime.prototype.queueDisplayUpdate = function () { + this.numDisplayUpdates++; + }; + Runtime.prototype.maybeUpdateDisplay = function () { + if (this.numDisplayUpdates) { + this.numDisplayUpdates = 0; + this.updateDisplay(); + } + }; + Runtime.prototype.setRunning = function (r) { + if (this.running != r) { + this.running = r; + if (this.running) { + this.startTime = U.now(); + Runtime.postMessage({ type: 'status', runtimeid: this.id, state: 'running' }); + } + else { + Runtime.postMessage({ type: 'status', runtimeid: this.id, state: 'killed' }); + } + if (this.stateChanged) + this.stateChanged(); + } + }; + return Runtime; + }()); + pxsim.Runtime = Runtime; +})(pxsim || (pxsim = {})); +var pxsim; +(function (pxsim) { + (function (SimulatorState) { + SimulatorState[SimulatorState["Unloaded"] = 0] = "Unloaded"; + SimulatorState[SimulatorState["Stopped"] = 1] = "Stopped"; + SimulatorState[SimulatorState["Running"] = 2] = "Running"; + SimulatorState[SimulatorState["Paused"] = 3] = "Paused"; + })(pxsim.SimulatorState || (pxsim.SimulatorState = {})); + var SimulatorState = pxsim.SimulatorState; + (function (SimulatorDebuggerCommand) { + SimulatorDebuggerCommand[SimulatorDebuggerCommand["StepInto"] = 0] = "StepInto"; + SimulatorDebuggerCommand[SimulatorDebuggerCommand["StepOver"] = 1] = "StepOver"; + SimulatorDebuggerCommand[SimulatorDebuggerCommand["StepOut"] = 2] = "StepOut"; + SimulatorDebuggerCommand[SimulatorDebuggerCommand["Resume"] = 3] = "Resume"; + SimulatorDebuggerCommand[SimulatorDebuggerCommand["Pause"] = 4] = "Pause"; + })(pxsim.SimulatorDebuggerCommand || (pxsim.SimulatorDebuggerCommand = {})); + var SimulatorDebuggerCommand = pxsim.SimulatorDebuggerCommand; + var SimulatorDriver = (function () { + function SimulatorDriver(container, options) { + if (options === void 0) { options = {}; } + this.container = container; + this.options = options; + this.themes = ["blue", "red", "green", "yellow"]; + this.runId = ''; + this.nextFrameId = 0; + this.frameCounter = 0; + this.runOptions = {}; + this.state = SimulatorState.Unloaded; + this.frameCleanupTimeout = 0; + } + SimulatorDriver.prototype.setHwDebugger = function (hw) { + if (hw) { + // TODO set some visual on the simulator frame + // in future the simulator frame could reflect changes in the hardware + this.hwdbg = hw; + this.setState(SimulatorState.Running); + this.container.style.opacity = "0.3"; + } + else { + delete this.container.style.opacity; + this.hwdbg = null; + this.setState(SimulatorState.Running); + this.stop(); + } + }; + SimulatorDriver.prototype.handleHwDebuggerMsg = function (msg) { + if (!this.hwdbg) + return; + this.handleMessage(msg); + }; + SimulatorDriver.prototype.setThemes = function (themes) { + pxsim.U.assert(themes && themes.length > 0); + this.themes = themes; + }; + SimulatorDriver.prototype.setState = function (state) { + if (this.state != state) { + this.state = state; + if (this.options.onStateChanged) + this.options.onStateChanged(this.state); + } + }; + SimulatorDriver.prototype.postMessage = function (msg, source) { + if (this.hwdbg) { + this.hwdbg.postMessage(msg); + return; + } + // dispatch to all iframe besides self + var frames = this.container.getElementsByTagName("iframe"); + if (source && (msg.type === 'eventbus' || msg.type == 'radiopacket')) { + if (frames.length < 2) { + this.container.appendChild(this.createFrame()); + frames = this.container.getElementsByTagName("iframe"); + } + else if (frames[1].dataset['runid'] != this.runId) { + this.startFrame(frames[1]); + } + } + for (var i = 0; i < frames.length; ++i) { + var frame = frames[i]; + if (source && frame.contentWindow == source) + continue; + frame.contentWindow.postMessage(msg, "*"); + } + }; + SimulatorDriver.prototype.createFrame = function () { + var wrapper = document.createElement("div"); + wrapper.className = 'simframe'; + var frame = document.createElement('iframe'); + frame.id = 'sim-frame-' + this.nextId(); + frame.allowFullscreen = true; + frame.setAttribute('sandbox', 'allow-same-origin allow-scripts'); + frame.sandbox.value = "allow-scripts allow-same-origin"; + var simUrl = this.options.simUrl || (window.pxtConfig || {}).simUrl || "/sim/simulator.html"; + if (this.runOptions.aspectRatio) + wrapper.style.paddingBottom = (100 / this.runOptions.aspectRatio) + "%"; + frame.src = simUrl + '#' + frame.id; + frame.frameBorder = "0"; + frame.dataset['runid'] = this.runId; + wrapper.appendChild(frame); + return wrapper; + }; + SimulatorDriver.prototype.stop = function (unload) { + if (unload === void 0) { unload = false; } + this.postMessage({ type: 'stop' }); + this.setState(SimulatorState.Stopped); + if (unload) + this.unload(); + else { + var frames_2 = this.container.getElementsByTagName("iframe"); + for (var i = 0; i < frames_2.length; ++i) { + var frame = frames_2[i]; + if (!/grayscale/.test(frame.className)) + pxsim.U.addClass(frame, "grayscale"); + } + this.scheduleFrameCleanup(); + } + }; + SimulatorDriver.prototype.unload = function () { + this.cancelFrameCleanup(); + this.container.innerHTML = ''; + this.setState(SimulatorState.Unloaded); + }; + SimulatorDriver.prototype.mute = function (mute) { + this.postMessage({ type: 'mute', mute: mute }); + }; + SimulatorDriver.prototype.cancelFrameCleanup = function () { + if (this.frameCleanupTimeout) { + clearTimeout(this.frameCleanupTimeout); + this.frameCleanupTimeout = 0; + } + }; + SimulatorDriver.prototype.scheduleFrameCleanup = function () { + var _this = this; + this.cancelFrameCleanup(); + this.frameCleanupTimeout = setTimeout(function () { + _this.frameCleanupTimeout = 0; + _this.cleanupFrames(); + }, 5000); + }; + SimulatorDriver.prototype.applyAspectRatio = function () { + var frames = this.container.getElementsByTagName("iframe"); + for (var i = 0; i < frames.length; ++i) { + frames[i].parentElement.style.paddingBottom = + (100 / this.runOptions.aspectRatio) + "%"; + } + }; + SimulatorDriver.prototype.cleanupFrames = function () { + // drop unused extras frames after 5 seconds + var frames = this.container.getElementsByTagName("iframe"); + for (var i = 1; i < frames.length; ++i) { + var frame = frames[i]; + if (this.state == SimulatorState.Stopped + || frame.dataset['runid'] != this.runId) { + if (this.options.removeElement) + this.options.removeElement(frame.parentElement); + else + frame.parentElement.remove(); + } + } + }; + SimulatorDriver.prototype.hide = function (completeHandler) { + if (!this.options.removeElement) + return; + var frames = this.container.getElementsByTagName("iframe"); + for (var i = 0; i < frames.length; ++i) { + var frame = frames[i]; + this.options.removeElement(frame.parentElement, completeHandler); + } + // Execute the complete handler if there are no frames in sim view + if (frames.length == 0 && completeHandler) { + completeHandler(); + } + }; + SimulatorDriver.prototype.unhide = function () { + if (!this.options.unhideElement) + return; + var frames = this.container.getElementsByTagName("iframe"); + for (var i = 0; i < frames.length; ++i) { + var frame = frames[i]; + this.options.unhideElement(frame.parentElement); + } + }; + SimulatorDriver.prototype.run = function (js, opts) { + if (opts === void 0) { opts = {}; } + this.runOptions = opts; + this.runId = this.nextId(); + this.addEventListeners(); + // store information + this.currentRuntime = { + type: 'run', + boardDefinition: opts.boardDefinition, + parts: opts.parts, + fnArgs: opts.fnArgs, + code: js, + partDefinitions: opts.partDefinitions, + mute: opts.mute, + }; + this.applyAspectRatio(); + this.scheduleFrameCleanup(); + // first frame + var frame = this.container.querySelector("iframe"); + // lazy allocate iframe + if (!frame) { + var wrapper = this.createFrame(); + this.container.appendChild(wrapper); + frame = wrapper.firstElementChild; + } + else + this.startFrame(frame); + this.setState(SimulatorState.Running); + }; + SimulatorDriver.prototype.startFrame = function (frame) { + var msg = JSON.parse(JSON.stringify(this.currentRuntime)); + var mc = ''; + var m = /player=([A-Za-z0-9]+)/i.exec(window.location.href); + if (m) + mc = m[1]; + msg.frameCounter = ++this.frameCounter; + msg.options = { + theme: this.themes[this.nextFrameId++ % this.themes.length], + player: mc + }; + msg.id = msg.options.theme + "-" + this.nextId(); + frame.dataset['runid'] = this.runId; + frame.contentWindow.postMessage(msg, "*"); + pxsim.U.removeClass(frame, "grayscale"); + }; + SimulatorDriver.prototype.removeEventListeners = function () { + if (this.listener) { + window.removeEventListener('message', this.listener, false); + this.listener = undefined; + } + }; + SimulatorDriver.prototype.handleMessage = function (msg, source) { + switch (msg.type || '') { + case 'ready': + var frameid = msg.frameid; + var frame = document.getElementById(frameid); + if (frame) { + this.startFrame(frame); + if (this.options.revealElement) + this.options.revealElement(frame); + } + break; + case 'simulator': + this.handleSimulatorCommand(msg); + break; //handled elsewhere + case 'serial': break; //handled elsewhere + case 'pxteditor': + case 'custom': + break; //handled elsewhere + case 'debugger': + this.handleDebuggerMessage(msg); + break; + default: + if (msg.type == 'radiopacket') { + // assign rssi noisy? + msg.rssi = 10; + } + this.postMessage(msg, source); + break; + } + }; + SimulatorDriver.prototype.addEventListeners = function () { + var _this = this; + if (!this.listener) { + this.listener = function (ev) { + if (_this.hwdbg) + return; + _this.handleMessage(ev.data, ev.source); + }; + window.addEventListener('message', this.listener, false); + } + }; + SimulatorDriver.prototype.resume = function (c) { + var msg; + switch (c) { + case SimulatorDebuggerCommand.Resume: + msg = 'resume'; + this.setState(SimulatorState.Running); + break; + case SimulatorDebuggerCommand.StepInto: + msg = 'stepinto'; + this.setState(SimulatorState.Running); + break; + case SimulatorDebuggerCommand.StepOut: + msg = 'stepout'; + this.setState(SimulatorState.Running); + break; + case SimulatorDebuggerCommand.StepOver: + msg = 'stepover'; + this.setState(SimulatorState.Running); + break; + case SimulatorDebuggerCommand.Pause: + msg = 'pause'; + break; + default: + console.debug('unknown command'); + return; + } + this.postMessage({ type: 'debugger', subtype: msg }); + }; + SimulatorDriver.prototype.setBreakpoints = function (breakPoints) { + this.postDebuggerMessage("config", { setBreakpoints: breakPoints }); + }; + SimulatorDriver.prototype.handleSimulatorCommand = function (msg) { + if (this.options.onSimulatorCommand) + this.options.onSimulatorCommand(msg); + }; + SimulatorDriver.prototype.handleDebuggerMessage = function (msg) { + console.log("DBG-MSG", msg.subtype, msg); + switch (msg.subtype) { + case "warning": + if (this.options.onDebuggerWarning) + this.options.onDebuggerWarning(msg); + break; + case "breakpoint": + var brk = msg; + if (this.state == SimulatorState.Running) { + if (brk.exceptionMessage) + this.stop(); + else + this.setState(SimulatorState.Paused); + if (this.options.onDebuggerBreakpoint) + this.options.onDebuggerBreakpoint(brk); + } + else { + console.error("debugger: trying to pause from " + this.state); + } + break; + } + }; + SimulatorDriver.prototype.postDebuggerMessage = function (subtype, data) { + if (data === void 0) { data = {}; } + var msg = JSON.parse(JSON.stringify(data)); + msg.type = "debugger"; + msg.subtype = subtype; + this.postMessage(msg); + }; + SimulatorDriver.prototype.nextId = function () { + return this.nextFrameId++ + (Math.random() + '' + Math.random()).replace(/[^\d]/, ''); + }; + return SimulatorDriver; + }()); + pxsim.SimulatorDriver = SimulatorDriver; +})(pxsim || (pxsim = {})); +/// +var pxsim; +(function (pxsim) { + ; + ; + function mkRange(a, b) { + var res = []; + for (; a < b; a++) + res.push(a); + return res; + } + pxsim.mkRange = mkRange; + function parseQueryString() { + var qs = window.location.search.substring(1); + var getQsVal = function (key) { return decodeURIComponent((qs.split(key + "=")[1] || "").split("&")[0] || ""); }; //.replace(/\+/g, " "); + return getQsVal; + } + pxsim.parseQueryString = parseQueryString; + var EventBus = (function () { + function EventBus(runtime) { + this.runtime = runtime; + this.queues = {}; + } + EventBus.prototype.listen = function (id, evid, handler) { + var k = id + ":" + evid; + var queue = this.queues[k]; + if (!queue) + queue = this.queues[k] = new pxsim.EventQueue(this.runtime); + queue.handler = handler; + }; + EventBus.prototype.queue = function (id, evid, value) { + if (value === void 0) { value = 0; } + var k = id + ":" + evid; + var queue = this.queues[k]; + if (queue) + queue.push(value); + }; + return EventBus; + }()); + pxsim.EventBus = EventBus; + var AnimationQueue = (function () { + function AnimationQueue(runtime) { + var _this = this; + this.runtime = runtime; + this.queue = []; + this.process = function () { + var top = _this.queue[0]; + if (!top) + return; + if (_this.runtime.dead) + return; + runtime = _this.runtime; + var res = top.frame(); + runtime.queueDisplayUpdate(); + runtime.maybeUpdateDisplay(); + if (res === false) { + _this.queue.shift(); + // if there is already something in the queue, start processing + if (_this.queue[0]) { + _this.queue[0].setTimeoutHandle = setTimeout(_this.process, _this.queue[0].interval); + } + // this may push additional stuff + top.whenDone(false); + } + else { + top.setTimeoutHandle = setTimeout(_this.process, top.interval); + } + }; + } + AnimationQueue.prototype.cancelAll = function () { + var q = this.queue; + this.queue = []; + for (var _i = 0, q_1 = q; _i < q_1.length; _i++) { + var a = q_1[_i]; + a.whenDone(true); + if (a.setTimeoutHandle) { + clearTimeout(a.setTimeoutHandle); + } + } + }; + AnimationQueue.prototype.cancelCurrent = function () { + var top = this.queue[0]; + if (top) { + this.queue.shift(); + top.whenDone(true); + if (top.setTimeoutHandle) { + clearTimeout(top.setTimeoutHandle); + } + } + }; + AnimationQueue.prototype.enqueue = function (anim) { + if (!anim.whenDone) + anim.whenDone = function () { }; + this.queue.push(anim); + // we start processing when the queue goes from 0 to 1 + if (this.queue.length == 1) + this.process(); + }; + AnimationQueue.prototype.executeAsync = function (anim) { + var _this = this; + pxsim.U.assert(!anim.whenDone); + return new Promise(function (resolve, reject) { + anim.whenDone = resolve; + _this.enqueue(anim); + }); + }; + return AnimationQueue; + }()); + pxsim.AnimationQueue = AnimationQueue; + var AudioContextManager; + (function (AudioContextManager) { + var _frequency = 0; + var _context; // AudioContext + var _vco; // OscillatorNode; + var _vca; // GainNode; + var _mute = false; //mute audio + function context() { + if (!_context) + _context = freshContext(); + return _context; + } + function freshContext() { + window.AudioContext = window.AudioContext || window.webkitAudioContext; + if (window.AudioContext) { + try { + // this call my crash. + // SyntaxError: audio resources unavailable for AudioContext construction + return new window.AudioContext(); + } + catch (e) { } + } + return undefined; + } + function mute(mute) { + _mute = mute; + stop(); + } + AudioContextManager.mute = mute; + function stop() { + if (_vca) + _vca.gain.value = 0; + _frequency = 0; + } + AudioContextManager.stop = stop; + function frequency() { + return _frequency; + } + AudioContextManager.frequency = frequency; + function tone(frequency, gain) { + if (_mute) + return; + if (frequency <= 0) + return; + _frequency = frequency; + var ctx = context(); + if (!ctx) + return; + if (_vco) { + _vco.stop(); + _vco.disconnect(); + _vco = undefined; + } + gain = Math.max(0, Math.min(1, gain)); + try { + _vco = ctx.createOscillator(); + _vca = ctx.createGain(); + _vco.type = 'triangle'; + _vco.connect(_vca); + _vca.connect(ctx.destination); + _vca.gain.value = gain; + _vco.start(0); + } + catch (e) { + _vco = undefined; + _vca = undefined; + return; + } + _vco.frequency.value = frequency; + _vca.gain.value = gain; + } + AudioContextManager.tone = tone; + })(AudioContextManager = pxsim.AudioContextManager || (pxsim.AudioContextManager = {})); + pxsim.pointerEvents = typeof window != "undefined" && !!window.PointerEvent ? { + up: "pointerup", + down: "pointerdown", + move: "pointermove", + leave: "pointerleave" + } : { + up: "mouseup", + down: "mousedown", + move: "mousemove", + leave: "mouseleave" + }; +})(pxsim || (pxsim = {})); +var pxsim; +(function (pxsim) { + var visuals; + (function (visuals) { + function translateEl(el, xy) { + //TODO append translation instead of replacing the full transform + pxsim.svg.hydrate(el, { transform: "translate(" + xy[0] + " " + xy[1] + ")" }); + } + visuals.translateEl = translateEl; + function composeSVG(opts) { + var _a = [opts.el1, opts.el2], a = _a[0], b = _a[1]; + pxsim.U.assert(a.x == 0 && a.y == 0 && b.x == 0 && b.y == 0, "el1 and el2 x,y offsets not supported"); + var setXY = function (e, x, y) { return pxsim.svg.hydrate(e, { x: x, y: y }); }; + var setWH = function (e, w, h) { + if (w) + pxsim.svg.hydrate(e, { width: w }); + if (h) + pxsim.svg.hydrate(e, { height: h }); + }; + var setWHpx = function (e, w, h) { return pxsim.svg.hydrate(e, { width: w + "px", height: h + "px" }); }; + var scaleUnit = opts.scaleUnit2; + var aScalar = opts.scaleUnit2 / opts.scaleUnit1; + var bScalar = 1.0; + var aw = a.w * aScalar; + var ah = a.h * aScalar; + setWHpx(a.el, aw, ah); + var bw = b.w * bScalar; + var bh = b.h * bScalar; + setWHpx(b.el, bw, bh); + var _b = opts.margin, mt = _b[0], mr = _b[1], mb = _b[2], ml = _b[3]; + var mm = opts.middleMargin; + var innerW = Math.max(aw, bw); + var ax = mr + (innerW - aw) / 2.0; + var ay = mt; + setXY(a.el, ax, ay); + var bx = mr + (innerW - bw) / 2.0; + var by = ay + ah + mm; + setXY(b.el, bx, by); + var edges = [ay, ay + ah, by, by + bh]; + var w = mr + innerW + ml; + var h = mt + ah + mm + bh + mb; + var host = pxsim.svg.elt("svg", { + "version": "1.0", + "viewBox": "0 0 " + w + " " + h, + "class": "sim-bb", + }); + setWH(host, opts.maxWidth, opts.maxHeight); + setXY(host, 0, 0); + var under = pxsim.svg.child(host, "g"); + host.appendChild(a.el); + host.appendChild(b.el); + var over = pxsim.svg.child(host, "g"); + var toHostCoord1 = function (xy) { + var x = xy[0], y = xy[1]; + return [x * aScalar + ax, y * aScalar + ay]; + }; + var toHostCoord2 = function (xy) { + var x = xy[0], y = xy[1]; + return [x * bScalar + bx, y * bScalar + by]; + }; + return { + under: under, + over: over, + host: host, + edges: edges, + scaleUnit: scaleUnit, + toHostCoord1: toHostCoord1, + toHostCoord2: toHostCoord2, + }; + } + visuals.composeSVG = composeSVG; + function mkScaleFn(originUnit, targetUnit) { + return function (n) { return n * (targetUnit / originUnit); }; + } + visuals.mkScaleFn = mkScaleFn; + function mkImageSVG(opts) { + var scaleFn = mkScaleFn(opts.imageUnitDist, opts.targetUnitDist); + var w = scaleFn(opts.width); + var h = scaleFn(opts.height); + var img = pxsim.svg.elt("image", { + width: w, + height: h + }); + var href = img.setAttributeNS('http://www.w3.org/1999/xlink', 'href', "" + opts.image); + return { el: img, w: w, h: h, x: 0, y: 0 }; + } + visuals.mkImageSVG = mkImageSVG; + function findDistSqrd(a, b) { + var x = a[0] - b[0]; + var y = a[1] - b[1]; + return x * x + y * y; + } + visuals.findDistSqrd = findDistSqrd; + function findClosestCoordIdx(a, bs) { + var dists = bs.map(function (b) { return findDistSqrd(a, b); }); + var minIdx = dists.reduce(function (prevIdx, currDist, currIdx, arr) { + return currDist < arr[prevIdx] ? currIdx : prevIdx; + }, 0); + return minIdx; + } + visuals.findClosestCoordIdx = findClosestCoordIdx; + function mkTxt(cx, cy, size, rot, txt, txtXOffFactor, txtYOffFactor) { + var el = pxsim.svg.elt("text"); + //HACK: these constants (txtXOffFactor, txtYOffFactor) tweak the way this algorithm knows how to center the text + txtXOffFactor = txtXOffFactor || -0.33333; + txtYOffFactor = txtYOffFactor || 0.3; + var xOff = txtXOffFactor * size * txt.length; + var yOff = txtYOffFactor * size; + pxsim.svg.hydrate(el, { + style: "font-size:" + size + "px;", + transform: "translate(" + cx + " " + cy + ") rotate(" + rot + ") translate(" + xOff + " " + yOff + ")" + }); + pxsim.svg.addClass(el, "noselect"); + el.textContent = txt; + return el; + } + visuals.mkTxt = mkTxt; + visuals.GPIO_WIRE_COLORS = ["pink", "orange", "yellow", "green", "purple"]; + visuals.WIRE_COLOR_MAP = { + black: "#514f4d", + white: "#fcfdfc", + gray: "#acabab", + purple: "#a772a1", + blue: "#01a6e8", + green: "#3cce73", + yellow: "#ece600", + orange: "#fdb262", + red: "#f44f43", + brown: "#c89764", + pink: "#ff80fa" + }; + function mapWireColor(clr) { + return visuals.WIRE_COLOR_MAP[clr] || clr; + } + visuals.mapWireColor = mapWireColor; + ; + visuals.PIN_DIST = 15; + //expects rgb from 0,255, gives h in [0,360], s in [0, 100], l in [0, 100] + function rgbToHsl(rgb) { + var r = rgb[0], g = rgb[1], b = rgb[2]; + var _a = [r / 255, g / 255, b / 255], r$ = _a[0], g$ = _a[1], b$ = _a[2]; + var cMin = Math.min(r$, g$, b$); + var cMax = Math.max(r$, g$, b$); + var cDelta = cMax - cMin; + var h, s, l; + var maxAndMin = cMax + cMin; + //lum + l = (maxAndMin / 2) * 100; + if (cDelta === 0) + s = h = 0; + else { + //hue + if (cMax === r$) + h = 60 * (((g$ - b$) / cDelta) % 6); + else if (cMax === g$) + h = 60 * (((b$ - r$) / cDelta) + 2); + else if (cMax === b$) + h = 60 * (((r$ - g$) / cDelta) + 4); + //sat + if (l > 50) + s = 100 * (cDelta / (2 - maxAndMin)); + else + s = 100 * (cDelta / maxAndMin); + } + return [Math.floor(h), Math.floor(s), Math.floor(l)]; + } + visuals.rgbToHsl = rgbToHsl; + })(visuals = pxsim.visuals || (pxsim.visuals = {})); +})(pxsim || (pxsim = {})); +var pxsim; +(function (pxsim) { + var svg; + (function (svg_1) { + function parseString(xml) { + return new DOMParser().parseFromString(xml, "image/svg+xml").querySelector("svg"); + } + svg_1.parseString = parseString; + function toDataUri(xml) { + return 'data:image/svg+xml,' + encodeURI(xml); + } + svg_1.toDataUri = toDataUri; + var pt; + function cursorPoint(pt, svg, evt) { + pt.x = evt.clientX; + pt.y = evt.clientY; + return pt.matrixTransform(svg.getScreenCTM().inverse()); + } + svg_1.cursorPoint = cursorPoint; + function rotateElement(el, originX, originY, degrees) { + el.setAttribute('transform', "translate(" + originX + "," + originY + ") rotate(" + (degrees + 90) + ") translate(" + -originX + "," + -originY + ")"); + } + svg_1.rotateElement = rotateElement; + function addClass(el, cls) { + if (el.classList) + el.classList.add(cls); + else if (el.className.baseVal.indexOf(cls) < 0) + el.className.baseVal += ' ' + cls; + } + svg_1.addClass = addClass; + function removeClass(el, cls) { + if (el.classList) + el.classList.remove(cls); + else + el.className.baseVal = el.className.baseVal.replace(cls, '').replace(/\s{2,}/, ' '); + } + svg_1.removeClass = removeClass; + function hydrate(el, props) { + for (var k in props) { + if (k == "title") { + svg.title(el, props[k]); + } + else + el.setAttributeNS(null, k, props[k]); + } + } + svg_1.hydrate = hydrate; + function elt(name, props) { + var el = document.createElementNS("http://www.w3.org/2000/svg", name); + if (props) + svg.hydrate(el, props); + return el; + } + svg_1.elt = elt; + function child(parent, name, props) { + var el = svg.elt(name, props); + parent.appendChild(el); + return el; + } + svg_1.child = child; + function mkPath(cls, data, title) { + var p = { class: cls, d: data }; + if (title) + p["title"] = title; + var el = svg.elt("path"); + svg.hydrate(el, p); + return el; + } + svg_1.mkPath = mkPath; + function path(parent, cls, data, title) { + var el = mkPath(cls, data, title); + parent.appendChild(el); + return el; + } + svg_1.path = path; + function fill(el, c) { + el.style.fill = c; + } + svg_1.fill = fill; + function filter(el, c) { + el.style.filter = c; + } + svg_1.filter = filter; + function fills(els, c) { + els.forEach(function (el) { return el.style.fill = c; }); + } + svg_1.fills = fills; + function buttonEvents(el, move, start, stop) { + var captured = false; + el.addEventListener('mousedown', function (ev) { + captured = true; + if (start) + start(ev); + return true; + }); + el.addEventListener('mousemove', function (ev) { + if (captured) { + move(ev); + ev.preventDefault(); + return false; + } + return true; + }); + el.addEventListener('mouseup', function (ev) { + captured = false; + if (stop) + stop(ev); + }); + el.addEventListener('mouseleave', function (ev) { + captured = false; + if (stop) + stop(ev); + }); + } + svg_1.buttonEvents = buttonEvents; + function mkLinearGradient(id) { + var gradient = svg.elt("linearGradient"); + svg.hydrate(gradient, { id: id, x1: "0%", y1: "0%", x2: "0%", y2: "100%" }); + var stop1 = svg.child(gradient, "stop", { offset: "0%" }); + var stop2 = svg.child(gradient, "stop", { offset: "100%" }); + var stop3 = svg.child(gradient, "stop", { offset: "100%" }); + var stop4 = svg.child(gradient, "stop", { offset: "100%" }); + return gradient; + } + svg_1.mkLinearGradient = mkLinearGradient; + function linearGradient(defs, id) { + var lg = mkLinearGradient(id); + defs.appendChild(lg); + return lg; + } + svg_1.linearGradient = linearGradient; + function setGradientColors(lg, start, end) { + if (!lg) + return; + lg.childNodes[0].style.stopColor = start; + lg.childNodes[1].style.stopColor = start; + lg.childNodes[2].style.stopColor = end; + lg.childNodes[3].style.stopColor = end; + } + svg_1.setGradientColors = setGradientColors; + function setGradientValue(lg, percent) { + if (lg.childNodes[1].getAttribute("offset") != percent) { + lg.childNodes[1].setAttribute("offset", percent); + lg.childNodes[2].setAttribute("offset", percent); + } + } + svg_1.setGradientValue = setGradientValue; + function animate(el, cls) { + svg.addClass(el, cls); + var p = el.parentElement; + if (p) { + p.removeChild(el); + p.appendChild(el); + } + } + svg_1.animate = animate; + function mkTitle(txt) { + var t = svg.elt("title"); + t.textContent = txt; + return t; + } + svg_1.mkTitle = mkTitle; + function title(el, txt) { + var t = mkTitle(txt); + el.appendChild(t); + return t; + } + svg_1.title = title; + function toHtmlColor(c) { + var b = c & 0xFF; + var g = (c >> 8) & 0xFF; + var r = (c >> 16) & 0xFF; + var a = (c >> 24) & 0xFF / 255; + return "rgba(" + r + ", " + g + ", " + b + ", " + a + ")"; + } + svg_1.toHtmlColor = toHtmlColor; + })(svg = pxsim.svg || (pxsim.svg = {})); +})(pxsim || (pxsim = {})); +var pxsim; +(function (pxsim) { + var Button = (function () { + function Button(id) { + this.id = id; + } + return Button; + }()); + pxsim.Button = Button; + var ButtonPairState = (function () { + function ButtonPairState(props) { + this.props = props; + this.usesButtonAB = false; + this.aBtn = new Button(this.props.ID_BUTTON_A); + this.bBtn = new Button(this.props.ID_BUTTON_B); + this.abBtn = new Button(this.props.ID_BUTTON_AB); + this.abBtn.virtual = true; + } + return ButtonPairState; + }()); + pxsim.ButtonPairState = ButtonPairState; +})(pxsim || (pxsim = {})); +var pxsim; +(function (pxsim) { + var CompassState = (function () { + function CompassState() { + this.usesHeading = false; + this.heading = 90; + } + return CompassState; + }()); + pxsim.CompassState = CompassState; +})(pxsim || (pxsim = {})); +var pxsim; +(function (pxsim) { + (function (PinFlags) { + PinFlags[PinFlags["Unused"] = 0] = "Unused"; + PinFlags[PinFlags["Digital"] = 1] = "Digital"; + PinFlags[PinFlags["Analog"] = 2] = "Analog"; + PinFlags[PinFlags["Input"] = 4] = "Input"; + PinFlags[PinFlags["Output"] = 8] = "Output"; + PinFlags[PinFlags["Touch"] = 16] = "Touch"; + })(pxsim.PinFlags || (pxsim.PinFlags = {})); + var PinFlags = pxsim.PinFlags; + var Pin = (function () { + function Pin(id) { + this.id = id; + this.touched = false; + this.value = 0; + this.period = 0; + this.servoAngle = 0; + this.mode = PinFlags.Unused; + this.pitch = false; + this.pull = 0; // PullDown + } + Pin.prototype.digitalReadPin = function () { + this.mode = PinFlags.Digital | PinFlags.Input; + return this.value > 100 ? 1 : 0; + }; + Pin.prototype.digitalWritePin = function (value) { + this.mode = PinFlags.Digital | PinFlags.Output; + this.value = value > 0 ? 200 : 0; + pxsim.runtime.queueDisplayUpdate(); + }; + Pin.prototype.setPull = function (pull) { + this.pull = pull; + }; + Pin.prototype.analogReadPin = function () { + this.mode = PinFlags.Analog | PinFlags.Input; + return this.value || 0; + }; + Pin.prototype.analogWritePin = function (value) { + this.mode = PinFlags.Analog | PinFlags.Output; + this.value = Math.max(0, Math.min(1023, value)); + pxsim.runtime.queueDisplayUpdate(); + }; + Pin.prototype.analogSetPeriod = function (micros) { + this.mode = PinFlags.Analog | PinFlags.Output; + this.period = micros; + pxsim.runtime.queueDisplayUpdate(); + }; + Pin.prototype.servoWritePin = function (value) { + this.analogSetPeriod(20000); + this.servoAngle = Math.max(0, Math.min(180, value)); + pxsim.runtime.queueDisplayUpdate(); + }; + Pin.prototype.servoSetPulse = function (pinId, micros) { + // TODO + }; + Pin.prototype.isTouched = function () { + this.mode = PinFlags.Touch | PinFlags.Analog | PinFlags.Input; + return this.touched; + }; + return Pin; + }()); + pxsim.Pin = Pin; + var EdgeConnectorState = (function () { + function EdgeConnectorState(props) { + this.props = props; + this.pins = props.pins.map(function (id) { return id != undefined ? new Pin(id) : null; }); + } + EdgeConnectorState.prototype.getPin = function (id) { + return this.pins.filter(function (p) { return p && p.id == id; })[0] || null; + }; + return EdgeConnectorState; + }()); + pxsim.EdgeConnectorState = EdgeConnectorState; +})(pxsim || (pxsim = {})); +var pxsim; +(function (pxsim) { + var FileSystemState = (function () { + function FileSystemState() { + this.files = {}; + } + FileSystemState.prototype.append = function (file, content) { + this.files[file] = (this.files[file] || "") + content; + }; + FileSystemState.prototype.remove = function (file) { + delete this.files[file]; + }; + return FileSystemState; + }()); + pxsim.FileSystemState = FileSystemState; +})(pxsim || (pxsim = {})); +var pxsim; +(function (pxsim) { + var LightSensorState = (function () { + function LightSensorState() { + this.usesLightLevel = false; + this.lightLevel = 128; + } + return LightSensorState; + }()); + pxsim.LightSensorState = LightSensorState; +})(pxsim || (pxsim = {})); +var pxsim; +(function (pxsim) { + (function (NeoPixelMode) { + NeoPixelMode[NeoPixelMode["RGB"] = 0] = "RGB"; + NeoPixelMode[NeoPixelMode["RGBW"] = 1] = "RGBW"; + })(pxsim.NeoPixelMode || (pxsim.NeoPixelMode = {})); + var NeoPixelMode = pxsim.NeoPixelMode; + ; + var NeoPixelState = (function () { + function NeoPixelState() { + this.buffers = {}; + this.colors = {}; + this.dirty = {}; + } + NeoPixelState.prototype.updateBuffer = function (buffer, pin) { + this.buffers[pin] = buffer; + this.dirty[pin] = true; + }; + NeoPixelState.prototype.getColors = function (pin, mode) { + var outColors = this.colors[pin] || (this.colors[pin] = []); + if (this.dirty[pin]) { + var buf = this.buffers[pin] || (this.buffers[pin] = []); + this.readNeoPixelBuffer(buf, outColors, mode); + this.dirty[pin] = false; + } + return outColors; + }; + NeoPixelState.prototype.readNeoPixelBuffer = function (inBuffer, outColors, mode) { + var buf = inBuffer; + var stride = mode === NeoPixelMode.RGBW ? 4 : 3; + var pixelCount = Math.floor(buf.length / stride); + for (var i = 0; i < pixelCount; i++) { + // NOTE: for whatever reason, NeoPixels pack GRB not RGB + var r = buf[i * stride + 1]; + var g = buf[i * stride + 0]; + var b = buf[i * stride + 2]; + var w = 0; + if (stride === 4) + w = buf[i * stride + 3]; + outColors[i] = [r, g, b, w]; + } + }; + return NeoPixelState; + }()); + pxsim.NeoPixelState = NeoPixelState; +})(pxsim || (pxsim = {})); +var pxsim; +(function (pxsim) { + var visuals; + (function (visuals) { + visuals.mkBoardView = function (opts) { + var boardVis = opts.visual; + return new visuals.GenericBoardSvg({ + visualDef: boardVis, + wireframe: opts.wireframe, + }); + }; + var BoardHost = (function () { + function BoardHost(view, opts) { + var _this = this; + this.parts = []; + this.boardView = view; + this.state = opts.state; + var activeComponents = opts.partsList; + this.useCrocClips = opts.boardDef.useCrocClips; + var useBreadboard = 0 < activeComponents.length || opts.forceBreadboardLayout; + if (useBreadboard) { + this.breadboard = new visuals.Breadboard({ + wireframe: opts.wireframe, + }); + var bMarg = opts.boardDef.marginWhenBreadboarding || [0, 0, 40, 0]; + var composition = visuals.composeSVG({ + el1: this.boardView.getView(), + scaleUnit1: this.boardView.getPinDist(), + el2: this.breadboard.getSVGAndSize(), + scaleUnit2: this.breadboard.getPinDist(), + margin: [bMarg[0], bMarg[1], 20, bMarg[3]], + middleMargin: bMarg[2], + maxWidth: opts.maxWidth, + maxHeight: opts.maxHeight, + }); + var under = composition.under; + var over = composition.over; + this.view = composition.host; + var edges = composition.edges; + this.fromMBCoord = composition.toHostCoord1; + this.fromBBCoord = composition.toHostCoord2; + var pinDist = composition.scaleUnit; + this.partGroup = over; + this.partOverGroup = pxsim.svg.child(this.view, "g"); + this.style = pxsim.svg.child(this.view, "style", {}); + this.defs = pxsim.svg.child(this.view, "defs", {}); + this.wireFactory = new visuals.WireFactory(under, over, edges, this.style, this.getLocCoord.bind(this)); + var allocRes = pxsim.allocateDefinitions({ + boardDef: opts.boardDef, + partDefs: opts.partDefs, + fnArgs: opts.fnArgs, + getBBCoord: this.breadboard.getCoord.bind(this.breadboard), + partsList: activeComponents, + }); + this.addAll(allocRes); + if (!allocRes.requiresBreadboard && !opts.forceBreadboardRender) + this.breadboard.hide(); + } + else { + var el = this.boardView.getView().el; + this.view = el; + this.partGroup = pxsim.svg.child(this.view, "g"); + this.partOverGroup = pxsim.svg.child(this.view, "g"); + if (opts.maxWidth) + pxsim.svg.hydrate(this.view, { width: opts.maxWidth }); + if (opts.maxHeight) + pxsim.svg.hydrate(this.view, { height: opts.maxHeight }); + } + this.state.updateSubscribers.push(function () { return _this.updateState(); }); + } + BoardHost.prototype.highlightBoardPin = function (pinNm) { + this.boardView.highlightPin(pinNm); + }; + BoardHost.prototype.highlightBreadboardPin = function (rowCol) { + this.breadboard.highlightLoc(rowCol); + }; + BoardHost.prototype.highlightWire = function (wire) { + //TODO: move to wiring.ts + //underboard wires + wire.wires.forEach(function (e) { + pxsim.svg.addClass(e, "highlight"); + e.style["visibility"] = "visible"; + }); + //un greyed out + pxsim.svg.addClass(wire.endG, "highlight"); + }; + BoardHost.prototype.getView = function () { + return this.view; + }; + BoardHost.prototype.updateState = function () { + this.parts.forEach(function (c) { return c.updateState(); }); + }; + BoardHost.prototype.getBBCoord = function (rowCol) { + var bbCoord = this.breadboard.getCoord(rowCol); + return this.fromBBCoord(bbCoord); + }; + BoardHost.prototype.getPinCoord = function (pin) { + var boardCoord = this.boardView.getCoord(pin); + pxsim.U.assert(!!boardCoord, "Unable to find coord for pin: " + pin); + return this.fromMBCoord(boardCoord); + }; + BoardHost.prototype.getLocCoord = function (loc) { + var coord; + if (loc.type === "breadboard") { + var rowCol = loc; + coord = this.getBBCoord(rowCol); + } + else { + var pinNm = loc.pin; + coord = this.getPinCoord(pinNm); + } + if (!coord) { + console.error("Unknown location: " + name); + return [0, 0]; + } + return coord; + }; + BoardHost.prototype.addPart = function (partInst) { + var _this = this; + var part = null; + var colOffset = 0; + if (partInst.simulationBehavior) { + //TODO: seperate simulation behavior from builtin visual + var builtinBehavior = partInst.simulationBehavior; + var cnstr = this.state.builtinVisuals[builtinBehavior]; + var stateFn = this.state.builtinParts[builtinBehavior]; + part = cnstr(); + part.init(this.state.bus, stateFn, this.view, partInst.params); + } + else { + var vis = partInst.visual; + part = new visuals.GenericPart(vis); + } + this.parts.push(part); + this.partGroup.appendChild(part.element); + if (part.overElement) + this.partOverGroup.appendChild(part.overElement); + if (part.defs) + part.defs.forEach(function (d) { return _this.defs.appendChild(d); }); + this.style.textContent += part.style || ""; + var colIdx = partInst.startColumnIdx; + var rowIdx = partInst.startRowIdx; + var row = visuals.getRowName(rowIdx); + var col = visuals.getColumnName(colIdx); + var xOffset = partInst.bbFit.xOffset / partInst.visual.pinDistance; + var yOffset = partInst.bbFit.yOffset / partInst.visual.pinDistance; + var rowCol = { + type: "breadboard", + row: row, + col: col, + xOffset: xOffset, + yOffset: yOffset + }; + var coord = this.getBBCoord(rowCol); + part.moveToCoord(coord); + var getCmpClass = function (type) { return ("sim-" + type + "-cmp"); }; + var cls = getCmpClass(partInst.name); + pxsim.svg.addClass(part.element, cls); + pxsim.svg.addClass(part.element, "sim-cmp"); + part.updateTheme(); + part.updateState(); + return part; + }; + BoardHost.prototype.addWire = function (inst) { + return this.wireFactory.addWire(inst.start, inst.end, inst.color, this.useCrocClips); + }; + BoardHost.prototype.addAll = function (allocRes) { + var _this = this; + allocRes.partsAndWires.forEach(function (pAndWs) { + var part = pAndWs.part; + if (part) + _this.addPart(part); + var wires = pAndWs.wires; + if (wires) + wires.forEach(function (w) { return _this.addWire(w); }); + }); + }; + return BoardHost; + }()); + visuals.BoardHost = BoardHost; + })(visuals = pxsim.visuals || (pxsim.visuals = {})); +})(pxsim || (pxsim = {})); +var pxsim; +(function (pxsim) { + var visuals; + (function (visuals) { + // The distance between the center of two pins. This is the constant on which everything else is based. + var PIN_DIST = 15; + // CSS styling for the breadboard + var BLUE = "#1AA5D7"; + var RED = "#DD4BA0"; + var BREADBOARD_CSS = "\n /* bread board */\n .sim-bb-background {\n fill:#E0E0E0;\n }\n .sim-bb-pin {\n fill:#999;\n }\n .sim-bb-pin-hover {\n visibility: hidden;\n pointer-events: all;\n stroke-width: " + PIN_DIST / 2 + "px;\n stroke: transparent;\n fill: #777;\n }\n .sim-bb-pin-hover:hover {\n visibility: visible;\n fill:#444;\n }\n .sim-bb-group-wire {\n stroke: #999;\n stroke-width: " + PIN_DIST / 4 + "px;\n visibility: hidden;\n }\n .sim-bb-pin-group {\n pointer-events: all;\n }\n .sim-bb-label,\n .sim-bb-label-hover {\n font-family:\"Lucida Console\", Monaco, monospace;\n fill:#555;\n pointer-events: all;\n stroke-width: 0;\n cursor: default;\n }\n .sim-bb-label-hover {\n visibility: hidden;\n fill:#000;\n font-weight: bold;\n }\n .sim-bb-bar {\n stroke-width: 0;\n }\n .sim-bb-blue {\n fill:" + BLUE + ";\n stroke:" + BLUE + "\n }\n .sim-bb-red {\n fill:" + RED + ";\n stroke:" + RED + ";\n }\n .sim-bb-pin-group:hover .sim-bb-pin-hover,\n .sim-bb-pin-group:hover .sim-bb-group-wire,\n .sim-bb-pin-group:hover .sim-bb-label-hover {\n visibility: visible;\n }\n .sim-bb-pin-group:hover .sim-bb-label {\n visibility: hidden;\n }\n /* outline mode */\n .sim-bb-outline .sim-bb-background {\n stroke-width: " + PIN_DIST / 7 + "px;\n fill: #FFF;\n stroke: #000;\n }\n .sim-bb-outline .sim-bb-mid-channel {\n fill: #FFF;\n stroke: #888;\n stroke-width: 2px;\n }\n /* grayed out */\n .grayed .sim-bb-background {\n stroke-width: " + PIN_DIST / 5 + "px;\n }\n .grayed .sim-bb-red,\n .grayed .sim-bb-blue {\n fill: #BBB;\n }\n .grayed .sim-bb-bar {\n fill: #FFF;\n }\n .grayed .sim-bb-pin {\n fill: #000;\n stroke: #FFF;\n stroke-width: 3px;\n }\n .grayed .sim-bb-label {\n fill: none;\n }\n .grayed .sim-bb-background {\n stroke-width: " + PIN_DIST / 2 + "px;\n stroke: #555;\n }\n .grayed .sim-bb-group-wire {\n stroke: #DDD;\n }\n .grayed .sim-bb-channel {\n visibility: hidden;\n }\n /* highlighted */\n .sim-bb-label.highlight {\n visibility: hidden;\n }\n .sim-bb-label-hover.highlight {\n visibility: visible;\n }\n .sim-bb-blue.highlight {\n fill:" + BLUE + ";\n }\n .sim-bb-red.highlight {\n fill:" + RED + ";\n }\n .sim-bb-bar.highlight {\n stroke-width: 0px;\n }\n "; + // Pin rows and coluns + visuals.BREADBOARD_MID_ROWS = 10; + visuals.BREADBOARD_MID_COLS = 30; + var MID_ROW_GAPS = [4, 4]; + var MID_ROW_AND_GAPS = visuals.BREADBOARD_MID_ROWS + MID_ROW_GAPS.length; + var BAR_ROWS = 2; + var BAR_COLS = 25; + var POWER_ROWS = BAR_ROWS * 2; + var POWER_COLS = BAR_COLS * 2; + var BAR_COL_GAPS = [4, 9, 14, 19]; + var BAR_COL_AND_GAPS = BAR_COLS + BAR_COL_GAPS.length; + // Essential dimensions + var WIDTH = PIN_DIST * (visuals.BREADBOARD_MID_COLS + 3); + var HEIGHT = PIN_DIST * (MID_ROW_AND_GAPS + POWER_ROWS + 5.5); + var MID_RATIO = 2.0 / 3.0; + var BAR_RATIO = (1.0 - MID_RATIO) * 0.5; + var MID_HEIGHT = HEIGHT * MID_RATIO; + var BAR_HEIGHT = HEIGHT * BAR_RATIO; + // Pin grids + var MID_GRID_WIDTH = (visuals.BREADBOARD_MID_COLS - 1) * PIN_DIST; + var MID_GRID_HEIGHT = (MID_ROW_AND_GAPS - 1) * PIN_DIST; + var MID_GRID_X = (WIDTH - MID_GRID_WIDTH) / 2.0; + var MID_GRID_Y = BAR_HEIGHT + (MID_HEIGHT - MID_GRID_HEIGHT) / 2.0; + var BAR_GRID_HEIGHT = (BAR_ROWS - 1) * PIN_DIST; + var BAR_GRID_WIDTH = (BAR_COL_AND_GAPS - 1) * PIN_DIST; + var BAR_TOP_GRID_X = (WIDTH - BAR_GRID_WIDTH) / 2.0; + var BAR_TOP_GRID_Y = (BAR_HEIGHT - BAR_GRID_HEIGHT) / 2.0; + var BAR_BOT_GRID_X = BAR_TOP_GRID_X; + var BAR_BOT_GRID_Y = BAR_TOP_GRID_Y + BAR_HEIGHT + MID_HEIGHT; + // Individual pins + var PIN_HOVER_SCALAR = 1.3; + var PIN_WIDTH = PIN_DIST / 2.5; + var PIN_ROUNDING = PIN_DIST / 7.5; + // Labels + var PIN_LBL_SIZE = PIN_DIST * 0.7; + var PIN_LBL_HOVER_SCALAR = 1.3; + var PLUS_LBL_SIZE = PIN_DIST * 1.7; + var MINUS_LBL_SIZE = PIN_DIST * 2; + var POWER_LBL_OFFSET = PIN_DIST * 0.8; + var MINUS_LBL_EXTRA_OFFSET = PIN_DIST * 0.07; + var LBL_ROTATION = -90; + // Channels + var CHANNEL_HEIGHT = PIN_DIST * 1.0; + var SMALL_CHANNEL_HEIGHT = PIN_DIST * 0.05; + // Background + var BACKGROUND_ROUNDING = PIN_DIST * 0.3; + // Row and column helpers + var alphabet = "abcdefghij".split("").reverse(); + function getColumnName(colIdx) { return "" + (colIdx + 1); } + visuals.getColumnName = getColumnName; + ; + function getRowName(rowIdx) { return alphabet[rowIdx]; } + visuals.getRowName = getRowName; + ; + ; + ; + function mkGrid(opts) { + var xOff = opts.xOffset || 0; + var yOff = opts.yOffset || 0; + var allPins = []; + var grid = pxsim.svg.elt("g"); + var colIdxOffset = opts.colStartIdx || 0; + var rowIdxOffset = opts.rowStartIdx || 0; + var copyArr = function (arr) { return arr ? arr.slice(0, arr.length) : []; }; + var removeAll = function (arr, e) { + var res = 0; + var idx; + while (0 <= (idx = arr.indexOf(e))) { + arr.splice(idx, 1); + res += 1; + } + return res; + }; + var rowGaps = 0; + var rowIdxsWithGap = copyArr(opts.rowIdxsWithGap); + var _loop_3 = function(i) { + var colGaps = 0; + var colIdxsWithGap = copyArr(opts.colIdxsWithGap); + var cy = yOff + i * opts.pinDist + rowGaps * opts.pinDist; + var rowIdx = i + rowIdxOffset; + var _loop_4 = function(j) { + var cx = xOff + j * opts.pinDist + colGaps * opts.pinDist; + var colIdx = j + colIdxOffset; + var addEl = function (pin) { + var pinX = cx - pin.w * 0.5; + var pinY = cy - pin.h * 0.5; + pxsim.svg.hydrate(pin.el, { x: pinX, y: pinY }); + grid.appendChild(pin.el); + return pin.el; + }; + var el = addEl(opts.mkPin()); + var hoverEl = addEl(opts.mkHoverPin()); + var row = opts.getRowName(rowIdx); + var col = opts.getColName(colIdx); + var group = opts.getGroupName ? opts.getGroupName(rowIdx, colIdx) : null; + var gridPin = { el: el, hoverEl: hoverEl, cx: cx, cy: cy, row: row, col: col, group: group }; + allPins.push(gridPin); + //column gaps + colGaps += removeAll(colIdxsWithGap, colIdx); + }; + for (var j = 0; j < opts.colCount; j++) { + _loop_4(j); + } + //row gaps + rowGaps += removeAll(rowIdxsWithGap, rowIdx); + }; + for (var i = 0; i < opts.rowCount; i++) { + _loop_3(i); + } + return { g: grid, allPins: allPins }; + } + visuals.mkGrid = mkGrid; + function mkBBPin() { + var el = pxsim.svg.elt("rect"); + var width = PIN_WIDTH; + pxsim.svg.hydrate(el, { + class: "sim-bb-pin", + rx: PIN_ROUNDING, + ry: PIN_ROUNDING, + width: width, + height: width + }); + return { el: el, w: width, h: width, x: 0, y: 0 }; + } + function mkBBHoverPin() { + var el = pxsim.svg.elt("rect"); + var width = PIN_WIDTH * PIN_HOVER_SCALAR; + pxsim.svg.hydrate(el, { + class: "sim-bb-pin-hover", + rx: PIN_ROUNDING, + ry: PIN_ROUNDING, + width: width, + height: width, + }); + return { el: el, w: width, h: width, x: 0, y: 0 }; + } + ; + function mkBBLabel(cx, cy, size, rotation, txt, group, extraClasses) { + //lbl + var el = visuals.mkTxt(cx, cy, size, rotation, txt); + pxsim.svg.addClass(el, "sim-bb-label"); + if (extraClasses) + extraClasses.forEach(function (c) { return pxsim.svg.addClass(el, c); }); + //hover lbl + var hoverEl = visuals.mkTxt(cx, cy, size * PIN_LBL_HOVER_SCALAR, rotation, txt); + pxsim.svg.addClass(hoverEl, "sim-bb-label-hover"); + if (extraClasses) + extraClasses.forEach(function (c) { return pxsim.svg.addClass(hoverEl, c); }); + var lbl = { el: el, hoverEl: hoverEl, txt: txt, group: group }; + return lbl; + } + ; + var Breadboard = (function () { + function Breadboard(opts) { + //truth + this.allPins = []; + this.allLabels = []; + this.allPowerBars = []; + //quick lookup caches + this.rowColToPin = {}; + this.rowColToLbls = {}; + this.buildDom(); + if (opts.wireframe) + pxsim.svg.addClass(this.bb, "sim-bb-outline"); + } + Breadboard.prototype.hide = function () { + this.bb.style.display = 'none'; + }; + Breadboard.prototype.updateLocation = function (x, y) { + pxsim.svg.hydrate(this.bb, { + x: x + "px", + y: y + "px", + }); + }; + Breadboard.prototype.getPin = function (row, col) { + var colToPin = this.rowColToPin[row]; + if (!colToPin) + return null; + var pin = colToPin[col]; + if (!pin) + return null; + return pin; + }; + Breadboard.prototype.getCoord = function (rowCol) { + var row = rowCol.row, col = rowCol.col, xOffset = rowCol.xOffset, yOffset = rowCol.yOffset; + var pin = this.getPin(row, col); + if (!pin) + return null; + var xOff = (xOffset || 0) * PIN_DIST; + var yOff = (yOffset || 0) * PIN_DIST; + return [pin.cx + xOff, pin.cy + yOff]; + }; + Breadboard.prototype.getPinDist = function () { + return PIN_DIST; + }; + Breadboard.prototype.buildDom = function () { + var _this = this; + this.bb = pxsim.svg.elt("svg", { + "version": "1.0", + "viewBox": "0 0 " + WIDTH + " " + HEIGHT, + "class": "sim-bb", + "width": WIDTH + "px", + "height": HEIGHT + "px", + }); + this.styleEl = pxsim.svg.child(this.bb, "style", {}); + this.styleEl.textContent += BREADBOARD_CSS; + this.defs = pxsim.svg.child(this.bb, "defs", {}); + //background + pxsim.svg.child(this.bb, "rect", { class: "sim-bb-background", width: WIDTH, height: HEIGHT, rx: BACKGROUND_ROUNDING, ry: BACKGROUND_ROUNDING }); + //mid channel + var channelGid = "sim-bb-channel-grad"; + var channelGrad = pxsim.svg.elt("linearGradient"); + pxsim.svg.hydrate(channelGrad, { id: channelGid, x1: "0%", y1: "0%", x2: "0%", y2: "100%" }); + this.defs.appendChild(channelGrad); + var channelDark = "#AAA"; + var channelLight = "#CCC"; + var stop1 = pxsim.svg.child(channelGrad, "stop", { offset: "0%", style: "stop-color: " + channelDark + ";" }); + var stop2 = pxsim.svg.child(channelGrad, "stop", { offset: "20%", style: "stop-color: " + channelLight + ";" }); + var stop3 = pxsim.svg.child(channelGrad, "stop", { offset: "80%", style: "stop-color: " + channelLight + ";" }); + var stop4 = pxsim.svg.child(channelGrad, "stop", { offset: "100%", style: "stop-color: " + channelDark + ";" }); + var mkChannel = function (cy, h, cls) { + var channel = pxsim.svg.child(_this.bb, "rect", { class: "sim-bb-channel " + (cls || ""), y: cy - h / 2, width: WIDTH, height: h }); + channel.setAttribute("fill", "url(#" + channelGid + ")"); + return channel; + }; + mkChannel(BAR_HEIGHT + MID_HEIGHT / 2, CHANNEL_HEIGHT, "sim-bb-mid-channel"); + mkChannel(BAR_HEIGHT, SMALL_CHANNEL_HEIGHT, "sim-bb-sml-channel"); + mkChannel(BAR_HEIGHT + MID_HEIGHT, SMALL_CHANNEL_HEIGHT), "sim-bb-sml-channel"; + //-----pins + var getMidTopOrBot = function (rowIdx) { return rowIdx < visuals.BREADBOARD_MID_ROWS / 2.0 ? "b" : "t"; }; + var getBarTopOrBot = function (colIdx) { return colIdx < POWER_COLS / 2.0 ? "b" : "t"; }; + var getMidGroupName = function (rowIdx, colIdx) { + var botOrTop = getMidTopOrBot(rowIdx); + var colNm = getColumnName(colIdx); + return "" + botOrTop + colNm; + }; + var getBarRowName = function (rowIdx) { return rowIdx === 0 ? "-" : "+"; }; + var getBarGroupName = function (rowIdx, colIdx) { + var botOrTop = getBarTopOrBot(colIdx); + var rowName = getBarRowName(rowIdx); + return "" + rowName + botOrTop; + }; + //mid grid + var midGridRes = mkGrid({ + xOffset: MID_GRID_X, + yOffset: MID_GRID_Y, + rowCount: visuals.BREADBOARD_MID_ROWS, + colCount: visuals.BREADBOARD_MID_COLS, + pinDist: PIN_DIST, + mkPin: mkBBPin, + mkHoverPin: mkBBHoverPin, + getRowName: getRowName, + getColName: getColumnName, + getGroupName: getMidGroupName, + rowIdxsWithGap: MID_ROW_GAPS, + }); + var midGridG = midGridRes.g; + this.allPins = this.allPins.concat(midGridRes.allPins); + //bot bar + var botBarGridRes = mkGrid({ + xOffset: BAR_BOT_GRID_X, + yOffset: BAR_BOT_GRID_Y, + rowCount: BAR_ROWS, + colCount: BAR_COLS, + pinDist: PIN_DIST, + mkPin: mkBBPin, + mkHoverPin: mkBBHoverPin, + getRowName: getBarRowName, + getColName: getColumnName, + getGroupName: getBarGroupName, + colIdxsWithGap: BAR_COL_GAPS, + }); + var botBarGridG = botBarGridRes.g; + this.allPins = this.allPins.concat(botBarGridRes.allPins); + //top bar + var topBarGridRes = mkGrid({ + xOffset: BAR_TOP_GRID_X, + yOffset: BAR_TOP_GRID_Y, + rowCount: BAR_ROWS, + colCount: BAR_COLS, + colStartIdx: BAR_COLS, + pinDist: PIN_DIST, + mkPin: mkBBPin, + mkHoverPin: mkBBHoverPin, + getRowName: getBarRowName, + getColName: getColumnName, + getGroupName: getBarGroupName, + colIdxsWithGap: BAR_COL_GAPS.map(function (g) { return g + BAR_COLS; }), + }); + var topBarGridG = topBarGridRes.g; + this.allPins = this.allPins.concat(topBarGridRes.allPins); + //tooltip + this.allPins.forEach(function (pin) { + var el = pin.el, row = pin.row, col = pin.col, hoverEl = pin.hoverEl; + var title = "(" + row + "," + col + ")"; + pxsim.svg.hydrate(el, { title: title }); + pxsim.svg.hydrate(hoverEl, { title: title }); + }); + //catalog pins + this.allPins.forEach(function (pin) { + var colToPin = _this.rowColToPin[pin.row]; + if (!colToPin) + colToPin = _this.rowColToPin[pin.row] = {}; + colToPin[pin.col] = pin; + }); + //-----labels + var mkBBLabelAtPin = function (row, col, xOffset, yOffset, txt, group) { + var size = PIN_LBL_SIZE; + var rotation = LBL_ROTATION; + var loc = _this.getCoord({ type: "breadboard", row: row, col: col }); + var cx = loc[0], cy = loc[1]; + var t = mkBBLabel(cx + xOffset, cy + yOffset, size, rotation, txt, group); + return t; + }; + //columns + for (var colIdx = 0; colIdx < visuals.BREADBOARD_MID_COLS; colIdx++) { + var colNm = getColumnName(colIdx); + //top + var rowTIdx = 0; + var rowTNm = getRowName(rowTIdx); + var groupT = getMidGroupName(rowTIdx, colIdx); + var lblT = mkBBLabelAtPin(rowTNm, colNm, 0, -PIN_DIST, colNm, groupT); + this.allLabels.push(lblT); + //bottom + var rowBIdx = visuals.BREADBOARD_MID_ROWS - 1; + var rowBNm = getRowName(rowBIdx); + var groupB = getMidGroupName(rowBIdx, colIdx); + var lblB = mkBBLabelAtPin(rowBNm, colNm, 0, +PIN_DIST, colNm, groupB); + this.allLabels.push(lblB); + } + //rows + for (var rowIdx = 0; rowIdx < visuals.BREADBOARD_MID_ROWS; rowIdx++) { + var rowNm = getRowName(rowIdx); + //top + var colTIdx = 0; + var colTNm = getColumnName(colTIdx); + var lblT = mkBBLabelAtPin(rowNm, colTNm, -PIN_DIST, 0, rowNm); + this.allLabels.push(lblT); + //top + var colBIdx = visuals.BREADBOARD_MID_COLS - 1; + var colBNm = getColumnName(colBIdx); + var lblB = mkBBLabelAtPin(rowNm, colBNm, +PIN_DIST, 0, rowNm); + this.allLabels.push(lblB); + } + //+- labels + var botPowerLabels = [ + //BL + mkBBLabel(0 + POWER_LBL_OFFSET + MINUS_LBL_EXTRA_OFFSET, BAR_HEIGHT + MID_HEIGHT + POWER_LBL_OFFSET, MINUS_LBL_SIZE, LBL_ROTATION, "-", getBarGroupName(0, 0), ["sim-bb-blue"]), + mkBBLabel(0 + POWER_LBL_OFFSET, BAR_HEIGHT + MID_HEIGHT + BAR_HEIGHT - POWER_LBL_OFFSET, PLUS_LBL_SIZE, LBL_ROTATION, "+", getBarGroupName(1, 0), ["sim-bb-red"]), + //BR + mkBBLabel(WIDTH - POWER_LBL_OFFSET + MINUS_LBL_EXTRA_OFFSET, BAR_HEIGHT + MID_HEIGHT + POWER_LBL_OFFSET, MINUS_LBL_SIZE, LBL_ROTATION, "-", getBarGroupName(0, BAR_COLS - 1), ["sim-bb-blue"]), + mkBBLabel(WIDTH - POWER_LBL_OFFSET, BAR_HEIGHT + MID_HEIGHT + BAR_HEIGHT - POWER_LBL_OFFSET, PLUS_LBL_SIZE, LBL_ROTATION, "+", getBarGroupName(1, BAR_COLS - 1), ["sim-bb-red"]), + ]; + this.allLabels = this.allLabels.concat(botPowerLabels); + var topPowerLabels = [ + //TL + mkBBLabel(0 + POWER_LBL_OFFSET + MINUS_LBL_EXTRA_OFFSET, 0 + POWER_LBL_OFFSET, MINUS_LBL_SIZE, LBL_ROTATION, "-", getBarGroupName(0, BAR_COLS), ["sim-bb-blue"]), + mkBBLabel(0 + POWER_LBL_OFFSET, BAR_HEIGHT - POWER_LBL_OFFSET, PLUS_LBL_SIZE, LBL_ROTATION, "+", getBarGroupName(1, BAR_COLS), ["sim-bb-red"]), + //TR + mkBBLabel(WIDTH - POWER_LBL_OFFSET + MINUS_LBL_EXTRA_OFFSET, 0 + POWER_LBL_OFFSET, MINUS_LBL_SIZE, LBL_ROTATION, "-", getBarGroupName(0, POWER_COLS - 1), ["sim-bb-blue"]), + mkBBLabel(WIDTH - POWER_LBL_OFFSET, BAR_HEIGHT - POWER_LBL_OFFSET, PLUS_LBL_SIZE, LBL_ROTATION, "+", getBarGroupName(1, POWER_COLS - 1), ["sim-bb-red"]), + ]; + this.allLabels = this.allLabels.concat(topPowerLabels); + //catalog lbls + var lblNmToLbls = {}; + this.allLabels.forEach(function (lbl) { + var el = lbl.el, txt = lbl.txt; + var lbls = lblNmToLbls[txt] = lblNmToLbls[txt] || []; + lbls.push(lbl); + }); + var isPowerPin = function (pin) { return pin.row === "-" || pin.row === "+"; }; + this.allPins.forEach(function (pin) { + var row = pin.row, col = pin.col, group = pin.group; + var colToLbls = _this.rowColToLbls[row] || (_this.rowColToLbls[row] = {}); + var lbls = colToLbls[col] || (colToLbls[col] = []); + if (isPowerPin(pin)) { + //power pins + var isBot = Number(col) <= BAR_COLS; + if (isBot) + botPowerLabels.filter(function (l) { return l.group == pin.group; }).forEach(function (l) { return lbls.push(l); }); + else + topPowerLabels.filter(function (l) { return l.group == pin.group; }).forEach(function (l) { return lbls.push(l); }); + } + else { + //mid pins + var rowLbls = lblNmToLbls[row]; + rowLbls.forEach(function (l) { return lbls.push(l); }); + var colLbls = lblNmToLbls[col]; + colLbls.forEach(function (l) { return lbls.push(l); }); + } + }); + //-----blue & red lines + var lnLen = BAR_GRID_WIDTH + PIN_DIST * 1.5; + var lnThickness = PIN_DIST / 5.0; + var lnYOff = PIN_DIST * 0.6; + var lnXOff = (lnLen - BAR_GRID_WIDTH) / 2.0; + var mkPowerLine = function (x, y, group, cls) { + var ln = pxsim.svg.elt("rect"); + pxsim.svg.hydrate(ln, { + class: "sim-bb-bar " + cls, + x: x, + y: y - lnThickness / 2.0, + width: lnLen, + height: lnThickness }); + var bar = { el: ln, group: group }; + return bar; + }; + var barLines = [ + //top + mkPowerLine(BAR_BOT_GRID_X - lnXOff, BAR_BOT_GRID_Y - lnYOff, getBarGroupName(0, POWER_COLS - 1), "sim-bb-blue"), + mkPowerLine(BAR_BOT_GRID_X - lnXOff, BAR_BOT_GRID_Y + PIN_DIST + lnYOff, getBarGroupName(1, POWER_COLS - 1), "sim-bb-red"), + //bot + mkPowerLine(BAR_TOP_GRID_X - lnXOff, BAR_TOP_GRID_Y - lnYOff, getBarGroupName(0, 0), "sim-bb-blue"), + mkPowerLine(BAR_TOP_GRID_X - lnXOff, BAR_TOP_GRID_Y + PIN_DIST + lnYOff, getBarGroupName(1, 0), "sim-bb-red"), + ]; + this.allPowerBars = this.allPowerBars.concat(barLines); + //attach power bars + this.allPowerBars.forEach(function (b) { return _this.bb.appendChild(b.el); }); + //-----electrically connected groups + //make groups + var allGrpNms = this.allPins.map(function (p) { return p.group; }).filter(function (g, i, a) { return a.indexOf(g) == i; }); + var groups = allGrpNms.map(function (grpNm) { + var g = pxsim.svg.elt("g"); + return g; + }); + groups.forEach(function (g) { return pxsim.svg.addClass(g, "sim-bb-pin-group"); }); + groups.forEach(function (g, i) { return pxsim.svg.addClass(g, "group-" + allGrpNms[i]); }); + var grpNmToGroup = {}; + allGrpNms.forEach(function (g, i) { return grpNmToGroup[g] = groups[i]; }); + //group pins and add connecting wire + var grpNmToPins = {}; + this.allPins.forEach(function (p, i) { + var g = p.group; + var pins = grpNmToPins[g] || (grpNmToPins[g] = []); + pins.push(p); + }); + //connecting wire + allGrpNms.forEach(function (grpNm) { + var pins = grpNmToPins[grpNm]; + var _a = [pins.map(function (p) { return p.cx; }), pins.map(function (p) { return p.cy; })], xs = _a[0], ys = _a[1]; + var minFn = function (arr) { return arr.reduce(function (a, b) { return a < b ? a : b; }); }; + var maxFn = function (arr) { return arr.reduce(function (a, b) { return a > b ? a : b; }); }; + var _b = [minFn(xs), maxFn(xs), minFn(ys), maxFn(ys)], minX = _b[0], maxX = _b[1], minY = _b[2], maxY = _b[3]; + var wire = pxsim.svg.elt("rect"); + var width = Math.max(maxX - minX, 0.0001 /*rects with no width aren't displayed*/); + var height = Math.max(maxY - minY, 0.0001); + pxsim.svg.hydrate(wire, { x: minX, y: minY, width: width, height: height }); + pxsim.svg.addClass(wire, "sim-bb-group-wire"); + var g = grpNmToGroup[grpNm]; + g.appendChild(wire); + }); + //group pins + this.allPins.forEach(function (p) { + var g = grpNmToGroup[p.group]; + g.appendChild(p.el); + g.appendChild(p.hoverEl); + }); + //group lbls + var miscLblGroup = pxsim.svg.elt("g"); + pxsim.svg.hydrate(miscLblGroup, { class: "sim-bb-group-misc" }); + groups.push(miscLblGroup); + this.allLabels.forEach(function (l) { + if (l.group) { + var g = grpNmToGroup[l.group]; + g.appendChild(l.el); + g.appendChild(l.hoverEl); + } + else { + miscLblGroup.appendChild(l.el); + miscLblGroup.appendChild(l.hoverEl); + } + }); + //attach to bb + groups.forEach(function (g) { return _this.bb.appendChild(g); }); //attach to breadboard + }; + Breadboard.prototype.getSVGAndSize = function () { + return { el: this.bb, y: 0, x: 0, w: WIDTH, h: HEIGHT }; + }; + Breadboard.prototype.highlightLoc = function (rowCol) { + var row = rowCol.row, col = rowCol.col; + var pin = this.rowColToPin[row][col]; + var cx = pin.cx, cy = pin.cy; + var lbls = this.rowColToLbls[row][col]; + var highlightLbl = function (lbl) { + pxsim.svg.addClass(lbl.el, "highlight"); + pxsim.svg.addClass(lbl.hoverEl, "highlight"); + }; + lbls.forEach(highlightLbl); + }; + return Breadboard; + }()); + visuals.Breadboard = Breadboard; + })(visuals = pxsim.visuals || (pxsim.visuals = {})); +})(pxsim || (pxsim = {})); +/// +var pxsim; +(function (pxsim) { + var visuals; + (function (visuals) { + function mkBtnSvg(xy) { + var _a = ["sim-button", "sim-button-outer"], innerCls = _a[0], outerCls = _a[1]; + var tabSize = visuals.PIN_DIST / 2.5; + var pegR = visuals.PIN_DIST / 5; + var btnR = visuals.PIN_DIST * .8; + var pegMargin = visuals.PIN_DIST / 8; + var plateR = visuals.PIN_DIST / 12; + var pegOffset = pegMargin + pegR; + var x = xy[0], y = xy[1]; + var left = x - tabSize / 2; + var top = y - tabSize / 2; + var plateH = 3 * visuals.PIN_DIST - tabSize; + var plateW = 2 * visuals.PIN_DIST + tabSize; + var plateL = left; + var plateT = top + tabSize; + var btnCX = plateL + plateW / 2; + var btnCY = plateT + plateH / 2; + var btng = pxsim.svg.elt("g"); + //tabs + var mkTab = function (x, y) { + pxsim.svg.child(btng, "rect", { class: "sim-button-tab", x: x, y: y, width: tabSize, height: tabSize }); + }; + mkTab(left, top); + mkTab(left + 2 * visuals.PIN_DIST, top); + mkTab(left, top + 3 * visuals.PIN_DIST); + mkTab(left + 2 * visuals.PIN_DIST, top + 3 * visuals.PIN_DIST); + //plate + pxsim.svg.child(btng, "rect", { class: outerCls, x: plateL, y: plateT, rx: plateR, ry: plateR, width: plateW, height: plateH }); + //pegs + var mkPeg = function (x, y) { + pxsim.svg.child(btng, "circle", { class: "sim-button-nut", cx: x, cy: y, r: pegR }); + }; + mkPeg(plateL + pegOffset, plateT + pegOffset); + mkPeg(plateL + plateW - pegOffset, plateT + pegOffset); + mkPeg(plateL + pegOffset, plateT + plateH - pegOffset); + mkPeg(plateL + plateW - pegOffset, plateT + plateH - pegOffset); + //inner btn + var innerBtn = pxsim.svg.child(btng, "circle", { class: innerCls, cx: btnCX, cy: btnCY, r: btnR }); + //return + return { el: btng, y: top, x: left, w: plateW, h: plateH + 2 * tabSize }; + } + visuals.mkBtnSvg = mkBtnSvg; + visuals.BUTTON_PAIR_STYLE = "\n .sim-button {\n pointer-events: none;\n fill: #000;\n }\n .sim-button-outer:active ~ .sim-button,\n .sim-button-virtual:active {\n fill: #FFA500;\n }\n .sim-button-outer {\n cursor: pointer;\n fill: #979797;\n }\n .sim-button-outer:hover {\n stroke:gray;\n stroke-width: " + visuals.PIN_DIST / 5 + "px;\n }\n .sim-button-nut {\n fill:#000;\n pointer-events:none;\n }\n .sim-button-nut:hover {\n stroke:" + visuals.PIN_DIST / 15 + "px solid #704A4A;\n }\n .sim-button-tab {\n fill:#FFF;\n pointer-events:none;\n }\n .sim-button-virtual {\n cursor: pointer;\n fill: rgba(255, 255, 255, 0.6);\n stroke: rgba(255, 255, 255, 1);\n stroke-width: " + visuals.PIN_DIST / 5 + "px;\n }\n .sim-button-virtual:hover {\n stroke: rgba(128, 128, 128, 1);\n }\n .sim-text-virtual {\n fill: #000;\n pointer-events:none;\n }\n "; + var ButtonPairView = (function () { + function ButtonPairView() { + this.style = visuals.BUTTON_PAIR_STYLE; + } + ButtonPairView.prototype.init = function (bus, state) { + this.state = state; + this.bus = bus; + this.defs = []; + this.element = this.mkBtns(); + this.updateState(); + this.attachEvents(); + }; + ButtonPairView.prototype.moveToCoord = function (xy) { + var btnWidth = visuals.PIN_DIST * 3; + var x = xy[0], y = xy[1]; + visuals.translateEl(this.aBtn, [x, y]); + visuals.translateEl(this.bBtn, [x + btnWidth, y]); + visuals.translateEl(this.abBtn, [x + visuals.PIN_DIST * 1.5, y + visuals.PIN_DIST * 4]); + }; + ButtonPairView.prototype.updateState = function () { + var stateBtns = [this.state.aBtn, this.state.bBtn, this.state.abBtn]; + var svgBtns = [this.aBtn, this.bBtn, this.abBtn]; + if (this.state.usesButtonAB && this.abBtn.style.visibility != "visible") { + this.abBtn.style.visibility = "visible"; + } + }; + ButtonPairView.prototype.updateTheme = function () { }; + ButtonPairView.prototype.mkBtns = function () { + this.aBtn = mkBtnSvg([0, 0]).el; + this.bBtn = mkBtnSvg([0, 0]).el; + var mkVirtualBtn = function () { + var numPins = 2; + var w = visuals.PIN_DIST * 2.8; + var offset = (w - (numPins * visuals.PIN_DIST)) / 2; + var corner = visuals.PIN_DIST / 2; + var cx = 0 - offset + w / 2; + var cy = cx; + var txtSize = visuals.PIN_DIST * 1.3; + var x = -offset; + var y = -offset; + var txtXOff = visuals.PIN_DIST / 7; + var txtYOff = visuals.PIN_DIST / 10; + var btng = pxsim.svg.elt("g"); + var btn = pxsim.svg.child(btng, "rect", { class: "sim-button-virtual", x: x, y: y, rx: corner, ry: corner, width: w, height: w }); + var btnTxt = visuals.mkTxt(cx + txtXOff, cy + txtYOff, txtSize, 0, "A+B"); + pxsim.svg.addClass(btnTxt, "sim-text"); + pxsim.svg.addClass(btnTxt, "sim-text-virtual"); + btng.appendChild(btnTxt); + return btng; + }; + this.abBtn = mkVirtualBtn(); + this.abBtn.style.visibility = "hidden"; + var el = pxsim.svg.elt("g"); + pxsim.svg.addClass(el, "sim-buttonpair"); + el.appendChild(this.aBtn); + el.appendChild(this.bBtn); + el.appendChild(this.abBtn); + return el; + }; + ButtonPairView.prototype.attachEvents = function () { + var _this = this; + var btnStates = [this.state.aBtn, this.state.bBtn]; + var btnSvgs = [this.aBtn, this.bBtn]; + btnSvgs.forEach(function (btn, index) { + btn.addEventListener(pxsim.pointerEvents.down, function (ev) { + btnStates[index].pressed = true; + }); + btn.addEventListener(pxsim.pointerEvents.leave, function (ev) { + btnStates[index].pressed = false; + }); + btn.addEventListener(pxsim.pointerEvents.up, function (ev) { + btnStates[index].pressed = false; + _this.bus.queue(btnStates[index].id, _this.state.props.BUTTON_EVT_UP); + _this.bus.queue(btnStates[index].id, _this.state.props.BUTTON_EVT_CLICK); + }); + }); + var updateBtns = function (s) { + btnStates.forEach(function (b) { return b.pressed = s; }); + }; + this.abBtn.addEventListener(pxsim.pointerEvents.down, function (ev) { + updateBtns(true); + }); + this.abBtn.addEventListener(pxsim.pointerEvents.leave, function (ev) { + updateBtns(false); + }); + this.abBtn.addEventListener(pxsim.pointerEvents.up, function (ev) { + updateBtns(false); + _this.bus.queue(_this.state.abBtn.id, _this.state.props.BUTTON_EVT_UP); + _this.bus.queue(_this.state.abBtn.id, _this.state.props.BUTTON_EVT_CLICK); + }); + }; + return ButtonPairView; + }()); + visuals.ButtonPairView = ButtonPairView; + })(visuals = pxsim.visuals || (pxsim.visuals = {})); +})(pxsim || (pxsim = {})); +/// +var pxsim; +(function (pxsim) { + var visuals; + (function (visuals) { + visuals.BOARD_SYTLE = "\n .noselect {\n -webkit-touch-callout: none; /* iOS Safari */\n -webkit-user-select: none; /* Chrome/Safari/Opera */\n -khtml-user-select: none; /* Konqueror */\n -moz-user-select: none; /* Firefox */\n -ms-user-select: none; /* Internet Explorer/Edge */\n user-select: none; /* Non-prefixed version, currently\n not supported by any browser */\n }\n\n .sim-board-pin {\n fill:#999;\n stroke:#000;\n stroke-width:" + visuals.PIN_DIST / 3.0 + "px;\n }\n .sim-board-pin-lbl {\n fill: #333;\n }\n .gray-cover {\n fill:#FFF;\n opacity: 0.3;\n stroke-width:0;\n visibility: hidden;\n }\n .sim-board-pin-hover {\n visibility: hidden;\n pointer-events: all;\n stroke-width:" + visuals.PIN_DIST / 6.0 + "px;\n }\n .sim-board-pin-hover:hover {\n visibility: visible;\n }\n .sim-board-pin-lbl {\n visibility: hidden;\n }\n .sim-board-outline .sim-board-pin-lbl {\n visibility: visible;\n }\n .sim-board-pin-lbl {\n fill: #555;\n }\n .sim-board-pin-lbl-hover {\n fill: red;\n }\n .sim-board-outline .sim-board-pin-lbl-hover {\n fill: black;\n }\n .sim-board-pin-lbl,\n .sim-board-pin-lbl-hover {\n font-family:\"Lucida Console\", Monaco, monospace;\n pointer-events: all;\n stroke-width: 0;\n }\n .sim-board-pin-lbl-hover {\n visibility: hidden;\n }\n .sim-board-outline .sim-board-pin-hover:hover + .sim-board-pin-lbl,\n .sim-board-pin-lbl.highlight {\n visibility: hidden;\n }\n .sim-board-outline .sim-board-pin-hover:hover + * + .sim-board-pin-lbl-hover,\n .sim-board-pin-lbl-hover.highlight {\n visibility: visible;\n }\n /* Graying out */\n .grayed .sim-board-pin-lbl:not(.highlight) {\n fill: #AAA;\n }\n .grayed .sim-board-pin:not(.highlight) {\n fill:#BBB;\n stroke:#777;\n }\n .grayed .gray-cover {\n visibility: inherit;\n }\n .grayed .sim-cmp:not(.notgrayed) {\n opacity: 0.3;\n }\n /* Highlighting */\n .sim-board-pin-lbl.highlight {\n fill: #000;\n font-weight: bold;\n }\n .sim-board-pin.highlight {\n fill:#999;\n stroke:#000;\n }\n "; + var PIN_LBL_SIZE = visuals.PIN_DIST * 0.7; + var PIN_LBL_HOVER_SIZE = PIN_LBL_SIZE * 1.5; + var SQUARE_PIN_WIDTH = visuals.PIN_DIST * 0.66666; + var SQUARE_PIN_HOVER_WIDTH = visuals.PIN_DIST * 0.66666 + visuals.PIN_DIST / 3.0; + var nextBoardId = 0; + var GenericBoardSvg = (function () { + function GenericBoardSvg(props) { + var _this = this; + this.props = props; + // pins & labels + //(truth) + this.allPins = []; + this.allLabels = []; + //(cache) + this.pinNmToLbl = {}; + this.pinNmToPin = {}; + //TODO: handle wireframe mode + this.id = nextBoardId++; + var visDef = props.visualDef; + var imgHref = props.wireframe ? visDef.outlineImage : visDef.image; + var boardImgAndSize = visuals.mkImageSVG({ + image: imgHref, + width: visDef.width, + height: visDef.height, + imageUnitDist: visDef.pinDist, + targetUnitDist: visuals.PIN_DIST + }); + var scaleFn = visuals.mkScaleFn(visDef.pinDist, visuals.PIN_DIST); + this.width = boardImgAndSize.w; + this.height = boardImgAndSize.h; + var img = boardImgAndSize.el; + this.element = pxsim.svg.elt("svg"); + pxsim.svg.hydrate(this.element, { + "version": "1.0", + "viewBox": "0 0 " + this.width + " " + this.height, + "class": "sim sim-board-id-" + this.id, + "x": "0px", + "y": "0px" + }); + if (props.wireframe) + pxsim.svg.addClass(this.element, "sim-board-outline"); + this.style = pxsim.svg.child(this.element, "style", {}); + this.style.textContent += visuals.BOARD_SYTLE; + this.defs = pxsim.svg.child(this.element, "defs", {}); + this.g = pxsim.svg.elt("g"); + this.element.appendChild(this.g); + // main board + this.g.appendChild(img); + this.background = img; + pxsim.svg.hydrate(img, { class: "sim-board" }); + var backgroundCover = this.mkGrayCover(0, 0, this.width, this.height); + this.g.appendChild(backgroundCover); + // ----- pins + var mkSquarePin = function () { + var el = pxsim.svg.elt("rect"); + var width = SQUARE_PIN_WIDTH; + pxsim.svg.hydrate(el, { + class: "sim-board-pin", + width: width, + height: width, + }); + return { el: el, w: width, h: width, x: 0, y: 0 }; + }; + var mkSquareHoverPin = function () { + var el = pxsim.svg.elt("rect"); + var width = SQUARE_PIN_HOVER_WIDTH; + pxsim.svg.hydrate(el, { + class: "sim-board-pin-hover", + width: width, + height: width + }); + return { el: el, w: width, h: width, x: 0, y: 0 }; + }; + var mkPinBlockGrid = function (pinBlock, blockIdx) { + var xOffset = scaleFn(pinBlock.x) + visuals.PIN_DIST / 2.0; + var yOffset = scaleFn(pinBlock.y) + visuals.PIN_DIST / 2.0; + var rowCount = 1; + var colCount = pinBlock.labels.length; + var getColName = function (colIdx) { return pinBlock.labels[colIdx]; }; + var getRowName = function () { return ("" + (blockIdx + 1)); }; + var getGroupName = function () { return pinBlock.labels.join(" "); }; + var gridRes = visuals.mkGrid({ + xOffset: xOffset, + yOffset: yOffset, + rowCount: rowCount, + colCount: colCount, + pinDist: visuals.PIN_DIST, + mkPin: mkSquarePin, + mkHoverPin: mkSquareHoverPin, + getRowName: getRowName, + getColName: getColName, + getGroupName: getGroupName, + }); + var pins = gridRes.allPins; + var pinsG = gridRes.g; + pxsim.svg.addClass(gridRes.g, "sim-board-pin-group"); + return gridRes; + }; + var pinBlocks = visDef.pinBlocks.map(mkPinBlockGrid); + var pinToBlockDef = []; + pinBlocks.forEach(function (blk, blkIdx) { return blk.allPins.forEach(function (p, pIdx) { + _this.allPins.push(p); + pinToBlockDef.push(visDef.pinBlocks[blkIdx]); + }); }); + //tooltip + this.allPins.forEach(function (p) { + var tooltip = p.col; + pxsim.svg.hydrate(p.el, { title: tooltip }); + pxsim.svg.hydrate(p.hoverEl, { title: tooltip }); + }); + //catalog pins + this.allPins.forEach(function (p) { + _this.pinNmToPin[p.col] = p; + }); + // ----- labels + var mkLabelTxtEl = function (pinX, pinY, size, txt, pos) { + //TODO: extract constants + var lblY; + var lblX; + if (pos === "below") { + var lblLen = size * 0.25 * txt.length; + lblX = pinX; + lblY = pinY + 12 + lblLen; + } + else { + var lblLen = size * 0.32 * txt.length; + lblX = pinX; + lblY = pinY - 11 - lblLen; + } + var el = visuals.mkTxt(lblX, lblY, size, -90, txt); + return el; + }; + var mkLabel = function (pinX, pinY, txt, pos) { + var el = mkLabelTxtEl(pinX, pinY, PIN_LBL_SIZE, txt, pos); + pxsim.svg.addClass(el, "sim-board-pin-lbl"); + var hoverEl = mkLabelTxtEl(pinX, pinY, PIN_LBL_HOVER_SIZE, txt, pos); + pxsim.svg.addClass(hoverEl, "sim-board-pin-lbl-hover"); + var label = { el: el, hoverEl: hoverEl, txt: txt }; + return label; + }; + this.allLabels = this.allPins.map(function (p, pIdx) { + var blk = pinToBlockDef[pIdx]; + return mkLabel(p.cx, p.cy, p.col, blk.labelPosition); + }); + //catalog labels + this.allPins.forEach(function (pin, pinIdx) { + var lbl = _this.allLabels[pinIdx]; + _this.pinNmToLbl[pin.col] = lbl; + }); + //attach pins & labels + this.allPins.forEach(function (p, idx) { + var lbl = _this.allLabels[idx]; + //pins and labels must be adjacent for hover CSS + _this.g.appendChild(p.el); + _this.g.appendChild(p.hoverEl); + _this.g.appendChild(lbl.el); + _this.g.appendChild(lbl.hoverEl); + }); + } + GenericBoardSvg.prototype.getCoord = function (pinNm) { + var pin = this.pinNmToPin[pinNm]; + if (!pin) + return null; + return [pin.cx, pin.cy]; + }; + GenericBoardSvg.prototype.mkGrayCover = function (x, y, w, h) { + var rect = pxsim.svg.elt("rect"); + pxsim.svg.hydrate(rect, { x: x, y: y, width: w, height: h, class: "gray-cover" }); + return rect; + }; + GenericBoardSvg.prototype.getView = function () { + return { el: this.element, w: this.width, h: this.height, x: 0, y: 0 }; + }; + GenericBoardSvg.prototype.getPinDist = function () { + return visuals.PIN_DIST; + }; + GenericBoardSvg.prototype.highlightPin = function (pinNm) { + var lbl = this.pinNmToLbl[pinNm]; + var pin = this.pinNmToPin[pinNm]; + if (lbl && pin) { + pxsim.svg.addClass(lbl.el, "highlight"); + pxsim.svg.addClass(lbl.hoverEl, "highlight"); + pxsim.svg.addClass(pin.el, "highlight"); + pxsim.svg.addClass(pin.hoverEl, "highlight"); + } + }; + return GenericBoardSvg; + }()); + visuals.GenericBoardSvg = GenericBoardSvg; + })(visuals = pxsim.visuals || (pxsim.visuals = {})); +})(pxsim || (pxsim = {})); +var pxsim; +(function (pxsim) { + var visuals; + (function (visuals) { + function mkGenericPartSVG(partVisual) { + var imgAndSize = visuals.mkImageSVG({ + image: partVisual.image, + width: partVisual.width, + height: partVisual.height, + imageUnitDist: partVisual.pinDistance, + targetUnitDist: visuals.PIN_DIST + }); + return imgAndSize; + } + visuals.mkGenericPartSVG = mkGenericPartSVG; + var GenericPart = (function () { + function GenericPart(partVisual) { + this.style = ""; + this.defs = []; + var imgAndSize = mkGenericPartSVG(partVisual); + var img = imgAndSize.el; + this.element = pxsim.svg.elt("g"); + this.element.appendChild(img); + } + GenericPart.prototype.moveToCoord = function (xy) { + visuals.translateEl(this.element, xy); + }; + //unused + GenericPart.prototype.init = function (bus, state, svgEl) { }; + GenericPart.prototype.updateState = function () { }; + GenericPart.prototype.updateTheme = function () { }; + return GenericPart; + }()); + visuals.GenericPart = GenericPart; + })(visuals = pxsim.visuals || (pxsim.visuals = {})); +})(pxsim || (pxsim = {})); +var pxsim; +(function (pxsim) { + var visuals; + (function (visuals) { + function mkMicroServoPart(xy) { + if (xy === void 0) { xy = [0, 0]; } + // TODO + return { el: null, y: 0, x: 0, w: 0, h: 0 }; + } + visuals.mkMicroServoPart = mkMicroServoPart; + var MicroServoView = (function () { + function MicroServoView() { + this.style = ""; + this.overElement = undefined; + this.defs = []; + this.currentAngle = 0; + this.targetAngle = 0; + this.lastAngleTime = 0; + } + MicroServoView.prototype.init = function (bus, state, svgEl, otherParams) { + this.state = state; + this.pin = this.state.props.servos[pxsim.readPin(otherParams["name"] || otherParams["pin"])]; + this.bus = bus; + this.defs = []; + this.initDom(); + this.updateState(); + }; + MicroServoView.prototype.initDom = function () { + this.element = pxsim.svg.parseString("\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n ").firstElementChild; + this.crankEl = this.element.querySelector("#crank"); + this.crankTransform = this.crankEl.getAttribute("transform"); + }; + MicroServoView.prototype.moveToCoord = function (xy) { + var x = xy[0], y = xy[1]; + visuals.translateEl(this.element, [x, y]); + }; + MicroServoView.prototype.updateState = function () { + this.targetAngle = this.state.getPin(this.pin).servoAngle; + if (this.targetAngle != this.currentAngle) { + var now = pxsim.U.now(); + var cx = 56.661; + var cy = 899.475; + var speed = 300; // 0.1s/60 degree + var dt = Math.min(now - this.lastAngleTime, 50) / 1000; + var delta = this.targetAngle - this.currentAngle; + this.currentAngle += Math.min(Math.abs(delta), speed * dt) * (delta > 0 ? 1 : -1); + this.crankEl.setAttribute("transform", this.crankTransform + + (" rotate(" + this.currentAngle + ", " + cx + ", " + cy + ")")); + this.lastAngleTime = now; + setTimeout(function () { return pxsim.runtime.updateDisplay(); }, 20); + } + }; + MicroServoView.prototype.updateTheme = function () { + }; + return MicroServoView; + }()); + visuals.MicroServoView = MicroServoView; + })(visuals = pxsim.visuals || (pxsim.visuals = {})); +})(pxsim || (pxsim = {})); +var pxsim; +(function (pxsim) { + var visuals; + (function (visuals) { + var WIRE_WIDTH = visuals.PIN_DIST / 2.5; + var BB_WIRE_SMOOTH = 0.7; + var INSTR_WIRE_SMOOTH = 0.8; + var WIRE_PART_CURVE_OFF = 15; + var WIRE_PART_LENGTH = 100; + visuals.WIRES_CSS = "\n .sim-bb-wire {\n fill:none;\n stroke-linecap: round;\n stroke-width:" + WIRE_WIDTH + "px;\n pointer-events: none;\n }\n .sim-bb-wire-end {\n stroke:#333;\n fill:#333;\n }\n .sim-bb-wire-bare-end {\n fill: #ccc;\n }\n .sim-bb-wire-hover {\n stroke-width: " + WIRE_WIDTH + "px;\n visibility: hidden;\n stroke-dasharray: " + visuals.PIN_DIST / 10.0 + "," + visuals.PIN_DIST / 1.5 + ";\n /*stroke-opacity: 0.4;*/\n }\n .grayed .sim-bb-wire-ends-g:not(.highlight) .sim-bb-wire-end {\n stroke: #777;\n fill: #777;\n }\n .grayed .sim-bb-wire:not(.highlight) {\n stroke: #CCC;\n }\n .sim-bb-wire-ends-g:hover .sim-bb-wire-end {\n stroke: red;\n fill: red;\n }\n .sim-bb-wire-ends-g:hover .sim-bb-wire-bare-end {\n stroke: #FFF;\n fill: #FFF;\n }\n "; + function cssEncodeColor(color) { + //HACK/TODO: do real CSS encoding. + return color + .replace(/\#/g, "-") + .replace(/\(/g, "-") + .replace(/\)/g, "-") + .replace(/\,/g, "-") + .replace(/\./g, "-") + .replace(/\s/g, ""); + } + (function (WireEndStyle) { + WireEndStyle[WireEndStyle["BBJumper"] = 0] = "BBJumper"; + WireEndStyle[WireEndStyle["OpenJumper"] = 1] = "OpenJumper"; + WireEndStyle[WireEndStyle["Croc"] = 2] = "Croc"; + })(visuals.WireEndStyle || (visuals.WireEndStyle = {})); + var WireEndStyle = visuals.WireEndStyle; + function mkWirePart(cp, clr, croc) { + if (croc === void 0) { croc = false; } + var g = pxsim.svg.elt("g"); + var cx = cp[0], cy = cp[1]; + var offset = WIRE_PART_CURVE_OFF; + var p1 = [cx - offset, cy - WIRE_PART_LENGTH / 2]; + var p2 = [cx + offset, cy + WIRE_PART_LENGTH / 2]; + clr = visuals.mapWireColor(clr); + var e1; + if (croc) + e1 = mkCrocEnd(p1, true, clr); + else + e1 = mkOpenJumperEnd(p1, true, clr); + var s = mkWirePartSeg(p1, p2, clr); + var e2 = mkOpenJumperEnd(p2, false, clr); + g.appendChild(s.el); + g.appendChild(e1.el); + g.appendChild(e2.el); + var l = Math.min(e1.x, e2.x); + var r = Math.max(e1.x + e1.w, e2.x + e2.w); + var t = Math.min(e1.y, e2.y); + var b = Math.max(e1.y + e1.h, e2.y + e2.h); + return { el: g, x: l, y: t, w: r - l, h: b - t }; + } + visuals.mkWirePart = mkWirePart; + function mkCurvedWireSeg(p1, p2, smooth, clrClass) { + var coordStr = function (xy) { return xy[0] + ", " + xy[1]; }; + var x1 = p1[0], y1 = p1[1]; + var x2 = p2[0], y2 = p2[1]; + var yLen = (y2 - y1); + var c1 = [x1, y1 + yLen * smooth]; + var c2 = [x2, y2 - yLen * smooth]; + var w = pxsim.svg.mkPath("sim-bb-wire", "M" + coordStr(p1) + " C" + coordStr(c1) + " " + coordStr(c2) + " " + coordStr(p2)); + pxsim.svg.addClass(w, "wire-stroke-" + clrClass); + return w; + } + function mkWirePartSeg(p1, p2, clr) { + //TODO: merge with mkCurvedWireSeg + var coordStr = function (xy) { return xy[0] + ", " + xy[1]; }; + var x1 = p1[0], y1 = p1[1]; + var x2 = p2[0], y2 = p2[1]; + var yLen = (y2 - y1); + var c1 = [x1, y1 + yLen * .8]; + var c2 = [x2, y2 - yLen * .8]; + var e = pxsim.svg.mkPath("sim-bb-wire", "M" + coordStr(p1) + " C" + coordStr(c1) + " " + coordStr(c2) + " " + coordStr(p2)); + e.style["stroke"] = clr; + return { el: e, x: Math.min(x1, x2), y: Math.min(y1, y2), w: Math.abs(x1 - x2), h: Math.abs(y1 - y2) }; + } + function mkWireSeg(p1, p2, clrClass) { + var coordStr = function (xy) { return xy[0] + ", " + xy[1]; }; + var w = pxsim.svg.mkPath("sim-bb-wire", "M" + coordStr(p1) + " L" + coordStr(p2)); + pxsim.svg.addClass(w, "wire-stroke-" + clrClass); + return w; + } + function mkBBJumperEnd(p, clrClass) { + var endW = visuals.PIN_DIST / 4; + var w = pxsim.svg.elt("circle"); + var x = p[0]; + var y = p[1]; + var r = WIRE_WIDTH / 2 + endW / 2; + pxsim.svg.hydrate(w, { cx: x, cy: y, r: r, class: "sim-bb-wire-end" }); + pxsim.svg.addClass(w, "wire-fill-" + clrClass); + w.style["stroke-width"] = endW + "px"; + return w; + } + function mkOpenJumperEnd(p, top, clr) { + var k = visuals.PIN_DIST * 0.24; + var plasticLength = k * 10; + var plasticWidth = k * 2; + var metalLength = k * 6; + var metalWidth = k; + var strokeWidth = visuals.PIN_DIST / 4.0; + var cx = p[0], cy = p[1]; + var o = top ? -1 : 1; + var g = pxsim.svg.elt("g"); + var el = pxsim.svg.elt("rect"); + var h1 = plasticLength; + var w1 = plasticWidth; + var x1 = cx - w1 / 2; + var y1 = cy - (h1 / 2); + pxsim.svg.hydrate(el, { x: x1, y: y1, width: w1, height: h1, rx: 0.5, ry: 0.5, class: "sim-bb-wire-end" }); + el.style["stroke-width"] = strokeWidth + "px"; + var el2 = pxsim.svg.elt("rect"); + var h2 = metalLength; + var w2 = metalWidth; + var cy2 = cy + o * (h1 / 2 + h2 / 2); + var x2 = cx - w2 / 2; + var y2 = cy2 - (h2 / 2); + pxsim.svg.hydrate(el2, { x: x2, y: y2, width: w2, height: h2, class: "sim-bb-wire-bare-end" }); + el2.style["fill"] = "#bbb"; + g.appendChild(el2); + g.appendChild(el); + return { el: g, x: x1 - strokeWidth, y: Math.min(y1, y2), w: w1 + strokeWidth * 2, h: h1 + h2 }; + } + function mkSmallMBPinEnd(p, top, clr) { + //HACK + //TODO: merge with mkOpenJumperEnd() + var k = visuals.PIN_DIST * 0.24; + var plasticLength = k * 4; + var plasticWidth = k * 1.2; + var metalLength = k * 10; + var metalWidth = k; + var strokeWidth = visuals.PIN_DIST / 4.0; + var cx = p[0], cy = p[1]; + var yOffset = 10; + var o = top ? -1 : 1; + var g = pxsim.svg.elt("g"); + var el = pxsim.svg.elt("rect"); + var h1 = plasticLength; + var w1 = plasticWidth; + var x1 = cx - w1 / 2; + var y1 = cy + yOffset - (h1 / 2); + pxsim.svg.hydrate(el, { x: x1, y: y1, width: w1, height: h1, rx: 0.5, ry: 0.5, class: "sim-bb-wire-end" }); + el.style["stroke-width"] = strokeWidth + "px"; + var el2 = pxsim.svg.elt("rect"); + var h2 = metalLength; + var w2 = metalWidth; + var cy2 = cy + yOffset + o * (h1 / 2 + h2 / 2); + var x2 = cx - w2 / 2; + var y2 = cy2 - (h2 / 2); + pxsim.svg.hydrate(el2, { x: x2, y: y2, width: w2, height: h2, class: "sim-bb-wire-bare-end" }); + el2.style["fill"] = "#bbb"; + g.appendChild(el2); + g.appendChild(el); + return { el: g, x: x1 - strokeWidth, y: Math.min(y1, y2), w: w1 + strokeWidth * 2, h: h1 + h2 }; + } + function mkCrocEnd(p, top, clr) { + //TODO: merge with mkOpenJumperEnd() + var k = visuals.PIN_DIST * 0.24; + var plasticWidth = k * 4; + var plasticLength = k * 10.0; + var metalWidth = k * 3.5; + var metalHeight = k * 3.5; + var pointScalar = .15; + var baseScalar = .3; + var taperScalar = .7; + var strokeWidth = visuals.PIN_DIST / 4.0; + var cx = p[0], cy = p[1]; + var o = top ? -1 : 1; + var g = pxsim.svg.elt("g"); + var el = pxsim.svg.elt("polygon"); + var h1 = plasticLength; + var w1 = plasticWidth; + var x1 = cx - w1 / 2; + var y1 = cy - (h1 / 2); + var mkPnt = function (xy) { return (xy[0] + "," + xy[1]); }; + var mkPnts = function () { + var xys = []; + for (var _i = 0; _i < arguments.length; _i++) { + xys[_i - 0] = arguments[_i]; + } + return xys.map(function (xy) { return mkPnt(xy); }).join(" "); + }; + var topScalar = top ? pointScalar : baseScalar; + var midScalar = top ? taperScalar : (1 - taperScalar); + var botScalar = top ? baseScalar : pointScalar; + pxsim.svg.hydrate(el, { + points: mkPnts([x1 + w1 * topScalar, y1], //TL + [x1 + w1 * (1 - topScalar), y1], //TR + [x1 + w1, y1 + h1 * midScalar], //MR + [x1 + w1 * (1 - botScalar), y1 + h1], //BR + [x1 + w1 * botScalar, y1 + h1], //BL + [x1, y1 + h1 * midScalar]) //ML + }); + pxsim.svg.hydrate(el, { rx: 0.5, ry: 0.5, class: "sim-bb-wire-end" }); + el.style["stroke-width"] = strokeWidth + "px"; + var el2 = pxsim.svg.elt("rect"); + var h2 = metalWidth; + var w2 = metalHeight; + var cy2 = cy + o * (h1 / 2 + h2 / 2); + var x2 = cx - w2 / 2; + var y2 = cy2 - (h2 / 2); + pxsim.svg.hydrate(el2, { x: x2, y: y2, width: w2, height: h2, class: "sim-bb-wire-bare-end" }); + g.appendChild(el2); + g.appendChild(el); + return { el: g, x: x1 - strokeWidth, y: Math.min(y1, y2), w: w1 + strokeWidth * 2, h: h1 + h2 }; + } + //TODO: make this stupid class obsolete + var WireFactory = (function () { + function WireFactory(underboard, overboard, boardEdges, styleEl, getLocCoord) { + this.nextWireId = 0; + this.styleEl = styleEl; + this.styleEl.textContent += visuals.WIRES_CSS; + this.underboard = underboard; + this.overboard = overboard; + this.boardEdges = boardEdges; + this.getLocCoord = getLocCoord; + } + WireFactory.prototype.indexOfMin = function (vs) { + var minIdx = 0; + var min = vs[0]; + for (var i = 1; i < vs.length; i++) { + if (vs[i] < min) { + min = vs[i]; + minIdx = i; + } + } + return minIdx; + }; + WireFactory.prototype.closestEdgeIdx = function (p) { + var dists = this.boardEdges.map(function (e) { return Math.abs(p[1] - e); }); + var edgeIdx = this.indexOfMin(dists); + return edgeIdx; + }; + WireFactory.prototype.closestEdge = function (p) { + return this.boardEdges[this.closestEdgeIdx(p)]; + }; + WireFactory.prototype.drawWire = function (pin1, pin2, color) { + var _this = this; + var wires = []; + var g = pxsim.svg.child(this.overboard, "g", { class: "sim-bb-wire-group" }); + var closestPointOffBoard = function (p) { + var offset = visuals.PIN_DIST / 2; + var e = _this.closestEdge(p); + var y; + if (e - p[1] < 0) + y = e - offset; + else + y = e + offset; + return [p[0], y]; + }; + var wireId = this.nextWireId++; + var clrClass = cssEncodeColor(color); + var end1 = mkBBJumperEnd(pin1, clrClass); + var end2 = mkBBJumperEnd(pin2, clrClass); + var endG = pxsim.svg.child(g, "g", { class: "sim-bb-wire-ends-g" }); + endG.appendChild(end1); + endG.appendChild(end2); + var edgeIdx1 = this.closestEdgeIdx(pin1); + var edgeIdx2 = this.closestEdgeIdx(pin2); + if (edgeIdx1 == edgeIdx2) { + var seg = mkWireSeg(pin1, pin2, clrClass); + g.appendChild(seg); + wires.push(seg); + } + else { + var offP1 = closestPointOffBoard(pin1); + var offP2 = closestPointOffBoard(pin2); + var offSeg1 = mkWireSeg(pin1, offP1, clrClass); + var offSeg2 = mkWireSeg(pin2, offP2, clrClass); + var midSeg = void 0; + var midSegHover = void 0; + var isBetweenMiddleTwoEdges = (edgeIdx1 == 1 || edgeIdx1 == 2) && (edgeIdx2 == 1 || edgeIdx2 == 2); + if (isBetweenMiddleTwoEdges) { + midSeg = mkCurvedWireSeg(offP1, offP2, BB_WIRE_SMOOTH, clrClass); + midSegHover = mkCurvedWireSeg(offP1, offP2, BB_WIRE_SMOOTH, clrClass); + } + else { + midSeg = mkWireSeg(offP1, offP2, clrClass); + midSegHover = mkWireSeg(offP1, offP2, clrClass); + } + pxsim.svg.addClass(midSegHover, "sim-bb-wire-hover"); + g.appendChild(offSeg1); + wires.push(offSeg1); + g.appendChild(offSeg2); + wires.push(offSeg2); + this.underboard.appendChild(midSeg); + wires.push(midSeg); + g.appendChild(midSegHover); + wires.push(midSegHover); + //set hover mechanism + var wireIdClass_1 = "sim-bb-wire-id-" + wireId; + var setId = function (e) { return pxsim.svg.addClass(e, wireIdClass_1); }; + setId(endG); + setId(midSegHover); + this.styleEl.textContent += "\n ." + wireIdClass_1 + ":hover ~ ." + wireIdClass_1 + ".sim-bb-wire-hover {\n visibility: visible;\n }"; + } + // wire colors + var colorCSS = "\n .wire-stroke-" + clrClass + " {\n stroke: " + visuals.mapWireColor(color) + ";\n }\n .wire-fill-" + clrClass + " {\n fill: " + visuals.mapWireColor(color) + ";\n }\n "; + this.styleEl.textContent += colorCSS; + return { endG: endG, end1: end1, end2: end2, wires: wires }; + }; + WireFactory.prototype.drawWireWithCrocs = function (pin1, pin2, color, smallPin) { + var _this = this; + if (smallPin === void 0) { smallPin = false; } + //TODO: merge with drawWire() + var PIN_Y_OFF = 40; + var CROC_Y_OFF = -17; + var wires = []; + var g = pxsim.svg.child(this.overboard, "g", { class: "sim-bb-wire-group" }); + var closestPointOffBoard = function (p) { + var offset = visuals.PIN_DIST / 2; + var e = _this.closestEdge(p); + var y; + if (e - p[1] < 0) + y = e - offset; + else + y = e + offset; + return [p[0], y]; + }; + var wireId = this.nextWireId++; + var clrClass = cssEncodeColor(color); + var end1 = mkBBJumperEnd(pin1, clrClass); + var pin2orig = pin2; + var x2 = pin2[0], y2 = pin2[1]; + pin2 = [x2, y2 + PIN_Y_OFF]; //HACK + x2 = pin2[0], y2 = pin2[1]; + var endCoord2 = [x2, y2 + CROC_Y_OFF]; + var end2AndSize; + if (smallPin) + end2AndSize = mkSmallMBPinEnd(endCoord2, true, color); + else + end2AndSize = mkCrocEnd(endCoord2, true, color); + var end2 = end2AndSize.el; + var endG = pxsim.svg.child(g, "g", { class: "sim-bb-wire-ends-g" }); + endG.appendChild(end1); + //endG.appendChild(end2); + var edgeIdx1 = this.closestEdgeIdx(pin1); + var edgeIdx2 = this.closestEdgeIdx(pin2orig); + if (edgeIdx1 == edgeIdx2) { + var seg = mkWireSeg(pin1, pin2, clrClass); + g.appendChild(seg); + wires.push(seg); + } + else { + var offP1 = closestPointOffBoard(pin1); + //let offP2 = closestPointOffBoard(pin2orig); + var offSeg1 = mkWireSeg(pin1, offP1, clrClass); + //let offSeg2 = mkWireSeg(pin2, offP2, clrClass); + var midSeg = void 0; + var midSegHover = void 0; + var isBetweenMiddleTwoEdges = (edgeIdx1 == 1 || edgeIdx1 == 2) && (edgeIdx2 == 1 || edgeIdx2 == 2); + if (isBetweenMiddleTwoEdges) { + midSeg = mkCurvedWireSeg(offP1, pin2, BB_WIRE_SMOOTH, clrClass); + midSegHover = mkCurvedWireSeg(offP1, pin2, BB_WIRE_SMOOTH, clrClass); + } + else { + midSeg = mkWireSeg(offP1, pin2, clrClass); + midSegHover = mkWireSeg(offP1, pin2, clrClass); + } + pxsim.svg.addClass(midSegHover, "sim-bb-wire-hover"); + g.appendChild(offSeg1); + wires.push(offSeg1); + // g.appendChild(offSeg2); + // wires.push(offSeg2); + this.underboard.appendChild(midSeg); + wires.push(midSeg); + //g.appendChild(midSegHover); + //wires.push(midSegHover); + //set hover mechanism + var wireIdClass_2 = "sim-bb-wire-id-" + wireId; + var setId = function (e) { return pxsim.svg.addClass(e, wireIdClass_2); }; + setId(endG); + setId(midSegHover); + this.styleEl.textContent += "\n ." + wireIdClass_2 + ":hover ~ ." + wireIdClass_2 + ".sim-bb-wire-hover {\n visibility: visible;\n }"; + } + endG.appendChild(end2); //HACK + // wire colors + var colorCSS = "\n .wire-stroke-" + clrClass + " {\n stroke: " + visuals.mapWireColor(color) + ";\n }\n .wire-fill-" + clrClass + " {\n fill: " + visuals.mapWireColor(color) + ";\n }\n "; + this.styleEl.textContent += colorCSS; + return { endG: endG, end1: end1, end2: end2, wires: wires }; + }; + WireFactory.prototype.addWire = function (start, end, color, withCrocs) { + if (withCrocs === void 0) { withCrocs = false; } + var startLoc = this.getLocCoord(start); + var endLoc = this.getLocCoord(end); + var wireEls; + if (withCrocs && end.type == "dalboard") { + var boardPin = end.pin; + if (boardPin == "P0" || boardPin == "P1" || boardPin == "P2" || boardPin == "GND" || boardPin == "+3v3") { + //HACK + wireEls = this.drawWireWithCrocs(startLoc, endLoc, color); + } + else { + wireEls = this.drawWireWithCrocs(startLoc, endLoc, color, true); + } + } + else { + wireEls = this.drawWire(startLoc, endLoc, color); + } + return wireEls; + }; + return WireFactory; + }()); + visuals.WireFactory = WireFactory; + })(visuals = pxsim.visuals || (pxsim.visuals = {})); +})(pxsim || (pxsim = {})); diff --git a/pxtwinrt.js b/pxtwinrt.js new file mode 100644 index 00000000..fc03f960 --- /dev/null +++ b/pxtwinrt.js @@ -0,0 +1,173 @@ +/// +/// +/// +var pxt; +(function (pxt) { + var winrt; + (function (winrt) { + function deployCoreAsync(res) { + var drives = pxt.appTarget.compile.deployDrives; + pxt.Util.assert(!!drives); + pxt.log("deploying to drives " + drives); + var drx = new RegExp(drives); + var r = res.outfiles[pxtc.BINARY_HEX]; + function writeAsync(folder) { + pxt.log("writing .hex to " + folder.displayName); + return pxt.winrt.promisify(folder.createFileAsync("firmware.hex", Windows.Storage.CreationCollisionOption.replaceExisting) + .then(function (file) { return Windows.Storage.FileIO.writeTextAsync(file, r); })).then(function (r) { }).catch(function (e) { + pxt.log("failed to write to " + folder.displayName + " - " + e); + }); + } + return pxt.winrt.promisify(Windows.Storage.KnownFolders.removableDevices.getFoldersAsync()) + .then(function (ds) { + var df = ds.filter(function (d) { return drx.test(d.displayName); }); + var pdf = df.map(writeAsync); + var all = Promise.join.apply(Promise, pdf); + return all; + }).then(function (r) { }); + } + winrt.deployCoreAsync = deployCoreAsync; + function browserDownloadAsync(text, name, contentType) { + var file; + return pxt.winrt.promisify(Windows.Storage.ApplicationData.current.temporaryFolder.createFileAsync(name, Windows.Storage.CreationCollisionOption.replaceExisting) + .then(function (f) { return Windows.Storage.FileIO.writeTextAsync(file = f, text); }) + .then(function () { return Windows.System.Launcher.launchFileAsync(file); }) + .then(function (b) { })); + } + winrt.browserDownloadAsync = browserDownloadAsync; + })(winrt = pxt.winrt || (pxt.winrt = {})); +})(pxt || (pxt = {})); +/// +var pxt; +(function (pxt) { + var winrt; + (function (winrt) { + var watcher; + var ports = {}; + var options; + function initSerial() { + if (!pxt.appTarget.serial + || !pxt.appTarget.serial.log + || !pxt.appTarget.serial.nameFilter) + return; + var filter = new RegExp(pxt.appTarget.serial.nameFilter); + var serialDeviceSelector = Windows.Devices.SerialCommunication.SerialDevice.getDeviceSelector(); + // Create a device watcher to look for instances of the Serial device + // The createWatcher() takes a string only when you provide it two arguments, so be sure to include an array as a second + // parameter (JavaScript can only recognize overloaded functions with different numbers of parameters). + watcher = Windows.Devices.Enumeration.DeviceInformation.createWatcher(serialDeviceSelector, []); + watcher.addEventListener("added", function (dis) { + winrt.toArray(dis.detail).forEach(function (di) { + if (!filter.test(di.name)) + return; + pxt.debug("serial port added " + di.name + " - " + di.id); + ports[di.id] = { + info: di + }; + Windows.Devices.SerialCommunication.SerialDevice.fromIdAsync(di.id) + .done(function (dev) { + ports[di.id].device = dev; + startDevice(di.id); + }); + }); + }); + watcher.addEventListener("removed", function (dis) { + winrt.toArray(dis.detail).forEach(function (di) { return delete ports[di.id]; }); + }); + watcher.addEventListener("updated", function (dis) { + winrt.toArray(dis.detail).forEach(function (di) { return ports[di.id] ? ports[di.id].info.update(di.info) : null; }); + }); + watcher.start(); + } + winrt.initSerial = initSerial; + function startDevice(id) { + var port = ports[id]; + if (!port) + return; + if (!port.device) { + var status_1 = Windows.Devices.Enumeration.DeviceAccessInformation.createFromId(id).currentStatus; + pxt.debug("device issue: " + status_1); + return; + } + port.device.baudRate = 115200; + var stream = port.device.inputStream; + var reader = new Windows.Storage.Streams.DataReader(stream); + var readMore = function () { return reader.loadAsync(32).done(function (bytesRead) { + var msg = reader.readString(Math.floor(bytesRead / 4) * 4); + window.postMessage({ + type: 'serial', + data: msg, + id: id + }, "*"); + readMore(); + }, function (e) { + setTimeout(function () { return startDevice(id); }, 1000); + }); }; + readMore(); + } + })(winrt = pxt.winrt || (pxt.winrt = {})); +})(pxt || (pxt = {})); +/// +var pxt; +(function (pxt) { + var winrt; + (function (winrt) { + function promisify(p) { + return new Promise(function (resolve, reject) { + p.done(function (v) { return resolve(v); }, function (e) { return reject(e); }); + }); + } + winrt.promisify = promisify; + function toArray(v) { + var r = []; + var length = v.length; + for (var i = 0; i < length; ++i) + r.push(v[i]); + return r; + } + winrt.toArray = toArray; + /** + * Detects if the script is running in a browser on windows + */ + function isWindows() { + return !!navigator && /Win32/i.test(navigator.platform); + } + winrt.isWindows = isWindows; + function isWinRT() { + return typeof Windows !== "undefined"; + } + winrt.isWinRT = isWinRT; + function initAsync(onHexFileImported) { + if (!isWinRT()) + return Promise.resolve(); + winrt.initSerial(); + if (onHexFileImported) + initActivation(onHexFileImported); + return Promise.resolve(); + } + winrt.initAsync = initAsync; + function initActivation(onHexFileImported) { + // Subscribe to the Windows Activation Event + Windows.UI.WebUI.WebUIApplication.addEventListener("activated", function (args) { + var activation = Windows.ApplicationModel.Activation; + if (args.kind === activation.ActivationKind.file) { + var info = args; + var file = info.files.getAt(0); + if (file && file.isOfType(Windows.Storage.StorageItemTypes.file)) { + var f = file; + Windows.Storage.FileIO.readBufferAsync(f) + .done(function (buffer) { + var ar = new Uint8Array(buffer.length); + var dataReader = Windows.Storage.Streams.DataReader.fromBuffer(buffer); + dataReader.readBytes(ar); + dataReader.close(); + pxt.cpp.unpackSourceFromHexAsync(ar) + .done(function (hex) { return onHexFileImported(hex); }); + }); + } + } + ; + }); + } + })(winrt = pxt.winrt || (pxt.winrt = {})); +})(pxt || (pxt = {})); diff --git a/release.manifest b/release.manifest new file mode 100644 index 00000000..20d606aa --- /dev/null +++ b/release.manifest @@ -0,0 +1,56 @@ +CACHE MANIFEST + +CACHE: +/pxt-calliope/semantic.js +/pxt-calliope/main.js +/pxt-calliope/typescript.js +/pxt-calliope/marked/marked.min.js +/pxt-calliope/highlight.js/highlight.pack.js +/pxt-calliope/lzma/lzma_worker-min.js +/pxt-calliope/jquery.js +/pxt-calliope/pxtlib.js +/pxt-calliope/pxtblocks.js +/pxt-calliope/pxtwinrt.js +/pxt-calliope/pxteditor.js +/pxt-calliope/pxtsim.js +/pxt-calliope/semantic.css +/pxt-calliope/custom.css +/pxt-calliope/icons.css +/pxt-calliope/fonts/icons.woff2 + + + +# blockly +/pxt-calliope/blockly/blockly_compressed.js +/pxt-calliope/blockly/blocks_compressed.js +/pxt-calliope/blockly/msg/js/en.js +/pxt-calliope/blockly/media/sprites.png +/pxt-calliope/blockly/media/click.mp3 +/pxt-calliope/blockly/media/disconnect.wav +/pxt-calliope/blockly/media/delete.mp3 + +# monaco +/pxt-calliope/vs/loader.js +/pxt-calliope/vs/base/worker/workerMain.js +/pxt-calliope/vs/basic-languages/src/bat.js +/pxt-calliope/vs/basic-languages/src/cpp.js +/pxt-calliope/vs/editor/editor.main.css +/pxt-calliope/vs/editor/editor.main.js +/pxt-calliope/vs/editor/editor.main.nls.js +/pxt-calliope/vs/language/json/jsonMode.js +/pxt-calliope/vs/language/json/jsonWorker.js +/pxt-calliope/vs/language/typescript/lib/typescriptServices.js +/pxt-calliope/vs/language/typescript/src/mode.js +/pxt-calliope/vs/language/typescript/src/worker.js +/pxt-calliope/monacoworker.js + +# ai +https://az416426.vo.msecnd.net/scripts/a/ai.0.js + +/pxt-calliope/worker.js +# ver Sat Aug 19 2017 17:16:32 GMT+0200 (CEST) + +/pxt-calliope/target.js + +NETWORK: +* diff --git a/run.html b/run.html new file mode 100644 index 00000000..473df8da --- /dev/null +++ b/run.html @@ -0,0 +1,157 @@ + + + + + + simulator + + + + +
+ loading... +
+
+
+
+
+ + + + + + + + \ No newline at end of file diff --git a/runnertest.html b/runnertest.html new file mode 100644 index 00000000..bbfdb5e0 --- /dev/null +++ b/runnertest.html @@ -0,0 +1,230 @@ + + + + + + PXT Runner Test + + + +
+ loading +
...
+
+ + + + + + + + + +
+
+tqnxfpkndd
+
+
+
+
+https://pxt.microbit.org/tqnxfpkndd
+
+
+ + + + + + + \ No newline at end of file diff --git a/semantic.css b/semantic.css new file mode 100644 index 00000000..97b83b1c --- /dev/null +++ b/semantic.css @@ -0,0 +1,65488 @@ +/* Import all components */ +/* + +███████╗███████╗███╗ ███╗ █████╗ ███╗ ██╗████████╗██╗ ██████╗ ██╗ ██╗██╗ +██╔════╝██╔════╝████╗ ████║██╔══██╗████╗ ██║╚══██╔══╝██║██╔════╝ ██║ ██║██║ +███████╗█████╗ ██╔████╔██║███████║██╔██╗ ██║ ██║ ██║██║ ██║ ██║██║ +╚════██║██╔══╝ ██║╚██╔╝██║██╔══██║██║╚██╗██║ ██║ ██║██║ ██║ ██║██║ +███████║███████╗██║ ╚═╝ ██║██║ ██║██║ ╚████║ ██║ ██║╚██████╗ ╚██████╔╝██║ +╚══════╝╚══════╝╚═╝ ╚═╝╚═╝ ╚═╝╚═╝ ╚═══╝ ╚═╝ ╚═╝ ╚═════╝ ╚═════╝ ╚═╝ + + Import this file into your LESS project to use Semantic UI without build tools +*/ +/* Global */ +/*! + * # Semantic UI - Reset + * http://github.com/semantic-org/semantic-ui/ + * + * + * Released under the MIT license + * http://opensource.org/licenses/MIT + * + */ +/******************************* + Theme +*******************************/ +/* + +████████╗██╗ ██╗███████╗███╗ ███╗███████╗███████╗ +╚══██╔══╝██║ ██║██╔════╝████╗ ████║██╔════╝██╔════╝ + ██║ ███████║█████╗ ██╔████╔██║█████╗ ███████╗ + ██║ ██╔══██║██╔══╝ ██║╚██╔╝██║██╔══╝ ╚════██║ + ██║ ██║ ██║███████╗██║ ╚═╝ ██║███████╗███████║ + ╚═╝ ╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝╚══════╝╚══════╝ + +*/ +/******************************* + Theme Selection +*******************************/ +/* To override a theme for an individual element + specify theme name below +*/ +/* Global */ +/* Elements */ +/* Collections */ +/* Modules */ +/* Views */ +/******************************* + Folders +*******************************/ +/* Path to theme packages */ +/* Path to site override folder */ +/******************************* + Import Theme +*******************************/ +/******************************* + Import Directives +*******************************/ +/*------------------ + Theme +-------------------*/ +/*-------------------- + Site Variables +---------------------*/ +/* Default site.variables */ +/******************************* + Site Settings +*******************************/ +/*------------------- + Fonts +--------------------*/ +/*------------------- + Base Sizes +--------------------*/ +/* This is the single variable that controls them all */ +/* The size of page text */ +/*------------------- + Border Radius +--------------------*/ +/* See Power-user section below + for explanation of @px variables +*/ +/*------------------- + Brand Colors +--------------------*/ +/*-------------- + Page Heading +---------------*/ +/*-------------- + Form Input +---------------*/ +/* This adjusts the default form input across all elements */ +/* Input Text Color */ +/* Line Height Default For Inputs in Browser (Descendors are 17px at 14px base em) */ +/*------------------- + Focused Input +--------------------*/ +/* Used on inputs, textarea etc */ +/* Used on dropdowns, other larger blocks */ +/*------------------- + Sizes +--------------------*/ +/* + Sizes are all expressed in terms of 14px/em (default em) + This ensures these "ratios" remain constant despite changes in EM +*/ +/*------------------- + Page +--------------------*/ +/*------------------- + Paragraph +--------------------*/ +/*------------------- + Links +--------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ +/*------------------- + Highlighted Text +--------------------*/ +/*------------------- + Loader +--------------------*/ +/*------------------- + Grid +--------------------*/ +/*------------------- + Transitions +--------------------*/ +/*------------------- + Breakpoints +--------------------*/ +/*------------------- + Site Colors +--------------------*/ +/*--- Colors ---*/ +/*--- Light Colors ---*/ +/*--- Neutrals ---*/ +/*--- Colored Backgrounds ---*/ +/*--- Colored Headers ---*/ +/*--- Colored Text ---*/ +/*--- Colored Border ---*/ +/*------------------- + Alpha Colors +--------------------*/ +/*------------------- + Accents +--------------------*/ +/* Differentiating Neutrals */ +/* Differentiating Layers */ +/******************************* + Power-User +*******************************/ +/*------------------- + Emotive Colors +--------------------*/ +/* Positive */ +/* Negative */ +/* Info */ +/* Warning */ +/*------------------- + Paths +--------------------*/ +/* For source only. Modified in gulp for dist */ +/*------------------- + Em Sizes +--------------------*/ +/* + This rounds @size values to the closest pixel then expresses that value in (r)em. + This ensures all size values round to exact pixels +*/ +/* em */ +/* rem */ +/*------------------- + Icons +--------------------*/ +/* Maximum Glyph Width of Icon */ +/*------------------- + Neutral Text +--------------------*/ +/*------------------- + Brand Colors +--------------------*/ +/*------------------- + Borders +--------------------*/ +/*------------------- + Derived Values +--------------------*/ +/* Loaders Position Offset */ +/* Rendered Scrollbar Width */ +/* Maximum Single Character Glyph Width, aka Capital "W" */ +/* Used to match floats with text */ +/* Header Spacing */ +/* Minimum Mobile Width */ +/* Positive / Negative Dupes */ +/* Responsive */ +/*------------------- + Exact Pixel Values +--------------------*/ +/* + These are used to specify exact pixel values in em + for things like borders that remain constantly + sized as emSize adjusts + + Since there are many more sizes than names for sizes, + these are named by their original pixel values. + +*/ +/* Columns */ +/******************************* + States +*******************************/ +/*------------------- + Disabled +--------------------*/ +/*------------------- + Hover +--------------------*/ +/*--- Shadows ---*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Focus +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Down (:active) +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Active +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/* Packaged site.variables */ +/******************************* + User Global Variables +*******************************/ +/*------------------- + Fonts +--------------------*/ +/*------------------- + Breakpoints +--------------------*/ +/* +@mobileBreakpoint : unit( (63 * @emSize), px); +@tabletBreakpoint : unit( (79 * @emSize), px); +@computerBreakpoint : unit( (91 * @emSize), px); +@largeMonitorBreakpoint : unit( (99 * @emSize), px); +@widescreenMonitorBreakpoint : unit( (119 * @emSize), px); +*/ +/******************************* + PXT Variables +*******************************/ +/*------------------- + Menu +--------------------*/ +/*------------------- + Layout +--------------------*/ +/*------------------- + Background +--------------------*/ +/*------------------- + Full screen +--------------------*/ +/*------------------- + Side Docs +--------------------*/ +/*------------------- + Editor +--------------------*/ +/* Component's site.variables */ +/******************************* + Site Settings +*******************************/ +/*------------------- + Fonts +--------------------*/ +/*------------------- + Base Sizes +--------------------*/ +/* This is the single variable that controls them all */ +/* The size of page text */ +/*------------------- + Border Radius +--------------------*/ +/* See Power-user section below + for explanation of @px variables +*/ +/*------------------- + Brand Colors +--------------------*/ +/*-------------- + Page Heading +---------------*/ +/*-------------- + Form Input +---------------*/ +/* This adjusts the default form input across all elements */ +/* Input Text Color */ +/* Line Height Default For Inputs in Browser (Descendors are 17px at 14px base em) */ +/*------------------- + Focused Input +--------------------*/ +/* Used on inputs, textarea etc */ +/* Used on dropdowns, other larger blocks */ +/*------------------- + Sizes +--------------------*/ +/* + Sizes are all expressed in terms of 14px/em (default em) + This ensures these "ratios" remain constant despite changes in EM +*/ +/*------------------- + Page +--------------------*/ +/*------------------- + Paragraph +--------------------*/ +/*------------------- + Links +--------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ +/*------------------- + Highlighted Text +--------------------*/ +/*------------------- + Loader +--------------------*/ +/*------------------- + Grid +--------------------*/ +/*------------------- + Transitions +--------------------*/ +/*------------------- + Breakpoints +--------------------*/ +/*------------------- + Site Colors +--------------------*/ +/*--- Colors ---*/ +/*--- Light Colors ---*/ +/*--- Neutrals ---*/ +/*--- Colored Backgrounds ---*/ +/*--- Colored Headers ---*/ +/*--- Colored Text ---*/ +/*--- Colored Border ---*/ +/*------------------- + Alpha Colors +--------------------*/ +/*------------------- + Accents +--------------------*/ +/* Differentiating Neutrals */ +/* Differentiating Layers */ +/******************************* + Power-User +*******************************/ +/*------------------- + Emotive Colors +--------------------*/ +/* Positive */ +/* Negative */ +/* Info */ +/* Warning */ +/*------------------- + Paths +--------------------*/ +/* For source only. Modified in gulp for dist */ +/*------------------- + Em Sizes +--------------------*/ +/* + This rounds @size values to the closest pixel then expresses that value in (r)em. + This ensures all size values round to exact pixels +*/ +/* em */ +/* rem */ +/*------------------- + Icons +--------------------*/ +/* Maximum Glyph Width of Icon */ +/*------------------- + Neutral Text +--------------------*/ +/*------------------- + Brand Colors +--------------------*/ +/*------------------- + Borders +--------------------*/ +/*------------------- + Derived Values +--------------------*/ +/* Loaders Position Offset */ +/* Rendered Scrollbar Width */ +/* Maximum Single Character Glyph Width, aka Capital "W" */ +/* Used to match floats with text */ +/* Header Spacing */ +/* Minimum Mobile Width */ +/* Positive / Negative Dupes */ +/* Responsive */ +/*------------------- + Exact Pixel Values +--------------------*/ +/* + These are used to specify exact pixel values in em + for things like borders that remain constantly + sized as emSize adjusts + + Since there are many more sizes than names for sizes, + these are named by their original pixel values. + +*/ +/* Columns */ +/******************************* + States +*******************************/ +/*------------------- + Disabled +--------------------*/ +/*------------------- + Hover +--------------------*/ +/*--- Shadows ---*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Focus +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Down (:active) +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Active +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/* Site theme site.variables */ +/******************************* + User Global Variables +*******************************/ +/*------------------- + Site Colors +--------------------*/ +/******************************* + PXT Overrides +*******************************/ +/*------------------- + Component Variables +---------------------*/ +/* Default */ +/******************************* + Reset +*******************************/ +/* Packaged Theme */ +/******************************* + Reset +*******************************/ +/* Site Theme */ +/******************************* + User Global Variables +*******************************/ +/******************************* + Mix-ins +*******************************/ +/*------------------ + Fonts +-------------------*/ +/*------------------ + Overrides +-------------------*/ +/* End Config */ +/******************************* + Reset +*******************************/ +/* Border-Box */ +@import url('https://fonts.googleapis.com/css?family=Roboto Mono:400,700,400italic,700italic&subset=latin'); +*, +*:before, +*:after { + box-sizing: inherit; +} +html { + box-sizing: border-box; +} +/* iPad Input Shadows */ +input[type="text"], +input[type="email"], +input[type="search"], +input[type="password"] { + -webkit-appearance: none; + -moz-appearance: none; + /* mobile firefox too! */ +} +/*! normalize.css v7.0.0 | MIT License | github.com/necolas/normalize.css */ +/* Document + ========================================================================== */ +/** + * 1. Correct the line height in all browsers. + * 2. Prevent adjustments of font size after orientation changes in + * IE on Windows Phone and in iOS. + */ +html { + line-height: 1.15; + /* 1 */ + -ms-text-size-adjust: 100%; + /* 2 */ + -webkit-text-size-adjust: 100%; + /* 2 */ +} +/* Sections + ========================================================================== */ +/** + * Remove the margin in all browsers (opinionated). + */ +body { + margin: 0; +} +/** + * Add the correct display in IE 9-. + */ +article, +aside, +footer, +header, +nav, +section { + display: block; +} +/** + * Correct the font size and margin on `h1` elements within `section` and + * `article` contexts in Chrome, Firefox, and Safari. + */ +h1 { + font-size: 2em; + margin: 0.67em 0; +} +/* Grouping content + ========================================================================== */ +/** + * Add the correct display in IE 9-. + * 1. Add the correct display in IE. + */ +figcaption, +figure, +main { + /* 1 */ + display: block; +} +/** + * Add the correct margin in IE 8. + */ +figure { + margin: 1em 40px; +} +/** + * 1. Add the correct box sizing in Firefox. + * 2. Show the overflow in Edge and IE. + */ +hr { + box-sizing: content-box; + /* 1 */ + height: 0; + /* 1 */ + overflow: visible; + /* 2 */ +} +/** + * 1. Correct the inheritance and scaling of font size in all browsers. + * 2. Correct the odd `em` font sizing in all browsers. + */ +pre { + font-family: monospace, monospace; + /* 1 */ + font-size: 1em; + /* 2 */ +} +/* Text-level semantics + ========================================================================== */ +/** + * 1. Remove the gray background on active links in IE 10. + * 2. Remove gaps in links underline in iOS 8+ and Safari 8+. + */ +a { + background-color: transparent; + /* 1 */ + -webkit-text-decoration-skip: objects; + /* 2 */ +} +/** + * 1. Remove the bottom border in Chrome 57- and Firefox 39-. + * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari. + */ +abbr[title] { + border-bottom: none; + /* 1 */ + text-decoration: underline; + /* 2 */ + text-decoration: underline dotted; + /* 2 */ +} +/** + * Prevent the duplicate application of `bolder` by the next rule in Safari 6. + */ +b, +strong { + font-weight: inherit; +} +/** + * Add the correct font weight in Chrome, Edge, and Safari. + */ +b, +strong { + font-weight: bolder; +} +/** + * 1. Correct the inheritance and scaling of font size in all browsers. + * 2. Correct the odd `em` font sizing in all browsers. + */ +code, +kbd, +samp { + font-family: monospace, monospace; + /* 1 */ + font-size: 1em; + /* 2 */ +} +/** + * Add the correct font style in Android 4.3-. + */ +dfn { + font-style: italic; +} +/** + * Add the correct background and color in IE 9-. + */ +mark { + background-color: #ff0; + color: #000; +} +/** + * Add the correct font size in all browsers. + */ +small { + font-size: 80%; +} +/** + * Prevent `sub` and `sup` elements from affecting the line height in + * all browsers. + */ +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} +sub { + bottom: -0.25em; +} +sup { + top: -0.5em; +} +/* Embedded content + ========================================================================== */ +/** + * Add the correct display in IE 9-. + */ +audio, +video { + display: inline-block; +} +/** + * Add the correct display in iOS 4-7. + */ +audio:not([controls]) { + display: none; + height: 0; +} +/** + * Remove the border on images inside links in IE 10-. + */ +img { + border-style: none; +} +/** + * Hide the overflow in IE. + */ +svg:not(:root) { + overflow: hidden; +} +/* Forms + ========================================================================== */ +/** + * 1. Change the font styles in all browsers (opinionated). + * 2. Remove the margin in Firefox and Safari. + */ +button, +input, +optgroup, +select, +textarea { + font-family: sans-serif; + /* 1 */ + font-size: 100%; + /* 1 */ + line-height: 1.15; + /* 1 */ + margin: 0; + /* 2 */ +} +/** + * Show the overflow in IE. + * 1. Show the overflow in Edge. + */ +button, +input { + /* 1 */ + overflow: visible; +} +/** + * Remove the inheritance of text transform in Edge, Firefox, and IE. + * 1. Remove the inheritance of text transform in Firefox. + */ +button, +select { + /* 1 */ + text-transform: none; +} +/** + * 1. Prevent a WebKit bug where (2) destroys native `audio` and `video` + * controls in Android 4. + * 2. Correct the inability to style clickable types in iOS and Safari. + */ +button, +html [type="button"], +[type="reset"], +[type="submit"] { + -webkit-appearance: button; + /* 2 */ +} +/** + * Remove the inner border and padding in Firefox. + */ +button::-moz-focus-inner, +[type="button"]::-moz-focus-inner, +[type="reset"]::-moz-focus-inner, +[type="submit"]::-moz-focus-inner { + border-style: none; + padding: 0; +} +/** + * Restore the focus styles unset by the previous rule. + */ +button:-moz-focusring, +[type="button"]:-moz-focusring, +[type="reset"]:-moz-focusring, +[type="submit"]:-moz-focusring { + outline: 1px dotted ButtonText; +} +/** + * Correct the padding in Firefox. + */ +fieldset { + padding: 0.35em 0.75em 0.625em; +} +/** + * 1. Correct the text wrapping in Edge and IE. + * 2. Correct the color inheritance from `fieldset` elements in IE. + * 3. Remove the padding so developers are not caught out when they zero out + * `fieldset` elements in all browsers. + */ +legend { + box-sizing: border-box; + /* 1 */ + color: inherit; + /* 2 */ + display: table; + /* 1 */ + max-width: 100%; + /* 1 */ + padding: 0; + /* 3 */ + white-space: normal; + /* 1 */ +} +/** + * 1. Add the correct display in IE 9-. + * 2. Add the correct vertical alignment in Chrome, Firefox, and Opera. + */ +progress { + display: inline-block; + /* 1 */ + vertical-align: baseline; + /* 2 */ +} +/** + * Remove the default vertical scrollbar in IE. + */ +textarea { + overflow: auto; +} +/** + * 1. Add the correct box sizing in IE 10-. + * 2. Remove the padding in IE 10-. + */ +[type="checkbox"], +[type="radio"] { + box-sizing: border-box; + /* 1 */ + padding: 0; + /* 2 */ +} +/** + * Correct the cursor style of increment and decrement buttons in Chrome. + */ +[type="number"]::-webkit-inner-spin-button, +[type="number"]::-webkit-outer-spin-button { + height: auto; +} +/** + * 1. Correct the odd appearance in Chrome and Safari. + * 2. Correct the outline style in Safari. + */ +[type="search"] { + -webkit-appearance: textfield; + /* 1 */ + outline-offset: -2px; + /* 2 */ +} +/** + * Remove the inner padding and cancel buttons in Chrome and Safari on macOS. + */ +[type="search"]::-webkit-search-cancel-button, +[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} +/** + * 1. Correct the inability to style clickable types in iOS and Safari. + * 2. Change font properties to `inherit` in Safari. + */ +::-webkit-file-upload-button { + -webkit-appearance: button; + /* 1 */ + font: inherit; + /* 2 */ +} +/* Interactive + ========================================================================== */ +/* + * Add the correct display in IE 9-. + * 1. Add the correct display in Edge, IE, and Firefox. + */ +details, +menu { + display: block; +} +/* + * Add the correct display in all browsers. + */ +summary { + display: list-item; +} +/* Scripting + ========================================================================== */ +/** + * Add the correct display in IE 9-. + */ +canvas { + display: inline-block; +} +/** + * Add the correct display in IE. + */ +template { + display: none; +} +/* Hidden + ========================================================================== */ +/** + * Add the correct display in IE 10-. + */ +[hidden] { + display: none; +} +/******************************* + Site Overrides +*******************************/ +/*! + * # Semantic UI - Site + * http://github.com/semantic-org/semantic-ui/ + * + * + * Released under the MIT license + * http://opensource.org/licenses/MIT + * + */ +/******************************* + Theme +*******************************/ +/* + +████████╗██╗ ██╗███████╗███╗ ███╗███████╗███████╗ +╚══██╔══╝██║ ██║██╔════╝████╗ ████║██╔════╝██╔════╝ + ██║ ███████║█████╗ ██╔████╔██║█████╗ ███████╗ + ██║ ██╔══██║██╔══╝ ██║╚██╔╝██║██╔══╝ ╚════██║ + ██║ ██║ ██║███████╗██║ ╚═╝ ██║███████╗███████║ + ╚═╝ ╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝╚══════╝╚══════╝ + +*/ +/******************************* + Theme Selection +*******************************/ +/* To override a theme for an individual element + specify theme name below +*/ +/* Global */ +/* Elements */ +/* Collections */ +/* Modules */ +/* Views */ +/******************************* + Folders +*******************************/ +/* Path to theme packages */ +/* Path to site override folder */ +/******************************* + Import Theme +*******************************/ +/******************************* + Import Directives +*******************************/ +/*------------------ + Theme +-------------------*/ +/*-------------------- + Site Variables +---------------------*/ +/* Default site.variables */ +/******************************* + Site Settings +*******************************/ +/*------------------- + Fonts +--------------------*/ +/*------------------- + Base Sizes +--------------------*/ +/* This is the single variable that controls them all */ +/* The size of page text */ +/*------------------- + Border Radius +--------------------*/ +/* See Power-user section below + for explanation of @px variables +*/ +/*------------------- + Brand Colors +--------------------*/ +/*-------------- + Page Heading +---------------*/ +/*-------------- + Form Input +---------------*/ +/* This adjusts the default form input across all elements */ +/* Input Text Color */ +/* Line Height Default For Inputs in Browser (Descendors are 17px at 14px base em) */ +/*------------------- + Focused Input +--------------------*/ +/* Used on inputs, textarea etc */ +/* Used on dropdowns, other larger blocks */ +/*------------------- + Sizes +--------------------*/ +/* + Sizes are all expressed in terms of 14px/em (default em) + This ensures these "ratios" remain constant despite changes in EM +*/ +/*------------------- + Page +--------------------*/ +/*------------------- + Paragraph +--------------------*/ +/*------------------- + Links +--------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ +/*------------------- + Highlighted Text +--------------------*/ +/*------------------- + Loader +--------------------*/ +/*------------------- + Grid +--------------------*/ +/*------------------- + Transitions +--------------------*/ +/*------------------- + Breakpoints +--------------------*/ +/*------------------- + Site Colors +--------------------*/ +/*--- Colors ---*/ +/*--- Light Colors ---*/ +/*--- Neutrals ---*/ +/*--- Colored Backgrounds ---*/ +/*--- Colored Headers ---*/ +/*--- Colored Text ---*/ +/*--- Colored Border ---*/ +/*------------------- + Alpha Colors +--------------------*/ +/*------------------- + Accents +--------------------*/ +/* Differentiating Neutrals */ +/* Differentiating Layers */ +/******************************* + Power-User +*******************************/ +/*------------------- + Emotive Colors +--------------------*/ +/* Positive */ +/* Negative */ +/* Info */ +/* Warning */ +/*------------------- + Paths +--------------------*/ +/* For source only. Modified in gulp for dist */ +/*------------------- + Em Sizes +--------------------*/ +/* + This rounds @size values to the closest pixel then expresses that value in (r)em. + This ensures all size values round to exact pixels +*/ +/* em */ +/* rem */ +/*------------------- + Icons +--------------------*/ +/* Maximum Glyph Width of Icon */ +/*------------------- + Neutral Text +--------------------*/ +/*------------------- + Brand Colors +--------------------*/ +/*------------------- + Borders +--------------------*/ +/*------------------- + Derived Values +--------------------*/ +/* Loaders Position Offset */ +/* Rendered Scrollbar Width */ +/* Maximum Single Character Glyph Width, aka Capital "W" */ +/* Used to match floats with text */ +/* Header Spacing */ +/* Minimum Mobile Width */ +/* Positive / Negative Dupes */ +/* Responsive */ +/*------------------- + Exact Pixel Values +--------------------*/ +/* + These are used to specify exact pixel values in em + for things like borders that remain constantly + sized as emSize adjusts + + Since there are many more sizes than names for sizes, + these are named by their original pixel values. + +*/ +/* Columns */ +/******************************* + States +*******************************/ +/*------------------- + Disabled +--------------------*/ +/*------------------- + Hover +--------------------*/ +/*--- Shadows ---*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Focus +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Down (:active) +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Active +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/* Packaged site.variables */ +/******************************* + User Global Variables +*******************************/ +/*------------------- + Fonts +--------------------*/ +/*------------------- + Breakpoints +--------------------*/ +/* +@mobileBreakpoint : unit( (63 * @emSize), px); +@tabletBreakpoint : unit( (79 * @emSize), px); +@computerBreakpoint : unit( (91 * @emSize), px); +@largeMonitorBreakpoint : unit( (99 * @emSize), px); +@widescreenMonitorBreakpoint : unit( (119 * @emSize), px); +*/ +/******************************* + PXT Variables +*******************************/ +/*------------------- + Menu +--------------------*/ +/*------------------- + Layout +--------------------*/ +/*------------------- + Background +--------------------*/ +/*------------------- + Full screen +--------------------*/ +/*------------------- + Side Docs +--------------------*/ +/*------------------- + Editor +--------------------*/ +/* Component's site.variables */ +/******************************* + User Global Variables +*******************************/ +/*------------------- + Fonts +--------------------*/ +/*------------------- + Breakpoints +--------------------*/ +/* +@mobileBreakpoint : unit( (63 * @emSize), px); +@tabletBreakpoint : unit( (79 * @emSize), px); +@computerBreakpoint : unit( (91 * @emSize), px); +@largeMonitorBreakpoint : unit( (99 * @emSize), px); +@widescreenMonitorBreakpoint : unit( (119 * @emSize), px); +*/ +/******************************* + PXT Variables +*******************************/ +/*------------------- + Menu +--------------------*/ +/*------------------- + Layout +--------------------*/ +/*------------------- + Background +--------------------*/ +/*------------------- + Full screen +--------------------*/ +/*------------------- + Side Docs +--------------------*/ +/*------------------- + Editor +--------------------*/ +/* Site theme site.variables */ +/******************************* + User Global Variables +*******************************/ +/*------------------- + Site Colors +--------------------*/ +/******************************* + PXT Overrides +*******************************/ +/*------------------- + Component Variables +---------------------*/ +/* Default */ +/******************************* + Site Settings +*******************************/ +/*------------------- + Fonts +--------------------*/ +/*------------------- + Base Sizes +--------------------*/ +/* This is the single variable that controls them all */ +/* The size of page text */ +/*------------------- + Border Radius +--------------------*/ +/* See Power-user section below + for explanation of @px variables +*/ +/*------------------- + Brand Colors +--------------------*/ +/*-------------- + Page Heading +---------------*/ +/*-------------- + Form Input +---------------*/ +/* This adjusts the default form input across all elements */ +/* Input Text Color */ +/* Line Height Default For Inputs in Browser (Descendors are 17px at 14px base em) */ +/*------------------- + Focused Input +--------------------*/ +/* Used on inputs, textarea etc */ +/* Used on dropdowns, other larger blocks */ +/*------------------- + Sizes +--------------------*/ +/* + Sizes are all expressed in terms of 14px/em (default em) + This ensures these "ratios" remain constant despite changes in EM +*/ +/*------------------- + Page +--------------------*/ +/*------------------- + Paragraph +--------------------*/ +/*------------------- + Links +--------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ +/*------------------- + Highlighted Text +--------------------*/ +/*------------------- + Loader +--------------------*/ +/*------------------- + Grid +--------------------*/ +/*------------------- + Transitions +--------------------*/ +/*------------------- + Breakpoints +--------------------*/ +/*------------------- + Site Colors +--------------------*/ +/*--- Colors ---*/ +/*--- Light Colors ---*/ +/*--- Neutrals ---*/ +/*--- Colored Backgrounds ---*/ +/*--- Colored Headers ---*/ +/*--- Colored Text ---*/ +/*--- Colored Border ---*/ +/*------------------- + Alpha Colors +--------------------*/ +/*------------------- + Accents +--------------------*/ +/* Differentiating Neutrals */ +/* Differentiating Layers */ +/******************************* + Power-User +*******************************/ +/*------------------- + Emotive Colors +--------------------*/ +/* Positive */ +/* Negative */ +/* Info */ +/* Warning */ +/*------------------- + Paths +--------------------*/ +/* For source only. Modified in gulp for dist */ +/*------------------- + Em Sizes +--------------------*/ +/* + This rounds @size values to the closest pixel then expresses that value in (r)em. + This ensures all size values round to exact pixels +*/ +/* em */ +/* rem */ +/*------------------- + Icons +--------------------*/ +/* Maximum Glyph Width of Icon */ +/*------------------- + Neutral Text +--------------------*/ +/*------------------- + Brand Colors +--------------------*/ +/*------------------- + Borders +--------------------*/ +/*------------------- + Derived Values +--------------------*/ +/* Loaders Position Offset */ +/* Rendered Scrollbar Width */ +/* Maximum Single Character Glyph Width, aka Capital "W" */ +/* Used to match floats with text */ +/* Header Spacing */ +/* Minimum Mobile Width */ +/* Positive / Negative Dupes */ +/* Responsive */ +/*------------------- + Exact Pixel Values +--------------------*/ +/* + These are used to specify exact pixel values in em + for things like borders that remain constantly + sized as emSize adjusts + + Since there are many more sizes than names for sizes, + these are named by their original pixel values. + +*/ +/* Columns */ +/******************************* + States +*******************************/ +/*------------------- + Disabled +--------------------*/ +/*------------------- + Hover +--------------------*/ +/*--- Shadows ---*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Focus +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Down (:active) +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Active +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/* Packaged Theme */ +/******************************* + User Global Variables +*******************************/ +/*------------------- + Fonts +--------------------*/ +/*------------------- + Breakpoints +--------------------*/ +/* +@mobileBreakpoint : unit( (63 * @emSize), px); +@tabletBreakpoint : unit( (79 * @emSize), px); +@computerBreakpoint : unit( (91 * @emSize), px); +@largeMonitorBreakpoint : unit( (99 * @emSize), px); +@widescreenMonitorBreakpoint : unit( (119 * @emSize), px); +*/ +/******************************* + PXT Variables +*******************************/ +/*------------------- + Menu +--------------------*/ +/*------------------- + Layout +--------------------*/ +/*------------------- + Background +--------------------*/ +/*------------------- + Full screen +--------------------*/ +/*------------------- + Side Docs +--------------------*/ +/*------------------- + Editor +--------------------*/ +/* Site Theme */ +/******************************* + User Global Variables +*******************************/ +/*------------------- + Site Colors +--------------------*/ +/******************************* + PXT Overrides +*******************************/ +/******************************* + Mix-ins +*******************************/ +/*------------------ + Fonts +-------------------*/ +/*------------------ + Overrides +-------------------*/ +/* End Config */ +/******************************* + Page +*******************************/ +html, +body { + height: 100%; +} +html { + font-size: 14px; +} +body { + margin: 0px; + padding: 0px; + overflow-x: hidden; + min-width: 320px; + background: #FDFDFA; + font-family: 'Roboto Mono', 'Helvetica Neue', Arial, Helvetica, sans-serif; + font-size: 13px; + line-height: 1.4285em; + color: rgba(0, 0, 0, 0.87); + font-smoothing: antialiased; +} +/******************************* + Headers +*******************************/ +h1, +h2, +h3, +h4, +h5 { + font-family: 'Roboto Mono', 'Helvetica Neue', Arial, Helvetica, sans-serif; + line-height: 1.28571429em; + margin: calc(2rem - 0.14285714em ) 0em 1rem; + font-weight: bold; + padding: 0em; +} +h1 { + min-height: 1rem; + font-size: 2rem; +} +h2 { + font-size: 1.71428571rem; +} +h3 { + font-size: 1.28571429rem; +} +h4 { + font-size: 1.07142857rem; +} +h5 { + font-size: 1rem; +} +h1:first-child, +h2:first-child, +h3:first-child, +h4:first-child, +h5:first-child { + margin-top: 0em; +} +h1:last-child, +h2:last-child, +h3:last-child, +h4:last-child, +h5:last-child { + margin-bottom: 0em; +} +/******************************* + Text +*******************************/ +p { + margin: 0em 0em 1em; + line-height: 1.4285em; +} +p:first-child { + margin-top: 0em; +} +p:last-child { + margin-bottom: 0em; +} +/*------------------- + Links +--------------------*/ +a { + color: #4183C4; + text-decoration: none; +} +a:hover { + color: #1e70bf; + text-decoration: none; +} +/******************************* + Scrollbars +*******************************/ +/******************************* + Highlighting +*******************************/ +/* Site */ +::-webkit-selection { + background-color: #CCE2FF; + color: rgba(0, 0, 0, 0.87); +} +::-moz-selection { + background-color: #CCE2FF; + color: rgba(0, 0, 0, 0.87); +} +::selection { + background-color: #CCE2FF; + color: rgba(0, 0, 0, 0.87); +} +/* Form */ +textarea::-webkit-selection, +input::-webkit-selection { + background-color: rgba(100, 100, 100, 0.4); + color: rgba(0, 0, 0, 0.87); +} +textarea::-moz-selection, +input::-moz-selection { + background-color: rgba(100, 100, 100, 0.4); + color: rgba(0, 0, 0, 0.87); +} +textarea::selection, +input::selection { + background-color: rgba(100, 100, 100, 0.4); + color: rgba(0, 0, 0, 0.87); +} +/* Force Simple Scrollbars */ +body ::-webkit-scrollbar { + -webkit-appearance: none; + width: 10px; +} +body ::-webkit-scrollbar-track { + background: rgba(0, 0, 0, 0.1); + border-radius: 0px; +} +body ::-webkit-scrollbar-thumb { + cursor: pointer; + border-radius: 5px; + background: rgba(0, 0, 0, 0.25); + transition: color 0.2s ease; +} +body ::-webkit-scrollbar-thumb:window-inactive { + background: rgba(0, 0, 0, 0.15); +} +body ::-webkit-scrollbar-thumb:hover { + background: rgba(128, 135, 139, 0.8); +} +/* Inverted UI */ +body .ui.inverted::-webkit-scrollbar-track, +body .play-button.inverted::-webkit-scrollbar-track, +body .download-button.inverted::-webkit-scrollbar-track { + background: rgba(255, 255, 255, 0.1); +} +body .ui.inverted::-webkit-scrollbar-thumb, +body .play-button.inverted::-webkit-scrollbar-thumb, +body .download-button.inverted::-webkit-scrollbar-thumb { + background: rgba(255, 255, 255, 0.25); +} +body .ui.inverted::-webkit-scrollbar-thumb:window-inactive, +body .play-button.inverted::-webkit-scrollbar-thumb:window-inactive, +body .download-button.inverted::-webkit-scrollbar-thumb:window-inactive { + background: rgba(255, 255, 255, 0.15); +} +body .ui.inverted::-webkit-scrollbar-thumb:hover, +body .play-button.inverted::-webkit-scrollbar-thumb:hover, +body .download-button.inverted::-webkit-scrollbar-thumb:hover { + background: rgba(255, 255, 255, 0.35); +} +/******************************* + Site Overrides +*******************************/ +/******************************* + Site Overrides +*******************************/ +/* Elements */ +/*! + * # Semantic UI - Button + * http://github.com/semantic-org/semantic-ui/ + * + * + * Released under the MIT license + * http://opensource.org/licenses/MIT + * + */ +/******************************* + Theme +*******************************/ +/* + +████████╗██╗ ██╗███████╗███╗ ███╗███████╗███████╗ +╚══██╔══╝██║ ██║██╔════╝████╗ ████║██╔════╝██╔════╝ + ██║ ███████║█████╗ ██╔████╔██║█████╗ ███████╗ + ██║ ██╔══██║██╔══╝ ██║╚██╔╝██║██╔══╝ ╚════██║ + ██║ ██║ ██║███████╗██║ ╚═╝ ██║███████╗███████║ + ╚═╝ ╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝╚══════╝╚══════╝ + +*/ +/******************************* + Theme Selection +*******************************/ +/* To override a theme for an individual element + specify theme name below +*/ +/* Global */ +/* Elements */ +/* Collections */ +/* Modules */ +/* Views */ +/******************************* + Folders +*******************************/ +/* Path to theme packages */ +/* Path to site override folder */ +/******************************* + Import Theme +*******************************/ +/******************************* + Import Directives +*******************************/ +/*------------------ + Theme +-------------------*/ +/*-------------------- + Site Variables +---------------------*/ +/* Default site.variables */ +/******************************* + Site Settings +*******************************/ +/*------------------- + Fonts +--------------------*/ +/*------------------- + Base Sizes +--------------------*/ +/* This is the single variable that controls them all */ +/* The size of page text */ +/*------------------- + Border Radius +--------------------*/ +/* See Power-user section below + for explanation of @px variables +*/ +/*------------------- + Brand Colors +--------------------*/ +/*-------------- + Page Heading +---------------*/ +/*-------------- + Form Input +---------------*/ +/* This adjusts the default form input across all elements */ +/* Input Text Color */ +/* Line Height Default For Inputs in Browser (Descendors are 17px at 14px base em) */ +/*------------------- + Focused Input +--------------------*/ +/* Used on inputs, textarea etc */ +/* Used on dropdowns, other larger blocks */ +/*------------------- + Sizes +--------------------*/ +/* + Sizes are all expressed in terms of 14px/em (default em) + This ensures these "ratios" remain constant despite changes in EM +*/ +/*------------------- + Page +--------------------*/ +/*------------------- + Paragraph +--------------------*/ +/*------------------- + Links +--------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ +/*------------------- + Highlighted Text +--------------------*/ +/*------------------- + Loader +--------------------*/ +/*------------------- + Grid +--------------------*/ +/*------------------- + Transitions +--------------------*/ +/*------------------- + Breakpoints +--------------------*/ +/*------------------- + Site Colors +--------------------*/ +/*--- Colors ---*/ +/*--- Light Colors ---*/ +/*--- Neutrals ---*/ +/*--- Colored Backgrounds ---*/ +/*--- Colored Headers ---*/ +/*--- Colored Text ---*/ +/*--- Colored Border ---*/ +/*------------------- + Alpha Colors +--------------------*/ +/*------------------- + Accents +--------------------*/ +/* Differentiating Neutrals */ +/* Differentiating Layers */ +/******************************* + Power-User +*******************************/ +/*------------------- + Emotive Colors +--------------------*/ +/* Positive */ +/* Negative */ +/* Info */ +/* Warning */ +/*------------------- + Paths +--------------------*/ +/* For source only. Modified in gulp for dist */ +/*------------------- + Em Sizes +--------------------*/ +/* + This rounds @size values to the closest pixel then expresses that value in (r)em. + This ensures all size values round to exact pixels +*/ +/* em */ +/* rem */ +/*------------------- + Icons +--------------------*/ +/* Maximum Glyph Width of Icon */ +/*------------------- + Neutral Text +--------------------*/ +/*------------------- + Brand Colors +--------------------*/ +/*------------------- + Borders +--------------------*/ +/*------------------- + Derived Values +--------------------*/ +/* Loaders Position Offset */ +/* Rendered Scrollbar Width */ +/* Maximum Single Character Glyph Width, aka Capital "W" */ +/* Used to match floats with text */ +/* Header Spacing */ +/* Minimum Mobile Width */ +/* Positive / Negative Dupes */ +/* Responsive */ +/*------------------- + Exact Pixel Values +--------------------*/ +/* + These are used to specify exact pixel values in em + for things like borders that remain constantly + sized as emSize adjusts + + Since there are many more sizes than names for sizes, + these are named by their original pixel values. + +*/ +/* Columns */ +/******************************* + States +*******************************/ +/*------------------- + Disabled +--------------------*/ +/*------------------- + Hover +--------------------*/ +/*--- Shadows ---*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Focus +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Down (:active) +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Active +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/* Packaged site.variables */ +/******************************* + User Global Variables +*******************************/ +/*------------------- + Fonts +--------------------*/ +/*------------------- + Breakpoints +--------------------*/ +/* +@mobileBreakpoint : unit( (63 * @emSize), px); +@tabletBreakpoint : unit( (79 * @emSize), px); +@computerBreakpoint : unit( (91 * @emSize), px); +@largeMonitorBreakpoint : unit( (99 * @emSize), px); +@widescreenMonitorBreakpoint : unit( (119 * @emSize), px); +*/ +/******************************* + PXT Variables +*******************************/ +/*------------------- + Menu +--------------------*/ +/*------------------- + Layout +--------------------*/ +/*------------------- + Background +--------------------*/ +/*------------------- + Full screen +--------------------*/ +/*------------------- + Side Docs +--------------------*/ +/*------------------- + Editor +--------------------*/ +/* Component's site.variables */ +/******************************* + User Global Variables +*******************************/ +/*------------------- + Fonts +--------------------*/ +/*------------------- + Breakpoints +--------------------*/ +/* +@mobileBreakpoint : unit( (63 * @emSize), px); +@tabletBreakpoint : unit( (79 * @emSize), px); +@computerBreakpoint : unit( (91 * @emSize), px); +@largeMonitorBreakpoint : unit( (99 * @emSize), px); +@widescreenMonitorBreakpoint : unit( (119 * @emSize), px); +*/ +/******************************* + PXT Variables +*******************************/ +/*------------------- + Menu +--------------------*/ +/*------------------- + Layout +--------------------*/ +/*------------------- + Background +--------------------*/ +/*------------------- + Full screen +--------------------*/ +/*------------------- + Side Docs +--------------------*/ +/*------------------- + Editor +--------------------*/ +/* Site theme site.variables */ +/******************************* + User Global Variables +*******************************/ +/*------------------- + Site Colors +--------------------*/ +/******************************* + PXT Overrides +*******************************/ +/*------------------- + Component Variables +---------------------*/ +/* Default */ +/******************************* + Button +*******************************/ +/*------------------- + Element +--------------------*/ +/* Button */ +/* Button defaults to using same height as input globally */ +/* Text */ +/* Internal Shadow */ +/* Box Shadow */ +/* Icon */ +/* Loader */ +/* +@willChange: box-shadow, transform, opacity, color, background; +*/ +/*------------------- + Group +--------------------*/ +/*------------------- + States +--------------------*/ +/* Hovered */ +/* Focused */ +/* Disabled */ +/* Pressed Down */ +/* Active */ +/* Active + Hovered */ +/* Loading */ +/*------------------- + Types +--------------------*/ +/* Or */ +/* Icon */ +/* Labeled */ +/* hypotenuse of triangle */ +/* Labeled Icon */ +/* Inverted */ +/* Basic */ +/* Basic Hover */ +/* Basic Focus */ +/* Basic Down */ +/* Basic Active */ +/* Basic Inverted */ +/* Basic Group */ +/*------------------- + Variations +--------------------*/ +/* Colors */ +/* Colored */ +/* Inverted */ +/* Ordinality */ +/* Compact */ +/* Attached */ +/* Floated */ +/* Animated */ +/* Packaged Theme */ +/******************************* + User Variable Overrides +*******************************/ +/* Site Theme */ +/******************************* + User Variable Overrides +*******************************/ +/******************************* + Mix-ins +*******************************/ +/*------------------ + Fonts +-------------------*/ +/*------------------ + Overrides +-------------------*/ +/* End Config */ +/******************************* + Button +*******************************/ +.ui.button, +.play-button.button, +.ui.play-button, +.download-button.button, +.ui.download-button { + cursor: pointer; + display: inline-block; + min-height: 1em; + outline: none; + border: none; + vertical-align: baseline; + background: #E0E1E2 none; + color: rgba(0, 0, 0, 0.6); + font-family: 'Roboto Mono', 'Helvetica Neue', Arial, Helvetica, sans-serif; + margin: 0em 0.25em 0em 0em; + padding: 0.78571429em 1.5em 0.78571429em; + text-transform: none; + text-shadow: none; + font-weight: bold; + line-height: 1em; + font-style: normal; + text-align: center; + text-decoration: none; + border-radius: 0.28571429rem; + box-shadow: 0px 0px 0px 1px transparent inset, 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset; + user-select: none; + transition: opacity 0.1s ease, background-color 0.1s ease, color 0.1s ease, box-shadow 0.1s ease, background 0.1s ease; + will-change: ''; + -webkit-tap-highlight-color: transparent; +} +/******************************* + States +*******************************/ +/*-------------- + Hover +---------------*/ +.ui.button:hover, +.play-button.button:hover, +.ui.play-button:hover, +.download-button.button:hover, +.ui.download-button:hover { + background-color: #CACBCD; + background-image: none; + box-shadow: 0px 0px 0px 1px transparent inset, 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset; + color: rgba(0, 0, 0, 0.8); +} +.ui.button:hover .icon, +.play-button.button:hover .icon, +.ui.play-button:hover .icon, +.download-button.button:hover .icon, +.ui.download-button:hover .icon { + opacity: 0.85; +} +/*-------------- + Focus +---------------*/ +.ui.button:focus, +.play-button.button:focus, +.ui.play-button:focus, +.download-button.button:focus, +.ui.download-button:focus { + background-color: #CACBCD; + color: rgba(0, 0, 0, 0.8); + background-image: '' !important; + box-shadow: '' !important; +} +.ui.button:focus .icon, +.play-button.button:focus .icon, +.ui.play-button:focus .icon, +.download-button.button:focus .icon, +.ui.download-button:focus .icon { + opacity: 0.85; +} +/*-------------- + Down +---------------*/ +.ui.button:active, +.ui.active.button:active, +.play-button.button:active, +.play-button.active.button:active, +.ui.play-button:active, +.ui.active.play-button:active, +.download-button.button:active, +.download-button.active.button:active, +.ui.download-button:active, +.ui.active.download-button:active { + background-color: #BABBBC; + background-image: ''; + color: rgba(0, 0, 0, 0.9); + box-shadow: 0px 0px 0px 1px transparent inset, none; +} +/*-------------- + Active +---------------*/ +.ui.active.button, +.play-button.active.button, +.ui.active.play-button, +.download-button.active.button, +.ui.active.download-button { + background-color: #C0C1C2; + background-image: none; + box-shadow: 0px 0px 0px 1px transparent inset; + color: rgba(0, 0, 0, 0.95); +} +.ui.active.button:hover, +.play-button.active.button:hover, +.ui.active.play-button:hover, +.download-button.active.button:hover, +.ui.active.download-button:hover { + background-color: #C0C1C2; + background-image: none; + color: rgba(0, 0, 0, 0.95); +} +.ui.active.button:active, +.play-button.active.button:active, +.ui.active.play-button:active, +.download-button.active.button:active, +.ui.active.download-button:active { + background-color: #C0C1C2; + background-image: none; +} +/*-------------- + Loading +---------------*/ +/* Specificity hack */ +.ui.loading.loading.loading.loading.loading.loading.button, +.play-button.loading.loading.loading.loading.loading.loading.button, +.ui.loading.loading.loading.loading.loading.loading.play-button, +.download-button.loading.loading.loading.loading.loading.loading.button, +.ui.loading.loading.loading.loading.loading.loading.download-button { + position: relative; + cursor: default; + text-shadow: none !important; + color: transparent !important; + opacity: 1; + pointer-events: auto; + transition: all 0s linear, opacity 0.1s ease; +} +.ui.loading.button:before, +.play-button.loading.button:before, +.ui.loading.play-button:before, +.download-button.loading.button:before, +.ui.loading.download-button:before { + position: absolute; + content: ''; + top: 50%; + left: 50%; + margin: -0.64285714em 0em 0em -0.64285714em; + width: 1.28571429em; + height: 1.28571429em; + border-radius: 500rem; + border: 0.2em solid rgba(0, 0, 0, 0.15); +} +.ui.loading.button:after, +.play-button.loading.button:after, +.ui.loading.play-button:after, +.download-button.loading.button:after, +.ui.loading.download-button:after { + position: absolute; + content: ''; + top: 50%; + left: 50%; + margin: -0.64285714em 0em 0em -0.64285714em; + width: 1.28571429em; + height: 1.28571429em; + animation: button-spin 0.6s linear; + animation-iteration-count: infinite; + border-radius: 500rem; + border-color: #FFFFFF transparent transparent; + border-style: solid; + border-width: 0.2em; + box-shadow: 0px 0px 0px 1px transparent; +} +.ui.labeled.icon.loading.button .icon, +.play-button.labeled.icon.loading.button .icon, +.ui.labeled.icon.loading.play-button .icon, +.download-button.labeled.icon.loading.button .icon, +.ui.labeled.icon.loading.download-button .icon { + background-color: transparent; + box-shadow: none; +} +@keyframes button-spin { + from { + transform: rotate(0deg); + } + to { + transform: rotate(360deg); + } +} +.ui.basic.loading.button:not(.inverted):before, +.play-button.basic.loading.button:not(.inverted):before, +.ui.basic.loading.play-button:not(.inverted):before, +.download-button.basic.loading.button:not(.inverted):before, +.ui.basic.loading.download-button:not(.inverted):before { + border-color: rgba(0, 0, 0, 0.1); +} +.ui.basic.loading.button:not(.inverted):after, +.play-button.basic.loading.button:not(.inverted):after, +.ui.basic.loading.play-button:not(.inverted):after, +.download-button.basic.loading.button:not(.inverted):after, +.ui.basic.loading.download-button:not(.inverted):after { + border-top-color: #42495F; +} +/*------------------- + Disabled +--------------------*/ +.ui.buttons .disabled.button, +.ui.disabled.button, +.ui.button:disabled, +.ui.disabled.button:hover, +.ui.disabled.active.button, +.play-button.buttons .disabled.button, +.play-button.disabled.button, +.play-button.button:disabled, +.play-button.disabled.button:hover, +.play-button.disabled.active.button, +.ui.buttons .disabled.play-button, +.ui.disabled.play-button, +.ui.play-button:disabled, +.ui.disabled.play-button:hover, +.ui.disabled.active.play-button, +.download-button.buttons .disabled.button, +.download-button.disabled.button, +.download-button.button:disabled, +.download-button.disabled.button:hover, +.download-button.disabled.active.button, +.ui.buttons .disabled.download-button, +.ui.disabled.download-button, +.ui.download-button:disabled, +.ui.disabled.download-button:hover, +.ui.disabled.active.download-button { + cursor: default; + opacity: 0.45 !important; + background-image: none !important; + box-shadow: none !important; + pointer-events: none !important; +} +/* Basic Group With Disabled */ +.ui.basic.buttons .ui.disabled.button, +.play-button.basic.buttons .play-button.disabled.button, +.ui.basic.buttons .ui.disabled.play-button, +.download-button.basic.buttons .download-button.disabled.button, +.ui.basic.buttons .ui.disabled.download-button { + border-color: rgba(34, 36, 38, 0.5); +} +/******************************* + Types +*******************************/ +/*------------------- + Animated +--------------------*/ +.ui.animated.button, +.play-button.animated.button, +.ui.animated.play-button, +.download-button.animated.button, +.ui.animated.download-button { + position: relative; + overflow: hidden; + padding-right: 0em !important; + vertical-align: middle; + z-index: 1; +} +.ui.animated.button .content, +.play-button.animated.button .content, +.ui.animated.play-button .content, +.download-button.animated.button .content, +.ui.animated.download-button .content { + will-change: transform, opacity; +} +.ui.animated.button .visible.content, +.play-button.animated.button .visible.content, +.ui.animated.play-button .visible.content, +.download-button.animated.button .visible.content, +.ui.animated.download-button .visible.content { + position: relative; + margin-right: 1.5em; +} +.ui.animated.button .hidden.content, +.play-button.animated.button .hidden.content, +.ui.animated.play-button .hidden.content, +.download-button.animated.button .hidden.content, +.ui.animated.download-button .hidden.content { + position: absolute; + width: 100%; +} +/* Horizontal */ +.ui.animated.button .visible.content, +.ui.animated.button .hidden.content, +.play-button.animated.button .visible.content, +.play-button.animated.button .hidden.content, +.ui.animated.play-button .visible.content, +.ui.animated.play-button .hidden.content, +.download-button.animated.button .visible.content, +.download-button.animated.button .hidden.content, +.ui.animated.download-button .visible.content, +.ui.animated.download-button .hidden.content { + transition: right 0.3s ease 0s; +} +.ui.animated.button .visible.content, +.play-button.animated.button .visible.content, +.ui.animated.play-button .visible.content, +.download-button.animated.button .visible.content, +.ui.animated.download-button .visible.content { + left: auto; + right: 0%; +} +.ui.animated.button .hidden.content, +.play-button.animated.button .hidden.content, +.ui.animated.play-button .hidden.content, +.download-button.animated.button .hidden.content, +.ui.animated.download-button .hidden.content { + top: 50%; + left: auto; + right: -100%; + margin-top: -0.5em; +} +.ui.animated.button:focus .visible.content, +.ui.animated.button:hover .visible.content, +.play-button.animated.button:focus .visible.content, +.play-button.animated.button:hover .visible.content, +.ui.animated.play-button:focus .visible.content, +.ui.animated.play-button:hover .visible.content, +.download-button.animated.button:focus .visible.content, +.download-button.animated.button:hover .visible.content, +.ui.animated.download-button:focus .visible.content, +.ui.animated.download-button:hover .visible.content { + left: auto; + right: 200%; +} +.ui.animated.button:focus .hidden.content, +.ui.animated.button:hover .hidden.content, +.play-button.animated.button:focus .hidden.content, +.play-button.animated.button:hover .hidden.content, +.ui.animated.play-button:focus .hidden.content, +.ui.animated.play-button:hover .hidden.content, +.download-button.animated.button:focus .hidden.content, +.download-button.animated.button:hover .hidden.content, +.ui.animated.download-button:focus .hidden.content, +.ui.animated.download-button:hover .hidden.content { + left: auto; + right: 0%; +} +/* Vertical */ +.ui.vertical.animated.button .visible.content, +.ui.vertical.animated.button .hidden.content, +.play-button.vertical.animated.button .visible.content, +.play-button.vertical.animated.button .hidden.content, +.ui.vertical.animated.play-button .visible.content, +.ui.vertical.animated.play-button .hidden.content, +.download-button.vertical.animated.button .visible.content, +.download-button.vertical.animated.button .hidden.content, +.ui.vertical.animated.download-button .visible.content, +.ui.vertical.animated.download-button .hidden.content { + transition: top 0.3s ease, transform 0.3s ease; +} +.ui.vertical.animated.button .visible.content, +.play-button.vertical.animated.button .visible.content, +.ui.vertical.animated.play-button .visible.content, +.download-button.vertical.animated.button .visible.content, +.ui.vertical.animated.download-button .visible.content { + transform: translateY(0%); + right: auto; +} +.ui.vertical.animated.button .hidden.content, +.play-button.vertical.animated.button .hidden.content, +.ui.vertical.animated.play-button .hidden.content, +.download-button.vertical.animated.button .hidden.content, +.ui.vertical.animated.download-button .hidden.content { + top: -50%; + left: 0%; + right: auto; +} +.ui.vertical.animated.button:focus .visible.content, +.ui.vertical.animated.button:hover .visible.content, +.play-button.vertical.animated.button:focus .visible.content, +.play-button.vertical.animated.button:hover .visible.content, +.ui.vertical.animated.play-button:focus .visible.content, +.ui.vertical.animated.play-button:hover .visible.content, +.download-button.vertical.animated.button:focus .visible.content, +.download-button.vertical.animated.button:hover .visible.content, +.ui.vertical.animated.download-button:focus .visible.content, +.ui.vertical.animated.download-button:hover .visible.content { + transform: translateY(200%); + right: auto; +} +.ui.vertical.animated.button:focus .hidden.content, +.ui.vertical.animated.button:hover .hidden.content, +.play-button.vertical.animated.button:focus .hidden.content, +.play-button.vertical.animated.button:hover .hidden.content, +.ui.vertical.animated.play-button:focus .hidden.content, +.ui.vertical.animated.play-button:hover .hidden.content, +.download-button.vertical.animated.button:focus .hidden.content, +.download-button.vertical.animated.button:hover .hidden.content, +.ui.vertical.animated.download-button:focus .hidden.content, +.ui.vertical.animated.download-button:hover .hidden.content { + top: 50%; + right: auto; +} +/* Fade */ +.ui.fade.animated.button .visible.content, +.ui.fade.animated.button .hidden.content, +.play-button.fade.animated.button .visible.content, +.play-button.fade.animated.button .hidden.content, +.ui.fade.animated.play-button .visible.content, +.ui.fade.animated.play-button .hidden.content, +.download-button.fade.animated.button .visible.content, +.download-button.fade.animated.button .hidden.content, +.ui.fade.animated.download-button .visible.content, +.ui.fade.animated.download-button .hidden.content { + transition: opacity 0.3s ease, transform 0.3s ease; +} +.ui.fade.animated.button .visible.content, +.play-button.fade.animated.button .visible.content, +.ui.fade.animated.play-button .visible.content, +.download-button.fade.animated.button .visible.content, +.ui.fade.animated.download-button .visible.content { + left: auto; + right: auto; + opacity: 1; + transform: scale(1); +} +.ui.fade.animated.button .hidden.content, +.play-button.fade.animated.button .hidden.content, +.ui.fade.animated.play-button .hidden.content, +.download-button.fade.animated.button .hidden.content, +.ui.fade.animated.download-button .hidden.content { + opacity: 0; + left: 0%; + right: auto; + transform: scale(1.5); +} +.ui.fade.animated.button:focus .visible.content, +.ui.fade.animated.button:hover .visible.content, +.play-button.fade.animated.button:focus .visible.content, +.play-button.fade.animated.button:hover .visible.content, +.ui.fade.animated.play-button:focus .visible.content, +.ui.fade.animated.play-button:hover .visible.content, +.download-button.fade.animated.button:focus .visible.content, +.download-button.fade.animated.button:hover .visible.content, +.ui.fade.animated.download-button:focus .visible.content, +.ui.fade.animated.download-button:hover .visible.content { + left: auto; + right: auto; + opacity: 0; + transform: scale(0.75); +} +.ui.fade.animated.button:focus .hidden.content, +.ui.fade.animated.button:hover .hidden.content, +.play-button.fade.animated.button:focus .hidden.content, +.play-button.fade.animated.button:hover .hidden.content, +.ui.fade.animated.play-button:focus .hidden.content, +.ui.fade.animated.play-button:hover .hidden.content, +.download-button.fade.animated.button:focus .hidden.content, +.download-button.fade.animated.button:hover .hidden.content, +.ui.fade.animated.download-button:focus .hidden.content, +.ui.fade.animated.download-button:hover .hidden.content { + left: 0%; + right: auto; + opacity: 1; + transform: scale(1); +} +/*------------------- + Inverted +--------------------*/ +.ui.inverted.button, +.play-button.inverted.button, +.ui.inverted.play-button, +.download-button.inverted.button, +.ui.inverted.download-button { + box-shadow: 0px 0px 0px 2px #FFFFFF inset !important; + background: transparent none; + color: #FFFFFF; + text-shadow: none !important; +} +/* Group */ +.ui.inverted.buttons .button, +.play-button.inverted.buttons .button, +.ui.inverted.buttons .play-button, +.download-button.inverted.buttons .button, +.ui.inverted.buttons .download-button { + margin: 0px 0px 0px -2px; +} +.ui.inverted.buttons .button:first-child, +.play-button.inverted.buttons .button:first-child, +.ui.inverted.buttons .play-button:first-child, +.download-button.inverted.buttons .button:first-child, +.ui.inverted.buttons .download-button:first-child { + margin-left: 0em; +} +.ui.inverted.vertical.buttons .button, +.play-button.inverted.vertical.buttons .button, +.ui.inverted.vertical.buttons .play-button, +.download-button.inverted.vertical.buttons .button, +.ui.inverted.vertical.buttons .download-button { + margin: 0px 0px -2px 0px; +} +.ui.inverted.vertical.buttons .button:first-child, +.play-button.inverted.vertical.buttons .button:first-child, +.ui.inverted.vertical.buttons .play-button:first-child, +.download-button.inverted.vertical.buttons .button:first-child, +.ui.inverted.vertical.buttons .download-button:first-child { + margin-top: 0em; +} +/* States */ +/* Hover */ +.ui.inverted.button:hover, +.play-button.inverted.button:hover, +.ui.inverted.play-button:hover, +.download-button.inverted.button:hover, +.ui.inverted.download-button:hover { + background: #FFFFFF; + box-shadow: 0px 0px 0px 2px #FFFFFF inset !important; + color: rgba(0, 0, 0, 0.8); +} +/* Active / Focus */ +.ui.inverted.button:focus, +.ui.inverted.button.active, +.play-button.inverted.button:focus, +.play-button.inverted.button.active, +.ui.inverted.play-button:focus, +.ui.inverted.play-button.active, +.download-button.inverted.button:focus, +.download-button.inverted.button.active, +.ui.inverted.download-button:focus, +.ui.inverted.download-button.active { + background: #FFFFFF; + box-shadow: 0px 0px 0px 2px #FFFFFF inset !important; + color: rgba(0, 0, 0, 0.8); +} +/* Active Focus */ +.ui.inverted.button.active:focus, +.play-button.inverted.button.active:focus, +.ui.inverted.play-button.active:focus, +.download-button.inverted.button.active:focus, +.ui.inverted.download-button.active:focus { + background: #DCDDDE; + box-shadow: 0px 0px 0px 2px #DCDDDE inset !important; + color: rgba(0, 0, 0, 0.8); +} +/*------------------- + Labeled Button +--------------------*/ +.ui.labeled.button:not(.icon), +.play-button.labeled.button:not(.icon), +.ui.labeled.play-button:not(.icon), +.download-button.labeled.button:not(.icon), +.ui.labeled.download-button:not(.icon) { + display: inline-flex; + flex-direction: row; + background: none !important; + padding: 0px !important; + border: none !important; + box-shadow: none !important; +} +.ui.labeled.button > .button, +.play-button.labeled.button > .button, +.ui.labeled.play-button > .play-button, +.download-button.labeled.button > .button, +.ui.labeled.download-button > .download-button { + margin: 0px; +} +.ui.labeled.button > .label, +.play-button.labeled.button > .label, +.ui.labeled.play-button > .label, +.download-button.labeled.button > .label, +.ui.labeled.download-button > .label { + display: flex; + align-items: center; + margin: 0px 0px 0px -1px !important; + padding: ''; + font-size: 1em; + border-color: rgba(34, 36, 38, 0.15); +} +/* Tag */ +.ui.labeled.button > .tag.label:before, +.play-button.labeled.button > .tag.label:before, +.ui.labeled.play-button > .tag.label:before, +.download-button.labeled.button > .tag.label:before, +.ui.labeled.download-button > .tag.label:before { + width: 1.85em; + height: 1.85em; +} +/* Right */ +.ui.labeled.button:not([class*="left labeled"]) > .button, +.play-button.labeled.button:not([class*="left labeled"]) > .button, +.ui.labeled.play-button:not([class*="left labeled"]) > .play-button, +.download-button.labeled.button:not([class*="left labeled"]) > .button, +.ui.labeled.download-button:not([class*="left labeled"]) > .download-button { + border-top-right-radius: 0px; + border-bottom-right-radius: 0px; +} +.ui.labeled.button:not([class*="left labeled"]) > .label, +.play-button.labeled.button:not([class*="left labeled"]) > .label, +.ui.labeled.play-button:not([class*="left labeled"]) > .label, +.download-button.labeled.button:not([class*="left labeled"]) > .label, +.ui.labeled.download-button:not([class*="left labeled"]) > .label { + border-top-left-radius: 0px; + border-bottom-left-radius: 0px; +} +/* Left Side */ +.ui[class*="left labeled"].button > .button, +.play-button[class*="left labeled"].button > .button, +.ui[class*="left labeled"].play-button > .play-button, +.download-button[class*="left labeled"].button > .button, +.ui[class*="left labeled"].download-button > .download-button { + border-top-left-radius: 0px; + border-bottom-left-radius: 0px; +} +.ui[class*="left labeled"].button > .label, +.play-button[class*="left labeled"].button > .label, +.ui[class*="left labeled"].play-button > .label, +.download-button[class*="left labeled"].button > .label, +.ui[class*="left labeled"].download-button > .label { + border-top-right-radius: 0px; + border-bottom-right-radius: 0px; +} +/*------------------- + Social +--------------------*/ +/* Facebook */ +.ui.facebook.button, +.play-button.facebook.button, +.ui.facebook.play-button, +.download-button.facebook.button, +.ui.facebook.download-button { + background-color: #3B5998; + color: #FFFFFF; + text-shadow: none; + background-image: none; + box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset; +} +.ui.facebook.button:hover, +.play-button.facebook.button:hover, +.ui.facebook.play-button:hover, +.download-button.facebook.button:hover, +.ui.facebook.download-button:hover { + background-color: #304d8a; + color: #FFFFFF; + text-shadow: none; +} +.ui.facebook.button:active, +.play-button.facebook.button:active, +.ui.facebook.play-button:active, +.download-button.facebook.button:active, +.ui.facebook.download-button:active { + background-color: #2d4373; + color: #FFFFFF; + text-shadow: none; +} +/* Twitter */ +.ui.twitter.button, +.play-button.twitter.button, +.ui.twitter.play-button, +.download-button.twitter.button, +.ui.twitter.download-button { + background-color: #55ACEE; + color: #FFFFFF; + text-shadow: none; + background-image: none; + box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset; +} +.ui.twitter.button:hover, +.play-button.twitter.button:hover, +.ui.twitter.play-button:hover, +.download-button.twitter.button:hover, +.ui.twitter.download-button:hover { + background-color: #35a2f4; + color: #FFFFFF; + text-shadow: none; +} +.ui.twitter.button:active, +.play-button.twitter.button:active, +.ui.twitter.play-button:active, +.download-button.twitter.button:active, +.ui.twitter.download-button:active { + background-color: #2795e9; + color: #FFFFFF; + text-shadow: none; +} +/* Google Plus */ +.ui.google.plus.button, +.play-button.google.plus.button, +.ui.google.plus.play-button, +.download-button.google.plus.button, +.ui.google.plus.download-button { + background-color: #DD4B39; + color: #FFFFFF; + text-shadow: none; + background-image: none; + box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset; +} +.ui.google.plus.button:hover, +.play-button.google.plus.button:hover, +.ui.google.plus.play-button:hover, +.download-button.google.plus.button:hover, +.ui.google.plus.download-button:hover { + background-color: #e0321c; + color: #FFFFFF; + text-shadow: none; +} +.ui.google.plus.button:active, +.play-button.google.plus.button:active, +.ui.google.plus.play-button:active, +.download-button.google.plus.button:active, +.ui.google.plus.download-button:active { + background-color: #c23321; + color: #FFFFFF; + text-shadow: none; +} +/* Linked In */ +.ui.linkedin.button, +.play-button.linkedin.button, +.ui.linkedin.play-button, +.download-button.linkedin.button, +.ui.linkedin.download-button { + background-color: #1F88BE; + color: #FFFFFF; + text-shadow: none; +} +.ui.linkedin.button:hover, +.play-button.linkedin.button:hover, +.ui.linkedin.play-button:hover, +.download-button.linkedin.button:hover, +.ui.linkedin.download-button:hover { + background-color: #147baf; + color: #FFFFFF; + text-shadow: none; +} +.ui.linkedin.button:active, +.play-button.linkedin.button:active, +.ui.linkedin.play-button:active, +.download-button.linkedin.button:active, +.ui.linkedin.download-button:active { + background-color: #186992; + color: #FFFFFF; + text-shadow: none; +} +/* YouTube */ +.ui.youtube.button, +.play-button.youtube.button, +.ui.youtube.play-button, +.download-button.youtube.button, +.ui.youtube.download-button { + background-color: #CC181E; + color: #FFFFFF; + text-shadow: none; + background-image: none; + box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset; +} +.ui.youtube.button:hover, +.play-button.youtube.button:hover, +.ui.youtube.play-button:hover, +.download-button.youtube.button:hover, +.ui.youtube.download-button:hover { + background-color: #bd0d13; + color: #FFFFFF; + text-shadow: none; +} +.ui.youtube.button:active, +.play-button.youtube.button:active, +.ui.youtube.play-button:active, +.download-button.youtube.button:active, +.ui.youtube.download-button:active { + background-color: #9e1317; + color: #FFFFFF; + text-shadow: none; +} +/* Instagram */ +.ui.instagram.button, +.play-button.instagram.button, +.ui.instagram.play-button, +.download-button.instagram.button, +.ui.instagram.download-button { + background-color: #49769C; + color: #FFFFFF; + text-shadow: none; + background-image: none; + box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset; +} +.ui.instagram.button:hover, +.play-button.instagram.button:hover, +.ui.instagram.play-button:hover, +.download-button.instagram.button:hover, +.ui.instagram.download-button:hover { + background-color: #3d698e; + color: #FFFFFF; + text-shadow: none; +} +.ui.instagram.button:active, +.play-button.instagram.button:active, +.ui.instagram.play-button:active, +.download-button.instagram.button:active, +.ui.instagram.download-button:active { + background-color: #395c79; + color: #FFFFFF; + text-shadow: none; +} +/* Pinterest */ +.ui.pinterest.button, +.play-button.pinterest.button, +.ui.pinterest.play-button, +.download-button.pinterest.button, +.ui.pinterest.download-button { + background-color: #BD081C; + color: #FFFFFF; + text-shadow: none; + background-image: none; + box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset; +} +.ui.pinterest.button:hover, +.play-button.pinterest.button:hover, +.ui.pinterest.play-button:hover, +.download-button.pinterest.button:hover, +.ui.pinterest.download-button:hover { + background-color: #ac0013; + color: #FFFFFF; + text-shadow: none; +} +.ui.pinterest.button:active, +.play-button.pinterest.button:active, +.ui.pinterest.play-button:active, +.download-button.pinterest.button:active, +.ui.pinterest.download-button:active { + background-color: #8c0615; + color: #FFFFFF; + text-shadow: none; +} +/* VK */ +.ui.vk.button, +.play-button.vk.button, +.ui.vk.play-button, +.download-button.vk.button, +.ui.vk.download-button { + background-color: #4D7198; + color: #FFFFFF; + background-image: none; + box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset; +} +.ui.vk.button:hover, +.play-button.vk.button:hover, +.ui.vk.play-button:hover, +.download-button.vk.button:hover, +.ui.vk.download-button:hover { + background-color: #41648a; + color: #FFFFFF; +} +.ui.vk.button:active, +.play-button.vk.button:active, +.ui.vk.play-button:active, +.download-button.vk.button:active, +.ui.vk.download-button:active { + background-color: #3c5876; + color: #FFFFFF; +} +/*-------------- + Icon +---------------*/ +.ui.button > .icon:not(.button), +.play-button.button > .icon:not(.button), +.ui.play-button > .icon:not(.button), +.download-button.button > .icon:not(.button), +.ui.download-button > .icon:not(.button) { + height: 0.85714286em; + opacity: 0.8; + margin: 0em 0.42857143em 0em -0.21428571em; + transition: opacity 0.1s ease; + vertical-align: ''; + color: ''; +} +.ui.button:not(.icon) > .icon:not(.button):not(.dropdown), +.play-button.button:not(.icon) > .icon:not(.button):not(.dropdown), +.ui.play-button:not(.icon) > .icon:not(.button):not(.dropdown), +.download-button.button:not(.icon) > .icon:not(.button):not(.dropdown), +.ui.download-button:not(.icon) > .icon:not(.button):not(.dropdown) { + margin: 0em 0.42857143em 0em -0.21428571em; +} +.ui.button:not(.icon) > .right.icon:not(.button):not(.dropdown), +.play-button.button:not(.icon) > .right.icon:not(.button):not(.dropdown), +.ui.play-button:not(.icon) > .right.icon:not(.button):not(.dropdown), +.download-button.button:not(.icon) > .right.icon:not(.button):not(.dropdown), +.ui.download-button:not(.icon) > .right.icon:not(.button):not(.dropdown) { + margin: 0em -0.21428571em 0em 0.42857143em; +} +/******************************* + Variations +*******************************/ +/*------------------- + Floated +--------------------*/ +.ui[class*="left floated"].buttons, +.ui[class*="left floated"].button, +.play-button[class*="left floated"].buttons, +.play-button[class*="left floated"].button, +.ui[class*="left floated"].play-button, +.download-button[class*="left floated"].buttons, +.download-button[class*="left floated"].button, +.ui[class*="left floated"].download-button { + float: left; + margin-left: 0em; + margin-right: 0.25em; +} +.ui[class*="right floated"].buttons, +.ui[class*="right floated"].button, +.play-button[class*="right floated"].buttons, +.play-button[class*="right floated"].button, +.ui[class*="right floated"].play-button, +.download-button[class*="right floated"].buttons, +.download-button[class*="right floated"].button, +.ui[class*="right floated"].download-button { + float: right; + margin-right: 0em; + margin-left: 0.25em; +} +/*------------------- + Compact +--------------------*/ +.ui.compact.buttons .button, +.ui.compact.button, +.play-button.compact.buttons .button, +.play-button.compact.button, +.ui.compact.buttons .play-button, +.ui.compact.play-button, +.download-button.compact.buttons .button, +.download-button.compact.button, +.ui.compact.buttons .download-button, +.ui.compact.download-button { + padding: 0.58928571em 1.125em 0.58928571em; +} +.ui.compact.icon.buttons .button, +.ui.compact.icon.button, +.play-button.compact.icon.buttons .button, +.play-button.compact.icon.button, +.ui.compact.icon.buttons .play-button, +.ui.compact.icon.play-button, +.download-button.compact.icon.buttons .button, +.download-button.compact.icon.button, +.ui.compact.icon.buttons .download-button, +.ui.compact.icon.download-button { + padding: 0.58928571em 0.58928571em 0.58928571em; +} +.ui.compact.labeled.icon.buttons .button, +.ui.compact.labeled.icon.button, +.play-button.compact.labeled.icon.buttons .button, +.play-button.compact.labeled.icon.button, +.ui.compact.labeled.icon.buttons .play-button, +.ui.compact.labeled.icon.play-button, +.download-button.compact.labeled.icon.buttons .button, +.download-button.compact.labeled.icon.button, +.ui.compact.labeled.icon.buttons .download-button, +.ui.compact.labeled.icon.download-button { + padding: 0.58928571em 3.69642857em 0.58928571em; +} +/*------------------- + Sizes +--------------------*/ +.ui.mini.buttons .button, +.ui.mini.buttons .or, +.ui.mini.button, +.play-button.mini.buttons .button, +.play-button.mini.buttons .or, +.play-button.mini.button, +.ui.mini.buttons .play-button, +.ui.mini.play-button, +.download-button.mini.buttons .button, +.download-button.mini.buttons .or, +.download-button.mini.button, +.ui.mini.buttons .download-button, +.ui.mini.download-button { + font-size: 0.78571429rem; +} +.ui.tiny.buttons .button, +.ui.tiny.buttons .or, +.ui.tiny.button, +.play-button.tiny.buttons .button, +.play-button.tiny.buttons .or, +.play-button.tiny.button, +.ui.tiny.buttons .play-button, +.ui.tiny.play-button, +.download-button.tiny.buttons .button, +.download-button.tiny.buttons .or, +.download-button.tiny.button, +.ui.tiny.buttons .download-button, +.ui.tiny.download-button { + font-size: 0.85714286rem; +} +.ui.small.buttons .button, +.ui.small.buttons .or, +.ui.small.button, +.play-button.small.buttons .button, +.play-button.small.buttons .or, +.play-button.small.button, +.ui.small.buttons .play-button, +.ui.small.play-button, +.download-button.small.buttons .button, +.download-button.small.buttons .or, +.download-button.small.button, +.ui.small.buttons .download-button, +.ui.small.download-button { + font-size: 0.92857143rem; +} +.ui.buttons .button, +.ui.buttons .or, +.ui.button, +.play-button.buttons .button, +.play-button.buttons .or, +.play-button.button, +.ui.buttons .play-button, +.ui.play-button, +.download-button.buttons .button, +.download-button.buttons .or, +.download-button.button, +.ui.buttons .download-button, +.ui.download-button { + font-size: 1rem; +} +.ui.large.buttons .button, +.ui.large.buttons .or, +.ui.large.button, +.play-button.large.buttons .button, +.play-button.large.buttons .or, +.play-button.large.button, +.ui.large.buttons .play-button, +.ui.large.play-button, +.download-button.large.buttons .button, +.download-button.large.buttons .or, +.download-button.large.button, +.ui.large.buttons .download-button, +.ui.large.download-button { + font-size: 1.14285714rem; +} +.ui.big.buttons .button, +.ui.big.buttons .or, +.ui.big.button, +.play-button.big.buttons .button, +.play-button.big.buttons .or, +.play-button.big.button, +.ui.big.buttons .play-button, +.ui.big.play-button, +.download-button.big.buttons .button, +.download-button.big.buttons .or, +.download-button.big.button, +.ui.big.buttons .download-button, +.ui.big.download-button { + font-size: 1.28571429rem; +} +.ui.huge.buttons .button, +.ui.huge.buttons .or, +.ui.huge.button, +.play-button.huge.buttons .button, +.play-button.huge.buttons .or, +.play-button.huge.button, +.ui.huge.buttons .play-button, +.ui.huge.play-button, +.download-button.huge.buttons .button, +.download-button.huge.buttons .or, +.download-button.huge.button, +.ui.huge.buttons .download-button, +.ui.huge.download-button { + font-size: 1.42857143rem; +} +.ui.massive.buttons .button, +.ui.massive.buttons .or, +.ui.massive.button, +.play-button.massive.buttons .button, +.play-button.massive.buttons .or, +.play-button.massive.button, +.ui.massive.buttons .play-button, +.ui.massive.play-button, +.download-button.massive.buttons .button, +.download-button.massive.buttons .or, +.download-button.massive.button, +.ui.massive.buttons .download-button, +.ui.massive.download-button { + font-size: 1.71428571rem; +} +/*-------------- + Icon Only +---------------*/ +.ui.icon.buttons .button, +.ui.icon.button, +.play-button.icon.buttons .button, +.play-button.icon.button, +.ui.icon.buttons .play-button, +.ui.icon.play-button, +.download-button.icon.buttons .button, +.download-button.icon.button, +.ui.icon.buttons .download-button, +.ui.icon.download-button { + padding: 0.78571429em 0.78571429em 0.78571429em; +} +.ui.icon.buttons .button > .icon, +.ui.icon.button > .icon, +.play-button.icon.buttons .button > .icon, +.play-button.icon.button > .icon, +.ui.icon.buttons .play-button > .icon, +.ui.icon.play-button > .icon, +.download-button.icon.buttons .button > .icon, +.download-button.icon.button > .icon, +.ui.icon.buttons .download-button > .icon, +.ui.icon.download-button > .icon { + opacity: 0.9; + margin: 0em !important; + vertical-align: top; +} +/*------------------- + Basic +--------------------*/ +.ui.basic.buttons .button, +.ui.basic.button, +.play-button.basic.buttons .button, +.play-button.basic.button, +.ui.basic.buttons .play-button, +.ui.basic.play-button, +.download-button.basic.buttons .button, +.download-button.basic.button, +.ui.basic.buttons .download-button, +.ui.basic.download-button { + background: transparent none !important; + color: rgba(0, 0, 0, 0.6) !important; + font-weight: normal; + border-radius: 0.28571429rem; + text-transform: none; + text-shadow: none !important; + box-shadow: 0px 0px 0px 1px rgba(34, 36, 38, 0.15) inset; +} +.ui.basic.buttons, +.play-button.basic.buttons, +.download-button.basic.buttons { + box-shadow: none; + border: 1px solid rgba(34, 36, 38, 0.15); + border-radius: 0.28571429rem; +} +.ui.basic.buttons .button, +.play-button.basic.buttons .button, +.ui.basic.buttons .play-button, +.download-button.basic.buttons .button, +.ui.basic.buttons .download-button { + border-radius: 0em; +} +.ui.basic.buttons .button:hover, +.ui.basic.button:hover, +.play-button.basic.buttons .button:hover, +.play-button.basic.button:hover, +.ui.basic.buttons .play-button:hover, +.ui.basic.play-button:hover, +.download-button.basic.buttons .button:hover, +.download-button.basic.button:hover, +.ui.basic.buttons .download-button:hover, +.ui.basic.download-button:hover { + background: #FFFFFF !important; + color: rgba(0, 0, 0, 0.8) !important; + box-shadow: 0px 0px 0px 1px rgba(34, 36, 38, 0.35) inset, 0px 0px 0px 0px rgba(34, 36, 38, 0.15) inset; +} +.ui.basic.buttons .button:focus, +.ui.basic.button:focus, +.play-button.basic.buttons .button:focus, +.play-button.basic.button:focus, +.ui.basic.buttons .play-button:focus, +.ui.basic.play-button:focus, +.download-button.basic.buttons .button:focus, +.download-button.basic.button:focus, +.ui.basic.buttons .download-button:focus, +.ui.basic.download-button:focus { + background: #FFFFFF !important; + color: rgba(0, 0, 0, 0.8) !important; + box-shadow: 0px 0px 0px 1px rgba(34, 36, 38, 0.35) inset, 0px 0px 0px 0px rgba(34, 36, 38, 0.15) inset; +} +.ui.basic.buttons .button:active, +.ui.basic.button:active, +.play-button.basic.buttons .button:active, +.play-button.basic.button:active, +.ui.basic.buttons .play-button:active, +.ui.basic.play-button:active, +.download-button.basic.buttons .button:active, +.download-button.basic.button:active, +.ui.basic.buttons .download-button:active, +.ui.basic.download-button:active { + background: #F8F8F8 !important; + color: rgba(0, 0, 0, 0.9) !important; + box-shadow: 0px 0px 0px 1px rgba(0, 0, 0, 0.15) inset, 0px 1px 4px 0px rgba(34, 36, 38, 0.15) inset; +} +.ui.basic.buttons .active.button, +.ui.basic.active.button, +.play-button.basic.buttons .active.button, +.play-button.basic.active.button, +.ui.basic.buttons .active.play-button, +.ui.basic.active.play-button, +.download-button.basic.buttons .active.button, +.download-button.basic.active.button, +.ui.basic.buttons .active.download-button, +.ui.basic.active.download-button { + background: rgba(0, 0, 0, 0.05) !important; + box-shadow: '' !important; + color: rgba(0, 0, 0, 0.95); +} +.ui.basic.buttons .active.button:hover, +.ui.basic.active.button:hover, +.play-button.basic.buttons .active.button:hover, +.play-button.basic.active.button:hover, +.ui.basic.buttons .active.play-button:hover, +.ui.basic.active.play-button:hover, +.download-button.basic.buttons .active.button:hover, +.download-button.basic.active.button:hover, +.ui.basic.buttons .active.download-button:hover, +.ui.basic.active.download-button:hover { + background-color: rgba(0, 0, 0, 0.05); +} +/* Vertical */ +.ui.basic.buttons .button:hover, +.play-button.basic.buttons .button:hover, +.ui.basic.buttons .play-button:hover, +.download-button.basic.buttons .button:hover, +.ui.basic.buttons .download-button:hover { + box-shadow: 0px 0px 0px 1px rgba(34, 36, 38, 0.35) inset, 0px 0px 0px 0px rgba(34, 36, 38, 0.15) inset inset; +} +.ui.basic.buttons .button:active, +.play-button.basic.buttons .button:active, +.ui.basic.buttons .play-button:active, +.download-button.basic.buttons .button:active, +.ui.basic.buttons .download-button:active { + box-shadow: 0px 0px 0px 1px rgba(0, 0, 0, 0.15) inset, 0px 1px 4px 0px rgba(34, 36, 38, 0.15) inset inset; +} +.ui.basic.buttons .active.button, +.play-button.basic.buttons .active.button, +.ui.basic.buttons .active.play-button, +.download-button.basic.buttons .active.button, +.ui.basic.buttons .active.download-button { + box-shadow: '' !important; +} +/* Standard Basic Inverted */ +.ui.basic.inverted.buttons .button, +.ui.basic.inverted.button, +.play-button.basic.inverted.buttons .button, +.play-button.basic.inverted.button, +.ui.basic.inverted.buttons .play-button, +.ui.basic.inverted.play-button, +.download-button.basic.inverted.buttons .button, +.download-button.basic.inverted.button, +.ui.basic.inverted.buttons .download-button, +.ui.basic.inverted.download-button { + background-color: transparent !important; + color: #F9FAFB !important; + box-shadow: 0px 0px 0px 2px rgba(255, 255, 255, 0.5) inset !important; +} +.ui.basic.inverted.buttons .button:hover, +.ui.basic.inverted.button:hover, +.play-button.basic.inverted.buttons .button:hover, +.play-button.basic.inverted.button:hover, +.ui.basic.inverted.buttons .play-button:hover, +.ui.basic.inverted.play-button:hover, +.download-button.basic.inverted.buttons .button:hover, +.download-button.basic.inverted.button:hover, +.ui.basic.inverted.buttons .download-button:hover, +.ui.basic.inverted.download-button:hover { + color: #FFFFFF !important; + box-shadow: 0px 0px 0px 2px #ffffff inset !important; +} +.ui.basic.inverted.buttons .button:focus, +.ui.basic.inverted.button:focus, +.play-button.basic.inverted.buttons .button:focus, +.play-button.basic.inverted.button:focus, +.ui.basic.inverted.buttons .play-button:focus, +.ui.basic.inverted.play-button:focus, +.download-button.basic.inverted.buttons .button:focus, +.download-button.basic.inverted.button:focus, +.ui.basic.inverted.buttons .download-button:focus, +.ui.basic.inverted.download-button:focus { + color: #FFFFFF !important; + box-shadow: 0px 0px 0px 2px #ffffff inset !important; +} +.ui.basic.inverted.buttons .button:active, +.ui.basic.inverted.button:active, +.play-button.basic.inverted.buttons .button:active, +.play-button.basic.inverted.button:active, +.ui.basic.inverted.buttons .play-button:active, +.ui.basic.inverted.play-button:active, +.download-button.basic.inverted.buttons .button:active, +.download-button.basic.inverted.button:active, +.ui.basic.inverted.buttons .download-button:active, +.ui.basic.inverted.download-button:active { + background-color: rgba(255, 255, 255, 0.08) !important; + color: #FFFFFF !important; + box-shadow: 0px 0px 0px 2px rgba(255, 255, 255, 0.9) inset !important; +} +.ui.basic.inverted.buttons .active.button, +.ui.basic.inverted.active.button, +.play-button.basic.inverted.buttons .active.button, +.play-button.basic.inverted.active.button, +.ui.basic.inverted.buttons .active.play-button, +.ui.basic.inverted.active.play-button, +.download-button.basic.inverted.buttons .active.button, +.download-button.basic.inverted.active.button, +.ui.basic.inverted.buttons .active.download-button, +.ui.basic.inverted.active.download-button { + background-color: rgba(255, 255, 255, 0.08); + color: #FFFFFF; + text-shadow: none; + box-shadow: 0px 0px 0px 2px rgba(255, 255, 255, 0.7) inset; +} +.ui.basic.inverted.buttons .active.button:hover, +.ui.basic.inverted.active.button:hover, +.play-button.basic.inverted.buttons .active.button:hover, +.play-button.basic.inverted.active.button:hover, +.ui.basic.inverted.buttons .active.play-button:hover, +.ui.basic.inverted.active.play-button:hover, +.download-button.basic.inverted.buttons .active.button:hover, +.download-button.basic.inverted.active.button:hover, +.ui.basic.inverted.buttons .active.download-button:hover, +.ui.basic.inverted.active.download-button:hover { + background-color: rgba(255, 255, 255, 0.15); + box-shadow: 0px 0px 0px 2px #ffffff inset !important; +} +/* Basic Group */ +.ui.basic.buttons .button, +.play-button.basic.buttons .button, +.ui.basic.buttons .play-button, +.download-button.basic.buttons .button, +.ui.basic.buttons .download-button { + border-left: 1px solid rgba(34, 36, 38, 0.15); + box-shadow: none; +} +.ui.basic.vertical.buttons .button, +.play-button.basic.vertical.buttons .button, +.ui.basic.vertical.buttons .play-button, +.download-button.basic.vertical.buttons .button, +.ui.basic.vertical.buttons .download-button { + border-left: none; +} +.ui.basic.vertical.buttons .button, +.play-button.basic.vertical.buttons .button, +.ui.basic.vertical.buttons .play-button, +.download-button.basic.vertical.buttons .button, +.ui.basic.vertical.buttons .download-button { + border-left-width: 0px; + border-top: 1px solid rgba(34, 36, 38, 0.15); +} +.ui.basic.vertical.buttons .button:first-child, +.play-button.basic.vertical.buttons .button:first-child, +.ui.basic.vertical.buttons .play-button:first-child, +.download-button.basic.vertical.buttons .button:first-child, +.ui.basic.vertical.buttons .download-button:first-child { + border-top-width: 0px; +} +/*-------------- + Labeled Icon +---------------*/ +.ui.labeled.icon.buttons .button, +.ui.labeled.icon.button, +.play-button.labeled.icon.buttons .button, +.play-button.labeled.icon.button, +.ui.labeled.icon.buttons .play-button, +.ui.labeled.icon.play-button, +.download-button.labeled.icon.buttons .button, +.download-button.labeled.icon.button, +.ui.labeled.icon.buttons .download-button, +.ui.labeled.icon.download-button { + position: relative; + padding-left: 4.07142857em !important; + padding-right: 1.5em !important; +} +/* Left Labeled */ +.ui.labeled.icon.buttons > .button > .icon, +.ui.labeled.icon.button > .icon, +.play-button.labeled.icon.buttons > .button > .icon, +.play-button.labeled.icon.button > .icon, +.ui.labeled.icon.buttons > .play-button > .icon, +.ui.labeled.icon.play-button > .icon, +.download-button.labeled.icon.buttons > .button > .icon, +.download-button.labeled.icon.button > .icon, +.ui.labeled.icon.buttons > .download-button > .icon, +.ui.labeled.icon.download-button > .icon { + position: absolute; + height: 100%; + line-height: 1; + border-radius: 0px; + border-top-left-radius: inherit; + border-bottom-left-radius: inherit; + text-align: center; + margin: 0em; + width: 2.57142857em; + background-color: rgba(0, 0, 0, 0.05); + color: ''; + box-shadow: -1px 0px 0px 0px transparent inset; +} +/* Left Labeled */ +.ui.labeled.icon.buttons > .button > .icon, +.ui.labeled.icon.button > .icon, +.play-button.labeled.icon.buttons > .button > .icon, +.play-button.labeled.icon.button > .icon, +.ui.labeled.icon.buttons > .play-button > .icon, +.ui.labeled.icon.play-button > .icon, +.download-button.labeled.icon.buttons > .button > .icon, +.download-button.labeled.icon.button > .icon, +.ui.labeled.icon.buttons > .download-button > .icon, +.ui.labeled.icon.download-button > .icon { + top: 0em; + left: 0em; +} +/* Right Labeled */ +.ui[class*="right labeled"].icon.button, +.play-button[class*="right labeled"].icon.button, +.ui[class*="right labeled"].icon.play-button, +.download-button[class*="right labeled"].icon.button, +.ui[class*="right labeled"].icon.download-button { + padding-right: 4.07142857em !important; + padding-left: 1.5em !important; +} +.ui[class*="right labeled"].icon.button > .icon, +.play-button[class*="right labeled"].icon.button > .icon, +.ui[class*="right labeled"].icon.play-button > .icon, +.download-button[class*="right labeled"].icon.button > .icon, +.ui[class*="right labeled"].icon.download-button > .icon { + left: auto; + right: 0em; + border-radius: 0px; + border-top-right-radius: inherit; + border-bottom-right-radius: inherit; + box-shadow: 1px 0px 0px 0px transparent inset; +} +.ui.labeled.icon.buttons > .button > .icon:before, +.ui.labeled.icon.button > .icon:before, +.ui.labeled.icon.buttons > .button > .icon:after, +.ui.labeled.icon.button > .icon:after, +.play-button.labeled.icon.buttons > .button > .icon:before, +.play-button.labeled.icon.button > .icon:before, +.play-button.labeled.icon.buttons > .button > .icon:after, +.play-button.labeled.icon.button > .icon:after, +.ui.labeled.icon.buttons > .play-button > .icon:before, +.ui.labeled.icon.play-button > .icon:before, +.ui.labeled.icon.buttons > .play-button > .icon:after, +.ui.labeled.icon.play-button > .icon:after, +.download-button.labeled.icon.buttons > .button > .icon:before, +.download-button.labeled.icon.button > .icon:before, +.download-button.labeled.icon.buttons > .button > .icon:after, +.download-button.labeled.icon.button > .icon:after, +.ui.labeled.icon.buttons > .download-button > .icon:before, +.ui.labeled.icon.download-button > .icon:before, +.ui.labeled.icon.buttons > .download-button > .icon:after, +.ui.labeled.icon.download-button > .icon:after { + display: block; + position: absolute; + width: 100%; + top: 50%; + text-align: center; + transform: translateY(-50%); +} +.ui.labeled.icon.buttons .button > .icon, +.play-button.labeled.icon.buttons .button > .icon, +.ui.labeled.icon.buttons .play-button > .icon, +.download-button.labeled.icon.buttons .button > .icon, +.ui.labeled.icon.buttons .download-button > .icon { + border-radius: 0em; +} +.ui.labeled.icon.buttons .button:first-child > .icon, +.play-button.labeled.icon.buttons .button:first-child > .icon, +.ui.labeled.icon.buttons .play-button:first-child > .icon, +.download-button.labeled.icon.buttons .button:first-child > .icon, +.ui.labeled.icon.buttons .download-button:first-child > .icon { + border-top-left-radius: 0.28571429rem; + border-bottom-left-radius: 0.28571429rem; +} +.ui.labeled.icon.buttons .button:last-child > .icon, +.play-button.labeled.icon.buttons .button:last-child > .icon, +.ui.labeled.icon.buttons .play-button:last-child > .icon, +.download-button.labeled.icon.buttons .button:last-child > .icon, +.ui.labeled.icon.buttons .download-button:last-child > .icon { + border-top-right-radius: 0.28571429rem; + border-bottom-right-radius: 0.28571429rem; +} +.ui.vertical.labeled.icon.buttons .button:first-child > .icon, +.play-button.vertical.labeled.icon.buttons .button:first-child > .icon, +.ui.vertical.labeled.icon.buttons .play-button:first-child > .icon, +.download-button.vertical.labeled.icon.buttons .button:first-child > .icon, +.ui.vertical.labeled.icon.buttons .download-button:first-child > .icon { + border-radius: 0em; + border-top-left-radius: 0.28571429rem; +} +.ui.vertical.labeled.icon.buttons .button:last-child > .icon, +.play-button.vertical.labeled.icon.buttons .button:last-child > .icon, +.ui.vertical.labeled.icon.buttons .play-button:last-child > .icon, +.download-button.vertical.labeled.icon.buttons .button:last-child > .icon, +.ui.vertical.labeled.icon.buttons .download-button:last-child > .icon { + border-radius: 0em; + border-bottom-left-radius: 0.28571429rem; +} +/* Fluid Labeled */ +.ui.fluid[class*="left labeled"].icon.button, +.ui.fluid[class*="right labeled"].icon.button, +.play-button.fluid[class*="left labeled"].icon.button, +.play-button.fluid[class*="right labeled"].icon.button, +.ui.fluid[class*="left labeled"].icon.play-button, +.ui.fluid[class*="right labeled"].icon.play-button, +.download-button.fluid[class*="left labeled"].icon.button, +.download-button.fluid[class*="right labeled"].icon.button, +.ui.fluid[class*="left labeled"].icon.download-button, +.ui.fluid[class*="right labeled"].icon.download-button { + padding-left: 1.5em !important; + padding-right: 1.5em !important; +} +/*-------------- + Toggle +---------------*/ +/* Toggle (Modifies active state to give affordances) */ +.ui.toggle.buttons .active.button, +.ui.buttons .button.toggle.active, +.ui.button.toggle.active, +.play-button.toggle.buttons .active.button, +.play-button.buttons .button.toggle.active, +.play-button.button.toggle.active, +.ui.toggle.buttons .active.play-button, +.ui.buttons .play-button.toggle.active, +.ui.play-button.toggle.active, +.download-button.toggle.buttons .active.button, +.download-button.buttons .button.toggle.active, +.download-button.button.toggle.active, +.ui.toggle.buttons .active.download-button, +.ui.buttons .download-button.toggle.active, +.ui.download-button.toggle.active { + background-color: #3FC863 !important; + box-shadow: none !important; + text-shadow: none; + color: #FFFFFF !important; +} +.ui.button.toggle.active:hover, +.play-button.button.toggle.active:hover, +.ui.play-button.toggle.active:hover, +.download-button.button.toggle.active:hover, +.ui.download-button.toggle.active:hover { + background-color: #2ebf54 !important; + text-shadow: none; + color: #FFFFFF !important; +} +/*-------------- + Circular +---------------*/ +.ui.circular.button, +.play-button.circular.button, +.ui.circular.play-button, +.download-button.circular.button, +.ui.circular.download-button { + border-radius: 10em; +} +.ui.circular.button > .icon, +.play-button.circular.button > .icon, +.ui.circular.play-button > .icon, +.download-button.circular.button > .icon, +.ui.circular.download-button > .icon { + width: 1em; + vertical-align: baseline; +} +/*------------------- + Or Buttons +--------------------*/ +.ui.buttons .or, +.play-button.buttons .or, +.download-button.buttons .or { + position: relative; + width: 0.3em; + height: 2.57142857em; + z-index: 3; +} +.ui.buttons .or:before, +.play-button.buttons .or:before, +.download-button.buttons .or:before { + position: absolute; + text-align: center; + border-radius: 500rem; + content: 'or'; + top: 50%; + left: 50%; + background-color: #FFFFFF; + text-shadow: none; + margin-top: -0.89285714em; + margin-left: -0.89285714em; + width: 1.78571429em; + height: 1.78571429em; + line-height: 1.78571429em; + color: rgba(0, 0, 0, 0.4); + font-style: normal; + font-weight: bold; + box-shadow: 0px 0px 0px 1px transparent inset; +} +.ui.buttons .or[data-text]:before, +.play-button.buttons .or[data-text]:before, +.download-button.buttons .or[data-text]:before { + content: attr(data-text); +} +/* Fluid Or */ +.ui.fluid.buttons .or, +.play-button.fluid.buttons .or, +.download-button.fluid.buttons .or { + width: 0em !important; +} +.ui.fluid.buttons .or:after, +.play-button.fluid.buttons .or:after, +.download-button.fluid.buttons .or:after { + display: none; +} +/*------------------- + Attached +--------------------*/ +/* Singular */ +.ui.attached.button, +.play-button.attached.button, +.ui.attached.play-button, +.download-button.attached.button, +.ui.attached.download-button { + position: relative; + display: block; + margin: 0em; + border-radius: 0em; + box-shadow: 0px 0px 0px 1px rgba(34, 36, 38, 0.15) !important; +} +/* Top / Bottom */ +.ui.attached.top.button, +.play-button.attached.top.button, +.ui.attached.top.play-button, +.download-button.attached.top.button, +.ui.attached.top.download-button { + border-radius: 0.28571429rem 0.28571429rem 0em 0em; +} +.ui.attached.bottom.button, +.play-button.attached.bottom.button, +.ui.attached.bottom.play-button, +.download-button.attached.bottom.button, +.ui.attached.bottom.download-button { + border-radius: 0em 0em 0.28571429rem 0.28571429rem; +} +/* Left / Right */ +.ui.left.attached.button, +.play-button.left.attached.button, +.ui.left.attached.play-button, +.download-button.left.attached.button, +.ui.left.attached.download-button { + display: inline-block; + border-left: none; + text-align: right; + padding-right: 0.75em; + border-radius: 0.28571429rem 0em 0em 0.28571429rem; +} +.ui.right.attached.button, +.play-button.right.attached.button, +.ui.right.attached.play-button, +.download-button.right.attached.button, +.ui.right.attached.download-button { + display: inline-block; + text-align: left; + padding-left: 0.75em; + border-radius: 0em 0.28571429rem 0.28571429rem 0em; +} +/* Plural */ +.ui.attached.buttons, +.play-button.attached.buttons, +.download-button.attached.buttons { + position: relative; + display: flex; + border-radius: 0em; + width: auto !important; + z-index: 2; + margin-left: -1px; + margin-right: -1px; +} +.ui.attached.buttons .button, +.play-button.attached.buttons .button, +.ui.attached.buttons .play-button, +.download-button.attached.buttons .button, +.ui.attached.buttons .download-button { + margin: 0em; +} +.ui.attached.buttons .button:first-child, +.play-button.attached.buttons .button:first-child, +.ui.attached.buttons .play-button:first-child, +.download-button.attached.buttons .button:first-child, +.ui.attached.buttons .download-button:first-child { + border-radius: 0em; +} +.ui.attached.buttons .button:last-child, +.play-button.attached.buttons .button:last-child, +.ui.attached.buttons .play-button:last-child, +.download-button.attached.buttons .button:last-child, +.ui.attached.buttons .download-button:last-child { + border-radius: 0em; +} +/* Top / Bottom */ +.ui[class*="top attached"].buttons, +.play-button[class*="top attached"].buttons, +.download-button[class*="top attached"].buttons { + margin-bottom: -1px; + border-radius: 0.28571429rem 0.28571429rem 0em 0em; +} +.ui[class*="top attached"].buttons .button:first-child, +.play-button[class*="top attached"].buttons .button:first-child, +.ui[class*="top attached"].buttons .play-button:first-child, +.download-button[class*="top attached"].buttons .button:first-child, +.ui[class*="top attached"].buttons .download-button:first-child { + border-radius: 0.28571429rem 0em 0em 0em; +} +.ui[class*="top attached"].buttons .button:last-child, +.play-button[class*="top attached"].buttons .button:last-child, +.ui[class*="top attached"].buttons .play-button:last-child, +.download-button[class*="top attached"].buttons .button:last-child, +.ui[class*="top attached"].buttons .download-button:last-child { + border-radius: 0em 0.28571429rem 0em 0em; +} +.ui[class*="bottom attached"].buttons, +.play-button[class*="bottom attached"].buttons, +.download-button[class*="bottom attached"].buttons { + margin-top: -1px; + border-radius: 0em 0em 0.28571429rem 0.28571429rem; +} +.ui[class*="bottom attached"].buttons .button:first-child, +.play-button[class*="bottom attached"].buttons .button:first-child, +.ui[class*="bottom attached"].buttons .play-button:first-child, +.download-button[class*="bottom attached"].buttons .button:first-child, +.ui[class*="bottom attached"].buttons .download-button:first-child { + border-radius: 0em 0em 0em 0.28571429rem; +} +.ui[class*="bottom attached"].buttons .button:last-child, +.play-button[class*="bottom attached"].buttons .button:last-child, +.ui[class*="bottom attached"].buttons .play-button:last-child, +.download-button[class*="bottom attached"].buttons .button:last-child, +.ui[class*="bottom attached"].buttons .download-button:last-child { + border-radius: 0em 0em 0.28571429rem 0em; +} +/* Left / Right */ +.ui[class*="left attached"].buttons, +.play-button[class*="left attached"].buttons, +.download-button[class*="left attached"].buttons { + display: inline-flex; + margin-right: 0em; + margin-left: -1px; + border-radius: 0em 0.28571429rem 0.28571429rem 0em; +} +.ui[class*="left attached"].buttons .button:first-child, +.play-button[class*="left attached"].buttons .button:first-child, +.ui[class*="left attached"].buttons .play-button:first-child, +.download-button[class*="left attached"].buttons .button:first-child, +.ui[class*="left attached"].buttons .download-button:first-child { + margin-left: -1px; + border-radius: 0em 0.28571429rem 0em 0em; +} +.ui[class*="left attached"].buttons .button:last-child, +.play-button[class*="left attached"].buttons .button:last-child, +.ui[class*="left attached"].buttons .play-button:last-child, +.download-button[class*="left attached"].buttons .button:last-child, +.ui[class*="left attached"].buttons .download-button:last-child { + margin-left: -1px; + border-radius: 0em 0em 0.28571429rem 0em; +} +.ui[class*="right attached"].buttons, +.play-button[class*="right attached"].buttons, +.download-button[class*="right attached"].buttons { + display: inline-flex; + margin-left: 0em; + margin-right: -1px; + border-radius: 0.28571429rem 0em 0em 0.28571429rem; +} +.ui[class*="right attached"].buttons .button:first-child, +.play-button[class*="right attached"].buttons .button:first-child, +.ui[class*="right attached"].buttons .play-button:first-child, +.download-button[class*="right attached"].buttons .button:first-child, +.ui[class*="right attached"].buttons .download-button:first-child { + margin-left: -1px; + border-radius: 0.28571429rem 0em 0em 0em; +} +.ui[class*="right attached"].buttons .button:last-child, +.play-button[class*="right attached"].buttons .button:last-child, +.ui[class*="right attached"].buttons .play-button:last-child, +.download-button[class*="right attached"].buttons .button:last-child, +.ui[class*="right attached"].buttons .download-button:last-child { + margin-left: -1px; + border-radius: 0em 0em 0em 0.28571429rem; +} +/*------------------- + Fluid +--------------------*/ +.ui.fluid.buttons, +.ui.fluid.button, +.play-button.fluid.buttons, +.play-button.fluid.button, +.ui.fluid.play-button, +.download-button.fluid.buttons, +.download-button.fluid.button, +.ui.fluid.download-button { + width: 100%; +} +.ui.fluid.button, +.play-button.fluid.button, +.ui.fluid.play-button, +.download-button.fluid.button, +.ui.fluid.download-button { + display: block; +} +.ui.two.buttons, +.play-button.two.buttons, +.download-button.two.buttons { + width: 100%; +} +.ui.two.buttons > .button, +.play-button.two.buttons > .button, +.ui.two.buttons > .play-button, +.download-button.two.buttons > .button, +.ui.two.buttons > .download-button { + width: 50%; +} +.ui.three.buttons, +.play-button.three.buttons, +.download-button.three.buttons { + width: 100%; +} +.ui.three.buttons > .button, +.play-button.three.buttons > .button, +.ui.three.buttons > .play-button, +.download-button.three.buttons > .button, +.ui.three.buttons > .download-button { + width: 33.333%; +} +.ui.four.buttons, +.play-button.four.buttons, +.download-button.four.buttons { + width: 100%; +} +.ui.four.buttons > .button, +.play-button.four.buttons > .button, +.ui.four.buttons > .play-button, +.download-button.four.buttons > .button, +.ui.four.buttons > .download-button { + width: 25%; +} +.ui.five.buttons, +.play-button.five.buttons, +.download-button.five.buttons { + width: 100%; +} +.ui.five.buttons > .button, +.play-button.five.buttons > .button, +.ui.five.buttons > .play-button, +.download-button.five.buttons > .button, +.ui.five.buttons > .download-button { + width: 20%; +} +.ui.six.buttons, +.play-button.six.buttons, +.download-button.six.buttons { + width: 100%; +} +.ui.six.buttons > .button, +.play-button.six.buttons > .button, +.ui.six.buttons > .play-button, +.download-button.six.buttons > .button, +.ui.six.buttons > .download-button { + width: 16.666%; +} +.ui.seven.buttons, +.play-button.seven.buttons, +.download-button.seven.buttons { + width: 100%; +} +.ui.seven.buttons > .button, +.play-button.seven.buttons > .button, +.ui.seven.buttons > .play-button, +.download-button.seven.buttons > .button, +.ui.seven.buttons > .download-button { + width: 14.285%; +} +.ui.eight.buttons, +.play-button.eight.buttons, +.download-button.eight.buttons { + width: 100%; +} +.ui.eight.buttons > .button, +.play-button.eight.buttons > .button, +.ui.eight.buttons > .play-button, +.download-button.eight.buttons > .button, +.ui.eight.buttons > .download-button { + width: 12.500%; +} +.ui.nine.buttons, +.play-button.nine.buttons, +.download-button.nine.buttons { + width: 100%; +} +.ui.nine.buttons > .button, +.play-button.nine.buttons > .button, +.ui.nine.buttons > .play-button, +.download-button.nine.buttons > .button, +.ui.nine.buttons > .download-button { + width: 11.11%; +} +.ui.ten.buttons, +.play-button.ten.buttons, +.download-button.ten.buttons { + width: 100%; +} +.ui.ten.buttons > .button, +.play-button.ten.buttons > .button, +.ui.ten.buttons > .play-button, +.download-button.ten.buttons > .button, +.ui.ten.buttons > .download-button { + width: 10%; +} +.ui.eleven.buttons, +.play-button.eleven.buttons, +.download-button.eleven.buttons { + width: 100%; +} +.ui.eleven.buttons > .button, +.play-button.eleven.buttons > .button, +.ui.eleven.buttons > .play-button, +.download-button.eleven.buttons > .button, +.ui.eleven.buttons > .download-button { + width: 9.09%; +} +.ui.twelve.buttons, +.play-button.twelve.buttons, +.download-button.twelve.buttons { + width: 100%; +} +.ui.twelve.buttons > .button, +.play-button.twelve.buttons > .button, +.ui.twelve.buttons > .play-button, +.download-button.twelve.buttons > .button, +.ui.twelve.buttons > .download-button { + width: 8.3333%; +} +/* Fluid Vertical Buttons */ +.ui.fluid.vertical.buttons, +.ui.fluid.vertical.buttons > .button, +.play-button.fluid.vertical.buttons, +.play-button.fluid.vertical.buttons > .button, +.ui.fluid.vertical.buttons > .play-button, +.download-button.fluid.vertical.buttons, +.download-button.fluid.vertical.buttons > .button, +.ui.fluid.vertical.buttons > .download-button { + display: flex; + width: auto; +} +.ui.two.vertical.buttons > .button, +.play-button.two.vertical.buttons > .button, +.ui.two.vertical.buttons > .play-button, +.download-button.two.vertical.buttons > .button, +.ui.two.vertical.buttons > .download-button { + height: 50%; +} +.ui.three.vertical.buttons > .button, +.play-button.three.vertical.buttons > .button, +.ui.three.vertical.buttons > .play-button, +.download-button.three.vertical.buttons > .button, +.ui.three.vertical.buttons > .download-button { + height: 33.333%; +} +.ui.four.vertical.buttons > .button, +.play-button.four.vertical.buttons > .button, +.ui.four.vertical.buttons > .play-button, +.download-button.four.vertical.buttons > .button, +.ui.four.vertical.buttons > .download-button { + height: 25%; +} +.ui.five.vertical.buttons > .button, +.play-button.five.vertical.buttons > .button, +.ui.five.vertical.buttons > .play-button, +.download-button.five.vertical.buttons > .button, +.ui.five.vertical.buttons > .download-button { + height: 20%; +} +.ui.six.vertical.buttons > .button, +.play-button.six.vertical.buttons > .button, +.ui.six.vertical.buttons > .play-button, +.download-button.six.vertical.buttons > .button, +.ui.six.vertical.buttons > .download-button { + height: 16.666%; +} +.ui.seven.vertical.buttons > .button, +.play-button.seven.vertical.buttons > .button, +.ui.seven.vertical.buttons > .play-button, +.download-button.seven.vertical.buttons > .button, +.ui.seven.vertical.buttons > .download-button { + height: 14.285%; +} +.ui.eight.vertical.buttons > .button, +.play-button.eight.vertical.buttons > .button, +.ui.eight.vertical.buttons > .play-button, +.download-button.eight.vertical.buttons > .button, +.ui.eight.vertical.buttons > .download-button { + height: 12.500%; +} +.ui.nine.vertical.buttons > .button, +.play-button.nine.vertical.buttons > .button, +.ui.nine.vertical.buttons > .play-button, +.download-button.nine.vertical.buttons > .button, +.ui.nine.vertical.buttons > .download-button { + height: 11.11%; +} +.ui.ten.vertical.buttons > .button, +.play-button.ten.vertical.buttons > .button, +.ui.ten.vertical.buttons > .play-button, +.download-button.ten.vertical.buttons > .button, +.ui.ten.vertical.buttons > .download-button { + height: 10%; +} +.ui.eleven.vertical.buttons > .button, +.play-button.eleven.vertical.buttons > .button, +.ui.eleven.vertical.buttons > .play-button, +.download-button.eleven.vertical.buttons > .button, +.ui.eleven.vertical.buttons > .download-button { + height: 9.09%; +} +.ui.twelve.vertical.buttons > .button, +.play-button.twelve.vertical.buttons > .button, +.ui.twelve.vertical.buttons > .play-button, +.download-button.twelve.vertical.buttons > .button, +.ui.twelve.vertical.buttons > .download-button { + height: 8.3333%; +} +/*------------------- + Colors +--------------------*/ +/*--- Black ---*/ +.ui.black.buttons .button, +.ui.black.button, +.play-button.black.buttons .button, +.play-button.black.button, +.ui.black.buttons .play-button, +.ui.black.play-button, +.download-button.black.buttons .button, +.download-button.black.button, +.ui.black.buttons .download-button, +.ui.black.download-button { + background-color: #1B1C1D; + color: #FFFFFF; + text-shadow: none; + background-image: none; +} +.ui.black.button, +.play-button.black.button, +.ui.black.play-button, +.download-button.black.button, +.ui.black.download-button { + box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset; +} +.ui.black.buttons .button:hover, +.ui.black.button:hover, +.play-button.black.buttons .button:hover, +.play-button.black.button:hover, +.ui.black.buttons .play-button:hover, +.ui.black.play-button:hover, +.download-button.black.buttons .button:hover, +.download-button.black.button:hover, +.ui.black.buttons .download-button:hover, +.ui.black.download-button:hover { + background-color: #27292a; + color: #FFFFFF; + text-shadow: none; +} +.ui.black.buttons .button:focus, +.ui.black.button:focus, +.play-button.black.buttons .button:focus, +.play-button.black.button:focus, +.ui.black.buttons .play-button:focus, +.ui.black.play-button:focus, +.download-button.black.buttons .button:focus, +.download-button.black.button:focus, +.ui.black.buttons .download-button:focus, +.ui.black.download-button:focus { + background-color: #2f3032; + color: #FFFFFF; + text-shadow: none; +} +.ui.black.buttons .button:active, +.ui.black.button:active, +.play-button.black.buttons .button:active, +.play-button.black.button:active, +.ui.black.buttons .play-button:active, +.ui.black.play-button:active, +.download-button.black.buttons .button:active, +.download-button.black.button:active, +.ui.black.buttons .download-button:active, +.ui.black.download-button:active { + background-color: #343637; + color: #FFFFFF; + text-shadow: none; +} +.ui.black.buttons .active.button, +.ui.black.buttons .active.button:active, +.ui.black.active.button, +.ui.black.button .active.button:active, +.play-button.black.buttons .active.button, +.play-button.black.buttons .active.button:active, +.play-button.black.active.button, +.play-button.black.button .active.button:active, +.ui.black.buttons .active.play-button, +.ui.black.buttons .active.play-button:active, +.ui.black.active.play-button, +.ui.black.play-button .active.play-button:active, +.download-button.black.buttons .active.button, +.download-button.black.buttons .active.button:active, +.download-button.black.active.button, +.download-button.black.button .active.button:active, +.ui.black.buttons .active.download-button, +.ui.black.buttons .active.download-button:active, +.ui.black.active.download-button, +.ui.black.download-button .active.download-button:active { + background-color: #0f0f10; + color: #FFFFFF; + text-shadow: none; +} +/* Basic */ +.ui.basic.black.buttons .button, +.ui.basic.black.button, +.play-button.basic.black.buttons .button, +.play-button.basic.black.button, +.ui.basic.black.buttons .play-button, +.ui.basic.black.play-button, +.download-button.basic.black.buttons .button, +.download-button.basic.black.button, +.ui.basic.black.buttons .download-button, +.ui.basic.black.download-button { + box-shadow: 0px 0px 0px 1px #1B1C1D inset !important; + color: #1B1C1D !important; +} +.ui.basic.black.buttons .button:hover, +.ui.basic.black.button:hover, +.play-button.basic.black.buttons .button:hover, +.play-button.basic.black.button:hover, +.ui.basic.black.buttons .play-button:hover, +.ui.basic.black.play-button:hover, +.download-button.basic.black.buttons .button:hover, +.download-button.basic.black.button:hover, +.ui.basic.black.buttons .download-button:hover, +.ui.basic.black.download-button:hover { + background: transparent !important; + box-shadow: 0px 0px 0px 1px #27292a inset !important; + color: #27292a !important; +} +.ui.basic.black.buttons .button:focus, +.ui.basic.black.button:focus, +.play-button.basic.black.buttons .button:focus, +.play-button.basic.black.button:focus, +.ui.basic.black.buttons .play-button:focus, +.ui.basic.black.play-button:focus, +.download-button.basic.black.buttons .button:focus, +.download-button.basic.black.button:focus, +.ui.basic.black.buttons .download-button:focus, +.ui.basic.black.download-button:focus { + background: transparent !important; + box-shadow: 0px 0px 0px 1px #2f3032 inset !important; + color: #27292a !important; +} +.ui.basic.black.buttons .active.button, +.ui.basic.black.active.button, +.play-button.basic.black.buttons .active.button, +.play-button.basic.black.active.button, +.ui.basic.black.buttons .active.play-button, +.ui.basic.black.active.play-button, +.download-button.basic.black.buttons .active.button, +.download-button.basic.black.active.button, +.ui.basic.black.buttons .active.download-button, +.ui.basic.black.active.download-button { + background: transparent !important; + box-shadow: 0px 0px 0px 1px #0f0f10 inset !important; + color: #343637 !important; +} +.ui.basic.black.buttons .button:active, +.ui.basic.black.button:active, +.play-button.basic.black.buttons .button:active, +.play-button.basic.black.button:active, +.ui.basic.black.buttons .play-button:active, +.ui.basic.black.play-button:active, +.download-button.basic.black.buttons .button:active, +.download-button.basic.black.button:active, +.ui.basic.black.buttons .download-button:active, +.ui.basic.black.download-button:active { + box-shadow: 0px 0px 0px 1px #343637 inset !important; + color: #343637 !important; +} +.ui.buttons:not(.vertical) > .basic.black.button:not(:first-child), +.play-button.buttons:not(.vertical) > .basic.black.button:not(:first-child), +.ui.buttons:not(.vertical) > .basic.black.play-button:not(:first-child), +.download-button.buttons:not(.vertical) > .basic.black.button:not(:first-child), +.ui.buttons:not(.vertical) > .basic.black.download-button:not(:first-child) { + margin-left: -1px; +} +/* Inverted */ +.ui.inverted.black.buttons .button, +.ui.inverted.black.button, +.play-button.inverted.black.buttons .button, +.play-button.inverted.black.button, +.ui.inverted.black.buttons .play-button, +.ui.inverted.black.play-button, +.download-button.inverted.black.buttons .button, +.download-button.inverted.black.button, +.ui.inverted.black.buttons .download-button, +.ui.inverted.black.download-button { + background-color: transparent; + box-shadow: 0px 0px 0px 2px #D4D4D5 inset !important; + color: #FFFFFF; +} +.ui.inverted.black.buttons .button:hover, +.ui.inverted.black.button:hover, +.ui.inverted.black.buttons .button:focus, +.ui.inverted.black.button:focus, +.ui.inverted.black.buttons .button.active, +.ui.inverted.black.button.active, +.ui.inverted.black.buttons .button:active, +.ui.inverted.black.button:active, +.play-button.inverted.black.buttons .button:hover, +.play-button.inverted.black.button:hover, +.play-button.inverted.black.buttons .button:focus, +.play-button.inverted.black.button:focus, +.play-button.inverted.black.buttons .button.active, +.play-button.inverted.black.button.active, +.play-button.inverted.black.buttons .button:active, +.play-button.inverted.black.button:active, +.ui.inverted.black.buttons .play-button:hover, +.ui.inverted.black.play-button:hover, +.ui.inverted.black.buttons .play-button:focus, +.ui.inverted.black.play-button:focus, +.ui.inverted.black.buttons .play-button.active, +.ui.inverted.black.play-button.active, +.ui.inverted.black.buttons .play-button:active, +.ui.inverted.black.play-button:active, +.download-button.inverted.black.buttons .button:hover, +.download-button.inverted.black.button:hover, +.download-button.inverted.black.buttons .button:focus, +.download-button.inverted.black.button:focus, +.download-button.inverted.black.buttons .button.active, +.download-button.inverted.black.button.active, +.download-button.inverted.black.buttons .button:active, +.download-button.inverted.black.button:active, +.ui.inverted.black.buttons .download-button:hover, +.ui.inverted.black.download-button:hover, +.ui.inverted.black.buttons .download-button:focus, +.ui.inverted.black.download-button:focus, +.ui.inverted.black.buttons .download-button.active, +.ui.inverted.black.download-button.active, +.ui.inverted.black.buttons .download-button:active, +.ui.inverted.black.download-button:active { + box-shadow: none !important; + color: #FFFFFF; +} +.ui.inverted.black.buttons .button:hover, +.ui.inverted.black.button:hover, +.play-button.inverted.black.buttons .button:hover, +.play-button.inverted.black.button:hover, +.ui.inverted.black.buttons .play-button:hover, +.ui.inverted.black.play-button:hover, +.download-button.inverted.black.buttons .button:hover, +.download-button.inverted.black.button:hover, +.ui.inverted.black.buttons .download-button:hover, +.ui.inverted.black.download-button:hover { + background-color: #000000; +} +.ui.inverted.black.buttons .button:focus, +.ui.inverted.black.button:focus, +.play-button.inverted.black.buttons .button:focus, +.play-button.inverted.black.button:focus, +.ui.inverted.black.buttons .play-button:focus, +.ui.inverted.black.play-button:focus, +.download-button.inverted.black.buttons .button:focus, +.download-button.inverted.black.button:focus, +.ui.inverted.black.buttons .download-button:focus, +.ui.inverted.black.download-button:focus { + background-color: #000000; +} +.ui.inverted.black.buttons .active.button, +.ui.inverted.black.active.button, +.play-button.inverted.black.buttons .active.button, +.play-button.inverted.black.active.button, +.ui.inverted.black.buttons .active.play-button, +.ui.inverted.black.active.play-button, +.download-button.inverted.black.buttons .active.button, +.download-button.inverted.black.active.button, +.ui.inverted.black.buttons .active.download-button, +.ui.inverted.black.active.download-button { + background-color: #000000; +} +.ui.inverted.black.buttons .button:active, +.ui.inverted.black.button:active, +.play-button.inverted.black.buttons .button:active, +.play-button.inverted.black.button:active, +.ui.inverted.black.buttons .play-button:active, +.ui.inverted.black.play-button:active, +.download-button.inverted.black.buttons .button:active, +.download-button.inverted.black.button:active, +.ui.inverted.black.buttons .download-button:active, +.ui.inverted.black.download-button:active { + background-color: #000000; +} +/* Inverted Basic */ +.ui.inverted.black.basic.buttons .button, +.ui.inverted.black.buttons .basic.button, +.ui.inverted.black.basic.button, +.play-button.inverted.black.basic.buttons .button, +.play-button.inverted.black.buttons .basic.button, +.play-button.inverted.black.basic.button, +.ui.inverted.black.basic.buttons .play-button, +.ui.inverted.black.buttons .basic.play-button, +.ui.inverted.black.basic.play-button, +.download-button.inverted.black.basic.buttons .button, +.download-button.inverted.black.buttons .basic.button, +.download-button.inverted.black.basic.button, +.ui.inverted.black.basic.buttons .download-button, +.ui.inverted.black.buttons .basic.download-button, +.ui.inverted.black.basic.download-button { + background-color: transparent; + box-shadow: 0px 0px 0px 2px rgba(255, 255, 255, 0.5) inset !important; + color: #FFFFFF !important; +} +.ui.inverted.black.basic.buttons .button:hover, +.ui.inverted.black.buttons .basic.button:hover, +.ui.inverted.black.basic.button:hover, +.play-button.inverted.black.basic.buttons .button:hover, +.play-button.inverted.black.buttons .basic.button:hover, +.play-button.inverted.black.basic.button:hover, +.ui.inverted.black.basic.buttons .play-button:hover, +.ui.inverted.black.buttons .basic.play-button:hover, +.ui.inverted.black.basic.play-button:hover, +.download-button.inverted.black.basic.buttons .button:hover, +.download-button.inverted.black.buttons .basic.button:hover, +.download-button.inverted.black.basic.button:hover, +.ui.inverted.black.basic.buttons .download-button:hover, +.ui.inverted.black.buttons .basic.download-button:hover, +.ui.inverted.black.basic.download-button:hover { + box-shadow: 0px 0px 0px 2px #000000 inset !important; + color: #FFFFFF !important; +} +.ui.inverted.black.basic.buttons .button:focus, +.ui.inverted.black.basic.buttons .button:focus, +.ui.inverted.black.basic.button:focus, +.play-button.inverted.black.basic.buttons .button:focus, +.play-button.inverted.black.basic.buttons .button:focus, +.play-button.inverted.black.basic.button:focus, +.ui.inverted.black.basic.buttons .play-button:focus, +.ui.inverted.black.basic.buttons .play-button:focus, +.ui.inverted.black.basic.play-button:focus, +.download-button.inverted.black.basic.buttons .button:focus, +.download-button.inverted.black.basic.buttons .button:focus, +.download-button.inverted.black.basic.button:focus, +.ui.inverted.black.basic.buttons .download-button:focus, +.ui.inverted.black.basic.buttons .download-button:focus, +.ui.inverted.black.basic.download-button:focus { + box-shadow: 0px 0px 0px 2px #000000 inset !important; + color: #545454 !important; +} +.ui.inverted.black.basic.buttons .active.button, +.ui.inverted.black.buttons .basic.active.button, +.ui.inverted.black.basic.active.button, +.play-button.inverted.black.basic.buttons .active.button, +.play-button.inverted.black.buttons .basic.active.button, +.play-button.inverted.black.basic.active.button, +.ui.inverted.black.basic.buttons .active.play-button, +.ui.inverted.black.buttons .basic.active.play-button, +.ui.inverted.black.basic.active.play-button, +.download-button.inverted.black.basic.buttons .active.button, +.download-button.inverted.black.buttons .basic.active.button, +.download-button.inverted.black.basic.active.button, +.ui.inverted.black.basic.buttons .active.download-button, +.ui.inverted.black.buttons .basic.active.download-button, +.ui.inverted.black.basic.active.download-button { + box-shadow: 0px 0px 0px 2px #000000 inset !important; + color: #FFFFFF !important; +} +.ui.inverted.black.basic.buttons .button:active, +.ui.inverted.black.buttons .basic.button:active, +.ui.inverted.black.basic.button:active, +.play-button.inverted.black.basic.buttons .button:active, +.play-button.inverted.black.buttons .basic.button:active, +.play-button.inverted.black.basic.button:active, +.ui.inverted.black.basic.buttons .play-button:active, +.ui.inverted.black.buttons .basic.play-button:active, +.ui.inverted.black.basic.play-button:active, +.download-button.inverted.black.basic.buttons .button:active, +.download-button.inverted.black.buttons .basic.button:active, +.download-button.inverted.black.basic.button:active, +.ui.inverted.black.basic.buttons .download-button:active, +.ui.inverted.black.buttons .basic.download-button:active, +.ui.inverted.black.basic.download-button:active { + box-shadow: 0px 0px 0px 2px #000000 inset !important; + color: #FFFFFF !important; +} +/*--- Grey ---*/ +.ui.grey.buttons .button, +.ui.grey.button, +.ui.ui.button.editortools-btn.buttons .button, +.ui.ui.button.editortools-btn.button, +.play-button.grey.buttons .button, +.play-button.grey.button, +.ui.grey.buttons .play-button, +.ui.grey.play-button, +.download-button.grey.buttons .button, +.download-button.grey.button, +.ui.grey.buttons .download-button, +.ui.grey.download-button, +.ui.play-button.button.editortools-btn.buttons .button, +.ui.play-button.button.editortools-btn.button, +.ui.ui.play-button.editortools-btn.buttons .button, +.ui.ui.play-button.editortools-btn.button, +.ui.download-button.button.editortools-btn.buttons .button, +.ui.download-button.button.editortools-btn.button, +.ui.ui.download-button.editortools-btn.buttons .button, +.ui.ui.download-button.editortools-btn.button { + background-color: #42495F; + color: #FFFFFF; + text-shadow: none; + background-image: none; +} +.ui.grey.button, +.ui.ui.button.editortools-btn.button, +.play-button.grey.button, +.ui.grey.play-button, +.download-button.grey.button, +.ui.grey.download-button, +.ui.play-button.button.editortools-btn.button, +.ui.ui.play-button.editortools-btn.button, +.ui.download-button.button.editortools-btn.button, +.ui.ui.download-button.editortools-btn.button { + box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset; +} +.ui.grey.buttons .button:hover, +.ui.grey.button:hover, +.ui.ui.button.editortools-btn.buttons .button:hover, +.ui.ui.button.editortools-btn.button:hover, +.play-button.grey.buttons .button:hover, +.play-button.grey.button:hover, +.ui.grey.buttons .play-button:hover, +.ui.grey.play-button:hover, +.download-button.grey.buttons .button:hover, +.download-button.grey.button:hover, +.ui.grey.buttons .download-button:hover, +.ui.grey.download-button:hover, +.ui.play-button.button.editortools-btn.buttons .button:hover, +.ui.play-button.button.editortools-btn.button:hover, +.ui.ui.play-button.editortools-btn.buttons .button:hover, +.ui.ui.play-button.editortools-btn.button:hover, +.ui.download-button.button.editortools-btn.buttons .button:hover, +.ui.download-button.button.editortools-btn.button:hover, +.ui.ui.download-button.editortools-btn.buttons .button:hover, +.ui.ui.download-button.editortools-btn.button:hover { + background-color: #4c556e; + color: #FFFFFF; + text-shadow: none; +} +.ui.grey.buttons .button:focus, +.ui.grey.button:focus, +.ui.ui.button.editortools-btn.buttons .button:focus, +.ui.ui.button.editortools-btn.button:focus, +.play-button.grey.buttons .button:focus, +.play-button.grey.button:focus, +.ui.grey.buttons .play-button:focus, +.ui.grey.play-button:focus, +.download-button.grey.buttons .button:focus, +.download-button.grey.button:focus, +.ui.grey.buttons .download-button:focus, +.ui.grey.download-button:focus, +.ui.play-button.button.editortools-btn.buttons .button:focus, +.ui.play-button.button.editortools-btn.button:focus, +.ui.ui.play-button.editortools-btn.buttons .button:focus, +.ui.ui.play-button.editortools-btn.button:focus, +.ui.download-button.button.editortools-btn.buttons .button:focus, +.ui.download-button.button.editortools-btn.button:focus, +.ui.ui.download-button.editortools-btn.buttons .button:focus, +.ui.ui.download-button.editortools-btn.button:focus { + background-color: #535b77; + color: #FFFFFF; + text-shadow: none; +} +.ui.grey.buttons .button:active, +.ui.grey.button:active, +.ui.ui.button.editortools-btn.buttons .button:active, +.ui.ui.button.editortools-btn.button:active, +.play-button.grey.buttons .button:active, +.play-button.grey.button:active, +.ui.grey.buttons .play-button:active, +.ui.grey.play-button:active, +.download-button.grey.buttons .button:active, +.download-button.grey.button:active, +.ui.grey.buttons .download-button:active, +.ui.grey.download-button:active, +.ui.play-button.button.editortools-btn.buttons .button:active, +.ui.play-button.button.editortools-btn.button:active, +.ui.ui.play-button.editortools-btn.buttons .button:active, +.ui.ui.play-button.editortools-btn.button:active, +.ui.download-button.button.editortools-btn.buttons .button:active, +.ui.download-button.button.editortools-btn.button:active, +.ui.ui.download-button.editortools-btn.buttons .button:active, +.ui.ui.download-button.editortools-btn.button:active { + background-color: #57607d; + color: #FFFFFF; + text-shadow: none; +} +.ui.grey.buttons .active.button, +.ui.grey.buttons .active.button:active, +.ui.grey.active.button, +.ui.grey.button .active.button:active, +.ui.ui.button.editortools-btn.buttons .active.button, +.ui.ui.button.editortools-btn.buttons .active.button:active, +.ui.ui.button.editortools-btn.active.button, +.ui.ui.button.editortools-btn.button .active.button:active, +.play-button.grey.buttons .active.button, +.play-button.grey.buttons .active.button:active, +.play-button.grey.active.button, +.play-button.grey.button .active.button:active, +.ui.grey.buttons .active.play-button, +.ui.grey.buttons .active.play-button:active, +.ui.grey.active.play-button, +.ui.grey.play-button .active.play-button:active, +.download-button.grey.buttons .active.button, +.download-button.grey.buttons .active.button:active, +.download-button.grey.active.button, +.download-button.grey.button .active.button:active, +.ui.grey.buttons .active.download-button, +.ui.grey.buttons .active.download-button:active, +.ui.grey.active.download-button, +.ui.grey.download-button .active.download-button:active, +.ui.play-button.button.editortools-btn.buttons .active.button, +.ui.play-button.button.editortools-btn.buttons .active.button:active, +.ui.play-button.button.editortools-btn.active.button, +.ui.play-button.button.editortools-btn.button .active.button:active, +.ui.ui.play-button.editortools-btn.buttons .active.button, +.ui.ui.play-button.editortools-btn.buttons .active.button:active, +.ui.ui.play-button.editortools-btn.active.button, +.ui.ui.play-button.editortools-btn.button .active.button:active, +.ui.download-button.button.editortools-btn.buttons .active.button, +.ui.download-button.button.editortools-btn.buttons .active.button:active, +.ui.download-button.button.editortools-btn.active.button, +.ui.download-button.button.editortools-btn.button .active.button:active, +.ui.ui.download-button.editortools-btn.buttons .active.button, +.ui.ui.download-button.editortools-btn.buttons .active.button:active, +.ui.ui.download-button.editortools-btn.active.button, +.ui.ui.download-button.editortools-btn.button .active.button:active { + background-color: #383d50; + color: #FFFFFF; + text-shadow: none; +} +/* Basic */ +.ui.basic.grey.buttons .button, +.ui.basic.grey.button, +.ui.basic.ui.button.editortools-btn.buttons .button, +.ui.basic.ui.button.editortools-btn.button, +.play-button.basic.grey.buttons .button, +.play-button.basic.grey.button, +.ui.basic.grey.buttons .play-button, +.ui.basic.grey.play-button, +.download-button.basic.grey.buttons .button, +.download-button.basic.grey.button, +.ui.basic.grey.buttons .download-button, +.ui.basic.grey.download-button, +.ui.basic.play-button.button.editortools-btn.buttons .button, +.ui.basic.play-button.button.editortools-btn.button, +.ui.basic.ui.play-button.editortools-btn.buttons .button, +.ui.basic.ui.play-button.editortools-btn.button, +.ui.basic.download-button.button.editortools-btn.buttons .button, +.ui.basic.download-button.button.editortools-btn.button, +.ui.basic.ui.download-button.editortools-btn.buttons .button, +.ui.basic.ui.download-button.editortools-btn.button { + box-shadow: 0px 0px 0px 1px #42495F inset !important; + color: #42495F !important; +} +.ui.basic.grey.buttons .button:hover, +.ui.basic.grey.button:hover, +.ui.basic.ui.button.editortools-btn.buttons .button:hover, +.ui.basic.ui.button.editortools-btn.button:hover, +.play-button.basic.grey.buttons .button:hover, +.play-button.basic.grey.button:hover, +.ui.basic.grey.buttons .play-button:hover, +.ui.basic.grey.play-button:hover, +.download-button.basic.grey.buttons .button:hover, +.download-button.basic.grey.button:hover, +.ui.basic.grey.buttons .download-button:hover, +.ui.basic.grey.download-button:hover, +.ui.basic.play-button.button.editortools-btn.buttons .button:hover, +.ui.basic.play-button.button.editortools-btn.button:hover, +.ui.basic.ui.play-button.editortools-btn.buttons .button:hover, +.ui.basic.ui.play-button.editortools-btn.button:hover, +.ui.basic.download-button.button.editortools-btn.buttons .button:hover, +.ui.basic.download-button.button.editortools-btn.button:hover, +.ui.basic.ui.download-button.editortools-btn.buttons .button:hover, +.ui.basic.ui.download-button.editortools-btn.button:hover { + background: transparent !important; + box-shadow: 0px 0px 0px 1px #4c556e inset !important; + color: #4c556e !important; +} +.ui.basic.grey.buttons .button:focus, +.ui.basic.grey.button:focus, +.ui.basic.ui.button.editortools-btn.buttons .button:focus, +.ui.basic.ui.button.editortools-btn.button:focus, +.play-button.basic.grey.buttons .button:focus, +.play-button.basic.grey.button:focus, +.ui.basic.grey.buttons .play-button:focus, +.ui.basic.grey.play-button:focus, +.download-button.basic.grey.buttons .button:focus, +.download-button.basic.grey.button:focus, +.ui.basic.grey.buttons .download-button:focus, +.ui.basic.grey.download-button:focus, +.ui.basic.play-button.button.editortools-btn.buttons .button:focus, +.ui.basic.play-button.button.editortools-btn.button:focus, +.ui.basic.ui.play-button.editortools-btn.buttons .button:focus, +.ui.basic.ui.play-button.editortools-btn.button:focus, +.ui.basic.download-button.button.editortools-btn.buttons .button:focus, +.ui.basic.download-button.button.editortools-btn.button:focus, +.ui.basic.ui.download-button.editortools-btn.buttons .button:focus, +.ui.basic.ui.download-button.editortools-btn.button:focus { + background: transparent !important; + box-shadow: 0px 0px 0px 1px #535b77 inset !important; + color: #4c556e !important; +} +.ui.basic.grey.buttons .active.button, +.ui.basic.grey.active.button, +.ui.basic.ui.button.editortools-btn.buttons .active.button, +.ui.basic.ui.button.editortools-btn.active.button, +.play-button.basic.grey.buttons .active.button, +.play-button.basic.grey.active.button, +.ui.basic.grey.buttons .active.play-button, +.ui.basic.grey.active.play-button, +.download-button.basic.grey.buttons .active.button, +.download-button.basic.grey.active.button, +.ui.basic.grey.buttons .active.download-button, +.ui.basic.grey.active.download-button, +.ui.basic.play-button.button.editortools-btn.buttons .active.button, +.ui.basic.play-button.button.editortools-btn.active.button, +.ui.basic.ui.play-button.editortools-btn.buttons .active.button, +.ui.basic.ui.play-button.editortools-btn.active.button, +.ui.basic.download-button.button.editortools-btn.buttons .active.button, +.ui.basic.download-button.button.editortools-btn.active.button, +.ui.basic.ui.download-button.editortools-btn.buttons .active.button, +.ui.basic.ui.download-button.editortools-btn.active.button { + background: transparent !important; + box-shadow: 0px 0px 0px 1px #383d50 inset !important; + color: #57607d !important; +} +.ui.basic.grey.buttons .button:active, +.ui.basic.grey.button:active, +.ui.basic.ui.button.editortools-btn.buttons .button:active, +.ui.basic.ui.button.editortools-btn.button:active, +.play-button.basic.grey.buttons .button:active, +.play-button.basic.grey.button:active, +.ui.basic.grey.buttons .play-button:active, +.ui.basic.grey.play-button:active, +.download-button.basic.grey.buttons .button:active, +.download-button.basic.grey.button:active, +.ui.basic.grey.buttons .download-button:active, +.ui.basic.grey.download-button:active, +.ui.basic.play-button.button.editortools-btn.buttons .button:active, +.ui.basic.play-button.button.editortools-btn.button:active, +.ui.basic.ui.play-button.editortools-btn.buttons .button:active, +.ui.basic.ui.play-button.editortools-btn.button:active, +.ui.basic.download-button.button.editortools-btn.buttons .button:active, +.ui.basic.download-button.button.editortools-btn.button:active, +.ui.basic.ui.download-button.editortools-btn.buttons .button:active, +.ui.basic.ui.download-button.editortools-btn.button:active { + box-shadow: 0px 0px 0px 1px #57607d inset !important; + color: #57607d !important; +} +.ui.buttons:not(.vertical) > .basic.grey.button:not(:first-child), +.ui.buttons:not(.vertical) > .basic.ui.button.editortools-btn.button:not(:first-child), +.play-button.buttons:not(.vertical) > .basic.grey.button:not(:first-child), +.ui.buttons:not(.vertical) > .basic.grey.play-button:not(:first-child), +.download-button.buttons:not(.vertical) > .basic.grey.button:not(:first-child), +.ui.buttons:not(.vertical) > .basic.grey.download-button:not(:first-child), +.ui.buttons:not(.vertical) > .basic.play-button.button.editortools-btn.button:not(:first-child), +.ui.buttons:not(.vertical) > .basic.ui.play-button.editortools-btn.button:not(:first-child), +.ui.buttons:not(.vertical) > .basic.download-button.button.editortools-btn.button:not(:first-child), +.ui.buttons:not(.vertical) > .basic.ui.download-button.editortools-btn.button:not(:first-child) { + margin-left: -1px; +} +/* Inverted */ +.ui.inverted.grey.buttons .button, +.ui.inverted.grey.button, +.ui.inverted.ui.button.editortools-btn.buttons .button, +.ui.inverted.ui.button.editortools-btn.button, +.play-button.inverted.grey.buttons .button, +.play-button.inverted.grey.button, +.ui.inverted.grey.buttons .play-button, +.ui.inverted.grey.play-button, +.download-button.inverted.grey.buttons .button, +.download-button.inverted.grey.button, +.ui.inverted.grey.buttons .download-button, +.ui.inverted.grey.download-button, +.ui.inverted.play-button.button.editortools-btn.buttons .button, +.ui.inverted.play-button.button.editortools-btn.button, +.ui.inverted.ui.play-button.editortools-btn.buttons .button, +.ui.inverted.ui.play-button.editortools-btn.button, +.ui.inverted.download-button.button.editortools-btn.buttons .button, +.ui.inverted.download-button.button.editortools-btn.button, +.ui.inverted.ui.download-button.editortools-btn.buttons .button, +.ui.inverted.ui.download-button.editortools-btn.button { + background-color: transparent; + box-shadow: 0px 0px 0px 2px #D4D4D5 inset !important; + color: #FFFFFF; +} +.ui.inverted.grey.buttons .button:hover, +.ui.inverted.grey.button:hover, +.ui.inverted.grey.buttons .button:focus, +.ui.inverted.grey.button:focus, +.ui.inverted.grey.buttons .button.active, +.ui.inverted.grey.button.active, +.ui.inverted.grey.buttons .button:active, +.ui.inverted.grey.button:active, +.ui.inverted.ui.button.editortools-btn.buttons .button:hover, +.ui.inverted.ui.button.editortools-btn.button:hover, +.ui.inverted.ui.button.editortools-btn.buttons .button:focus, +.ui.inverted.ui.button.editortools-btn.button:focus, +.ui.inverted.ui.button.editortools-btn.buttons .button.active, +.ui.inverted.ui.button.editortools-btn.button.active, +.ui.inverted.ui.button.editortools-btn.buttons .button:active, +.ui.inverted.ui.button.editortools-btn.button:active, +.play-button.inverted.grey.buttons .button:hover, +.play-button.inverted.grey.button:hover, +.play-button.inverted.grey.buttons .button:focus, +.play-button.inverted.grey.button:focus, +.play-button.inverted.grey.buttons .button.active, +.play-button.inverted.grey.button.active, +.play-button.inverted.grey.buttons .button:active, +.play-button.inverted.grey.button:active, +.ui.inverted.grey.buttons .play-button:hover, +.ui.inverted.grey.play-button:hover, +.ui.inverted.grey.buttons .play-button:focus, +.ui.inverted.grey.play-button:focus, +.ui.inverted.grey.buttons .play-button.active, +.ui.inverted.grey.play-button.active, +.ui.inverted.grey.buttons .play-button:active, +.ui.inverted.grey.play-button:active, +.download-button.inverted.grey.buttons .button:hover, +.download-button.inverted.grey.button:hover, +.download-button.inverted.grey.buttons .button:focus, +.download-button.inverted.grey.button:focus, +.download-button.inverted.grey.buttons .button.active, +.download-button.inverted.grey.button.active, +.download-button.inverted.grey.buttons .button:active, +.download-button.inverted.grey.button:active, +.ui.inverted.grey.buttons .download-button:hover, +.ui.inverted.grey.download-button:hover, +.ui.inverted.grey.buttons .download-button:focus, +.ui.inverted.grey.download-button:focus, +.ui.inverted.grey.buttons .download-button.active, +.ui.inverted.grey.download-button.active, +.ui.inverted.grey.buttons .download-button:active, +.ui.inverted.grey.download-button:active, +.ui.inverted.play-button.button.editortools-btn.buttons .button:hover, +.ui.inverted.play-button.button.editortools-btn.button:hover, +.ui.inverted.play-button.button.editortools-btn.buttons .button:focus, +.ui.inverted.play-button.button.editortools-btn.button:focus, +.ui.inverted.play-button.button.editortools-btn.buttons .button.active, +.ui.inverted.play-button.button.editortools-btn.button.active, +.ui.inverted.play-button.button.editortools-btn.buttons .button:active, +.ui.inverted.play-button.button.editortools-btn.button:active, +.ui.inverted.ui.play-button.editortools-btn.buttons .button:hover, +.ui.inverted.ui.play-button.editortools-btn.button:hover, +.ui.inverted.ui.play-button.editortools-btn.buttons .button:focus, +.ui.inverted.ui.play-button.editortools-btn.button:focus, +.ui.inverted.ui.play-button.editortools-btn.buttons .button.active, +.ui.inverted.ui.play-button.editortools-btn.button.active, +.ui.inverted.ui.play-button.editortools-btn.buttons .button:active, +.ui.inverted.ui.play-button.editortools-btn.button:active, +.ui.inverted.download-button.button.editortools-btn.buttons .button:hover, +.ui.inverted.download-button.button.editortools-btn.button:hover, +.ui.inverted.download-button.button.editortools-btn.buttons .button:focus, +.ui.inverted.download-button.button.editortools-btn.button:focus, +.ui.inverted.download-button.button.editortools-btn.buttons .button.active, +.ui.inverted.download-button.button.editortools-btn.button.active, +.ui.inverted.download-button.button.editortools-btn.buttons .button:active, +.ui.inverted.download-button.button.editortools-btn.button:active, +.ui.inverted.ui.download-button.editortools-btn.buttons .button:hover, +.ui.inverted.ui.download-button.editortools-btn.button:hover, +.ui.inverted.ui.download-button.editortools-btn.buttons .button:focus, +.ui.inverted.ui.download-button.editortools-btn.button:focus, +.ui.inverted.ui.download-button.editortools-btn.buttons .button.active, +.ui.inverted.ui.download-button.editortools-btn.button.active, +.ui.inverted.ui.download-button.editortools-btn.buttons .button:active, +.ui.inverted.ui.download-button.editortools-btn.button:active { + box-shadow: none !important; + color: rgba(0, 0, 0, 0.6); +} +.ui.inverted.grey.buttons .button:hover, +.ui.inverted.grey.button:hover, +.ui.inverted.ui.button.editortools-btn.buttons .button:hover, +.ui.inverted.ui.button.editortools-btn.button:hover, +.play-button.inverted.grey.buttons .button:hover, +.play-button.inverted.grey.button:hover, +.ui.inverted.grey.buttons .play-button:hover, +.ui.inverted.grey.play-button:hover, +.download-button.inverted.grey.buttons .button:hover, +.download-button.inverted.grey.button:hover, +.ui.inverted.grey.buttons .download-button:hover, +.ui.inverted.grey.download-button:hover, +.ui.inverted.play-button.button.editortools-btn.buttons .button:hover, +.ui.inverted.play-button.button.editortools-btn.button:hover, +.ui.inverted.ui.play-button.editortools-btn.buttons .button:hover, +.ui.inverted.ui.play-button.editortools-btn.button:hover, +.ui.inverted.download-button.button.editortools-btn.buttons .button:hover, +.ui.inverted.download-button.button.editortools-btn.button:hover, +.ui.inverted.ui.download-button.editortools-btn.buttons .button:hover, +.ui.inverted.ui.download-button.editortools-btn.button:hover { + background-color: #cfd0d2; +} +.ui.inverted.grey.buttons .button:focus, +.ui.inverted.grey.button:focus, +.ui.inverted.ui.button.editortools-btn.buttons .button:focus, +.ui.inverted.ui.button.editortools-btn.button:focus, +.play-button.inverted.grey.buttons .button:focus, +.play-button.inverted.grey.button:focus, +.ui.inverted.grey.buttons .play-button:focus, +.ui.inverted.grey.play-button:focus, +.download-button.inverted.grey.buttons .button:focus, +.download-button.inverted.grey.button:focus, +.ui.inverted.grey.buttons .download-button:focus, +.ui.inverted.grey.download-button:focus, +.ui.inverted.play-button.button.editortools-btn.buttons .button:focus, +.ui.inverted.play-button.button.editortools-btn.button:focus, +.ui.inverted.ui.play-button.editortools-btn.buttons .button:focus, +.ui.inverted.ui.play-button.editortools-btn.button:focus, +.ui.inverted.download-button.button.editortools-btn.buttons .button:focus, +.ui.inverted.download-button.button.editortools-btn.button:focus, +.ui.inverted.ui.download-button.editortools-btn.buttons .button:focus, +.ui.inverted.ui.download-button.editortools-btn.button:focus { + background-color: #c7c9cb; +} +.ui.inverted.grey.buttons .active.button, +.ui.inverted.grey.active.button, +.ui.inverted.ui.button.editortools-btn.buttons .active.button, +.ui.inverted.ui.button.editortools-btn.active.button, +.play-button.inverted.grey.buttons .active.button, +.play-button.inverted.grey.active.button, +.ui.inverted.grey.buttons .active.play-button, +.ui.inverted.grey.active.play-button, +.download-button.inverted.grey.buttons .active.button, +.download-button.inverted.grey.active.button, +.ui.inverted.grey.buttons .active.download-button, +.ui.inverted.grey.active.download-button, +.ui.inverted.play-button.button.editortools-btn.buttons .active.button, +.ui.inverted.play-button.button.editortools-btn.active.button, +.ui.inverted.ui.play-button.editortools-btn.buttons .active.button, +.ui.inverted.ui.play-button.editortools-btn.active.button, +.ui.inverted.download-button.button.editortools-btn.buttons .active.button, +.ui.inverted.download-button.button.editortools-btn.active.button, +.ui.inverted.ui.download-button.editortools-btn.buttons .active.button, +.ui.inverted.ui.download-button.editortools-btn.active.button { + background-color: #cfd0d2; +} +.ui.inverted.grey.buttons .button:active, +.ui.inverted.grey.button:active, +.ui.inverted.ui.button.editortools-btn.buttons .button:active, +.ui.inverted.ui.button.editortools-btn.button:active, +.play-button.inverted.grey.buttons .button:active, +.play-button.inverted.grey.button:active, +.ui.inverted.grey.buttons .play-button:active, +.ui.inverted.grey.play-button:active, +.download-button.inverted.grey.buttons .button:active, +.download-button.inverted.grey.button:active, +.ui.inverted.grey.buttons .download-button:active, +.ui.inverted.grey.download-button:active, +.ui.inverted.play-button.button.editortools-btn.buttons .button:active, +.ui.inverted.play-button.button.editortools-btn.button:active, +.ui.inverted.ui.play-button.editortools-btn.buttons .button:active, +.ui.inverted.ui.play-button.editortools-btn.button:active, +.ui.inverted.download-button.button.editortools-btn.buttons .button:active, +.ui.inverted.download-button.button.editortools-btn.button:active, +.ui.inverted.ui.download-button.editortools-btn.buttons .button:active, +.ui.inverted.ui.download-button.editortools-btn.button:active { + background-color: #c2c4c5; +} +/* Inverted Basic */ +.ui.inverted.grey.basic.buttons .button, +.ui.inverted.grey.buttons .basic.button, +.ui.inverted.grey.basic.button, +.ui.inverted.ui.button.editortools-btn.basic.buttons .button, +.ui.inverted.ui.button.editortools-btn.buttons .basic.button, +.ui.inverted.ui.button.editortools-btn.basic.button, +.play-button.inverted.grey.basic.buttons .button, +.play-button.inverted.grey.buttons .basic.button, +.play-button.inverted.grey.basic.button, +.ui.inverted.grey.basic.buttons .play-button, +.ui.inverted.grey.buttons .basic.play-button, +.ui.inverted.grey.basic.play-button, +.download-button.inverted.grey.basic.buttons .button, +.download-button.inverted.grey.buttons .basic.button, +.download-button.inverted.grey.basic.button, +.ui.inverted.grey.basic.buttons .download-button, +.ui.inverted.grey.buttons .basic.download-button, +.ui.inverted.grey.basic.download-button, +.ui.inverted.play-button.button.editortools-btn.basic.buttons .button, +.ui.inverted.play-button.button.editortools-btn.buttons .basic.button, +.ui.inverted.play-button.button.editortools-btn.basic.button, +.ui.inverted.ui.play-button.editortools-btn.basic.buttons .button, +.ui.inverted.ui.play-button.editortools-btn.buttons .basic.button, +.ui.inverted.ui.play-button.editortools-btn.basic.button, +.ui.inverted.download-button.button.editortools-btn.basic.buttons .button, +.ui.inverted.download-button.button.editortools-btn.buttons .basic.button, +.ui.inverted.download-button.button.editortools-btn.basic.button, +.ui.inverted.ui.download-button.editortools-btn.basic.buttons .button, +.ui.inverted.ui.download-button.editortools-btn.buttons .basic.button, +.ui.inverted.ui.download-button.editortools-btn.basic.button { + background-color: transparent; + box-shadow: 0px 0px 0px 2px rgba(255, 255, 255, 0.5) inset !important; + color: #FFFFFF !important; +} +.ui.inverted.grey.basic.buttons .button:hover, +.ui.inverted.grey.buttons .basic.button:hover, +.ui.inverted.grey.basic.button:hover, +.ui.inverted.ui.button.editortools-btn.basic.buttons .button:hover, +.ui.inverted.ui.button.editortools-btn.buttons .basic.button:hover, +.ui.inverted.ui.button.editortools-btn.basic.button:hover, +.play-button.inverted.grey.basic.buttons .button:hover, +.play-button.inverted.grey.buttons .basic.button:hover, +.play-button.inverted.grey.basic.button:hover, +.ui.inverted.grey.basic.buttons .play-button:hover, +.ui.inverted.grey.buttons .basic.play-button:hover, +.ui.inverted.grey.basic.play-button:hover, +.download-button.inverted.grey.basic.buttons .button:hover, +.download-button.inverted.grey.buttons .basic.button:hover, +.download-button.inverted.grey.basic.button:hover, +.ui.inverted.grey.basic.buttons .download-button:hover, +.ui.inverted.grey.buttons .basic.download-button:hover, +.ui.inverted.grey.basic.download-button:hover, +.ui.inverted.play-button.button.editortools-btn.basic.buttons .button:hover, +.ui.inverted.play-button.button.editortools-btn.buttons .basic.button:hover, +.ui.inverted.play-button.button.editortools-btn.basic.button:hover, +.ui.inverted.ui.play-button.editortools-btn.basic.buttons .button:hover, +.ui.inverted.ui.play-button.editortools-btn.buttons .basic.button:hover, +.ui.inverted.ui.play-button.editortools-btn.basic.button:hover, +.ui.inverted.download-button.button.editortools-btn.basic.buttons .button:hover, +.ui.inverted.download-button.button.editortools-btn.buttons .basic.button:hover, +.ui.inverted.download-button.button.editortools-btn.basic.button:hover, +.ui.inverted.ui.download-button.editortools-btn.basic.buttons .button:hover, +.ui.inverted.ui.download-button.editortools-btn.buttons .basic.button:hover, +.ui.inverted.ui.download-button.editortools-btn.basic.button:hover { + box-shadow: 0px 0px 0px 2px #cfd0d2 inset !important; + color: #FFFFFF !important; +} +.ui.inverted.grey.basic.buttons .button:focus, +.ui.inverted.grey.basic.buttons .button:focus, +.ui.inverted.grey.basic.button:focus, +.ui.inverted.ui.button.editortools-btn.basic.buttons .button:focus, +.ui.inverted.ui.button.editortools-btn.basic.buttons .button:focus, +.ui.inverted.ui.button.editortools-btn.basic.button:focus, +.play-button.inverted.grey.basic.buttons .button:focus, +.play-button.inverted.grey.basic.buttons .button:focus, +.play-button.inverted.grey.basic.button:focus, +.ui.inverted.grey.basic.buttons .play-button:focus, +.ui.inverted.grey.basic.buttons .play-button:focus, +.ui.inverted.grey.basic.play-button:focus, +.download-button.inverted.grey.basic.buttons .button:focus, +.download-button.inverted.grey.basic.buttons .button:focus, +.download-button.inverted.grey.basic.button:focus, +.ui.inverted.grey.basic.buttons .download-button:focus, +.ui.inverted.grey.basic.buttons .download-button:focus, +.ui.inverted.grey.basic.download-button:focus, +.ui.inverted.play-button.button.editortools-btn.basic.buttons .button:focus, +.ui.inverted.play-button.button.editortools-btn.basic.buttons .button:focus, +.ui.inverted.play-button.button.editortools-btn.basic.button:focus, +.ui.inverted.ui.play-button.editortools-btn.basic.buttons .button:focus, +.ui.inverted.ui.play-button.editortools-btn.basic.buttons .button:focus, +.ui.inverted.ui.play-button.editortools-btn.basic.button:focus, +.ui.inverted.download-button.button.editortools-btn.basic.buttons .button:focus, +.ui.inverted.download-button.button.editortools-btn.basic.buttons .button:focus, +.ui.inverted.download-button.button.editortools-btn.basic.button:focus, +.ui.inverted.ui.download-button.editortools-btn.basic.buttons .button:focus, +.ui.inverted.ui.download-button.editortools-btn.basic.buttons .button:focus, +.ui.inverted.ui.download-button.editortools-btn.basic.button:focus { + box-shadow: 0px 0px 0px 2px #c7c9cb inset !important; + color: #DCDDDE !important; +} +.ui.inverted.grey.basic.buttons .active.button, +.ui.inverted.grey.buttons .basic.active.button, +.ui.inverted.grey.basic.active.button, +.ui.inverted.ui.button.editortools-btn.basic.buttons .active.button, +.ui.inverted.ui.button.editortools-btn.buttons .basic.active.button, +.ui.inverted.ui.button.editortools-btn.basic.active.button, +.play-button.inverted.grey.basic.buttons .active.button, +.play-button.inverted.grey.buttons .basic.active.button, +.play-button.inverted.grey.basic.active.button, +.ui.inverted.grey.basic.buttons .active.play-button, +.ui.inverted.grey.buttons .basic.active.play-button, +.ui.inverted.grey.basic.active.play-button, +.download-button.inverted.grey.basic.buttons .active.button, +.download-button.inverted.grey.buttons .basic.active.button, +.download-button.inverted.grey.basic.active.button, +.ui.inverted.grey.basic.buttons .active.download-button, +.ui.inverted.grey.buttons .basic.active.download-button, +.ui.inverted.grey.basic.active.download-button, +.ui.inverted.play-button.button.editortools-btn.basic.buttons .active.button, +.ui.inverted.play-button.button.editortools-btn.buttons .basic.active.button, +.ui.inverted.play-button.button.editortools-btn.basic.active.button, +.ui.inverted.ui.play-button.editortools-btn.basic.buttons .active.button, +.ui.inverted.ui.play-button.editortools-btn.buttons .basic.active.button, +.ui.inverted.ui.play-button.editortools-btn.basic.active.button, +.ui.inverted.download-button.button.editortools-btn.basic.buttons .active.button, +.ui.inverted.download-button.button.editortools-btn.buttons .basic.active.button, +.ui.inverted.download-button.button.editortools-btn.basic.active.button, +.ui.inverted.ui.download-button.editortools-btn.basic.buttons .active.button, +.ui.inverted.ui.download-button.editortools-btn.buttons .basic.active.button, +.ui.inverted.ui.download-button.editortools-btn.basic.active.button { + box-shadow: 0px 0px 0px 2px #cfd0d2 inset !important; + color: #FFFFFF !important; +} +.ui.inverted.grey.basic.buttons .button:active, +.ui.inverted.grey.buttons .basic.button:active, +.ui.inverted.grey.basic.button:active, +.ui.inverted.ui.button.editortools-btn.basic.buttons .button:active, +.ui.inverted.ui.button.editortools-btn.buttons .basic.button:active, +.ui.inverted.ui.button.editortools-btn.basic.button:active, +.play-button.inverted.grey.basic.buttons .button:active, +.play-button.inverted.grey.buttons .basic.button:active, +.play-button.inverted.grey.basic.button:active, +.ui.inverted.grey.basic.buttons .play-button:active, +.ui.inverted.grey.buttons .basic.play-button:active, +.ui.inverted.grey.basic.play-button:active, +.download-button.inverted.grey.basic.buttons .button:active, +.download-button.inverted.grey.buttons .basic.button:active, +.download-button.inverted.grey.basic.button:active, +.ui.inverted.grey.basic.buttons .download-button:active, +.ui.inverted.grey.buttons .basic.download-button:active, +.ui.inverted.grey.basic.download-button:active, +.ui.inverted.play-button.button.editortools-btn.basic.buttons .button:active, +.ui.inverted.play-button.button.editortools-btn.buttons .basic.button:active, +.ui.inverted.play-button.button.editortools-btn.basic.button:active, +.ui.inverted.ui.play-button.editortools-btn.basic.buttons .button:active, +.ui.inverted.ui.play-button.editortools-btn.buttons .basic.button:active, +.ui.inverted.ui.play-button.editortools-btn.basic.button:active, +.ui.inverted.download-button.button.editortools-btn.basic.buttons .button:active, +.ui.inverted.download-button.button.editortools-btn.buttons .basic.button:active, +.ui.inverted.download-button.button.editortools-btn.basic.button:active, +.ui.inverted.ui.download-button.editortools-btn.basic.buttons .button:active, +.ui.inverted.ui.download-button.editortools-btn.buttons .basic.button:active, +.ui.inverted.ui.download-button.editortools-btn.basic.button:active { + box-shadow: 0px 0px 0px 2px #c2c4c5 inset !important; + color: #FFFFFF !important; +} +/*--- Brown ---*/ +.ui.brown.buttons .button, +.ui.brown.button, +.play-button.brown.buttons .button, +.play-button.brown.button, +.ui.brown.buttons .play-button, +.ui.brown.play-button, +.download-button.brown.buttons .button, +.download-button.brown.button, +.ui.brown.buttons .download-button, +.ui.brown.download-button { + background-color: #6B5B4C; + color: #FFFFFF; + text-shadow: none; + background-image: none; +} +.ui.brown.button, +.play-button.brown.button, +.ui.brown.play-button, +.download-button.brown.button, +.ui.brown.download-button { + box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset; +} +.ui.brown.buttons .button:hover, +.ui.brown.button:hover, +.play-button.brown.buttons .button:hover, +.play-button.brown.button:hover, +.ui.brown.buttons .play-button:hover, +.ui.brown.play-button:hover, +.download-button.brown.buttons .button:hover, +.download-button.brown.button:hover, +.ui.brown.buttons .download-button:hover, +.ui.brown.download-button:hover { + background-color: #5d4e40; + color: #FFFFFF; + text-shadow: none; +} +.ui.brown.buttons .button:focus, +.ui.brown.button:focus, +.play-button.brown.buttons .button:focus, +.play-button.brown.button:focus, +.ui.brown.buttons .play-button:focus, +.ui.brown.play-button:focus, +.download-button.brown.buttons .button:focus, +.download-button.brown.button:focus, +.ui.brown.buttons .download-button:focus, +.ui.brown.download-button:focus { + background-color: #564739; + color: #FFFFFF; + text-shadow: none; +} +.ui.brown.buttons .button:active, +.ui.brown.button:active, +.play-button.brown.buttons .button:active, +.play-button.brown.button:active, +.ui.brown.buttons .play-button:active, +.ui.brown.play-button:active, +.download-button.brown.buttons .button:active, +.download-button.brown.button:active, +.ui.brown.buttons .download-button:active, +.ui.brown.download-button:active { + background-color: #4d4237; + color: #FFFFFF; + text-shadow: none; +} +.ui.brown.buttons .active.button, +.ui.brown.buttons .active.button:active, +.ui.brown.active.button, +.ui.brown.button .active.button:active, +.play-button.brown.buttons .active.button, +.play-button.brown.buttons .active.button:active, +.play-button.brown.active.button, +.play-button.brown.button .active.button:active, +.ui.brown.buttons .active.play-button, +.ui.brown.buttons .active.play-button:active, +.ui.brown.active.play-button, +.ui.brown.play-button .active.play-button:active, +.download-button.brown.buttons .active.button, +.download-button.brown.buttons .active.button:active, +.download-button.brown.active.button, +.download-button.brown.button .active.button:active, +.ui.brown.buttons .active.download-button, +.ui.brown.buttons .active.download-button:active, +.ui.brown.active.download-button, +.ui.brown.download-button .active.download-button:active { + background-color: #5e4e3f; + color: #FFFFFF; + text-shadow: none; +} +/* Basic */ +.ui.basic.brown.buttons .button, +.ui.basic.brown.button, +.play-button.basic.brown.buttons .button, +.play-button.basic.brown.button, +.ui.basic.brown.buttons .play-button, +.ui.basic.brown.play-button, +.download-button.basic.brown.buttons .button, +.download-button.basic.brown.button, +.ui.basic.brown.buttons .download-button, +.ui.basic.brown.download-button { + box-shadow: 0px 0px 0px 1px #6B5B4C inset !important; + color: #6B5B4C !important; +} +.ui.basic.brown.buttons .button:hover, +.ui.basic.brown.button:hover, +.play-button.basic.brown.buttons .button:hover, +.play-button.basic.brown.button:hover, +.ui.basic.brown.buttons .play-button:hover, +.ui.basic.brown.play-button:hover, +.download-button.basic.brown.buttons .button:hover, +.download-button.basic.brown.button:hover, +.ui.basic.brown.buttons .download-button:hover, +.ui.basic.brown.download-button:hover { + background: transparent !important; + box-shadow: 0px 0px 0px 1px #5d4e40 inset !important; + color: #5d4e40 !important; +} +.ui.basic.brown.buttons .button:focus, +.ui.basic.brown.button:focus, +.play-button.basic.brown.buttons .button:focus, +.play-button.basic.brown.button:focus, +.ui.basic.brown.buttons .play-button:focus, +.ui.basic.brown.play-button:focus, +.download-button.basic.brown.buttons .button:focus, +.download-button.basic.brown.button:focus, +.ui.basic.brown.buttons .download-button:focus, +.ui.basic.brown.download-button:focus { + background: transparent !important; + box-shadow: 0px 0px 0px 1px #564739 inset !important; + color: #5d4e40 !important; +} +.ui.basic.brown.buttons .active.button, +.ui.basic.brown.active.button, +.play-button.basic.brown.buttons .active.button, +.play-button.basic.brown.active.button, +.ui.basic.brown.buttons .active.play-button, +.ui.basic.brown.active.play-button, +.download-button.basic.brown.buttons .active.button, +.download-button.basic.brown.active.button, +.ui.basic.brown.buttons .active.download-button, +.ui.basic.brown.active.download-button { + background: transparent !important; + box-shadow: 0px 0px 0px 1px #5e4e3f inset !important; + color: #4d4237 !important; +} +.ui.basic.brown.buttons .button:active, +.ui.basic.brown.button:active, +.play-button.basic.brown.buttons .button:active, +.play-button.basic.brown.button:active, +.ui.basic.brown.buttons .play-button:active, +.ui.basic.brown.play-button:active, +.download-button.basic.brown.buttons .button:active, +.download-button.basic.brown.button:active, +.ui.basic.brown.buttons .download-button:active, +.ui.basic.brown.download-button:active { + box-shadow: 0px 0px 0px 1px #4d4237 inset !important; + color: #4d4237 !important; +} +.ui.buttons:not(.vertical) > .basic.brown.button:not(:first-child), +.play-button.buttons:not(.vertical) > .basic.brown.button:not(:first-child), +.ui.buttons:not(.vertical) > .basic.brown.play-button:not(:first-child), +.download-button.buttons:not(.vertical) > .basic.brown.button:not(:first-child), +.ui.buttons:not(.vertical) > .basic.brown.download-button:not(:first-child) { + margin-left: -1px; +} +/* Inverted */ +.ui.inverted.brown.buttons .button, +.ui.inverted.brown.button, +.play-button.inverted.brown.buttons .button, +.play-button.inverted.brown.button, +.ui.inverted.brown.buttons .play-button, +.ui.inverted.brown.play-button, +.download-button.inverted.brown.buttons .button, +.download-button.inverted.brown.button, +.ui.inverted.brown.buttons .download-button, +.ui.inverted.brown.download-button { + background-color: transparent; + box-shadow: 0px 0px 0px 2px #D67C1C inset !important; + color: #D67C1C; +} +.ui.inverted.brown.buttons .button:hover, +.ui.inverted.brown.button:hover, +.ui.inverted.brown.buttons .button:focus, +.ui.inverted.brown.button:focus, +.ui.inverted.brown.buttons .button.active, +.ui.inverted.brown.button.active, +.ui.inverted.brown.buttons .button:active, +.ui.inverted.brown.button:active, +.play-button.inverted.brown.buttons .button:hover, +.play-button.inverted.brown.button:hover, +.play-button.inverted.brown.buttons .button:focus, +.play-button.inverted.brown.button:focus, +.play-button.inverted.brown.buttons .button.active, +.play-button.inverted.brown.button.active, +.play-button.inverted.brown.buttons .button:active, +.play-button.inverted.brown.button:active, +.ui.inverted.brown.buttons .play-button:hover, +.ui.inverted.brown.play-button:hover, +.ui.inverted.brown.buttons .play-button:focus, +.ui.inverted.brown.play-button:focus, +.ui.inverted.brown.buttons .play-button.active, +.ui.inverted.brown.play-button.active, +.ui.inverted.brown.buttons .play-button:active, +.ui.inverted.brown.play-button:active, +.download-button.inverted.brown.buttons .button:hover, +.download-button.inverted.brown.button:hover, +.download-button.inverted.brown.buttons .button:focus, +.download-button.inverted.brown.button:focus, +.download-button.inverted.brown.buttons .button.active, +.download-button.inverted.brown.button.active, +.download-button.inverted.brown.buttons .button:active, +.download-button.inverted.brown.button:active, +.ui.inverted.brown.buttons .download-button:hover, +.ui.inverted.brown.download-button:hover, +.ui.inverted.brown.buttons .download-button:focus, +.ui.inverted.brown.download-button:focus, +.ui.inverted.brown.buttons .download-button.active, +.ui.inverted.brown.download-button.active, +.ui.inverted.brown.buttons .download-button:active, +.ui.inverted.brown.download-button:active { + box-shadow: none !important; + color: #FFFFFF; +} +.ui.inverted.brown.buttons .button:hover, +.ui.inverted.brown.button:hover, +.play-button.inverted.brown.buttons .button:hover, +.play-button.inverted.brown.button:hover, +.ui.inverted.brown.buttons .play-button:hover, +.ui.inverted.brown.play-button:hover, +.download-button.inverted.brown.buttons .button:hover, +.download-button.inverted.brown.button:hover, +.ui.inverted.brown.buttons .download-button:hover, +.ui.inverted.brown.download-button:hover { + background-color: #c86f11; +} +.ui.inverted.brown.buttons .button:focus, +.ui.inverted.brown.button:focus, +.play-button.inverted.brown.buttons .button:focus, +.play-button.inverted.brown.button:focus, +.ui.inverted.brown.buttons .play-button:focus, +.ui.inverted.brown.play-button:focus, +.download-button.inverted.brown.buttons .button:focus, +.download-button.inverted.brown.button:focus, +.ui.inverted.brown.buttons .download-button:focus, +.ui.inverted.brown.download-button:focus { + background-color: #c16808; +} +.ui.inverted.brown.buttons .active.button, +.ui.inverted.brown.active.button, +.play-button.inverted.brown.buttons .active.button, +.play-button.inverted.brown.active.button, +.ui.inverted.brown.buttons .active.play-button, +.ui.inverted.brown.active.play-button, +.download-button.inverted.brown.buttons .active.button, +.download-button.inverted.brown.active.button, +.ui.inverted.brown.buttons .active.download-button, +.ui.inverted.brown.active.download-button { + background-color: #cc6f0d; +} +.ui.inverted.brown.buttons .button:active, +.ui.inverted.brown.button:active, +.play-button.inverted.brown.buttons .button:active, +.play-button.inverted.brown.button:active, +.ui.inverted.brown.buttons .play-button:active, +.ui.inverted.brown.play-button:active, +.download-button.inverted.brown.buttons .button:active, +.download-button.inverted.brown.button:active, +.ui.inverted.brown.buttons .download-button:active, +.ui.inverted.brown.download-button:active { + background-color: #a96216; +} +/* Inverted Basic */ +.ui.inverted.brown.basic.buttons .button, +.ui.inverted.brown.buttons .basic.button, +.ui.inverted.brown.basic.button, +.play-button.inverted.brown.basic.buttons .button, +.play-button.inverted.brown.buttons .basic.button, +.play-button.inverted.brown.basic.button, +.ui.inverted.brown.basic.buttons .play-button, +.ui.inverted.brown.buttons .basic.play-button, +.ui.inverted.brown.basic.play-button, +.download-button.inverted.brown.basic.buttons .button, +.download-button.inverted.brown.buttons .basic.button, +.download-button.inverted.brown.basic.button, +.ui.inverted.brown.basic.buttons .download-button, +.ui.inverted.brown.buttons .basic.download-button, +.ui.inverted.brown.basic.download-button { + background-color: transparent; + box-shadow: 0px 0px 0px 2px rgba(255, 255, 255, 0.5) inset !important; + color: #FFFFFF !important; +} +.ui.inverted.brown.basic.buttons .button:hover, +.ui.inverted.brown.buttons .basic.button:hover, +.ui.inverted.brown.basic.button:hover, +.play-button.inverted.brown.basic.buttons .button:hover, +.play-button.inverted.brown.buttons .basic.button:hover, +.play-button.inverted.brown.basic.button:hover, +.ui.inverted.brown.basic.buttons .play-button:hover, +.ui.inverted.brown.buttons .basic.play-button:hover, +.ui.inverted.brown.basic.play-button:hover, +.download-button.inverted.brown.basic.buttons .button:hover, +.download-button.inverted.brown.buttons .basic.button:hover, +.download-button.inverted.brown.basic.button:hover, +.ui.inverted.brown.basic.buttons .download-button:hover, +.ui.inverted.brown.buttons .basic.download-button:hover, +.ui.inverted.brown.basic.download-button:hover { + box-shadow: 0px 0px 0px 2px #c86f11 inset !important; + color: #D67C1C !important; +} +.ui.inverted.brown.basic.buttons .button:focus, +.ui.inverted.brown.basic.buttons .button:focus, +.ui.inverted.brown.basic.button:focus, +.play-button.inverted.brown.basic.buttons .button:focus, +.play-button.inverted.brown.basic.buttons .button:focus, +.play-button.inverted.brown.basic.button:focus, +.ui.inverted.brown.basic.buttons .play-button:focus, +.ui.inverted.brown.basic.buttons .play-button:focus, +.ui.inverted.brown.basic.play-button:focus, +.download-button.inverted.brown.basic.buttons .button:focus, +.download-button.inverted.brown.basic.buttons .button:focus, +.download-button.inverted.brown.basic.button:focus, +.ui.inverted.brown.basic.buttons .download-button:focus, +.ui.inverted.brown.basic.buttons .download-button:focus, +.ui.inverted.brown.basic.download-button:focus { + box-shadow: 0px 0px 0px 2px #c16808 inset !important; + color: #D67C1C !important; +} +.ui.inverted.brown.basic.buttons .active.button, +.ui.inverted.brown.buttons .basic.active.button, +.ui.inverted.brown.basic.active.button, +.play-button.inverted.brown.basic.buttons .active.button, +.play-button.inverted.brown.buttons .basic.active.button, +.play-button.inverted.brown.basic.active.button, +.ui.inverted.brown.basic.buttons .active.play-button, +.ui.inverted.brown.buttons .basic.active.play-button, +.ui.inverted.brown.basic.active.play-button, +.download-button.inverted.brown.basic.buttons .active.button, +.download-button.inverted.brown.buttons .basic.active.button, +.download-button.inverted.brown.basic.active.button, +.ui.inverted.brown.basic.buttons .active.download-button, +.ui.inverted.brown.buttons .basic.active.download-button, +.ui.inverted.brown.basic.active.download-button { + box-shadow: 0px 0px 0px 2px #cc6f0d inset !important; + color: #D67C1C !important; +} +.ui.inverted.brown.basic.buttons .button:active, +.ui.inverted.brown.buttons .basic.button:active, +.ui.inverted.brown.basic.button:active, +.play-button.inverted.brown.basic.buttons .button:active, +.play-button.inverted.brown.buttons .basic.button:active, +.play-button.inverted.brown.basic.button:active, +.ui.inverted.brown.basic.buttons .play-button:active, +.ui.inverted.brown.buttons .basic.play-button:active, +.ui.inverted.brown.basic.play-button:active, +.download-button.inverted.brown.basic.buttons .button:active, +.download-button.inverted.brown.buttons .basic.button:active, +.download-button.inverted.brown.basic.button:active, +.ui.inverted.brown.basic.buttons .download-button:active, +.ui.inverted.brown.buttons .basic.download-button:active, +.ui.inverted.brown.basic.download-button:active { + box-shadow: 0px 0px 0px 2px #a96216 inset !important; + color: #D67C1C !important; +} +/*--- Blue ---*/ +.ui.blue.buttons .button, +.ui.blue.button, +.play-button.blue.buttons .button, +.play-button.blue.button, +.ui.blue.buttons .play-button, +.ui.blue.play-button, +.ui.play-button.buttons .button, +.ui.play-button.button, +.download-button.blue.buttons .button, +.download-button.blue.button, +.ui.blue.buttons .download-button, +.ui.blue.download-button { + background-color: #54C9C9; + color: #FFFFFF; + text-shadow: none; + background-image: none; +} +.ui.blue.button, +.play-button.blue.button, +.ui.blue.play-button, +.ui.play-button.button, +.download-button.blue.button, +.ui.blue.download-button { + box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset; +} +.ui.blue.buttons .button:hover, +.ui.blue.button:hover, +.play-button.blue.buttons .button:hover, +.play-button.blue.button:hover, +.ui.blue.buttons .play-button:hover, +.ui.blue.play-button:hover, +.ui.play-button.buttons .button:hover, +.ui.play-button.button:hover, +.download-button.blue.buttons .button:hover, +.download-button.blue.button:hover, +.ui.blue.buttons .download-button:hover, +.ui.blue.download-button:hover { + background-color: #3ac9c9; + color: #FFFFFF; + text-shadow: none; +} +.ui.blue.buttons .button:focus, +.ui.blue.button:focus, +.play-button.blue.buttons .button:focus, +.play-button.blue.button:focus, +.ui.blue.buttons .play-button:focus, +.ui.blue.play-button:focus, +.ui.play-button.buttons .button:focus, +.ui.play-button.button:focus, +.download-button.blue.buttons .button:focus, +.download-button.blue.button:focus, +.ui.blue.buttons .download-button:focus, +.ui.blue.download-button:focus { + background-color: #2ec6c6; + color: #FFFFFF; + text-shadow: none; +} +.ui.blue.buttons .button:active, +.ui.blue.button:active, +.play-button.blue.buttons .button:active, +.play-button.blue.button:active, +.ui.blue.buttons .play-button:active, +.ui.blue.play-button:active, +.ui.play-button.buttons .button:active, +.ui.play-button.button:active, +.download-button.blue.buttons .button:active, +.download-button.blue.button:active, +.ui.blue.buttons .download-button:active, +.ui.blue.download-button:active { + background-color: #38b2b2; + color: #FFFFFF; + text-shadow: none; +} +.ui.blue.buttons .active.button, +.ui.blue.buttons .active.button:active, +.ui.blue.active.button, +.ui.blue.button .active.button:active, +.play-button.blue.buttons .active.button, +.play-button.blue.buttons .active.button:active, +.play-button.blue.active.button, +.play-button.blue.button .active.button:active, +.ui.blue.buttons .active.play-button, +.ui.blue.buttons .active.play-button:active, +.ui.blue.active.play-button, +.ui.blue.play-button .active.play-button:active, +.ui.play-button.buttons .active.button, +.ui.play-button.buttons .active.button:active, +.ui.play-button.active.button, +.ui.play-button.button .active.button:active, +.download-button.blue.buttons .active.button, +.download-button.blue.buttons .active.button:active, +.download-button.blue.active.button, +.download-button.blue.button .active.button:active, +.ui.blue.buttons .active.download-button, +.ui.blue.buttons .active.download-button:active, +.ui.blue.active.download-button, +.ui.blue.download-button .active.download-button:active { + background-color: #37cdcd; + color: #FFFFFF; + text-shadow: none; +} +/* Basic */ +.ui.basic.blue.buttons .button, +.ui.basic.blue.button, +.play-button.basic.blue.buttons .button, +.play-button.basic.blue.button, +.ui.basic.blue.buttons .play-button, +.ui.basic.blue.play-button, +.ui.basic.play-button.buttons .button, +.ui.basic.play-button.button, +.download-button.basic.blue.buttons .button, +.download-button.basic.blue.button, +.ui.basic.blue.buttons .download-button, +.ui.basic.blue.download-button { + box-shadow: 0px 0px 0px 1px #54C9C9 inset !important; + color: #54C9C9 !important; +} +.ui.basic.blue.buttons .button:hover, +.ui.basic.blue.button:hover, +.play-button.basic.blue.buttons .button:hover, +.play-button.basic.blue.button:hover, +.ui.basic.blue.buttons .play-button:hover, +.ui.basic.blue.play-button:hover, +.ui.basic.play-button.buttons .button:hover, +.ui.basic.play-button.button:hover, +.download-button.basic.blue.buttons .button:hover, +.download-button.basic.blue.button:hover, +.ui.basic.blue.buttons .download-button:hover, +.ui.basic.blue.download-button:hover { + background: transparent !important; + box-shadow: 0px 0px 0px 1px #3ac9c9 inset !important; + color: #3ac9c9 !important; +} +.ui.basic.blue.buttons .button:focus, +.ui.basic.blue.button:focus, +.play-button.basic.blue.buttons .button:focus, +.play-button.basic.blue.button:focus, +.ui.basic.blue.buttons .play-button:focus, +.ui.basic.blue.play-button:focus, +.ui.basic.play-button.buttons .button:focus, +.ui.basic.play-button.button:focus, +.download-button.basic.blue.buttons .button:focus, +.download-button.basic.blue.button:focus, +.ui.basic.blue.buttons .download-button:focus, +.ui.basic.blue.download-button:focus { + background: transparent !important; + box-shadow: 0px 0px 0px 1px #2ec6c6 inset !important; + color: #3ac9c9 !important; +} +.ui.basic.blue.buttons .active.button, +.ui.basic.blue.active.button, +.play-button.basic.blue.buttons .active.button, +.play-button.basic.blue.active.button, +.ui.basic.blue.buttons .active.play-button, +.ui.basic.blue.active.play-button, +.ui.basic.play-button.buttons .active.button, +.ui.basic.play-button.active.button, +.download-button.basic.blue.buttons .active.button, +.download-button.basic.blue.active.button, +.ui.basic.blue.buttons .active.download-button, +.ui.basic.blue.active.download-button { + background: transparent !important; + box-shadow: 0px 0px 0px 1px #37cdcd inset !important; + color: #38b2b2 !important; +} +.ui.basic.blue.buttons .button:active, +.ui.basic.blue.button:active, +.play-button.basic.blue.buttons .button:active, +.play-button.basic.blue.button:active, +.ui.basic.blue.buttons .play-button:active, +.ui.basic.blue.play-button:active, +.ui.basic.play-button.buttons .button:active, +.ui.basic.play-button.button:active, +.download-button.basic.blue.buttons .button:active, +.download-button.basic.blue.button:active, +.ui.basic.blue.buttons .download-button:active, +.ui.basic.blue.download-button:active { + box-shadow: 0px 0px 0px 1px #38b2b2 inset !important; + color: #38b2b2 !important; +} +.ui.buttons:not(.vertical) > .basic.blue.button:not(:first-child), +.play-button.buttons:not(.vertical) > .basic.blue.button:not(:first-child), +.ui.buttons:not(.vertical) > .basic.blue.play-button:not(:first-child), +.ui.buttons:not(.vertical) > .basic.play-button.button:not(:first-child), +.download-button.buttons:not(.vertical) > .basic.blue.button:not(:first-child), +.ui.buttons:not(.vertical) > .basic.blue.download-button:not(:first-child) { + margin-left: -1px; +} +/* Inverted */ +.ui.inverted.blue.buttons .button, +.ui.inverted.blue.button, +.play-button.inverted.blue.buttons .button, +.play-button.inverted.blue.button, +.ui.inverted.blue.buttons .play-button, +.ui.inverted.blue.play-button, +.ui.inverted.play-button.buttons .button, +.ui.inverted.play-button.button, +.download-button.inverted.blue.buttons .button, +.download-button.inverted.blue.button, +.ui.inverted.blue.buttons .download-button, +.ui.inverted.blue.download-button { + background-color: transparent; + box-shadow: 0px 0px 0px 2px #54C8FF inset !important; + color: #54C8FF; +} +.ui.inverted.blue.buttons .button:hover, +.ui.inverted.blue.button:hover, +.ui.inverted.blue.buttons .button:focus, +.ui.inverted.blue.button:focus, +.ui.inverted.blue.buttons .button.active, +.ui.inverted.blue.button.active, +.ui.inverted.blue.buttons .button:active, +.ui.inverted.blue.button:active, +.play-button.inverted.blue.buttons .button:hover, +.play-button.inverted.blue.button:hover, +.play-button.inverted.blue.buttons .button:focus, +.play-button.inverted.blue.button:focus, +.play-button.inverted.blue.buttons .button.active, +.play-button.inverted.blue.button.active, +.play-button.inverted.blue.buttons .button:active, +.play-button.inverted.blue.button:active, +.ui.inverted.blue.buttons .play-button:hover, +.ui.inverted.blue.play-button:hover, +.ui.inverted.blue.buttons .play-button:focus, +.ui.inverted.blue.play-button:focus, +.ui.inverted.blue.buttons .play-button.active, +.ui.inverted.blue.play-button.active, +.ui.inverted.blue.buttons .play-button:active, +.ui.inverted.blue.play-button:active, +.ui.inverted.play-button.buttons .button:hover, +.ui.inverted.play-button.button:hover, +.ui.inverted.play-button.buttons .button:focus, +.ui.inverted.play-button.button:focus, +.ui.inverted.play-button.buttons .button.active, +.ui.inverted.play-button.button.active, +.ui.inverted.play-button.buttons .button:active, +.ui.inverted.play-button.button:active, +.download-button.inverted.blue.buttons .button:hover, +.download-button.inverted.blue.button:hover, +.download-button.inverted.blue.buttons .button:focus, +.download-button.inverted.blue.button:focus, +.download-button.inverted.blue.buttons .button.active, +.download-button.inverted.blue.button.active, +.download-button.inverted.blue.buttons .button:active, +.download-button.inverted.blue.button:active, +.ui.inverted.blue.buttons .download-button:hover, +.ui.inverted.blue.download-button:hover, +.ui.inverted.blue.buttons .download-button:focus, +.ui.inverted.blue.download-button:focus, +.ui.inverted.blue.buttons .download-button.active, +.ui.inverted.blue.download-button.active, +.ui.inverted.blue.buttons .download-button:active, +.ui.inverted.blue.download-button:active { + box-shadow: none !important; + color: #FFFFFF; +} +.ui.inverted.blue.buttons .button:hover, +.ui.inverted.blue.button:hover, +.play-button.inverted.blue.buttons .button:hover, +.play-button.inverted.blue.button:hover, +.ui.inverted.blue.buttons .play-button:hover, +.ui.inverted.blue.play-button:hover, +.ui.inverted.play-button.buttons .button:hover, +.ui.inverted.play-button.button:hover, +.download-button.inverted.blue.buttons .button:hover, +.download-button.inverted.blue.button:hover, +.ui.inverted.blue.buttons .download-button:hover, +.ui.inverted.blue.download-button:hover { + background-color: #3ac0ff; +} +.ui.inverted.blue.buttons .button:focus, +.ui.inverted.blue.button:focus, +.play-button.inverted.blue.buttons .button:focus, +.play-button.inverted.blue.button:focus, +.ui.inverted.blue.buttons .play-button:focus, +.ui.inverted.blue.play-button:focus, +.ui.inverted.play-button.buttons .button:focus, +.ui.inverted.play-button.button:focus, +.download-button.inverted.blue.buttons .button:focus, +.download-button.inverted.blue.button:focus, +.ui.inverted.blue.buttons .download-button:focus, +.ui.inverted.blue.download-button:focus { + background-color: #2bbbff; +} +.ui.inverted.blue.buttons .active.button, +.ui.inverted.blue.active.button, +.play-button.inverted.blue.buttons .active.button, +.play-button.inverted.blue.active.button, +.ui.inverted.blue.buttons .active.play-button, +.ui.inverted.blue.active.play-button, +.ui.inverted.play-button.buttons .active.button, +.ui.inverted.play-button.active.button, +.download-button.inverted.blue.buttons .active.button, +.download-button.inverted.blue.active.button, +.ui.inverted.blue.buttons .active.download-button, +.ui.inverted.blue.active.download-button { + background-color: #3ac0ff; +} +.ui.inverted.blue.buttons .button:active, +.ui.inverted.blue.button:active, +.play-button.inverted.blue.buttons .button:active, +.play-button.inverted.blue.button:active, +.ui.inverted.blue.buttons .play-button:active, +.ui.inverted.blue.play-button:active, +.ui.inverted.play-button.buttons .button:active, +.ui.inverted.play-button.button:active, +.download-button.inverted.blue.buttons .button:active, +.download-button.inverted.blue.button:active, +.ui.inverted.blue.buttons .download-button:active, +.ui.inverted.blue.download-button:active { + background-color: #21b8ff; +} +/* Inverted Basic */ +.ui.inverted.blue.basic.buttons .button, +.ui.inverted.blue.buttons .basic.button, +.ui.inverted.blue.basic.button, +.play-button.inverted.blue.basic.buttons .button, +.play-button.inverted.blue.buttons .basic.button, +.play-button.inverted.blue.basic.button, +.ui.inverted.blue.basic.buttons .play-button, +.ui.inverted.blue.buttons .basic.play-button, +.ui.inverted.blue.basic.play-button, +.ui.inverted.play-button.basic.buttons .button, +.ui.inverted.play-button.buttons .basic.button, +.ui.inverted.play-button.basic.button, +.download-button.inverted.blue.basic.buttons .button, +.download-button.inverted.blue.buttons .basic.button, +.download-button.inverted.blue.basic.button, +.ui.inverted.blue.basic.buttons .download-button, +.ui.inverted.blue.buttons .basic.download-button, +.ui.inverted.blue.basic.download-button { + background-color: transparent; + box-shadow: 0px 0px 0px 2px rgba(255, 255, 255, 0.5) inset !important; + color: #FFFFFF !important; +} +.ui.inverted.blue.basic.buttons .button:hover, +.ui.inverted.blue.buttons .basic.button:hover, +.ui.inverted.blue.basic.button:hover, +.play-button.inverted.blue.basic.buttons .button:hover, +.play-button.inverted.blue.buttons .basic.button:hover, +.play-button.inverted.blue.basic.button:hover, +.ui.inverted.blue.basic.buttons .play-button:hover, +.ui.inverted.blue.buttons .basic.play-button:hover, +.ui.inverted.blue.basic.play-button:hover, +.ui.inverted.play-button.basic.buttons .button:hover, +.ui.inverted.play-button.buttons .basic.button:hover, +.ui.inverted.play-button.basic.button:hover, +.download-button.inverted.blue.basic.buttons .button:hover, +.download-button.inverted.blue.buttons .basic.button:hover, +.download-button.inverted.blue.basic.button:hover, +.ui.inverted.blue.basic.buttons .download-button:hover, +.ui.inverted.blue.buttons .basic.download-button:hover, +.ui.inverted.blue.basic.download-button:hover { + box-shadow: 0px 0px 0px 2px #3ac0ff inset !important; + color: #54C8FF !important; +} +.ui.inverted.blue.basic.buttons .button:focus, +.ui.inverted.blue.basic.buttons .button:focus, +.ui.inverted.blue.basic.button:focus, +.play-button.inverted.blue.basic.buttons .button:focus, +.play-button.inverted.blue.basic.buttons .button:focus, +.play-button.inverted.blue.basic.button:focus, +.ui.inverted.blue.basic.buttons .play-button:focus, +.ui.inverted.blue.basic.buttons .play-button:focus, +.ui.inverted.blue.basic.play-button:focus, +.ui.inverted.play-button.basic.buttons .button:focus, +.ui.inverted.play-button.basic.buttons .button:focus, +.ui.inverted.play-button.basic.button:focus, +.download-button.inverted.blue.basic.buttons .button:focus, +.download-button.inverted.blue.basic.buttons .button:focus, +.download-button.inverted.blue.basic.button:focus, +.ui.inverted.blue.basic.buttons .download-button:focus, +.ui.inverted.blue.basic.buttons .download-button:focus, +.ui.inverted.blue.basic.download-button:focus { + box-shadow: 0px 0px 0px 2px #2bbbff inset !important; + color: #54C8FF !important; +} +.ui.inverted.blue.basic.buttons .active.button, +.ui.inverted.blue.buttons .basic.active.button, +.ui.inverted.blue.basic.active.button, +.play-button.inverted.blue.basic.buttons .active.button, +.play-button.inverted.blue.buttons .basic.active.button, +.play-button.inverted.blue.basic.active.button, +.ui.inverted.blue.basic.buttons .active.play-button, +.ui.inverted.blue.buttons .basic.active.play-button, +.ui.inverted.blue.basic.active.play-button, +.ui.inverted.play-button.basic.buttons .active.button, +.ui.inverted.play-button.buttons .basic.active.button, +.ui.inverted.play-button.basic.active.button, +.download-button.inverted.blue.basic.buttons .active.button, +.download-button.inverted.blue.buttons .basic.active.button, +.download-button.inverted.blue.basic.active.button, +.ui.inverted.blue.basic.buttons .active.download-button, +.ui.inverted.blue.buttons .basic.active.download-button, +.ui.inverted.blue.basic.active.download-button { + box-shadow: 0px 0px 0px 2px #3ac0ff inset !important; + color: #54C8FF !important; +} +.ui.inverted.blue.basic.buttons .button:active, +.ui.inverted.blue.buttons .basic.button:active, +.ui.inverted.blue.basic.button:active, +.play-button.inverted.blue.basic.buttons .button:active, +.play-button.inverted.blue.buttons .basic.button:active, +.play-button.inverted.blue.basic.button:active, +.ui.inverted.blue.basic.buttons .play-button:active, +.ui.inverted.blue.buttons .basic.play-button:active, +.ui.inverted.blue.basic.play-button:active, +.ui.inverted.play-button.basic.buttons .button:active, +.ui.inverted.play-button.buttons .basic.button:active, +.ui.inverted.play-button.basic.button:active, +.download-button.inverted.blue.basic.buttons .button:active, +.download-button.inverted.blue.buttons .basic.button:active, +.download-button.inverted.blue.basic.button:active, +.ui.inverted.blue.basic.buttons .download-button:active, +.ui.inverted.blue.buttons .basic.download-button:active, +.ui.inverted.blue.basic.download-button:active { + box-shadow: 0px 0px 0px 2px #21b8ff inset !important; + color: #54C8FF !important; +} +/*--- Green ---*/ +.ui.green.buttons .button, +.ui.green.button, +.ui.ui.button.getting-started-btn.buttons .button, +.ui.ui.button.getting-started-btn.button, +.play-button.green.buttons .button, +.play-button.green.button, +.ui.green.buttons .play-button, +.ui.green.play-button, +.download-button.green.buttons .button, +.download-button.green.button, +.ui.green.buttons .download-button, +.ui.green.download-button, +.ui.play-button.button.getting-started-btn.buttons .button, +.ui.play-button.button.getting-started-btn.button, +.ui.ui.play-button.getting-started-btn.buttons .button, +.ui.ui.play-button.getting-started-btn.button, +.ui.download-button.button.getting-started-btn.buttons .button, +.ui.download-button.button.getting-started-btn.button, +.ui.ui.download-button.getting-started-btn.buttons .button, +.ui.ui.download-button.getting-started-btn.button { + background-color: #3FC863; + color: #FFFFFF; + text-shadow: none; + background-image: none; +} +.ui.green.button, +.ui.ui.button.getting-started-btn.button, +.play-button.green.button, +.ui.green.play-button, +.download-button.green.button, +.ui.green.download-button, +.ui.play-button.button.getting-started-btn.button, +.ui.ui.play-button.getting-started-btn.button, +.ui.download-button.button.getting-started-btn.button, +.ui.ui.download-button.getting-started-btn.button { + box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset; +} +.ui.green.buttons .button:hover, +.ui.green.button:hover, +.ui.ui.button.getting-started-btn.buttons .button:hover, +.ui.ui.button.getting-started-btn.button:hover, +.play-button.green.buttons .button:hover, +.play-button.green.button:hover, +.ui.green.buttons .play-button:hover, +.ui.green.play-button:hover, +.download-button.green.buttons .button:hover, +.download-button.green.button:hover, +.ui.green.buttons .download-button:hover, +.ui.green.download-button:hover, +.ui.play-button.button.getting-started-btn.buttons .button:hover, +.ui.play-button.button.getting-started-btn.button:hover, +.ui.ui.play-button.getting-started-btn.buttons .button:hover, +.ui.ui.play-button.getting-started-btn.button:hover, +.ui.download-button.button.getting-started-btn.buttons .button:hover, +.ui.download-button.button.getting-started-btn.button:hover, +.ui.ui.download-button.getting-started-btn.buttons .button:hover, +.ui.ui.download-button.getting-started-btn.button:hover { + background-color: #2ebf54; + color: #FFFFFF; + text-shadow: none; +} +.ui.green.buttons .button:focus, +.ui.green.button:focus, +.ui.ui.button.getting-started-btn.buttons .button:focus, +.ui.ui.button.getting-started-btn.button:focus, +.play-button.green.buttons .button:focus, +.play-button.green.button:focus, +.ui.green.buttons .play-button:focus, +.ui.green.play-button:focus, +.download-button.green.buttons .button:focus, +.download-button.green.button:focus, +.ui.green.buttons .download-button:focus, +.ui.green.download-button:focus, +.ui.play-button.button.getting-started-btn.buttons .button:focus, +.ui.play-button.button.getting-started-btn.button:focus, +.ui.ui.play-button.getting-started-btn.buttons .button:focus, +.ui.ui.play-button.getting-started-btn.button:focus, +.ui.download-button.button.getting-started-btn.buttons .button:focus, +.ui.download-button.button.getting-started-btn.button:focus, +.ui.ui.download-button.getting-started-btn.buttons .button:focus, +.ui.ui.download-button.getting-started-btn.button:focus { + background-color: #25b94c; + color: #FFFFFF; + text-shadow: none; +} +.ui.green.buttons .button:active, +.ui.green.button:active, +.ui.ui.button.getting-started-btn.buttons .button:active, +.ui.ui.button.getting-started-btn.button:active, +.play-button.green.buttons .button:active, +.play-button.green.button:active, +.ui.green.buttons .play-button:active, +.ui.green.play-button:active, +.download-button.green.buttons .button:active, +.download-button.green.button:active, +.ui.green.buttons .download-button:active, +.ui.green.download-button:active, +.ui.play-button.button.getting-started-btn.buttons .button:active, +.ui.play-button.button.getting-started-btn.button:active, +.ui.ui.play-button.getting-started-btn.buttons .button:active, +.ui.ui.play-button.getting-started-btn.button:active, +.ui.download-button.button.getting-started-btn.buttons .button:active, +.ui.download-button.button.getting-started-btn.button:active, +.ui.ui.download-button.getting-started-btn.buttons .button:active, +.ui.ui.download-button.getting-started-btn.button:active { + background-color: #2fa54e; + color: #FFFFFF; + text-shadow: none; +} +.ui.green.buttons .active.button, +.ui.green.buttons .active.button:active, +.ui.green.active.button, +.ui.green.button .active.button:active, +.ui.ui.button.getting-started-btn.buttons .active.button, +.ui.ui.button.getting-started-btn.buttons .active.button:active, +.ui.ui.button.getting-started-btn.active.button, +.ui.ui.button.getting-started-btn.button .active.button:active, +.play-button.green.buttons .active.button, +.play-button.green.buttons .active.button:active, +.play-button.green.active.button, +.play-button.green.button .active.button:active, +.ui.green.buttons .active.play-button, +.ui.green.buttons .active.play-button:active, +.ui.green.active.play-button, +.ui.green.play-button .active.play-button:active, +.download-button.green.buttons .active.button, +.download-button.green.buttons .active.button:active, +.download-button.green.active.button, +.download-button.green.button .active.button:active, +.ui.green.buttons .active.download-button, +.ui.green.buttons .active.download-button:active, +.ui.green.active.download-button, +.ui.green.download-button .active.download-button:active, +.ui.play-button.button.getting-started-btn.buttons .active.button, +.ui.play-button.button.getting-started-btn.buttons .active.button:active, +.ui.play-button.button.getting-started-btn.active.button, +.ui.play-button.button.getting-started-btn.button .active.button:active, +.ui.ui.play-button.getting-started-btn.buttons .active.button, +.ui.ui.play-button.getting-started-btn.buttons .active.button:active, +.ui.ui.play-button.getting-started-btn.active.button, +.ui.ui.play-button.getting-started-btn.button .active.button:active, +.ui.download-button.button.getting-started-btn.buttons .active.button, +.ui.download-button.button.getting-started-btn.buttons .active.button:active, +.ui.download-button.button.getting-started-btn.active.button, +.ui.download-button.button.getting-started-btn.button .active.button:active, +.ui.ui.download-button.getting-started-btn.buttons .active.button, +.ui.ui.download-button.getting-started-btn.buttons .active.button:active, +.ui.ui.download-button.getting-started-btn.active.button, +.ui.ui.download-button.getting-started-btn.button .active.button:active { + background-color: #2bc253; + color: #FFFFFF; + text-shadow: none; +} +/* Basic */ +.ui.basic.green.buttons .button, +.ui.basic.green.button, +.ui.basic.ui.button.getting-started-btn.buttons .button, +.ui.basic.ui.button.getting-started-btn.button, +.play-button.basic.green.buttons .button, +.play-button.basic.green.button, +.ui.basic.green.buttons .play-button, +.ui.basic.green.play-button, +.download-button.basic.green.buttons .button, +.download-button.basic.green.button, +.ui.basic.green.buttons .download-button, +.ui.basic.green.download-button, +.ui.basic.play-button.button.getting-started-btn.buttons .button, +.ui.basic.play-button.button.getting-started-btn.button, +.ui.basic.ui.play-button.getting-started-btn.buttons .button, +.ui.basic.ui.play-button.getting-started-btn.button, +.ui.basic.download-button.button.getting-started-btn.buttons .button, +.ui.basic.download-button.button.getting-started-btn.button, +.ui.basic.ui.download-button.getting-started-btn.buttons .button, +.ui.basic.ui.download-button.getting-started-btn.button { + box-shadow: 0px 0px 0px 1px #3FC863 inset !important; + color: #3FC863 !important; +} +.ui.basic.green.buttons .button:hover, +.ui.basic.green.button:hover, +.ui.basic.ui.button.getting-started-btn.buttons .button:hover, +.ui.basic.ui.button.getting-started-btn.button:hover, +.play-button.basic.green.buttons .button:hover, +.play-button.basic.green.button:hover, +.ui.basic.green.buttons .play-button:hover, +.ui.basic.green.play-button:hover, +.download-button.basic.green.buttons .button:hover, +.download-button.basic.green.button:hover, +.ui.basic.green.buttons .download-button:hover, +.ui.basic.green.download-button:hover, +.ui.basic.play-button.button.getting-started-btn.buttons .button:hover, +.ui.basic.play-button.button.getting-started-btn.button:hover, +.ui.basic.ui.play-button.getting-started-btn.buttons .button:hover, +.ui.basic.ui.play-button.getting-started-btn.button:hover, +.ui.basic.download-button.button.getting-started-btn.buttons .button:hover, +.ui.basic.download-button.button.getting-started-btn.button:hover, +.ui.basic.ui.download-button.getting-started-btn.buttons .button:hover, +.ui.basic.ui.download-button.getting-started-btn.button:hover { + background: transparent !important; + box-shadow: 0px 0px 0px 1px #2ebf54 inset !important; + color: #2ebf54 !important; +} +.ui.basic.green.buttons .button:focus, +.ui.basic.green.button:focus, +.ui.basic.ui.button.getting-started-btn.buttons .button:focus, +.ui.basic.ui.button.getting-started-btn.button:focus, +.play-button.basic.green.buttons .button:focus, +.play-button.basic.green.button:focus, +.ui.basic.green.buttons .play-button:focus, +.ui.basic.green.play-button:focus, +.download-button.basic.green.buttons .button:focus, +.download-button.basic.green.button:focus, +.ui.basic.green.buttons .download-button:focus, +.ui.basic.green.download-button:focus, +.ui.basic.play-button.button.getting-started-btn.buttons .button:focus, +.ui.basic.play-button.button.getting-started-btn.button:focus, +.ui.basic.ui.play-button.getting-started-btn.buttons .button:focus, +.ui.basic.ui.play-button.getting-started-btn.button:focus, +.ui.basic.download-button.button.getting-started-btn.buttons .button:focus, +.ui.basic.download-button.button.getting-started-btn.button:focus, +.ui.basic.ui.download-button.getting-started-btn.buttons .button:focus, +.ui.basic.ui.download-button.getting-started-btn.button:focus { + background: transparent !important; + box-shadow: 0px 0px 0px 1px #25b94c inset !important; + color: #2ebf54 !important; +} +.ui.basic.green.buttons .active.button, +.ui.basic.green.active.button, +.ui.basic.ui.button.getting-started-btn.buttons .active.button, +.ui.basic.ui.button.getting-started-btn.active.button, +.play-button.basic.green.buttons .active.button, +.play-button.basic.green.active.button, +.ui.basic.green.buttons .active.play-button, +.ui.basic.green.active.play-button, +.download-button.basic.green.buttons .active.button, +.download-button.basic.green.active.button, +.ui.basic.green.buttons .active.download-button, +.ui.basic.green.active.download-button, +.ui.basic.play-button.button.getting-started-btn.buttons .active.button, +.ui.basic.play-button.button.getting-started-btn.active.button, +.ui.basic.ui.play-button.getting-started-btn.buttons .active.button, +.ui.basic.ui.play-button.getting-started-btn.active.button, +.ui.basic.download-button.button.getting-started-btn.buttons .active.button, +.ui.basic.download-button.button.getting-started-btn.active.button, +.ui.basic.ui.download-button.getting-started-btn.buttons .active.button, +.ui.basic.ui.download-button.getting-started-btn.active.button { + background: transparent !important; + box-shadow: 0px 0px 0px 1px #2bc253 inset !important; + color: #2fa54e !important; +} +.ui.basic.green.buttons .button:active, +.ui.basic.green.button:active, +.ui.basic.ui.button.getting-started-btn.buttons .button:active, +.ui.basic.ui.button.getting-started-btn.button:active, +.play-button.basic.green.buttons .button:active, +.play-button.basic.green.button:active, +.ui.basic.green.buttons .play-button:active, +.ui.basic.green.play-button:active, +.download-button.basic.green.buttons .button:active, +.download-button.basic.green.button:active, +.ui.basic.green.buttons .download-button:active, +.ui.basic.green.download-button:active, +.ui.basic.play-button.button.getting-started-btn.buttons .button:active, +.ui.basic.play-button.button.getting-started-btn.button:active, +.ui.basic.ui.play-button.getting-started-btn.buttons .button:active, +.ui.basic.ui.play-button.getting-started-btn.button:active, +.ui.basic.download-button.button.getting-started-btn.buttons .button:active, +.ui.basic.download-button.button.getting-started-btn.button:active, +.ui.basic.ui.download-button.getting-started-btn.buttons .button:active, +.ui.basic.ui.download-button.getting-started-btn.button:active { + box-shadow: 0px 0px 0px 1px #2fa54e inset !important; + color: #2fa54e !important; +} +.ui.buttons:not(.vertical) > .basic.green.button:not(:first-child), +.ui.buttons:not(.vertical) > .basic.ui.button.getting-started-btn.button:not(:first-child), +.play-button.buttons:not(.vertical) > .basic.green.button:not(:first-child), +.ui.buttons:not(.vertical) > .basic.green.play-button:not(:first-child), +.download-button.buttons:not(.vertical) > .basic.green.button:not(:first-child), +.ui.buttons:not(.vertical) > .basic.green.download-button:not(:first-child), +.ui.buttons:not(.vertical) > .basic.play-button.button.getting-started-btn.button:not(:first-child), +.ui.buttons:not(.vertical) > .basic.ui.play-button.getting-started-btn.button:not(:first-child), +.ui.buttons:not(.vertical) > .basic.download-button.button.getting-started-btn.button:not(:first-child), +.ui.buttons:not(.vertical) > .basic.ui.download-button.getting-started-btn.button:not(:first-child) { + margin-left: -1px; +} +/* Inverted */ +.ui.inverted.green.buttons .button, +.ui.inverted.green.button, +.ui.inverted.ui.button.getting-started-btn.buttons .button, +.ui.inverted.ui.button.getting-started-btn.button, +.play-button.inverted.green.buttons .button, +.play-button.inverted.green.button, +.ui.inverted.green.buttons .play-button, +.ui.inverted.green.play-button, +.download-button.inverted.green.buttons .button, +.download-button.inverted.green.button, +.ui.inverted.green.buttons .download-button, +.ui.inverted.green.download-button, +.ui.inverted.play-button.button.getting-started-btn.buttons .button, +.ui.inverted.play-button.button.getting-started-btn.button, +.ui.inverted.ui.play-button.getting-started-btn.buttons .button, +.ui.inverted.ui.play-button.getting-started-btn.button, +.ui.inverted.download-button.button.getting-started-btn.buttons .button, +.ui.inverted.download-button.button.getting-started-btn.button, +.ui.inverted.ui.download-button.getting-started-btn.buttons .button, +.ui.inverted.ui.download-button.getting-started-btn.button { + background-color: transparent; + box-shadow: 0px 0px 0px 2px #2ECC40 inset !important; + color: #2ECC40; +} +.ui.inverted.green.buttons .button:hover, +.ui.inverted.green.button:hover, +.ui.inverted.green.buttons .button:focus, +.ui.inverted.green.button:focus, +.ui.inverted.green.buttons .button.active, +.ui.inverted.green.button.active, +.ui.inverted.green.buttons .button:active, +.ui.inverted.green.button:active, +.ui.inverted.ui.button.getting-started-btn.buttons .button:hover, +.ui.inverted.ui.button.getting-started-btn.button:hover, +.ui.inverted.ui.button.getting-started-btn.buttons .button:focus, +.ui.inverted.ui.button.getting-started-btn.button:focus, +.ui.inverted.ui.button.getting-started-btn.buttons .button.active, +.ui.inverted.ui.button.getting-started-btn.button.active, +.ui.inverted.ui.button.getting-started-btn.buttons .button:active, +.ui.inverted.ui.button.getting-started-btn.button:active, +.play-button.inverted.green.buttons .button:hover, +.play-button.inverted.green.button:hover, +.play-button.inverted.green.buttons .button:focus, +.play-button.inverted.green.button:focus, +.play-button.inverted.green.buttons .button.active, +.play-button.inverted.green.button.active, +.play-button.inverted.green.buttons .button:active, +.play-button.inverted.green.button:active, +.ui.inverted.green.buttons .play-button:hover, +.ui.inverted.green.play-button:hover, +.ui.inverted.green.buttons .play-button:focus, +.ui.inverted.green.play-button:focus, +.ui.inverted.green.buttons .play-button.active, +.ui.inverted.green.play-button.active, +.ui.inverted.green.buttons .play-button:active, +.ui.inverted.green.play-button:active, +.download-button.inverted.green.buttons .button:hover, +.download-button.inverted.green.button:hover, +.download-button.inverted.green.buttons .button:focus, +.download-button.inverted.green.button:focus, +.download-button.inverted.green.buttons .button.active, +.download-button.inverted.green.button.active, +.download-button.inverted.green.buttons .button:active, +.download-button.inverted.green.button:active, +.ui.inverted.green.buttons .download-button:hover, +.ui.inverted.green.download-button:hover, +.ui.inverted.green.buttons .download-button:focus, +.ui.inverted.green.download-button:focus, +.ui.inverted.green.buttons .download-button.active, +.ui.inverted.green.download-button.active, +.ui.inverted.green.buttons .download-button:active, +.ui.inverted.green.download-button:active, +.ui.inverted.play-button.button.getting-started-btn.buttons .button:hover, +.ui.inverted.play-button.button.getting-started-btn.button:hover, +.ui.inverted.play-button.button.getting-started-btn.buttons .button:focus, +.ui.inverted.play-button.button.getting-started-btn.button:focus, +.ui.inverted.play-button.button.getting-started-btn.buttons .button.active, +.ui.inverted.play-button.button.getting-started-btn.button.active, +.ui.inverted.play-button.button.getting-started-btn.buttons .button:active, +.ui.inverted.play-button.button.getting-started-btn.button:active, +.ui.inverted.ui.play-button.getting-started-btn.buttons .button:hover, +.ui.inverted.ui.play-button.getting-started-btn.button:hover, +.ui.inverted.ui.play-button.getting-started-btn.buttons .button:focus, +.ui.inverted.ui.play-button.getting-started-btn.button:focus, +.ui.inverted.ui.play-button.getting-started-btn.buttons .button.active, +.ui.inverted.ui.play-button.getting-started-btn.button.active, +.ui.inverted.ui.play-button.getting-started-btn.buttons .button:active, +.ui.inverted.ui.play-button.getting-started-btn.button:active, +.ui.inverted.download-button.button.getting-started-btn.buttons .button:hover, +.ui.inverted.download-button.button.getting-started-btn.button:hover, +.ui.inverted.download-button.button.getting-started-btn.buttons .button:focus, +.ui.inverted.download-button.button.getting-started-btn.button:focus, +.ui.inverted.download-button.button.getting-started-btn.buttons .button.active, +.ui.inverted.download-button.button.getting-started-btn.button.active, +.ui.inverted.download-button.button.getting-started-btn.buttons .button:active, +.ui.inverted.download-button.button.getting-started-btn.button:active, +.ui.inverted.ui.download-button.getting-started-btn.buttons .button:hover, +.ui.inverted.ui.download-button.getting-started-btn.button:hover, +.ui.inverted.ui.download-button.getting-started-btn.buttons .button:focus, +.ui.inverted.ui.download-button.getting-started-btn.button:focus, +.ui.inverted.ui.download-button.getting-started-btn.buttons .button.active, +.ui.inverted.ui.download-button.getting-started-btn.button.active, +.ui.inverted.ui.download-button.getting-started-btn.buttons .button:active, +.ui.inverted.ui.download-button.getting-started-btn.button:active { + box-shadow: none !important; + color: #FFFFFF; +} +.ui.inverted.green.buttons .button:hover, +.ui.inverted.green.button:hover, +.ui.inverted.ui.button.getting-started-btn.buttons .button:hover, +.ui.inverted.ui.button.getting-started-btn.button:hover, +.play-button.inverted.green.buttons .button:hover, +.play-button.inverted.green.button:hover, +.ui.inverted.green.buttons .play-button:hover, +.ui.inverted.green.play-button:hover, +.download-button.inverted.green.buttons .button:hover, +.download-button.inverted.green.button:hover, +.ui.inverted.green.buttons .download-button:hover, +.ui.inverted.green.download-button:hover, +.ui.inverted.play-button.button.getting-started-btn.buttons .button:hover, +.ui.inverted.play-button.button.getting-started-btn.button:hover, +.ui.inverted.ui.play-button.getting-started-btn.buttons .button:hover, +.ui.inverted.ui.play-button.getting-started-btn.button:hover, +.ui.inverted.download-button.button.getting-started-btn.buttons .button:hover, +.ui.inverted.download-button.button.getting-started-btn.button:hover, +.ui.inverted.ui.download-button.getting-started-btn.buttons .button:hover, +.ui.inverted.ui.download-button.getting-started-btn.button:hover { + background-color: #22be34; +} +.ui.inverted.green.buttons .button:focus, +.ui.inverted.green.button:focus, +.ui.inverted.ui.button.getting-started-btn.buttons .button:focus, +.ui.inverted.ui.button.getting-started-btn.button:focus, +.play-button.inverted.green.buttons .button:focus, +.play-button.inverted.green.button:focus, +.ui.inverted.green.buttons .play-button:focus, +.ui.inverted.green.play-button:focus, +.download-button.inverted.green.buttons .button:focus, +.download-button.inverted.green.button:focus, +.ui.inverted.green.buttons .download-button:focus, +.ui.inverted.green.download-button:focus, +.ui.inverted.play-button.button.getting-started-btn.buttons .button:focus, +.ui.inverted.play-button.button.getting-started-btn.button:focus, +.ui.inverted.ui.play-button.getting-started-btn.buttons .button:focus, +.ui.inverted.ui.play-button.getting-started-btn.button:focus, +.ui.inverted.download-button.button.getting-started-btn.buttons .button:focus, +.ui.inverted.download-button.button.getting-started-btn.button:focus, +.ui.inverted.ui.download-button.getting-started-btn.buttons .button:focus, +.ui.inverted.ui.download-button.getting-started-btn.button:focus { + background-color: #19b82b; +} +.ui.inverted.green.buttons .active.button, +.ui.inverted.green.active.button, +.ui.inverted.ui.button.getting-started-btn.buttons .active.button, +.ui.inverted.ui.button.getting-started-btn.active.button, +.play-button.inverted.green.buttons .active.button, +.play-button.inverted.green.active.button, +.ui.inverted.green.buttons .active.play-button, +.ui.inverted.green.active.play-button, +.download-button.inverted.green.buttons .active.button, +.download-button.inverted.green.active.button, +.ui.inverted.green.buttons .active.download-button, +.ui.inverted.green.active.download-button, +.ui.inverted.play-button.button.getting-started-btn.buttons .active.button, +.ui.inverted.play-button.button.getting-started-btn.active.button, +.ui.inverted.ui.play-button.getting-started-btn.buttons .active.button, +.ui.inverted.ui.play-button.getting-started-btn.active.button, +.ui.inverted.download-button.button.getting-started-btn.buttons .active.button, +.ui.inverted.download-button.button.getting-started-btn.active.button, +.ui.inverted.ui.download-button.getting-started-btn.buttons .active.button, +.ui.inverted.ui.download-button.getting-started-btn.active.button { + background-color: #1fc231; +} +.ui.inverted.green.buttons .button:active, +.ui.inverted.green.button:active, +.ui.inverted.ui.button.getting-started-btn.buttons .button:active, +.ui.inverted.ui.button.getting-started-btn.button:active, +.play-button.inverted.green.buttons .button:active, +.play-button.inverted.green.button:active, +.ui.inverted.green.buttons .play-button:active, +.ui.inverted.green.play-button:active, +.download-button.inverted.green.buttons .button:active, +.download-button.inverted.green.button:active, +.ui.inverted.green.buttons .download-button:active, +.ui.inverted.green.download-button:active, +.ui.inverted.play-button.button.getting-started-btn.buttons .button:active, +.ui.inverted.play-button.button.getting-started-btn.button:active, +.ui.inverted.ui.play-button.getting-started-btn.buttons .button:active, +.ui.inverted.ui.play-button.getting-started-btn.button:active, +.ui.inverted.download-button.button.getting-started-btn.buttons .button:active, +.ui.inverted.download-button.button.getting-started-btn.button:active, +.ui.inverted.ui.download-button.getting-started-btn.buttons .button:active, +.ui.inverted.ui.download-button.getting-started-btn.button:active { + background-color: #25a233; +} +/* Inverted Basic */ +.ui.inverted.green.basic.buttons .button, +.ui.inverted.green.buttons .basic.button, +.ui.inverted.green.basic.button, +.ui.inverted.ui.button.getting-started-btn.basic.buttons .button, +.ui.inverted.ui.button.getting-started-btn.buttons .basic.button, +.ui.inverted.ui.button.getting-started-btn.basic.button, +.play-button.inverted.green.basic.buttons .button, +.play-button.inverted.green.buttons .basic.button, +.play-button.inverted.green.basic.button, +.ui.inverted.green.basic.buttons .play-button, +.ui.inverted.green.buttons .basic.play-button, +.ui.inverted.green.basic.play-button, +.download-button.inverted.green.basic.buttons .button, +.download-button.inverted.green.buttons .basic.button, +.download-button.inverted.green.basic.button, +.ui.inverted.green.basic.buttons .download-button, +.ui.inverted.green.buttons .basic.download-button, +.ui.inverted.green.basic.download-button, +.ui.inverted.play-button.button.getting-started-btn.basic.buttons .button, +.ui.inverted.play-button.button.getting-started-btn.buttons .basic.button, +.ui.inverted.play-button.button.getting-started-btn.basic.button, +.ui.inverted.ui.play-button.getting-started-btn.basic.buttons .button, +.ui.inverted.ui.play-button.getting-started-btn.buttons .basic.button, +.ui.inverted.ui.play-button.getting-started-btn.basic.button, +.ui.inverted.download-button.button.getting-started-btn.basic.buttons .button, +.ui.inverted.download-button.button.getting-started-btn.buttons .basic.button, +.ui.inverted.download-button.button.getting-started-btn.basic.button, +.ui.inverted.ui.download-button.getting-started-btn.basic.buttons .button, +.ui.inverted.ui.download-button.getting-started-btn.buttons .basic.button, +.ui.inverted.ui.download-button.getting-started-btn.basic.button { + background-color: transparent; + box-shadow: 0px 0px 0px 2px rgba(255, 255, 255, 0.5) inset !important; + color: #FFFFFF !important; +} +.ui.inverted.green.basic.buttons .button:hover, +.ui.inverted.green.buttons .basic.button:hover, +.ui.inverted.green.basic.button:hover, +.ui.inverted.ui.button.getting-started-btn.basic.buttons .button:hover, +.ui.inverted.ui.button.getting-started-btn.buttons .basic.button:hover, +.ui.inverted.ui.button.getting-started-btn.basic.button:hover, +.play-button.inverted.green.basic.buttons .button:hover, +.play-button.inverted.green.buttons .basic.button:hover, +.play-button.inverted.green.basic.button:hover, +.ui.inverted.green.basic.buttons .play-button:hover, +.ui.inverted.green.buttons .basic.play-button:hover, +.ui.inverted.green.basic.play-button:hover, +.download-button.inverted.green.basic.buttons .button:hover, +.download-button.inverted.green.buttons .basic.button:hover, +.download-button.inverted.green.basic.button:hover, +.ui.inverted.green.basic.buttons .download-button:hover, +.ui.inverted.green.buttons .basic.download-button:hover, +.ui.inverted.green.basic.download-button:hover, +.ui.inverted.play-button.button.getting-started-btn.basic.buttons .button:hover, +.ui.inverted.play-button.button.getting-started-btn.buttons .basic.button:hover, +.ui.inverted.play-button.button.getting-started-btn.basic.button:hover, +.ui.inverted.ui.play-button.getting-started-btn.basic.buttons .button:hover, +.ui.inverted.ui.play-button.getting-started-btn.buttons .basic.button:hover, +.ui.inverted.ui.play-button.getting-started-btn.basic.button:hover, +.ui.inverted.download-button.button.getting-started-btn.basic.buttons .button:hover, +.ui.inverted.download-button.button.getting-started-btn.buttons .basic.button:hover, +.ui.inverted.download-button.button.getting-started-btn.basic.button:hover, +.ui.inverted.ui.download-button.getting-started-btn.basic.buttons .button:hover, +.ui.inverted.ui.download-button.getting-started-btn.buttons .basic.button:hover, +.ui.inverted.ui.download-button.getting-started-btn.basic.button:hover { + box-shadow: 0px 0px 0px 2px #22be34 inset !important; + color: #2ECC40 !important; +} +.ui.inverted.green.basic.buttons .button:focus, +.ui.inverted.green.basic.buttons .button:focus, +.ui.inverted.green.basic.button:focus, +.ui.inverted.ui.button.getting-started-btn.basic.buttons .button:focus, +.ui.inverted.ui.button.getting-started-btn.basic.buttons .button:focus, +.ui.inverted.ui.button.getting-started-btn.basic.button:focus, +.play-button.inverted.green.basic.buttons .button:focus, +.play-button.inverted.green.basic.buttons .button:focus, +.play-button.inverted.green.basic.button:focus, +.ui.inverted.green.basic.buttons .play-button:focus, +.ui.inverted.green.basic.buttons .play-button:focus, +.ui.inverted.green.basic.play-button:focus, +.download-button.inverted.green.basic.buttons .button:focus, +.download-button.inverted.green.basic.buttons .button:focus, +.download-button.inverted.green.basic.button:focus, +.ui.inverted.green.basic.buttons .download-button:focus, +.ui.inverted.green.basic.buttons .download-button:focus, +.ui.inverted.green.basic.download-button:focus, +.ui.inverted.play-button.button.getting-started-btn.basic.buttons .button:focus, +.ui.inverted.play-button.button.getting-started-btn.basic.buttons .button:focus, +.ui.inverted.play-button.button.getting-started-btn.basic.button:focus, +.ui.inverted.ui.play-button.getting-started-btn.basic.buttons .button:focus, +.ui.inverted.ui.play-button.getting-started-btn.basic.buttons .button:focus, +.ui.inverted.ui.play-button.getting-started-btn.basic.button:focus, +.ui.inverted.download-button.button.getting-started-btn.basic.buttons .button:focus, +.ui.inverted.download-button.button.getting-started-btn.basic.buttons .button:focus, +.ui.inverted.download-button.button.getting-started-btn.basic.button:focus, +.ui.inverted.ui.download-button.getting-started-btn.basic.buttons .button:focus, +.ui.inverted.ui.download-button.getting-started-btn.basic.buttons .button:focus, +.ui.inverted.ui.download-button.getting-started-btn.basic.button:focus { + box-shadow: 0px 0px 0px 2px #19b82b inset !important; + color: #2ECC40 !important; +} +.ui.inverted.green.basic.buttons .active.button, +.ui.inverted.green.buttons .basic.active.button, +.ui.inverted.green.basic.active.button, +.ui.inverted.ui.button.getting-started-btn.basic.buttons .active.button, +.ui.inverted.ui.button.getting-started-btn.buttons .basic.active.button, +.ui.inverted.ui.button.getting-started-btn.basic.active.button, +.play-button.inverted.green.basic.buttons .active.button, +.play-button.inverted.green.buttons .basic.active.button, +.play-button.inverted.green.basic.active.button, +.ui.inverted.green.basic.buttons .active.play-button, +.ui.inverted.green.buttons .basic.active.play-button, +.ui.inverted.green.basic.active.play-button, +.download-button.inverted.green.basic.buttons .active.button, +.download-button.inverted.green.buttons .basic.active.button, +.download-button.inverted.green.basic.active.button, +.ui.inverted.green.basic.buttons .active.download-button, +.ui.inverted.green.buttons .basic.active.download-button, +.ui.inverted.green.basic.active.download-button, +.ui.inverted.play-button.button.getting-started-btn.basic.buttons .active.button, +.ui.inverted.play-button.button.getting-started-btn.buttons .basic.active.button, +.ui.inverted.play-button.button.getting-started-btn.basic.active.button, +.ui.inverted.ui.play-button.getting-started-btn.basic.buttons .active.button, +.ui.inverted.ui.play-button.getting-started-btn.buttons .basic.active.button, +.ui.inverted.ui.play-button.getting-started-btn.basic.active.button, +.ui.inverted.download-button.button.getting-started-btn.basic.buttons .active.button, +.ui.inverted.download-button.button.getting-started-btn.buttons .basic.active.button, +.ui.inverted.download-button.button.getting-started-btn.basic.active.button, +.ui.inverted.ui.download-button.getting-started-btn.basic.buttons .active.button, +.ui.inverted.ui.download-button.getting-started-btn.buttons .basic.active.button, +.ui.inverted.ui.download-button.getting-started-btn.basic.active.button { + box-shadow: 0px 0px 0px 2px #1fc231 inset !important; + color: #2ECC40 !important; +} +.ui.inverted.green.basic.buttons .button:active, +.ui.inverted.green.buttons .basic.button:active, +.ui.inverted.green.basic.button:active, +.ui.inverted.ui.button.getting-started-btn.basic.buttons .button:active, +.ui.inverted.ui.button.getting-started-btn.buttons .basic.button:active, +.ui.inverted.ui.button.getting-started-btn.basic.button:active, +.play-button.inverted.green.basic.buttons .button:active, +.play-button.inverted.green.buttons .basic.button:active, +.play-button.inverted.green.basic.button:active, +.ui.inverted.green.basic.buttons .play-button:active, +.ui.inverted.green.buttons .basic.play-button:active, +.ui.inverted.green.basic.play-button:active, +.download-button.inverted.green.basic.buttons .button:active, +.download-button.inverted.green.buttons .basic.button:active, +.download-button.inverted.green.basic.button:active, +.ui.inverted.green.basic.buttons .download-button:active, +.ui.inverted.green.buttons .basic.download-button:active, +.ui.inverted.green.basic.download-button:active, +.ui.inverted.play-button.button.getting-started-btn.basic.buttons .button:active, +.ui.inverted.play-button.button.getting-started-btn.buttons .basic.button:active, +.ui.inverted.play-button.button.getting-started-btn.basic.button:active, +.ui.inverted.ui.play-button.getting-started-btn.basic.buttons .button:active, +.ui.inverted.ui.play-button.getting-started-btn.buttons .basic.button:active, +.ui.inverted.ui.play-button.getting-started-btn.basic.button:active, +.ui.inverted.download-button.button.getting-started-btn.basic.buttons .button:active, +.ui.inverted.download-button.button.getting-started-btn.buttons .basic.button:active, +.ui.inverted.download-button.button.getting-started-btn.basic.button:active, +.ui.inverted.ui.download-button.getting-started-btn.basic.buttons .button:active, +.ui.inverted.ui.download-button.getting-started-btn.buttons .basic.button:active, +.ui.inverted.ui.download-button.getting-started-btn.basic.button:active { + box-shadow: 0px 0px 0px 2px #25a233 inset !important; + color: #2ECC40 !important; +} +/*--- Orange ---*/ +.ui.orange.buttons .button, +.ui.orange.button, +.play-button.orange.buttons .button, +.play-button.orange.button, +.ui.orange.buttons .play-button, +.ui.orange.play-button, +.download-button.orange.buttons .button, +.download-button.orange.button, +.ui.orange.buttons .download-button, +.ui.orange.download-button { + background-color: #DF4600; + color: #FFFFFF; + text-shadow: none; + background-image: none; +} +.ui.orange.button, +.play-button.orange.button, +.ui.orange.play-button, +.download-button.orange.button, +.ui.orange.download-button { + box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset; +} +.ui.orange.buttons .button:hover, +.ui.orange.button:hover, +.play-button.orange.buttons .button:hover, +.play-button.orange.button:hover, +.ui.orange.buttons .play-button:hover, +.ui.orange.play-button:hover, +.download-button.orange.buttons .button:hover, +.download-button.orange.button:hover, +.ui.orange.buttons .download-button:hover, +.ui.orange.download-button:hover { + background-color: #c63e00; + color: #FFFFFF; + text-shadow: none; +} +.ui.orange.buttons .button:focus, +.ui.orange.button:focus, +.play-button.orange.buttons .button:focus, +.play-button.orange.button:focus, +.ui.orange.buttons .play-button:focus, +.ui.orange.play-button:focus, +.download-button.orange.buttons .button:focus, +.download-button.orange.button:focus, +.ui.orange.buttons .download-button:focus, +.ui.orange.download-button:focus { + background-color: #b63900; + color: #FFFFFF; + text-shadow: none; +} +.ui.orange.buttons .button:active, +.ui.orange.button:active, +.play-button.orange.buttons .button:active, +.play-button.orange.button:active, +.ui.orange.buttons .play-button:active, +.ui.orange.play-button:active, +.download-button.orange.buttons .button:active, +.download-button.orange.button:active, +.ui.orange.buttons .download-button:active, +.ui.orange.download-button:active { + background-color: #ac3600; + color: #FFFFFF; + text-shadow: none; +} +.ui.orange.buttons .active.button, +.ui.orange.buttons .active.button:active, +.ui.orange.active.button, +.ui.orange.button .active.button:active, +.play-button.orange.buttons .active.button, +.play-button.orange.buttons .active.button:active, +.play-button.orange.active.button, +.play-button.orange.button .active.button:active, +.ui.orange.buttons .active.play-button, +.ui.orange.buttons .active.play-button:active, +.ui.orange.active.play-button, +.ui.orange.play-button .active.play-button:active, +.download-button.orange.buttons .active.button, +.download-button.orange.buttons .active.button:active, +.download-button.orange.active.button, +.download-button.orange.button .active.button:active, +.ui.orange.buttons .active.download-button, +.ui.orange.buttons .active.download-button:active, +.ui.orange.active.download-button, +.ui.orange.download-button .active.download-button:active { + background-color: #c63e00; + color: #FFFFFF; + text-shadow: none; +} +/* Basic */ +.ui.basic.orange.buttons .button, +.ui.basic.orange.button, +.play-button.basic.orange.buttons .button, +.play-button.basic.orange.button, +.ui.basic.orange.buttons .play-button, +.ui.basic.orange.play-button, +.download-button.basic.orange.buttons .button, +.download-button.basic.orange.button, +.ui.basic.orange.buttons .download-button, +.ui.basic.orange.download-button { + box-shadow: 0px 0px 0px 1px #DF4600 inset !important; + color: #DF4600 !important; +} +.ui.basic.orange.buttons .button:hover, +.ui.basic.orange.button:hover, +.play-button.basic.orange.buttons .button:hover, +.play-button.basic.orange.button:hover, +.ui.basic.orange.buttons .play-button:hover, +.ui.basic.orange.play-button:hover, +.download-button.basic.orange.buttons .button:hover, +.download-button.basic.orange.button:hover, +.ui.basic.orange.buttons .download-button:hover, +.ui.basic.orange.download-button:hover { + background: transparent !important; + box-shadow: 0px 0px 0px 1px #c63e00 inset !important; + color: #c63e00 !important; +} +.ui.basic.orange.buttons .button:focus, +.ui.basic.orange.button:focus, +.play-button.basic.orange.buttons .button:focus, +.play-button.basic.orange.button:focus, +.ui.basic.orange.buttons .play-button:focus, +.ui.basic.orange.play-button:focus, +.download-button.basic.orange.buttons .button:focus, +.download-button.basic.orange.button:focus, +.ui.basic.orange.buttons .download-button:focus, +.ui.basic.orange.download-button:focus { + background: transparent !important; + box-shadow: 0px 0px 0px 1px #b63900 inset !important; + color: #c63e00 !important; +} +.ui.basic.orange.buttons .active.button, +.ui.basic.orange.active.button, +.play-button.basic.orange.buttons .active.button, +.play-button.basic.orange.active.button, +.ui.basic.orange.buttons .active.play-button, +.ui.basic.orange.active.play-button, +.download-button.basic.orange.buttons .active.button, +.download-button.basic.orange.active.button, +.ui.basic.orange.buttons .active.download-button, +.ui.basic.orange.active.download-button { + background: transparent !important; + box-shadow: 0px 0px 0px 1px #c63e00 inset !important; + color: #ac3600 !important; +} +.ui.basic.orange.buttons .button:active, +.ui.basic.orange.button:active, +.play-button.basic.orange.buttons .button:active, +.play-button.basic.orange.button:active, +.ui.basic.orange.buttons .play-button:active, +.ui.basic.orange.play-button:active, +.download-button.basic.orange.buttons .button:active, +.download-button.basic.orange.button:active, +.ui.basic.orange.buttons .download-button:active, +.ui.basic.orange.download-button:active { + box-shadow: 0px 0px 0px 1px #ac3600 inset !important; + color: #ac3600 !important; +} +.ui.buttons:not(.vertical) > .basic.orange.button:not(:first-child), +.play-button.buttons:not(.vertical) > .basic.orange.button:not(:first-child), +.ui.buttons:not(.vertical) > .basic.orange.play-button:not(:first-child), +.download-button.buttons:not(.vertical) > .basic.orange.button:not(:first-child), +.ui.buttons:not(.vertical) > .basic.orange.download-button:not(:first-child) { + margin-left: -1px; +} +/* Inverted */ +.ui.inverted.orange.buttons .button, +.ui.inverted.orange.button, +.play-button.inverted.orange.buttons .button, +.play-button.inverted.orange.button, +.ui.inverted.orange.buttons .play-button, +.ui.inverted.orange.play-button, +.download-button.inverted.orange.buttons .button, +.download-button.inverted.orange.button, +.ui.inverted.orange.buttons .download-button, +.ui.inverted.orange.download-button { + background-color: transparent; + box-shadow: 0px 0px 0px 2px #FF851B inset !important; + color: #FF851B; +} +.ui.inverted.orange.buttons .button:hover, +.ui.inverted.orange.button:hover, +.ui.inverted.orange.buttons .button:focus, +.ui.inverted.orange.button:focus, +.ui.inverted.orange.buttons .button.active, +.ui.inverted.orange.button.active, +.ui.inverted.orange.buttons .button:active, +.ui.inverted.orange.button:active, +.play-button.inverted.orange.buttons .button:hover, +.play-button.inverted.orange.button:hover, +.play-button.inverted.orange.buttons .button:focus, +.play-button.inverted.orange.button:focus, +.play-button.inverted.orange.buttons .button.active, +.play-button.inverted.orange.button.active, +.play-button.inverted.orange.buttons .button:active, +.play-button.inverted.orange.button:active, +.ui.inverted.orange.buttons .play-button:hover, +.ui.inverted.orange.play-button:hover, +.ui.inverted.orange.buttons .play-button:focus, +.ui.inverted.orange.play-button:focus, +.ui.inverted.orange.buttons .play-button.active, +.ui.inverted.orange.play-button.active, +.ui.inverted.orange.buttons .play-button:active, +.ui.inverted.orange.play-button:active, +.download-button.inverted.orange.buttons .button:hover, +.download-button.inverted.orange.button:hover, +.download-button.inverted.orange.buttons .button:focus, +.download-button.inverted.orange.button:focus, +.download-button.inverted.orange.buttons .button.active, +.download-button.inverted.orange.button.active, +.download-button.inverted.orange.buttons .button:active, +.download-button.inverted.orange.button:active, +.ui.inverted.orange.buttons .download-button:hover, +.ui.inverted.orange.download-button:hover, +.ui.inverted.orange.buttons .download-button:focus, +.ui.inverted.orange.download-button:focus, +.ui.inverted.orange.buttons .download-button.active, +.ui.inverted.orange.download-button.active, +.ui.inverted.orange.buttons .download-button:active, +.ui.inverted.orange.download-button:active { + box-shadow: none !important; + color: #FFFFFF; +} +.ui.inverted.orange.buttons .button:hover, +.ui.inverted.orange.button:hover, +.play-button.inverted.orange.buttons .button:hover, +.play-button.inverted.orange.button:hover, +.ui.inverted.orange.buttons .play-button:hover, +.ui.inverted.orange.play-button:hover, +.download-button.inverted.orange.buttons .button:hover, +.download-button.inverted.orange.button:hover, +.ui.inverted.orange.buttons .download-button:hover, +.ui.inverted.orange.download-button:hover { + background-color: #ff7701; +} +.ui.inverted.orange.buttons .button:focus, +.ui.inverted.orange.button:focus, +.play-button.inverted.orange.buttons .button:focus, +.play-button.inverted.orange.button:focus, +.ui.inverted.orange.buttons .play-button:focus, +.ui.inverted.orange.play-button:focus, +.download-button.inverted.orange.buttons .button:focus, +.download-button.inverted.orange.button:focus, +.ui.inverted.orange.buttons .download-button:focus, +.ui.inverted.orange.download-button:focus { + background-color: #f17000; +} +.ui.inverted.orange.buttons .active.button, +.ui.inverted.orange.active.button, +.play-button.inverted.orange.buttons .active.button, +.play-button.inverted.orange.active.button, +.ui.inverted.orange.buttons .active.play-button, +.ui.inverted.orange.active.play-button, +.download-button.inverted.orange.buttons .active.button, +.download-button.inverted.orange.active.button, +.ui.inverted.orange.buttons .active.download-button, +.ui.inverted.orange.active.download-button { + background-color: #ff7701; +} +.ui.inverted.orange.buttons .button:active, +.ui.inverted.orange.button:active, +.play-button.inverted.orange.buttons .button:active, +.play-button.inverted.orange.button:active, +.ui.inverted.orange.buttons .play-button:active, +.ui.inverted.orange.play-button:active, +.download-button.inverted.orange.buttons .button:active, +.download-button.inverted.orange.button:active, +.ui.inverted.orange.buttons .download-button:active, +.ui.inverted.orange.download-button:active { + background-color: #e76b00; +} +/* Inverted Basic */ +.ui.inverted.orange.basic.buttons .button, +.ui.inverted.orange.buttons .basic.button, +.ui.inverted.orange.basic.button, +.play-button.inverted.orange.basic.buttons .button, +.play-button.inverted.orange.buttons .basic.button, +.play-button.inverted.orange.basic.button, +.ui.inverted.orange.basic.buttons .play-button, +.ui.inverted.orange.buttons .basic.play-button, +.ui.inverted.orange.basic.play-button, +.download-button.inverted.orange.basic.buttons .button, +.download-button.inverted.orange.buttons .basic.button, +.download-button.inverted.orange.basic.button, +.ui.inverted.orange.basic.buttons .download-button, +.ui.inverted.orange.buttons .basic.download-button, +.ui.inverted.orange.basic.download-button { + background-color: transparent; + box-shadow: 0px 0px 0px 2px rgba(255, 255, 255, 0.5) inset !important; + color: #FFFFFF !important; +} +.ui.inverted.orange.basic.buttons .button:hover, +.ui.inverted.orange.buttons .basic.button:hover, +.ui.inverted.orange.basic.button:hover, +.play-button.inverted.orange.basic.buttons .button:hover, +.play-button.inverted.orange.buttons .basic.button:hover, +.play-button.inverted.orange.basic.button:hover, +.ui.inverted.orange.basic.buttons .play-button:hover, +.ui.inverted.orange.buttons .basic.play-button:hover, +.ui.inverted.orange.basic.play-button:hover, +.download-button.inverted.orange.basic.buttons .button:hover, +.download-button.inverted.orange.buttons .basic.button:hover, +.download-button.inverted.orange.basic.button:hover, +.ui.inverted.orange.basic.buttons .download-button:hover, +.ui.inverted.orange.buttons .basic.download-button:hover, +.ui.inverted.orange.basic.download-button:hover { + box-shadow: 0px 0px 0px 2px #ff7701 inset !important; + color: #FF851B !important; +} +.ui.inverted.orange.basic.buttons .button:focus, +.ui.inverted.orange.basic.buttons .button:focus, +.ui.inverted.orange.basic.button:focus, +.play-button.inverted.orange.basic.buttons .button:focus, +.play-button.inverted.orange.basic.buttons .button:focus, +.play-button.inverted.orange.basic.button:focus, +.ui.inverted.orange.basic.buttons .play-button:focus, +.ui.inverted.orange.basic.buttons .play-button:focus, +.ui.inverted.orange.basic.play-button:focus, +.download-button.inverted.orange.basic.buttons .button:focus, +.download-button.inverted.orange.basic.buttons .button:focus, +.download-button.inverted.orange.basic.button:focus, +.ui.inverted.orange.basic.buttons .download-button:focus, +.ui.inverted.orange.basic.buttons .download-button:focus, +.ui.inverted.orange.basic.download-button:focus { + box-shadow: 0px 0px 0px 2px #f17000 inset !important; + color: #FF851B !important; +} +.ui.inverted.orange.basic.buttons .active.button, +.ui.inverted.orange.buttons .basic.active.button, +.ui.inverted.orange.basic.active.button, +.play-button.inverted.orange.basic.buttons .active.button, +.play-button.inverted.orange.buttons .basic.active.button, +.play-button.inverted.orange.basic.active.button, +.ui.inverted.orange.basic.buttons .active.play-button, +.ui.inverted.orange.buttons .basic.active.play-button, +.ui.inverted.orange.basic.active.play-button, +.download-button.inverted.orange.basic.buttons .active.button, +.download-button.inverted.orange.buttons .basic.active.button, +.download-button.inverted.orange.basic.active.button, +.ui.inverted.orange.basic.buttons .active.download-button, +.ui.inverted.orange.buttons .basic.active.download-button, +.ui.inverted.orange.basic.active.download-button { + box-shadow: 0px 0px 0px 2px #ff7701 inset !important; + color: #FF851B !important; +} +.ui.inverted.orange.basic.buttons .button:active, +.ui.inverted.orange.buttons .basic.button:active, +.ui.inverted.orange.basic.button:active, +.play-button.inverted.orange.basic.buttons .button:active, +.play-button.inverted.orange.buttons .basic.button:active, +.play-button.inverted.orange.basic.button:active, +.ui.inverted.orange.basic.buttons .play-button:active, +.ui.inverted.orange.buttons .basic.play-button:active, +.ui.inverted.orange.basic.play-button:active, +.download-button.inverted.orange.basic.buttons .button:active, +.download-button.inverted.orange.buttons .basic.button:active, +.download-button.inverted.orange.basic.button:active, +.ui.inverted.orange.basic.buttons .download-button:active, +.ui.inverted.orange.buttons .basic.download-button:active, +.ui.inverted.orange.basic.download-button:active { + box-shadow: 0px 0px 0px 2px #e76b00 inset !important; + color: #FF851B !important; +} +/*--- Pink ---*/ +.ui.pink.buttons .button, +.ui.pink.button, +.play-button.pink.buttons .button, +.play-button.pink.button, +.ui.pink.buttons .play-button, +.ui.pink.play-button, +.download-button.pink.buttons .button, +.download-button.pink.button, +.ui.pink.buttons .download-button, +.ui.pink.download-button { + background-color: #E2008C; + color: #FFFFFF; + text-shadow: none; + background-image: none; +} +.ui.pink.button, +.play-button.pink.button, +.ui.pink.play-button, +.download-button.pink.button, +.ui.pink.download-button { + box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset; +} +.ui.pink.buttons .button:hover, +.ui.pink.button:hover, +.play-button.pink.buttons .button:hover, +.play-button.pink.button:hover, +.ui.pink.buttons .play-button:hover, +.ui.pink.play-button:hover, +.download-button.pink.buttons .button:hover, +.download-button.pink.button:hover, +.ui.pink.buttons .download-button:hover, +.ui.pink.download-button:hover { + background-color: #c9007c; + color: #FFFFFF; + text-shadow: none; +} +.ui.pink.buttons .button:focus, +.ui.pink.button:focus, +.play-button.pink.buttons .button:focus, +.play-button.pink.button:focus, +.ui.pink.buttons .play-button:focus, +.ui.pink.play-button:focus, +.download-button.pink.buttons .button:focus, +.download-button.pink.button:focus, +.ui.pink.buttons .download-button:focus, +.ui.pink.download-button:focus { + background-color: #b90073; + color: #FFFFFF; + text-shadow: none; +} +.ui.pink.buttons .button:active, +.ui.pink.button:active, +.play-button.pink.buttons .button:active, +.play-button.pink.button:active, +.ui.pink.buttons .play-button:active, +.ui.pink.play-button:active, +.download-button.pink.buttons .button:active, +.download-button.pink.button:active, +.ui.pink.buttons .download-button:active, +.ui.pink.download-button:active { + background-color: #af006c; + color: #FFFFFF; + text-shadow: none; +} +.ui.pink.buttons .active.button, +.ui.pink.buttons .active.button:active, +.ui.pink.active.button, +.ui.pink.button .active.button:active, +.play-button.pink.buttons .active.button, +.play-button.pink.buttons .active.button:active, +.play-button.pink.active.button, +.play-button.pink.button .active.button:active, +.ui.pink.buttons .active.play-button, +.ui.pink.buttons .active.play-button:active, +.ui.pink.active.play-button, +.ui.pink.play-button .active.play-button:active, +.download-button.pink.buttons .active.button, +.download-button.pink.buttons .active.button:active, +.download-button.pink.active.button, +.download-button.pink.button .active.button:active, +.ui.pink.buttons .active.download-button, +.ui.pink.buttons .active.download-button:active, +.ui.pink.active.download-button, +.ui.pink.download-button .active.download-button:active { + background-color: #c9007c; + color: #FFFFFF; + text-shadow: none; +} +/* Basic */ +.ui.basic.pink.buttons .button, +.ui.basic.pink.button, +.play-button.basic.pink.buttons .button, +.play-button.basic.pink.button, +.ui.basic.pink.buttons .play-button, +.ui.basic.pink.play-button, +.download-button.basic.pink.buttons .button, +.download-button.basic.pink.button, +.ui.basic.pink.buttons .download-button, +.ui.basic.pink.download-button { + box-shadow: 0px 0px 0px 1px #E2008C inset !important; + color: #E2008C !important; +} +.ui.basic.pink.buttons .button:hover, +.ui.basic.pink.button:hover, +.play-button.basic.pink.buttons .button:hover, +.play-button.basic.pink.button:hover, +.ui.basic.pink.buttons .play-button:hover, +.ui.basic.pink.play-button:hover, +.download-button.basic.pink.buttons .button:hover, +.download-button.basic.pink.button:hover, +.ui.basic.pink.buttons .download-button:hover, +.ui.basic.pink.download-button:hover { + background: transparent !important; + box-shadow: 0px 0px 0px 1px #c9007c inset !important; + color: #c9007c !important; +} +.ui.basic.pink.buttons .button:focus, +.ui.basic.pink.button:focus, +.play-button.basic.pink.buttons .button:focus, +.play-button.basic.pink.button:focus, +.ui.basic.pink.buttons .play-button:focus, +.ui.basic.pink.play-button:focus, +.download-button.basic.pink.buttons .button:focus, +.download-button.basic.pink.button:focus, +.ui.basic.pink.buttons .download-button:focus, +.ui.basic.pink.download-button:focus { + background: transparent !important; + box-shadow: 0px 0px 0px 1px #b90073 inset !important; + color: #c9007c !important; +} +.ui.basic.pink.buttons .active.button, +.ui.basic.pink.active.button, +.play-button.basic.pink.buttons .active.button, +.play-button.basic.pink.active.button, +.ui.basic.pink.buttons .active.play-button, +.ui.basic.pink.active.play-button, +.download-button.basic.pink.buttons .active.button, +.download-button.basic.pink.active.button, +.ui.basic.pink.buttons .active.download-button, +.ui.basic.pink.active.download-button { + background: transparent !important; + box-shadow: 0px 0px 0px 1px #c9007c inset !important; + color: #af006c !important; +} +.ui.basic.pink.buttons .button:active, +.ui.basic.pink.button:active, +.play-button.basic.pink.buttons .button:active, +.play-button.basic.pink.button:active, +.ui.basic.pink.buttons .play-button:active, +.ui.basic.pink.play-button:active, +.download-button.basic.pink.buttons .button:active, +.download-button.basic.pink.button:active, +.ui.basic.pink.buttons .download-button:active, +.ui.basic.pink.download-button:active { + box-shadow: 0px 0px 0px 1px #af006c inset !important; + color: #af006c !important; +} +.ui.buttons:not(.vertical) > .basic.pink.button:not(:first-child), +.play-button.buttons:not(.vertical) > .basic.pink.button:not(:first-child), +.ui.buttons:not(.vertical) > .basic.pink.play-button:not(:first-child), +.download-button.buttons:not(.vertical) > .basic.pink.button:not(:first-child), +.ui.buttons:not(.vertical) > .basic.pink.download-button:not(:first-child) { + margin-left: -1px; +} +/* Inverted */ +.ui.inverted.pink.buttons .button, +.ui.inverted.pink.button, +.play-button.inverted.pink.buttons .button, +.play-button.inverted.pink.button, +.ui.inverted.pink.buttons .play-button, +.ui.inverted.pink.play-button, +.download-button.inverted.pink.buttons .button, +.download-button.inverted.pink.button, +.ui.inverted.pink.buttons .download-button, +.ui.inverted.pink.download-button { + background-color: transparent; + box-shadow: 0px 0px 0px 2px #FF8EDF inset !important; + color: #FF8EDF; +} +.ui.inverted.pink.buttons .button:hover, +.ui.inverted.pink.button:hover, +.ui.inverted.pink.buttons .button:focus, +.ui.inverted.pink.button:focus, +.ui.inverted.pink.buttons .button.active, +.ui.inverted.pink.button.active, +.ui.inverted.pink.buttons .button:active, +.ui.inverted.pink.button:active, +.play-button.inverted.pink.buttons .button:hover, +.play-button.inverted.pink.button:hover, +.play-button.inverted.pink.buttons .button:focus, +.play-button.inverted.pink.button:focus, +.play-button.inverted.pink.buttons .button.active, +.play-button.inverted.pink.button.active, +.play-button.inverted.pink.buttons .button:active, +.play-button.inverted.pink.button:active, +.ui.inverted.pink.buttons .play-button:hover, +.ui.inverted.pink.play-button:hover, +.ui.inverted.pink.buttons .play-button:focus, +.ui.inverted.pink.play-button:focus, +.ui.inverted.pink.buttons .play-button.active, +.ui.inverted.pink.play-button.active, +.ui.inverted.pink.buttons .play-button:active, +.ui.inverted.pink.play-button:active, +.download-button.inverted.pink.buttons .button:hover, +.download-button.inverted.pink.button:hover, +.download-button.inverted.pink.buttons .button:focus, +.download-button.inverted.pink.button:focus, +.download-button.inverted.pink.buttons .button.active, +.download-button.inverted.pink.button.active, +.download-button.inverted.pink.buttons .button:active, +.download-button.inverted.pink.button:active, +.ui.inverted.pink.buttons .download-button:hover, +.ui.inverted.pink.download-button:hover, +.ui.inverted.pink.buttons .download-button:focus, +.ui.inverted.pink.download-button:focus, +.ui.inverted.pink.buttons .download-button.active, +.ui.inverted.pink.download-button.active, +.ui.inverted.pink.buttons .download-button:active, +.ui.inverted.pink.download-button:active { + box-shadow: none !important; + color: #FFFFFF; +} +.ui.inverted.pink.buttons .button:hover, +.ui.inverted.pink.button:hover, +.play-button.inverted.pink.buttons .button:hover, +.play-button.inverted.pink.button:hover, +.ui.inverted.pink.buttons .play-button:hover, +.ui.inverted.pink.play-button:hover, +.download-button.inverted.pink.buttons .button:hover, +.download-button.inverted.pink.button:hover, +.ui.inverted.pink.buttons .download-button:hover, +.ui.inverted.pink.download-button:hover { + background-color: #ff74d8; +} +.ui.inverted.pink.buttons .button:focus, +.ui.inverted.pink.button:focus, +.play-button.inverted.pink.buttons .button:focus, +.play-button.inverted.pink.button:focus, +.ui.inverted.pink.buttons .play-button:focus, +.ui.inverted.pink.play-button:focus, +.download-button.inverted.pink.buttons .button:focus, +.download-button.inverted.pink.button:focus, +.ui.inverted.pink.buttons .download-button:focus, +.ui.inverted.pink.download-button:focus { + background-color: #ff65d3; +} +.ui.inverted.pink.buttons .active.button, +.ui.inverted.pink.active.button, +.play-button.inverted.pink.buttons .active.button, +.play-button.inverted.pink.active.button, +.ui.inverted.pink.buttons .active.play-button, +.ui.inverted.pink.active.play-button, +.download-button.inverted.pink.buttons .active.button, +.download-button.inverted.pink.active.button, +.ui.inverted.pink.buttons .active.download-button, +.ui.inverted.pink.active.download-button { + background-color: #ff74d8; +} +.ui.inverted.pink.buttons .button:active, +.ui.inverted.pink.button:active, +.play-button.inverted.pink.buttons .button:active, +.play-button.inverted.pink.button:active, +.ui.inverted.pink.buttons .play-button:active, +.ui.inverted.pink.play-button:active, +.download-button.inverted.pink.buttons .button:active, +.download-button.inverted.pink.button:active, +.ui.inverted.pink.buttons .download-button:active, +.ui.inverted.pink.download-button:active { + background-color: #ff5bd1; +} +/* Inverted Basic */ +.ui.inverted.pink.basic.buttons .button, +.ui.inverted.pink.buttons .basic.button, +.ui.inverted.pink.basic.button, +.play-button.inverted.pink.basic.buttons .button, +.play-button.inverted.pink.buttons .basic.button, +.play-button.inverted.pink.basic.button, +.ui.inverted.pink.basic.buttons .play-button, +.ui.inverted.pink.buttons .basic.play-button, +.ui.inverted.pink.basic.play-button, +.download-button.inverted.pink.basic.buttons .button, +.download-button.inverted.pink.buttons .basic.button, +.download-button.inverted.pink.basic.button, +.ui.inverted.pink.basic.buttons .download-button, +.ui.inverted.pink.buttons .basic.download-button, +.ui.inverted.pink.basic.download-button { + background-color: transparent; + box-shadow: 0px 0px 0px 2px rgba(255, 255, 255, 0.5) inset !important; + color: #FFFFFF !important; +} +.ui.inverted.pink.basic.buttons .button:hover, +.ui.inverted.pink.buttons .basic.button:hover, +.ui.inverted.pink.basic.button:hover, +.play-button.inverted.pink.basic.buttons .button:hover, +.play-button.inverted.pink.buttons .basic.button:hover, +.play-button.inverted.pink.basic.button:hover, +.ui.inverted.pink.basic.buttons .play-button:hover, +.ui.inverted.pink.buttons .basic.play-button:hover, +.ui.inverted.pink.basic.play-button:hover, +.download-button.inverted.pink.basic.buttons .button:hover, +.download-button.inverted.pink.buttons .basic.button:hover, +.download-button.inverted.pink.basic.button:hover, +.ui.inverted.pink.basic.buttons .download-button:hover, +.ui.inverted.pink.buttons .basic.download-button:hover, +.ui.inverted.pink.basic.download-button:hover { + box-shadow: 0px 0px 0px 2px #ff74d8 inset !important; + color: #FF8EDF !important; +} +.ui.inverted.pink.basic.buttons .button:focus, +.ui.inverted.pink.basic.buttons .button:focus, +.ui.inverted.pink.basic.button:focus, +.play-button.inverted.pink.basic.buttons .button:focus, +.play-button.inverted.pink.basic.buttons .button:focus, +.play-button.inverted.pink.basic.button:focus, +.ui.inverted.pink.basic.buttons .play-button:focus, +.ui.inverted.pink.basic.buttons .play-button:focus, +.ui.inverted.pink.basic.play-button:focus, +.download-button.inverted.pink.basic.buttons .button:focus, +.download-button.inverted.pink.basic.buttons .button:focus, +.download-button.inverted.pink.basic.button:focus, +.ui.inverted.pink.basic.buttons .download-button:focus, +.ui.inverted.pink.basic.buttons .download-button:focus, +.ui.inverted.pink.basic.download-button:focus { + box-shadow: 0px 0px 0px 2px #ff65d3 inset !important; + color: #FF8EDF !important; +} +.ui.inverted.pink.basic.buttons .active.button, +.ui.inverted.pink.buttons .basic.active.button, +.ui.inverted.pink.basic.active.button, +.play-button.inverted.pink.basic.buttons .active.button, +.play-button.inverted.pink.buttons .basic.active.button, +.play-button.inverted.pink.basic.active.button, +.ui.inverted.pink.basic.buttons .active.play-button, +.ui.inverted.pink.buttons .basic.active.play-button, +.ui.inverted.pink.basic.active.play-button, +.download-button.inverted.pink.basic.buttons .active.button, +.download-button.inverted.pink.buttons .basic.active.button, +.download-button.inverted.pink.basic.active.button, +.ui.inverted.pink.basic.buttons .active.download-button, +.ui.inverted.pink.buttons .basic.active.download-button, +.ui.inverted.pink.basic.active.download-button { + box-shadow: 0px 0px 0px 2px #ff74d8 inset !important; + color: #FF8EDF !important; +} +.ui.inverted.pink.basic.buttons .button:active, +.ui.inverted.pink.buttons .basic.button:active, +.ui.inverted.pink.basic.button:active, +.play-button.inverted.pink.basic.buttons .button:active, +.play-button.inverted.pink.buttons .basic.button:active, +.play-button.inverted.pink.basic.button:active, +.ui.inverted.pink.basic.buttons .play-button:active, +.ui.inverted.pink.buttons .basic.play-button:active, +.ui.inverted.pink.basic.play-button:active, +.download-button.inverted.pink.basic.buttons .button:active, +.download-button.inverted.pink.buttons .basic.button:active, +.download-button.inverted.pink.basic.button:active, +.ui.inverted.pink.basic.buttons .download-button:active, +.ui.inverted.pink.buttons .basic.download-button:active, +.ui.inverted.pink.basic.download-button:active { + box-shadow: 0px 0px 0px 2px #ff5bd1 inset !important; + color: #FF8EDF !important; +} +/*--- Violet ---*/ +.ui.violet.buttons .button, +.ui.violet.button, +.play-button.violet.buttons .button, +.play-button.violet.button, +.ui.violet.buttons .play-button, +.ui.violet.play-button, +.download-button.violet.buttons .button, +.download-button.violet.button, +.ui.violet.buttons .download-button, +.ui.violet.download-button { + background-color: #C90072; + color: #FFFFFF; + text-shadow: none; + background-image: none; +} +.ui.violet.button, +.play-button.violet.button, +.ui.violet.play-button, +.download-button.violet.button, +.ui.violet.download-button { + box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset; +} +.ui.violet.buttons .button:hover, +.ui.violet.button:hover, +.play-button.violet.buttons .button:hover, +.play-button.violet.button:hover, +.ui.violet.buttons .play-button:hover, +.ui.violet.play-button:hover, +.download-button.violet.buttons .button:hover, +.download-button.violet.button:hover, +.ui.violet.buttons .download-button:hover, +.ui.violet.download-button:hover { + background-color: #b00064; + color: #FFFFFF; + text-shadow: none; +} +.ui.violet.buttons .button:focus, +.ui.violet.button:focus, +.play-button.violet.buttons .button:focus, +.play-button.violet.button:focus, +.ui.violet.buttons .play-button:focus, +.ui.violet.play-button:focus, +.download-button.violet.buttons .button:focus, +.download-button.violet.button:focus, +.ui.violet.buttons .download-button:focus, +.ui.violet.download-button:focus { + background-color: #a0005b; + color: #FFFFFF; + text-shadow: none; +} +.ui.violet.buttons .button:active, +.ui.violet.button:active, +.play-button.violet.buttons .button:active, +.play-button.violet.button:active, +.ui.violet.buttons .play-button:active, +.ui.violet.play-button:active, +.download-button.violet.buttons .button:active, +.download-button.violet.button:active, +.ui.violet.buttons .download-button:active, +.ui.violet.download-button:active { + background-color: #960055; + color: #FFFFFF; + text-shadow: none; +} +.ui.violet.buttons .active.button, +.ui.violet.buttons .active.button:active, +.ui.violet.active.button, +.ui.violet.button .active.button:active, +.play-button.violet.buttons .active.button, +.play-button.violet.buttons .active.button:active, +.play-button.violet.active.button, +.play-button.violet.button .active.button:active, +.ui.violet.buttons .active.play-button, +.ui.violet.buttons .active.play-button:active, +.ui.violet.active.play-button, +.ui.violet.play-button .active.play-button:active, +.download-button.violet.buttons .active.button, +.download-button.violet.buttons .active.button:active, +.download-button.violet.active.button, +.download-button.violet.button .active.button:active, +.ui.violet.buttons .active.download-button, +.ui.violet.buttons .active.download-button:active, +.ui.violet.active.download-button, +.ui.violet.download-button .active.download-button:active { + background-color: #b00064; + color: #FFFFFF; + text-shadow: none; +} +/* Basic */ +.ui.basic.violet.buttons .button, +.ui.basic.violet.button, +.play-button.basic.violet.buttons .button, +.play-button.basic.violet.button, +.ui.basic.violet.buttons .play-button, +.ui.basic.violet.play-button, +.download-button.basic.violet.buttons .button, +.download-button.basic.violet.button, +.ui.basic.violet.buttons .download-button, +.ui.basic.violet.download-button { + box-shadow: 0px 0px 0px 1px #C90072 inset !important; + color: #C90072 !important; +} +.ui.basic.violet.buttons .button:hover, +.ui.basic.violet.button:hover, +.play-button.basic.violet.buttons .button:hover, +.play-button.basic.violet.button:hover, +.ui.basic.violet.buttons .play-button:hover, +.ui.basic.violet.play-button:hover, +.download-button.basic.violet.buttons .button:hover, +.download-button.basic.violet.button:hover, +.ui.basic.violet.buttons .download-button:hover, +.ui.basic.violet.download-button:hover { + background: transparent !important; + box-shadow: 0px 0px 0px 1px #b00064 inset !important; + color: #b00064 !important; +} +.ui.basic.violet.buttons .button:focus, +.ui.basic.violet.button:focus, +.play-button.basic.violet.buttons .button:focus, +.play-button.basic.violet.button:focus, +.ui.basic.violet.buttons .play-button:focus, +.ui.basic.violet.play-button:focus, +.download-button.basic.violet.buttons .button:focus, +.download-button.basic.violet.button:focus, +.ui.basic.violet.buttons .download-button:focus, +.ui.basic.violet.download-button:focus { + background: transparent !important; + box-shadow: 0px 0px 0px 1px #a0005b inset !important; + color: #b00064 !important; +} +.ui.basic.violet.buttons .active.button, +.ui.basic.violet.active.button, +.play-button.basic.violet.buttons .active.button, +.play-button.basic.violet.active.button, +.ui.basic.violet.buttons .active.play-button, +.ui.basic.violet.active.play-button, +.download-button.basic.violet.buttons .active.button, +.download-button.basic.violet.active.button, +.ui.basic.violet.buttons .active.download-button, +.ui.basic.violet.active.download-button { + background: transparent !important; + box-shadow: 0px 0px 0px 1px #b00064 inset !important; + color: #960055 !important; +} +.ui.basic.violet.buttons .button:active, +.ui.basic.violet.button:active, +.play-button.basic.violet.buttons .button:active, +.play-button.basic.violet.button:active, +.ui.basic.violet.buttons .play-button:active, +.ui.basic.violet.play-button:active, +.download-button.basic.violet.buttons .button:active, +.download-button.basic.violet.button:active, +.ui.basic.violet.buttons .download-button:active, +.ui.basic.violet.download-button:active { + box-shadow: 0px 0px 0px 1px #960055 inset !important; + color: #960055 !important; +} +.ui.buttons:not(.vertical) > .basic.violet.button:not(:first-child), +.play-button.buttons:not(.vertical) > .basic.violet.button:not(:first-child), +.ui.buttons:not(.vertical) > .basic.violet.play-button:not(:first-child), +.download-button.buttons:not(.vertical) > .basic.violet.button:not(:first-child), +.ui.buttons:not(.vertical) > .basic.violet.download-button:not(:first-child) { + margin-left: -1px; +} +/* Inverted */ +.ui.inverted.violet.buttons .button, +.ui.inverted.violet.button, +.play-button.inverted.violet.buttons .button, +.play-button.inverted.violet.button, +.ui.inverted.violet.buttons .play-button, +.ui.inverted.violet.play-button, +.download-button.inverted.violet.buttons .button, +.download-button.inverted.violet.button, +.ui.inverted.violet.buttons .download-button, +.ui.inverted.violet.download-button { + background-color: transparent; + box-shadow: 0px 0px 0px 2px #A291FB inset !important; + color: #A291FB; +} +.ui.inverted.violet.buttons .button:hover, +.ui.inverted.violet.button:hover, +.ui.inverted.violet.buttons .button:focus, +.ui.inverted.violet.button:focus, +.ui.inverted.violet.buttons .button.active, +.ui.inverted.violet.button.active, +.ui.inverted.violet.buttons .button:active, +.ui.inverted.violet.button:active, +.play-button.inverted.violet.buttons .button:hover, +.play-button.inverted.violet.button:hover, +.play-button.inverted.violet.buttons .button:focus, +.play-button.inverted.violet.button:focus, +.play-button.inverted.violet.buttons .button.active, +.play-button.inverted.violet.button.active, +.play-button.inverted.violet.buttons .button:active, +.play-button.inverted.violet.button:active, +.ui.inverted.violet.buttons .play-button:hover, +.ui.inverted.violet.play-button:hover, +.ui.inverted.violet.buttons .play-button:focus, +.ui.inverted.violet.play-button:focus, +.ui.inverted.violet.buttons .play-button.active, +.ui.inverted.violet.play-button.active, +.ui.inverted.violet.buttons .play-button:active, +.ui.inverted.violet.play-button:active, +.download-button.inverted.violet.buttons .button:hover, +.download-button.inverted.violet.button:hover, +.download-button.inverted.violet.buttons .button:focus, +.download-button.inverted.violet.button:focus, +.download-button.inverted.violet.buttons .button.active, +.download-button.inverted.violet.button.active, +.download-button.inverted.violet.buttons .button:active, +.download-button.inverted.violet.button:active, +.ui.inverted.violet.buttons .download-button:hover, +.ui.inverted.violet.download-button:hover, +.ui.inverted.violet.buttons .download-button:focus, +.ui.inverted.violet.download-button:focus, +.ui.inverted.violet.buttons .download-button.active, +.ui.inverted.violet.download-button.active, +.ui.inverted.violet.buttons .download-button:active, +.ui.inverted.violet.download-button:active { + box-shadow: none !important; + color: #FFFFFF; +} +.ui.inverted.violet.buttons .button:hover, +.ui.inverted.violet.button:hover, +.play-button.inverted.violet.buttons .button:hover, +.play-button.inverted.violet.button:hover, +.ui.inverted.violet.buttons .play-button:hover, +.ui.inverted.violet.play-button:hover, +.download-button.inverted.violet.buttons .button:hover, +.download-button.inverted.violet.button:hover, +.ui.inverted.violet.buttons .download-button:hover, +.ui.inverted.violet.download-button:hover { + background-color: #8a73ff; +} +.ui.inverted.violet.buttons .button:focus, +.ui.inverted.violet.button:focus, +.play-button.inverted.violet.buttons .button:focus, +.play-button.inverted.violet.button:focus, +.ui.inverted.violet.buttons .play-button:focus, +.ui.inverted.violet.play-button:focus, +.download-button.inverted.violet.buttons .button:focus, +.download-button.inverted.violet.button:focus, +.ui.inverted.violet.buttons .download-button:focus, +.ui.inverted.violet.download-button:focus { + background-color: #7d64ff; +} +.ui.inverted.violet.buttons .active.button, +.ui.inverted.violet.active.button, +.play-button.inverted.violet.buttons .active.button, +.play-button.inverted.violet.active.button, +.ui.inverted.violet.buttons .active.play-button, +.ui.inverted.violet.active.play-button, +.download-button.inverted.violet.buttons .active.button, +.download-button.inverted.violet.active.button, +.ui.inverted.violet.buttons .active.download-button, +.ui.inverted.violet.active.download-button { + background-color: #8a73ff; +} +.ui.inverted.violet.buttons .button:active, +.ui.inverted.violet.button:active, +.play-button.inverted.violet.buttons .button:active, +.play-button.inverted.violet.button:active, +.ui.inverted.violet.buttons .play-button:active, +.ui.inverted.violet.play-button:active, +.download-button.inverted.violet.buttons .button:active, +.download-button.inverted.violet.button:active, +.ui.inverted.violet.buttons .download-button:active, +.ui.inverted.violet.download-button:active { + background-color: #7860f9; +} +/* Inverted Basic */ +.ui.inverted.violet.basic.buttons .button, +.ui.inverted.violet.buttons .basic.button, +.ui.inverted.violet.basic.button, +.play-button.inverted.violet.basic.buttons .button, +.play-button.inverted.violet.buttons .basic.button, +.play-button.inverted.violet.basic.button, +.ui.inverted.violet.basic.buttons .play-button, +.ui.inverted.violet.buttons .basic.play-button, +.ui.inverted.violet.basic.play-button, +.download-button.inverted.violet.basic.buttons .button, +.download-button.inverted.violet.buttons .basic.button, +.download-button.inverted.violet.basic.button, +.ui.inverted.violet.basic.buttons .download-button, +.ui.inverted.violet.buttons .basic.download-button, +.ui.inverted.violet.basic.download-button { + background-color: transparent; + box-shadow: 0px 0px 0px 2px rgba(255, 255, 255, 0.5) inset !important; + color: #FFFFFF !important; +} +.ui.inverted.violet.basic.buttons .button:hover, +.ui.inverted.violet.buttons .basic.button:hover, +.ui.inverted.violet.basic.button:hover, +.play-button.inverted.violet.basic.buttons .button:hover, +.play-button.inverted.violet.buttons .basic.button:hover, +.play-button.inverted.violet.basic.button:hover, +.ui.inverted.violet.basic.buttons .play-button:hover, +.ui.inverted.violet.buttons .basic.play-button:hover, +.ui.inverted.violet.basic.play-button:hover, +.download-button.inverted.violet.basic.buttons .button:hover, +.download-button.inverted.violet.buttons .basic.button:hover, +.download-button.inverted.violet.basic.button:hover, +.ui.inverted.violet.basic.buttons .download-button:hover, +.ui.inverted.violet.buttons .basic.download-button:hover, +.ui.inverted.violet.basic.download-button:hover { + box-shadow: 0px 0px 0px 2px #8a73ff inset !important; + color: #A291FB !important; +} +.ui.inverted.violet.basic.buttons .button:focus, +.ui.inverted.violet.basic.buttons .button:focus, +.ui.inverted.violet.basic.button:focus, +.play-button.inverted.violet.basic.buttons .button:focus, +.play-button.inverted.violet.basic.buttons .button:focus, +.play-button.inverted.violet.basic.button:focus, +.ui.inverted.violet.basic.buttons .play-button:focus, +.ui.inverted.violet.basic.buttons .play-button:focus, +.ui.inverted.violet.basic.play-button:focus, +.download-button.inverted.violet.basic.buttons .button:focus, +.download-button.inverted.violet.basic.buttons .button:focus, +.download-button.inverted.violet.basic.button:focus, +.ui.inverted.violet.basic.buttons .download-button:focus, +.ui.inverted.violet.basic.buttons .download-button:focus, +.ui.inverted.violet.basic.download-button:focus { + box-shadow: 0px 0px 0px 2px #7d64ff inset !important; + color: #A291FB !important; +} +.ui.inverted.violet.basic.buttons .active.button, +.ui.inverted.violet.buttons .basic.active.button, +.ui.inverted.violet.basic.active.button, +.play-button.inverted.violet.basic.buttons .active.button, +.play-button.inverted.violet.buttons .basic.active.button, +.play-button.inverted.violet.basic.active.button, +.ui.inverted.violet.basic.buttons .active.play-button, +.ui.inverted.violet.buttons .basic.active.play-button, +.ui.inverted.violet.basic.active.play-button, +.download-button.inverted.violet.basic.buttons .active.button, +.download-button.inverted.violet.buttons .basic.active.button, +.download-button.inverted.violet.basic.active.button, +.ui.inverted.violet.basic.buttons .active.download-button, +.ui.inverted.violet.buttons .basic.active.download-button, +.ui.inverted.violet.basic.active.download-button { + box-shadow: 0px 0px 0px 2px #8a73ff inset !important; + color: #A291FB !important; +} +.ui.inverted.violet.basic.buttons .button:active, +.ui.inverted.violet.buttons .basic.button:active, +.ui.inverted.violet.basic.button:active, +.play-button.inverted.violet.basic.buttons .button:active, +.play-button.inverted.violet.buttons .basic.button:active, +.play-button.inverted.violet.basic.button:active, +.ui.inverted.violet.basic.buttons .play-button:active, +.ui.inverted.violet.buttons .basic.play-button:active, +.ui.inverted.violet.basic.play-button:active, +.download-button.inverted.violet.basic.buttons .button:active, +.download-button.inverted.violet.buttons .basic.button:active, +.download-button.inverted.violet.basic.button:active, +.ui.inverted.violet.basic.buttons .download-button:active, +.ui.inverted.violet.buttons .basic.download-button:active, +.ui.inverted.violet.basic.download-button:active { + box-shadow: 0px 0px 0px 2px #7860f9 inset !important; + color: #A291FB !important; +} +/*--- Purple ---*/ +.ui.purple.buttons .button, +.ui.purple.button, +.play-button.purple.buttons .button, +.play-button.purple.button, +.ui.purple.buttons .play-button, +.ui.purple.play-button, +.download-button.purple.buttons .button, +.download-button.purple.button, +.ui.purple.buttons .download-button, +.ui.purple.download-button { + background-color: #8169E6; + color: #FFFFFF; + text-shadow: none; + background-image: none; +} +.ui.purple.button, +.play-button.purple.button, +.ui.purple.play-button, +.download-button.purple.button, +.ui.purple.download-button { + box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset; +} +.ui.purple.buttons .button:hover, +.ui.purple.button:hover, +.play-button.purple.buttons .button:hover, +.play-button.purple.button:hover, +.ui.purple.buttons .play-button:hover, +.ui.purple.play-button:hover, +.download-button.purple.buttons .button:hover, +.download-button.purple.button:hover, +.ui.purple.buttons .download-button:hover, +.ui.purple.download-button:hover { + background-color: #6a4cea; + color: #FFFFFF; + text-shadow: none; +} +.ui.purple.buttons .button:focus, +.ui.purple.button:focus, +.play-button.purple.buttons .button:focus, +.play-button.purple.button:focus, +.ui.purple.buttons .play-button:focus, +.ui.purple.play-button:focus, +.download-button.purple.buttons .button:focus, +.download-button.purple.button:focus, +.ui.purple.buttons .download-button:focus, +.ui.purple.download-button:focus { + background-color: #5a37f0; + color: #FFFFFF; + text-shadow: none; +} +.ui.purple.buttons .button:active, +.ui.purple.button:active, +.play-button.purple.buttons .button:active, +.play-button.purple.button:active, +.ui.purple.buttons .play-button:active, +.ui.purple.play-button:active, +.download-button.purple.buttons .button:active, +.download-button.purple.button:active, +.ui.purple.buttons .download-button:active, +.ui.purple.download-button:active { + background-color: #5c3ddf; + color: #FFFFFF; + text-shadow: none; +} +.ui.purple.buttons .active.button, +.ui.purple.buttons .active.button:active, +.ui.purple.active.button, +.ui.purple.button .active.button:active, +.play-button.purple.buttons .active.button, +.play-button.purple.buttons .active.button:active, +.play-button.purple.active.button, +.play-button.purple.button .active.button:active, +.ui.purple.buttons .active.play-button, +.ui.purple.buttons .active.play-button:active, +.ui.purple.active.play-button, +.ui.purple.play-button .active.play-button:active, +.download-button.purple.buttons .active.button, +.download-button.purple.buttons .active.button:active, +.download-button.purple.active.button, +.download-button.purple.button .active.button:active, +.ui.purple.buttons .active.download-button, +.ui.purple.buttons .active.download-button:active, +.ui.purple.active.download-button, +.ui.purple.download-button .active.download-button:active { + background-color: #6848ed; + color: #FFFFFF; + text-shadow: none; +} +/* Basic */ +.ui.basic.purple.buttons .button, +.ui.basic.purple.button, +.play-button.basic.purple.buttons .button, +.play-button.basic.purple.button, +.ui.basic.purple.buttons .play-button, +.ui.basic.purple.play-button, +.download-button.basic.purple.buttons .button, +.download-button.basic.purple.button, +.ui.basic.purple.buttons .download-button, +.ui.basic.purple.download-button { + box-shadow: 0px 0px 0px 1px #8169E6 inset !important; + color: #8169E6 !important; +} +.ui.basic.purple.buttons .button:hover, +.ui.basic.purple.button:hover, +.play-button.basic.purple.buttons .button:hover, +.play-button.basic.purple.button:hover, +.ui.basic.purple.buttons .play-button:hover, +.ui.basic.purple.play-button:hover, +.download-button.basic.purple.buttons .button:hover, +.download-button.basic.purple.button:hover, +.ui.basic.purple.buttons .download-button:hover, +.ui.basic.purple.download-button:hover { + background: transparent !important; + box-shadow: 0px 0px 0px 1px #6a4cea inset !important; + color: #6a4cea !important; +} +.ui.basic.purple.buttons .button:focus, +.ui.basic.purple.button:focus, +.play-button.basic.purple.buttons .button:focus, +.play-button.basic.purple.button:focus, +.ui.basic.purple.buttons .play-button:focus, +.ui.basic.purple.play-button:focus, +.download-button.basic.purple.buttons .button:focus, +.download-button.basic.purple.button:focus, +.ui.basic.purple.buttons .download-button:focus, +.ui.basic.purple.download-button:focus { + background: transparent !important; + box-shadow: 0px 0px 0px 1px #5a37f0 inset !important; + color: #6a4cea !important; +} +.ui.basic.purple.buttons .active.button, +.ui.basic.purple.active.button, +.play-button.basic.purple.buttons .active.button, +.play-button.basic.purple.active.button, +.ui.basic.purple.buttons .active.play-button, +.ui.basic.purple.active.play-button, +.download-button.basic.purple.buttons .active.button, +.download-button.basic.purple.active.button, +.ui.basic.purple.buttons .active.download-button, +.ui.basic.purple.active.download-button { + background: transparent !important; + box-shadow: 0px 0px 0px 1px #6848ed inset !important; + color: #5c3ddf !important; +} +.ui.basic.purple.buttons .button:active, +.ui.basic.purple.button:active, +.play-button.basic.purple.buttons .button:active, +.play-button.basic.purple.button:active, +.ui.basic.purple.buttons .play-button:active, +.ui.basic.purple.play-button:active, +.download-button.basic.purple.buttons .button:active, +.download-button.basic.purple.button:active, +.ui.basic.purple.buttons .download-button:active, +.ui.basic.purple.download-button:active { + box-shadow: 0px 0px 0px 1px #5c3ddf inset !important; + color: #5c3ddf !important; +} +.ui.buttons:not(.vertical) > .basic.purple.button:not(:first-child), +.play-button.buttons:not(.vertical) > .basic.purple.button:not(:first-child), +.ui.buttons:not(.vertical) > .basic.purple.play-button:not(:first-child), +.download-button.buttons:not(.vertical) > .basic.purple.button:not(:first-child), +.ui.buttons:not(.vertical) > .basic.purple.download-button:not(:first-child) { + margin-left: -1px; +} +/* Inverted */ +.ui.inverted.purple.buttons .button, +.ui.inverted.purple.button, +.play-button.inverted.purple.buttons .button, +.play-button.inverted.purple.button, +.ui.inverted.purple.buttons .play-button, +.ui.inverted.purple.play-button, +.download-button.inverted.purple.buttons .button, +.download-button.inverted.purple.button, +.ui.inverted.purple.buttons .download-button, +.ui.inverted.purple.download-button { + background-color: transparent; + box-shadow: 0px 0px 0px 2px #DC73FF inset !important; + color: #DC73FF; +} +.ui.inverted.purple.buttons .button:hover, +.ui.inverted.purple.button:hover, +.ui.inverted.purple.buttons .button:focus, +.ui.inverted.purple.button:focus, +.ui.inverted.purple.buttons .button.active, +.ui.inverted.purple.button.active, +.ui.inverted.purple.buttons .button:active, +.ui.inverted.purple.button:active, +.play-button.inverted.purple.buttons .button:hover, +.play-button.inverted.purple.button:hover, +.play-button.inverted.purple.buttons .button:focus, +.play-button.inverted.purple.button:focus, +.play-button.inverted.purple.buttons .button.active, +.play-button.inverted.purple.button.active, +.play-button.inverted.purple.buttons .button:active, +.play-button.inverted.purple.button:active, +.ui.inverted.purple.buttons .play-button:hover, +.ui.inverted.purple.play-button:hover, +.ui.inverted.purple.buttons .play-button:focus, +.ui.inverted.purple.play-button:focus, +.ui.inverted.purple.buttons .play-button.active, +.ui.inverted.purple.play-button.active, +.ui.inverted.purple.buttons .play-button:active, +.ui.inverted.purple.play-button:active, +.download-button.inverted.purple.buttons .button:hover, +.download-button.inverted.purple.button:hover, +.download-button.inverted.purple.buttons .button:focus, +.download-button.inverted.purple.button:focus, +.download-button.inverted.purple.buttons .button.active, +.download-button.inverted.purple.button.active, +.download-button.inverted.purple.buttons .button:active, +.download-button.inverted.purple.button:active, +.ui.inverted.purple.buttons .download-button:hover, +.ui.inverted.purple.download-button:hover, +.ui.inverted.purple.buttons .download-button:focus, +.ui.inverted.purple.download-button:focus, +.ui.inverted.purple.buttons .download-button.active, +.ui.inverted.purple.download-button.active, +.ui.inverted.purple.buttons .download-button:active, +.ui.inverted.purple.download-button:active { + box-shadow: none !important; + color: #FFFFFF; +} +.ui.inverted.purple.buttons .button:hover, +.ui.inverted.purple.button:hover, +.play-button.inverted.purple.buttons .button:hover, +.play-button.inverted.purple.button:hover, +.ui.inverted.purple.buttons .play-button:hover, +.ui.inverted.purple.play-button:hover, +.download-button.inverted.purple.buttons .button:hover, +.download-button.inverted.purple.button:hover, +.ui.inverted.purple.buttons .download-button:hover, +.ui.inverted.purple.download-button:hover { + background-color: #d65aff; +} +.ui.inverted.purple.buttons .button:focus, +.ui.inverted.purple.button:focus, +.play-button.inverted.purple.buttons .button:focus, +.play-button.inverted.purple.button:focus, +.ui.inverted.purple.buttons .play-button:focus, +.ui.inverted.purple.play-button:focus, +.download-button.inverted.purple.buttons .button:focus, +.download-button.inverted.purple.button:focus, +.ui.inverted.purple.buttons .download-button:focus, +.ui.inverted.purple.download-button:focus { + background-color: #d24aff; +} +.ui.inverted.purple.buttons .active.button, +.ui.inverted.purple.active.button, +.play-button.inverted.purple.buttons .active.button, +.play-button.inverted.purple.active.button, +.ui.inverted.purple.buttons .active.play-button, +.ui.inverted.purple.active.play-button, +.download-button.inverted.purple.buttons .active.button, +.download-button.inverted.purple.active.button, +.ui.inverted.purple.buttons .active.download-button, +.ui.inverted.purple.active.download-button { + background-color: #d65aff; +} +.ui.inverted.purple.buttons .button:active, +.ui.inverted.purple.button:active, +.play-button.inverted.purple.buttons .button:active, +.play-button.inverted.purple.button:active, +.ui.inverted.purple.buttons .play-button:active, +.ui.inverted.purple.play-button:active, +.download-button.inverted.purple.buttons .button:active, +.download-button.inverted.purple.button:active, +.ui.inverted.purple.buttons .download-button:active, +.ui.inverted.purple.download-button:active { + background-color: #cf40ff; +} +/* Inverted Basic */ +.ui.inverted.purple.basic.buttons .button, +.ui.inverted.purple.buttons .basic.button, +.ui.inverted.purple.basic.button, +.play-button.inverted.purple.basic.buttons .button, +.play-button.inverted.purple.buttons .basic.button, +.play-button.inverted.purple.basic.button, +.ui.inverted.purple.basic.buttons .play-button, +.ui.inverted.purple.buttons .basic.play-button, +.ui.inverted.purple.basic.play-button, +.download-button.inverted.purple.basic.buttons .button, +.download-button.inverted.purple.buttons .basic.button, +.download-button.inverted.purple.basic.button, +.ui.inverted.purple.basic.buttons .download-button, +.ui.inverted.purple.buttons .basic.download-button, +.ui.inverted.purple.basic.download-button { + background-color: transparent; + box-shadow: 0px 0px 0px 2px rgba(255, 255, 255, 0.5) inset !important; + color: #FFFFFF !important; +} +.ui.inverted.purple.basic.buttons .button:hover, +.ui.inverted.purple.buttons .basic.button:hover, +.ui.inverted.purple.basic.button:hover, +.play-button.inverted.purple.basic.buttons .button:hover, +.play-button.inverted.purple.buttons .basic.button:hover, +.play-button.inverted.purple.basic.button:hover, +.ui.inverted.purple.basic.buttons .play-button:hover, +.ui.inverted.purple.buttons .basic.play-button:hover, +.ui.inverted.purple.basic.play-button:hover, +.download-button.inverted.purple.basic.buttons .button:hover, +.download-button.inverted.purple.buttons .basic.button:hover, +.download-button.inverted.purple.basic.button:hover, +.ui.inverted.purple.basic.buttons .download-button:hover, +.ui.inverted.purple.buttons .basic.download-button:hover, +.ui.inverted.purple.basic.download-button:hover { + box-shadow: 0px 0px 0px 2px #d65aff inset !important; + color: #DC73FF !important; +} +.ui.inverted.purple.basic.buttons .button:focus, +.ui.inverted.purple.basic.buttons .button:focus, +.ui.inverted.purple.basic.button:focus, +.play-button.inverted.purple.basic.buttons .button:focus, +.play-button.inverted.purple.basic.buttons .button:focus, +.play-button.inverted.purple.basic.button:focus, +.ui.inverted.purple.basic.buttons .play-button:focus, +.ui.inverted.purple.basic.buttons .play-button:focus, +.ui.inverted.purple.basic.play-button:focus, +.download-button.inverted.purple.basic.buttons .button:focus, +.download-button.inverted.purple.basic.buttons .button:focus, +.download-button.inverted.purple.basic.button:focus, +.ui.inverted.purple.basic.buttons .download-button:focus, +.ui.inverted.purple.basic.buttons .download-button:focus, +.ui.inverted.purple.basic.download-button:focus { + box-shadow: 0px 0px 0px 2px #d24aff inset !important; + color: #DC73FF !important; +} +.ui.inverted.purple.basic.buttons .active.button, +.ui.inverted.purple.buttons .basic.active.button, +.ui.inverted.purple.basic.active.button, +.play-button.inverted.purple.basic.buttons .active.button, +.play-button.inverted.purple.buttons .basic.active.button, +.play-button.inverted.purple.basic.active.button, +.ui.inverted.purple.basic.buttons .active.play-button, +.ui.inverted.purple.buttons .basic.active.play-button, +.ui.inverted.purple.basic.active.play-button, +.download-button.inverted.purple.basic.buttons .active.button, +.download-button.inverted.purple.buttons .basic.active.button, +.download-button.inverted.purple.basic.active.button, +.ui.inverted.purple.basic.buttons .active.download-button, +.ui.inverted.purple.buttons .basic.active.download-button, +.ui.inverted.purple.basic.active.download-button { + box-shadow: 0px 0px 0px 2px #d65aff inset !important; + color: #DC73FF !important; +} +.ui.inverted.purple.basic.buttons .button:active, +.ui.inverted.purple.buttons .basic.button:active, +.ui.inverted.purple.basic.button:active, +.play-button.inverted.purple.basic.buttons .button:active, +.play-button.inverted.purple.buttons .basic.button:active, +.play-button.inverted.purple.basic.button:active, +.ui.inverted.purple.basic.buttons .play-button:active, +.ui.inverted.purple.buttons .basic.play-button:active, +.ui.inverted.purple.basic.play-button:active, +.download-button.inverted.purple.basic.buttons .button:active, +.download-button.inverted.purple.buttons .basic.button:active, +.download-button.inverted.purple.basic.button:active, +.ui.inverted.purple.basic.buttons .download-button:active, +.ui.inverted.purple.buttons .basic.download-button:active, +.ui.inverted.purple.basic.download-button:active { + box-shadow: 0px 0px 0px 2px #cf40ff inset !important; + color: #DC73FF !important; +} +/*--- Red ---*/ +.ui.red.buttons .button, +.ui.red.button, +.play-button.red.buttons .button, +.play-button.red.button, +.ui.red.buttons .play-button, +.ui.red.play-button, +.download-button.red.buttons .button, +.download-button.red.button, +.ui.red.buttons .download-button, +.ui.red.download-button { + background-color: #E81123; + color: #FFFFFF; + text-shadow: none; + background-image: none; +} +.ui.red.button, +.play-button.red.button, +.ui.red.play-button, +.download-button.red.button, +.ui.red.download-button { + box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset; +} +.ui.red.buttons .button:hover, +.ui.red.button:hover, +.play-button.red.buttons .button:hover, +.play-button.red.button:hover, +.ui.red.buttons .play-button:hover, +.ui.red.play-button:hover, +.download-button.red.buttons .button:hover, +.download-button.red.button:hover, +.ui.red.buttons .download-button:hover, +.ui.red.download-button:hover { + background-color: #da0617; + color: #FFFFFF; + text-shadow: none; +} +.ui.red.buttons .button:focus, +.ui.red.button:focus, +.play-button.red.buttons .button:focus, +.play-button.red.button:focus, +.ui.red.buttons .play-button:focus, +.ui.red.play-button:focus, +.download-button.red.buttons .button:focus, +.download-button.red.button:focus, +.ui.red.buttons .download-button:focus, +.ui.red.download-button:focus { + background-color: #d00011; + color: #FFFFFF; + text-shadow: none; +} +.ui.red.buttons .button:active, +.ui.red.button:active, +.play-button.red.buttons .button:active, +.play-button.red.button:active, +.ui.red.buttons .play-button:active, +.ui.red.play-button:active, +.download-button.red.buttons .button:active, +.download-button.red.button:active, +.ui.red.buttons .download-button:active, +.ui.red.download-button:active { + background-color: #b80e1c; + color: #FFFFFF; + text-shadow: none; +} +.ui.red.buttons .active.button, +.ui.red.buttons .active.button:active, +.ui.red.active.button, +.ui.red.button .active.button:active, +.play-button.red.buttons .active.button, +.play-button.red.buttons .active.button:active, +.play-button.red.active.button, +.play-button.red.button .active.button:active, +.ui.red.buttons .active.play-button, +.ui.red.buttons .active.play-button:active, +.ui.red.active.play-button, +.ui.red.play-button .active.play-button:active, +.download-button.red.buttons .active.button, +.download-button.red.buttons .active.button:active, +.download-button.red.active.button, +.download-button.red.button .active.button:active, +.ui.red.buttons .active.download-button, +.ui.red.buttons .active.download-button:active, +.ui.red.active.download-button, +.ui.red.download-button .active.download-button:active { + background-color: #df0113; + color: #FFFFFF; + text-shadow: none; +} +/* Basic */ +.ui.basic.red.buttons .button, +.ui.basic.red.button, +.play-button.basic.red.buttons .button, +.play-button.basic.red.button, +.ui.basic.red.buttons .play-button, +.ui.basic.red.play-button, +.download-button.basic.red.buttons .button, +.download-button.basic.red.button, +.ui.basic.red.buttons .download-button, +.ui.basic.red.download-button { + box-shadow: 0px 0px 0px 1px #E81123 inset !important; + color: #E81123 !important; +} +.ui.basic.red.buttons .button:hover, +.ui.basic.red.button:hover, +.play-button.basic.red.buttons .button:hover, +.play-button.basic.red.button:hover, +.ui.basic.red.buttons .play-button:hover, +.ui.basic.red.play-button:hover, +.download-button.basic.red.buttons .button:hover, +.download-button.basic.red.button:hover, +.ui.basic.red.buttons .download-button:hover, +.ui.basic.red.download-button:hover { + background: transparent !important; + box-shadow: 0px 0px 0px 1px #da0617 inset !important; + color: #da0617 !important; +} +.ui.basic.red.buttons .button:focus, +.ui.basic.red.button:focus, +.play-button.basic.red.buttons .button:focus, +.play-button.basic.red.button:focus, +.ui.basic.red.buttons .play-button:focus, +.ui.basic.red.play-button:focus, +.download-button.basic.red.buttons .button:focus, +.download-button.basic.red.button:focus, +.ui.basic.red.buttons .download-button:focus, +.ui.basic.red.download-button:focus { + background: transparent !important; + box-shadow: 0px 0px 0px 1px #d00011 inset !important; + color: #da0617 !important; +} +.ui.basic.red.buttons .active.button, +.ui.basic.red.active.button, +.play-button.basic.red.buttons .active.button, +.play-button.basic.red.active.button, +.ui.basic.red.buttons .active.play-button, +.ui.basic.red.active.play-button, +.download-button.basic.red.buttons .active.button, +.download-button.basic.red.active.button, +.ui.basic.red.buttons .active.download-button, +.ui.basic.red.active.download-button { + background: transparent !important; + box-shadow: 0px 0px 0px 1px #df0113 inset !important; + color: #b80e1c !important; +} +.ui.basic.red.buttons .button:active, +.ui.basic.red.button:active, +.play-button.basic.red.buttons .button:active, +.play-button.basic.red.button:active, +.ui.basic.red.buttons .play-button:active, +.ui.basic.red.play-button:active, +.download-button.basic.red.buttons .button:active, +.download-button.basic.red.button:active, +.ui.basic.red.buttons .download-button:active, +.ui.basic.red.download-button:active { + box-shadow: 0px 0px 0px 1px #b80e1c inset !important; + color: #b80e1c !important; +} +.ui.buttons:not(.vertical) > .basic.red.button:not(:first-child), +.play-button.buttons:not(.vertical) > .basic.red.button:not(:first-child), +.ui.buttons:not(.vertical) > .basic.red.play-button:not(:first-child), +.download-button.buttons:not(.vertical) > .basic.red.button:not(:first-child), +.ui.buttons:not(.vertical) > .basic.red.download-button:not(:first-child) { + margin-left: -1px; +} +/* Inverted */ +.ui.inverted.red.buttons .button, +.ui.inverted.red.button, +.play-button.inverted.red.buttons .button, +.play-button.inverted.red.button, +.ui.inverted.red.buttons .play-button, +.ui.inverted.red.play-button, +.download-button.inverted.red.buttons .button, +.download-button.inverted.red.button, +.ui.inverted.red.buttons .download-button, +.ui.inverted.red.download-button { + background-color: transparent; + box-shadow: 0px 0px 0px 2px #FF695E inset !important; + color: #FF695E; +} +.ui.inverted.red.buttons .button:hover, +.ui.inverted.red.button:hover, +.ui.inverted.red.buttons .button:focus, +.ui.inverted.red.button:focus, +.ui.inverted.red.buttons .button.active, +.ui.inverted.red.button.active, +.ui.inverted.red.buttons .button:active, +.ui.inverted.red.button:active, +.play-button.inverted.red.buttons .button:hover, +.play-button.inverted.red.button:hover, +.play-button.inverted.red.buttons .button:focus, +.play-button.inverted.red.button:focus, +.play-button.inverted.red.buttons .button.active, +.play-button.inverted.red.button.active, +.play-button.inverted.red.buttons .button:active, +.play-button.inverted.red.button:active, +.ui.inverted.red.buttons .play-button:hover, +.ui.inverted.red.play-button:hover, +.ui.inverted.red.buttons .play-button:focus, +.ui.inverted.red.play-button:focus, +.ui.inverted.red.buttons .play-button.active, +.ui.inverted.red.play-button.active, +.ui.inverted.red.buttons .play-button:active, +.ui.inverted.red.play-button:active, +.download-button.inverted.red.buttons .button:hover, +.download-button.inverted.red.button:hover, +.download-button.inverted.red.buttons .button:focus, +.download-button.inverted.red.button:focus, +.download-button.inverted.red.buttons .button.active, +.download-button.inverted.red.button.active, +.download-button.inverted.red.buttons .button:active, +.download-button.inverted.red.button:active, +.ui.inverted.red.buttons .download-button:hover, +.ui.inverted.red.download-button:hover, +.ui.inverted.red.buttons .download-button:focus, +.ui.inverted.red.download-button:focus, +.ui.inverted.red.buttons .download-button.active, +.ui.inverted.red.download-button.active, +.ui.inverted.red.buttons .download-button:active, +.ui.inverted.red.download-button:active { + box-shadow: none !important; + color: #FFFFFF; +} +.ui.inverted.red.buttons .button:hover, +.ui.inverted.red.button:hover, +.play-button.inverted.red.buttons .button:hover, +.play-button.inverted.red.button:hover, +.ui.inverted.red.buttons .play-button:hover, +.ui.inverted.red.play-button:hover, +.download-button.inverted.red.buttons .button:hover, +.download-button.inverted.red.button:hover, +.ui.inverted.red.buttons .download-button:hover, +.ui.inverted.red.download-button:hover { + background-color: #ff5144; +} +.ui.inverted.red.buttons .button:focus, +.ui.inverted.red.button:focus, +.play-button.inverted.red.buttons .button:focus, +.play-button.inverted.red.button:focus, +.ui.inverted.red.buttons .play-button:focus, +.ui.inverted.red.play-button:focus, +.download-button.inverted.red.buttons .button:focus, +.download-button.inverted.red.button:focus, +.ui.inverted.red.buttons .download-button:focus, +.ui.inverted.red.download-button:focus { + background-color: #ff4335; +} +.ui.inverted.red.buttons .active.button, +.ui.inverted.red.active.button, +.play-button.inverted.red.buttons .active.button, +.play-button.inverted.red.active.button, +.ui.inverted.red.buttons .active.play-button, +.ui.inverted.red.active.play-button, +.download-button.inverted.red.buttons .active.button, +.download-button.inverted.red.active.button, +.ui.inverted.red.buttons .active.download-button, +.ui.inverted.red.active.download-button { + background-color: #ff5144; +} +.ui.inverted.red.buttons .button:active, +.ui.inverted.red.button:active, +.play-button.inverted.red.buttons .button:active, +.play-button.inverted.red.button:active, +.ui.inverted.red.buttons .play-button:active, +.ui.inverted.red.play-button:active, +.download-button.inverted.red.buttons .button:active, +.download-button.inverted.red.button:active, +.ui.inverted.red.buttons .download-button:active, +.ui.inverted.red.download-button:active { + background-color: #ff392b; +} +/* Inverted Basic */ +.ui.inverted.red.basic.buttons .button, +.ui.inverted.red.buttons .basic.button, +.ui.inverted.red.basic.button, +.play-button.inverted.red.basic.buttons .button, +.play-button.inverted.red.buttons .basic.button, +.play-button.inverted.red.basic.button, +.ui.inverted.red.basic.buttons .play-button, +.ui.inverted.red.buttons .basic.play-button, +.ui.inverted.red.basic.play-button, +.download-button.inverted.red.basic.buttons .button, +.download-button.inverted.red.buttons .basic.button, +.download-button.inverted.red.basic.button, +.ui.inverted.red.basic.buttons .download-button, +.ui.inverted.red.buttons .basic.download-button, +.ui.inverted.red.basic.download-button { + background-color: transparent; + box-shadow: 0px 0px 0px 2px rgba(255, 255, 255, 0.5) inset !important; + color: #FFFFFF !important; +} +.ui.inverted.red.basic.buttons .button:hover, +.ui.inverted.red.buttons .basic.button:hover, +.ui.inverted.red.basic.button:hover, +.play-button.inverted.red.basic.buttons .button:hover, +.play-button.inverted.red.buttons .basic.button:hover, +.play-button.inverted.red.basic.button:hover, +.ui.inverted.red.basic.buttons .play-button:hover, +.ui.inverted.red.buttons .basic.play-button:hover, +.ui.inverted.red.basic.play-button:hover, +.download-button.inverted.red.basic.buttons .button:hover, +.download-button.inverted.red.buttons .basic.button:hover, +.download-button.inverted.red.basic.button:hover, +.ui.inverted.red.basic.buttons .download-button:hover, +.ui.inverted.red.buttons .basic.download-button:hover, +.ui.inverted.red.basic.download-button:hover { + box-shadow: 0px 0px 0px 2px #ff5144 inset !important; + color: #FF695E !important; +} +.ui.inverted.red.basic.buttons .button:focus, +.ui.inverted.red.basic.buttons .button:focus, +.ui.inverted.red.basic.button:focus, +.play-button.inverted.red.basic.buttons .button:focus, +.play-button.inverted.red.basic.buttons .button:focus, +.play-button.inverted.red.basic.button:focus, +.ui.inverted.red.basic.buttons .play-button:focus, +.ui.inverted.red.basic.buttons .play-button:focus, +.ui.inverted.red.basic.play-button:focus, +.download-button.inverted.red.basic.buttons .button:focus, +.download-button.inverted.red.basic.buttons .button:focus, +.download-button.inverted.red.basic.button:focus, +.ui.inverted.red.basic.buttons .download-button:focus, +.ui.inverted.red.basic.buttons .download-button:focus, +.ui.inverted.red.basic.download-button:focus { + box-shadow: 0px 0px 0px 2px #ff4335 inset !important; + color: #FF695E !important; +} +.ui.inverted.red.basic.buttons .active.button, +.ui.inverted.red.buttons .basic.active.button, +.ui.inverted.red.basic.active.button, +.play-button.inverted.red.basic.buttons .active.button, +.play-button.inverted.red.buttons .basic.active.button, +.play-button.inverted.red.basic.active.button, +.ui.inverted.red.basic.buttons .active.play-button, +.ui.inverted.red.buttons .basic.active.play-button, +.ui.inverted.red.basic.active.play-button, +.download-button.inverted.red.basic.buttons .active.button, +.download-button.inverted.red.buttons .basic.active.button, +.download-button.inverted.red.basic.active.button, +.ui.inverted.red.basic.buttons .active.download-button, +.ui.inverted.red.buttons .basic.active.download-button, +.ui.inverted.red.basic.active.download-button { + box-shadow: 0px 0px 0px 2px #ff5144 inset !important; + color: #FF695E !important; +} +.ui.inverted.red.basic.buttons .button:active, +.ui.inverted.red.buttons .basic.button:active, +.ui.inverted.red.basic.button:active, +.play-button.inverted.red.basic.buttons .button:active, +.play-button.inverted.red.buttons .basic.button:active, +.play-button.inverted.red.basic.button:active, +.ui.inverted.red.basic.buttons .play-button:active, +.ui.inverted.red.buttons .basic.play-button:active, +.ui.inverted.red.basic.play-button:active, +.download-button.inverted.red.basic.buttons .button:active, +.download-button.inverted.red.buttons .basic.button:active, +.download-button.inverted.red.basic.button:active, +.ui.inverted.red.basic.buttons .download-button:active, +.ui.inverted.red.buttons .basic.download-button:active, +.ui.inverted.red.basic.download-button:active { + box-shadow: 0px 0px 0px 2px #ff392b inset !important; + color: #FF695E !important; +} +/*--- Teal ---*/ +.ui.teal.buttons .button, +.ui.teal.button, +.play-button.teal.buttons .button, +.play-button.teal.button, +.ui.teal.buttons .play-button, +.ui.teal.play-button, +.download-button.teal.buttons .button, +.download-button.teal.button, +.ui.teal.buttons .download-button, +.ui.teal.download-button { + background-color: #008272; + color: #FFFFFF; + text-shadow: none; + background-image: none; +} +.ui.teal.button, +.play-button.teal.button, +.ui.teal.play-button, +.download-button.teal.button, +.ui.teal.download-button { + box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset; +} +.ui.teal.buttons .button:hover, +.ui.teal.button:hover, +.play-button.teal.buttons .button:hover, +.play-button.teal.button:hover, +.ui.teal.buttons .play-button:hover, +.ui.teal.play-button:hover, +.download-button.teal.buttons .button:hover, +.download-button.teal.button:hover, +.ui.teal.buttons .download-button:hover, +.ui.teal.download-button:hover { + background-color: #00695c; + color: #FFFFFF; + text-shadow: none; +} +.ui.teal.buttons .button:focus, +.ui.teal.button:focus, +.play-button.teal.buttons .button:focus, +.play-button.teal.button:focus, +.ui.teal.buttons .play-button:focus, +.ui.teal.play-button:focus, +.download-button.teal.buttons .button:focus, +.download-button.teal.button:focus, +.ui.teal.buttons .download-button:focus, +.ui.teal.download-button:focus { + background-color: #00594e; + color: #FFFFFF; + text-shadow: none; +} +.ui.teal.buttons .button:active, +.ui.teal.button:active, +.play-button.teal.buttons .button:active, +.play-button.teal.button:active, +.ui.teal.buttons .play-button:active, +.ui.teal.play-button:active, +.download-button.teal.buttons .button:active, +.download-button.teal.button:active, +.ui.teal.buttons .download-button:active, +.ui.teal.download-button:active { + background-color: #004f45; + color: #FFFFFF; + text-shadow: none; +} +.ui.teal.buttons .active.button, +.ui.teal.buttons .active.button:active, +.ui.teal.active.button, +.ui.teal.button .active.button:active, +.play-button.teal.buttons .active.button, +.play-button.teal.buttons .active.button:active, +.play-button.teal.active.button, +.play-button.teal.button .active.button:active, +.ui.teal.buttons .active.play-button, +.ui.teal.buttons .active.play-button:active, +.ui.teal.active.play-button, +.ui.teal.play-button .active.play-button:active, +.download-button.teal.buttons .active.button, +.download-button.teal.buttons .active.button:active, +.download-button.teal.active.button, +.download-button.teal.button .active.button:active, +.ui.teal.buttons .active.download-button, +.ui.teal.buttons .active.download-button:active, +.ui.teal.active.download-button, +.ui.teal.download-button .active.download-button:active { + background-color: #00695c; + color: #FFFFFF; + text-shadow: none; +} +/* Basic */ +.ui.basic.teal.buttons .button, +.ui.basic.teal.button, +.play-button.basic.teal.buttons .button, +.play-button.basic.teal.button, +.ui.basic.teal.buttons .play-button, +.ui.basic.teal.play-button, +.download-button.basic.teal.buttons .button, +.download-button.basic.teal.button, +.ui.basic.teal.buttons .download-button, +.ui.basic.teal.download-button { + box-shadow: 0px 0px 0px 1px #008272 inset !important; + color: #008272 !important; +} +.ui.basic.teal.buttons .button:hover, +.ui.basic.teal.button:hover, +.play-button.basic.teal.buttons .button:hover, +.play-button.basic.teal.button:hover, +.ui.basic.teal.buttons .play-button:hover, +.ui.basic.teal.play-button:hover, +.download-button.basic.teal.buttons .button:hover, +.download-button.basic.teal.button:hover, +.ui.basic.teal.buttons .download-button:hover, +.ui.basic.teal.download-button:hover { + background: transparent !important; + box-shadow: 0px 0px 0px 1px #00695c inset !important; + color: #00695c !important; +} +.ui.basic.teal.buttons .button:focus, +.ui.basic.teal.button:focus, +.play-button.basic.teal.buttons .button:focus, +.play-button.basic.teal.button:focus, +.ui.basic.teal.buttons .play-button:focus, +.ui.basic.teal.play-button:focus, +.download-button.basic.teal.buttons .button:focus, +.download-button.basic.teal.button:focus, +.ui.basic.teal.buttons .download-button:focus, +.ui.basic.teal.download-button:focus { + background: transparent !important; + box-shadow: 0px 0px 0px 1px #00594e inset !important; + color: #00695c !important; +} +.ui.basic.teal.buttons .active.button, +.ui.basic.teal.active.button, +.play-button.basic.teal.buttons .active.button, +.play-button.basic.teal.active.button, +.ui.basic.teal.buttons .active.play-button, +.ui.basic.teal.active.play-button, +.download-button.basic.teal.buttons .active.button, +.download-button.basic.teal.active.button, +.ui.basic.teal.buttons .active.download-button, +.ui.basic.teal.active.download-button { + background: transparent !important; + box-shadow: 0px 0px 0px 1px #00695c inset !important; + color: #004f45 !important; +} +.ui.basic.teal.buttons .button:active, +.ui.basic.teal.button:active, +.play-button.basic.teal.buttons .button:active, +.play-button.basic.teal.button:active, +.ui.basic.teal.buttons .play-button:active, +.ui.basic.teal.play-button:active, +.download-button.basic.teal.buttons .button:active, +.download-button.basic.teal.button:active, +.ui.basic.teal.buttons .download-button:active, +.ui.basic.teal.download-button:active { + box-shadow: 0px 0px 0px 1px #004f45 inset !important; + color: #004f45 !important; +} +.ui.buttons:not(.vertical) > .basic.teal.button:not(:first-child), +.play-button.buttons:not(.vertical) > .basic.teal.button:not(:first-child), +.ui.buttons:not(.vertical) > .basic.teal.play-button:not(:first-child), +.download-button.buttons:not(.vertical) > .basic.teal.button:not(:first-child), +.ui.buttons:not(.vertical) > .basic.teal.download-button:not(:first-child) { + margin-left: -1px; +} +/* Inverted */ +.ui.inverted.teal.buttons .button, +.ui.inverted.teal.button, +.play-button.inverted.teal.buttons .button, +.play-button.inverted.teal.button, +.ui.inverted.teal.buttons .play-button, +.ui.inverted.teal.play-button, +.download-button.inverted.teal.buttons .button, +.download-button.inverted.teal.button, +.ui.inverted.teal.buttons .download-button, +.ui.inverted.teal.download-button { + background-color: transparent; + box-shadow: 0px 0px 0px 2px #6DFFFF inset !important; + color: #6DFFFF; +} +.ui.inverted.teal.buttons .button:hover, +.ui.inverted.teal.button:hover, +.ui.inverted.teal.buttons .button:focus, +.ui.inverted.teal.button:focus, +.ui.inverted.teal.buttons .button.active, +.ui.inverted.teal.button.active, +.ui.inverted.teal.buttons .button:active, +.ui.inverted.teal.button:active, +.play-button.inverted.teal.buttons .button:hover, +.play-button.inverted.teal.button:hover, +.play-button.inverted.teal.buttons .button:focus, +.play-button.inverted.teal.button:focus, +.play-button.inverted.teal.buttons .button.active, +.play-button.inverted.teal.button.active, +.play-button.inverted.teal.buttons .button:active, +.play-button.inverted.teal.button:active, +.ui.inverted.teal.buttons .play-button:hover, +.ui.inverted.teal.play-button:hover, +.ui.inverted.teal.buttons .play-button:focus, +.ui.inverted.teal.play-button:focus, +.ui.inverted.teal.buttons .play-button.active, +.ui.inverted.teal.play-button.active, +.ui.inverted.teal.buttons .play-button:active, +.ui.inverted.teal.play-button:active, +.download-button.inverted.teal.buttons .button:hover, +.download-button.inverted.teal.button:hover, +.download-button.inverted.teal.buttons .button:focus, +.download-button.inverted.teal.button:focus, +.download-button.inverted.teal.buttons .button.active, +.download-button.inverted.teal.button.active, +.download-button.inverted.teal.buttons .button:active, +.download-button.inverted.teal.button:active, +.ui.inverted.teal.buttons .download-button:hover, +.ui.inverted.teal.download-button:hover, +.ui.inverted.teal.buttons .download-button:focus, +.ui.inverted.teal.download-button:focus, +.ui.inverted.teal.buttons .download-button.active, +.ui.inverted.teal.download-button.active, +.ui.inverted.teal.buttons .download-button:active, +.ui.inverted.teal.download-button:active { + box-shadow: none !important; + color: rgba(0, 0, 0, 0.6); +} +.ui.inverted.teal.buttons .button:hover, +.ui.inverted.teal.button:hover, +.play-button.inverted.teal.buttons .button:hover, +.play-button.inverted.teal.button:hover, +.ui.inverted.teal.buttons .play-button:hover, +.ui.inverted.teal.play-button:hover, +.download-button.inverted.teal.buttons .button:hover, +.download-button.inverted.teal.button:hover, +.ui.inverted.teal.buttons .download-button:hover, +.ui.inverted.teal.download-button:hover { + background-color: #54ffff; +} +.ui.inverted.teal.buttons .button:focus, +.ui.inverted.teal.button:focus, +.play-button.inverted.teal.buttons .button:focus, +.play-button.inverted.teal.button:focus, +.ui.inverted.teal.buttons .play-button:focus, +.ui.inverted.teal.play-button:focus, +.download-button.inverted.teal.buttons .button:focus, +.download-button.inverted.teal.button:focus, +.ui.inverted.teal.buttons .download-button:focus, +.ui.inverted.teal.download-button:focus { + background-color: #44ffff; +} +.ui.inverted.teal.buttons .active.button, +.ui.inverted.teal.active.button, +.play-button.inverted.teal.buttons .active.button, +.play-button.inverted.teal.active.button, +.ui.inverted.teal.buttons .active.play-button, +.ui.inverted.teal.active.play-button, +.download-button.inverted.teal.buttons .active.button, +.download-button.inverted.teal.active.button, +.ui.inverted.teal.buttons .active.download-button, +.ui.inverted.teal.active.download-button { + background-color: #54ffff; +} +.ui.inverted.teal.buttons .button:active, +.ui.inverted.teal.button:active, +.play-button.inverted.teal.buttons .button:active, +.play-button.inverted.teal.button:active, +.ui.inverted.teal.buttons .play-button:active, +.ui.inverted.teal.play-button:active, +.download-button.inverted.teal.buttons .button:active, +.download-button.inverted.teal.button:active, +.ui.inverted.teal.buttons .download-button:active, +.ui.inverted.teal.download-button:active { + background-color: #3affff; +} +/* Inverted Basic */ +.ui.inverted.teal.basic.buttons .button, +.ui.inverted.teal.buttons .basic.button, +.ui.inverted.teal.basic.button, +.play-button.inverted.teal.basic.buttons .button, +.play-button.inverted.teal.buttons .basic.button, +.play-button.inverted.teal.basic.button, +.ui.inverted.teal.basic.buttons .play-button, +.ui.inverted.teal.buttons .basic.play-button, +.ui.inverted.teal.basic.play-button, +.download-button.inverted.teal.basic.buttons .button, +.download-button.inverted.teal.buttons .basic.button, +.download-button.inverted.teal.basic.button, +.ui.inverted.teal.basic.buttons .download-button, +.ui.inverted.teal.buttons .basic.download-button, +.ui.inverted.teal.basic.download-button { + background-color: transparent; + box-shadow: 0px 0px 0px 2px rgba(255, 255, 255, 0.5) inset !important; + color: #FFFFFF !important; +} +.ui.inverted.teal.basic.buttons .button:hover, +.ui.inverted.teal.buttons .basic.button:hover, +.ui.inverted.teal.basic.button:hover, +.play-button.inverted.teal.basic.buttons .button:hover, +.play-button.inverted.teal.buttons .basic.button:hover, +.play-button.inverted.teal.basic.button:hover, +.ui.inverted.teal.basic.buttons .play-button:hover, +.ui.inverted.teal.buttons .basic.play-button:hover, +.ui.inverted.teal.basic.play-button:hover, +.download-button.inverted.teal.basic.buttons .button:hover, +.download-button.inverted.teal.buttons .basic.button:hover, +.download-button.inverted.teal.basic.button:hover, +.ui.inverted.teal.basic.buttons .download-button:hover, +.ui.inverted.teal.buttons .basic.download-button:hover, +.ui.inverted.teal.basic.download-button:hover { + box-shadow: 0px 0px 0px 2px #54ffff inset !important; + color: #6DFFFF !important; +} +.ui.inverted.teal.basic.buttons .button:focus, +.ui.inverted.teal.basic.buttons .button:focus, +.ui.inverted.teal.basic.button:focus, +.play-button.inverted.teal.basic.buttons .button:focus, +.play-button.inverted.teal.basic.buttons .button:focus, +.play-button.inverted.teal.basic.button:focus, +.ui.inverted.teal.basic.buttons .play-button:focus, +.ui.inverted.teal.basic.buttons .play-button:focus, +.ui.inverted.teal.basic.play-button:focus, +.download-button.inverted.teal.basic.buttons .button:focus, +.download-button.inverted.teal.basic.buttons .button:focus, +.download-button.inverted.teal.basic.button:focus, +.ui.inverted.teal.basic.buttons .download-button:focus, +.ui.inverted.teal.basic.buttons .download-button:focus, +.ui.inverted.teal.basic.download-button:focus { + box-shadow: 0px 0px 0px 2px #44ffff inset !important; + color: #6DFFFF !important; +} +.ui.inverted.teal.basic.buttons .active.button, +.ui.inverted.teal.buttons .basic.active.button, +.ui.inverted.teal.basic.active.button, +.play-button.inverted.teal.basic.buttons .active.button, +.play-button.inverted.teal.buttons .basic.active.button, +.play-button.inverted.teal.basic.active.button, +.ui.inverted.teal.basic.buttons .active.play-button, +.ui.inverted.teal.buttons .basic.active.play-button, +.ui.inverted.teal.basic.active.play-button, +.download-button.inverted.teal.basic.buttons .active.button, +.download-button.inverted.teal.buttons .basic.active.button, +.download-button.inverted.teal.basic.active.button, +.ui.inverted.teal.basic.buttons .active.download-button, +.ui.inverted.teal.buttons .basic.active.download-button, +.ui.inverted.teal.basic.active.download-button { + box-shadow: 0px 0px 0px 2px #54ffff inset !important; + color: #6DFFFF !important; +} +.ui.inverted.teal.basic.buttons .button:active, +.ui.inverted.teal.buttons .basic.button:active, +.ui.inverted.teal.basic.button:active, +.play-button.inverted.teal.basic.buttons .button:active, +.play-button.inverted.teal.buttons .basic.button:active, +.play-button.inverted.teal.basic.button:active, +.ui.inverted.teal.basic.buttons .play-button:active, +.ui.inverted.teal.buttons .basic.play-button:active, +.ui.inverted.teal.basic.play-button:active, +.download-button.inverted.teal.basic.buttons .button:active, +.download-button.inverted.teal.buttons .basic.button:active, +.download-button.inverted.teal.basic.button:active, +.ui.inverted.teal.basic.buttons .download-button:active, +.ui.inverted.teal.buttons .basic.download-button:active, +.ui.inverted.teal.basic.download-button:active { + box-shadow: 0px 0px 0px 2px #3affff inset !important; + color: #6DFFFF !important; +} +/*--- Olive ---*/ +.ui.olive.buttons .button, +.ui.olive.button, +.play-button.olive.buttons .button, +.play-button.olive.button, +.ui.olive.buttons .play-button, +.ui.olive.play-button, +.download-button.olive.buttons .button, +.download-button.olive.button, +.ui.olive.buttons .download-button, +.ui.olive.download-button { + background-color: #B5CC18; + color: #FFFFFF; + text-shadow: none; + background-image: none; +} +.ui.olive.button, +.play-button.olive.button, +.ui.olive.play-button, +.download-button.olive.button, +.ui.olive.download-button { + box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset; +} +.ui.olive.buttons .button:hover, +.ui.olive.button:hover, +.play-button.olive.buttons .button:hover, +.play-button.olive.button:hover, +.ui.olive.buttons .play-button:hover, +.ui.olive.play-button:hover, +.download-button.olive.buttons .button:hover, +.download-button.olive.button:hover, +.ui.olive.buttons .download-button:hover, +.ui.olive.download-button:hover { + background-color: #a7bd0d; + color: #FFFFFF; + text-shadow: none; +} +.ui.olive.buttons .button:focus, +.ui.olive.button:focus, +.play-button.olive.buttons .button:focus, +.play-button.olive.button:focus, +.ui.olive.buttons .play-button:focus, +.ui.olive.play-button:focus, +.download-button.olive.buttons .button:focus, +.download-button.olive.button:focus, +.ui.olive.buttons .download-button:focus, +.ui.olive.download-button:focus { + background-color: #a0b605; + color: #FFFFFF; + text-shadow: none; +} +.ui.olive.buttons .button:active, +.ui.olive.button:active, +.play-button.olive.buttons .button:active, +.play-button.olive.button:active, +.ui.olive.buttons .play-button:active, +.ui.olive.play-button:active, +.download-button.olive.buttons .button:active, +.download-button.olive.button:active, +.ui.olive.buttons .download-button:active, +.ui.olive.download-button:active { + background-color: #8d9e13; + color: #FFFFFF; + text-shadow: none; +} +.ui.olive.buttons .active.button, +.ui.olive.buttons .active.button:active, +.ui.olive.active.button, +.ui.olive.button .active.button:active, +.play-button.olive.buttons .active.button, +.play-button.olive.buttons .active.button:active, +.play-button.olive.active.button, +.play-button.olive.button .active.button:active, +.ui.olive.buttons .active.play-button, +.ui.olive.buttons .active.play-button:active, +.ui.olive.active.play-button, +.ui.olive.play-button .active.play-button:active, +.download-button.olive.buttons .active.button, +.download-button.olive.buttons .active.button:active, +.download-button.olive.active.button, +.download-button.olive.button .active.button:active, +.ui.olive.buttons .active.download-button, +.ui.olive.buttons .active.download-button:active, +.ui.olive.active.download-button, +.ui.olive.download-button .active.download-button:active { + background-color: #aac109; + color: #FFFFFF; + text-shadow: none; +} +/* Basic */ +.ui.basic.olive.buttons .button, +.ui.basic.olive.button, +.play-button.basic.olive.buttons .button, +.play-button.basic.olive.button, +.ui.basic.olive.buttons .play-button, +.ui.basic.olive.play-button, +.download-button.basic.olive.buttons .button, +.download-button.basic.olive.button, +.ui.basic.olive.buttons .download-button, +.ui.basic.olive.download-button { + box-shadow: 0px 0px 0px 1px #B5CC18 inset !important; + color: #B5CC18 !important; +} +.ui.basic.olive.buttons .button:hover, +.ui.basic.olive.button:hover, +.play-button.basic.olive.buttons .button:hover, +.play-button.basic.olive.button:hover, +.ui.basic.olive.buttons .play-button:hover, +.ui.basic.olive.play-button:hover, +.download-button.basic.olive.buttons .button:hover, +.download-button.basic.olive.button:hover, +.ui.basic.olive.buttons .download-button:hover, +.ui.basic.olive.download-button:hover { + background: transparent !important; + box-shadow: 0px 0px 0px 1px #a7bd0d inset !important; + color: #a7bd0d !important; +} +.ui.basic.olive.buttons .button:focus, +.ui.basic.olive.button:focus, +.play-button.basic.olive.buttons .button:focus, +.play-button.basic.olive.button:focus, +.ui.basic.olive.buttons .play-button:focus, +.ui.basic.olive.play-button:focus, +.download-button.basic.olive.buttons .button:focus, +.download-button.basic.olive.button:focus, +.ui.basic.olive.buttons .download-button:focus, +.ui.basic.olive.download-button:focus { + background: transparent !important; + box-shadow: 0px 0px 0px 1px #a0b605 inset !important; + color: #a7bd0d !important; +} +.ui.basic.olive.buttons .active.button, +.ui.basic.olive.active.button, +.play-button.basic.olive.buttons .active.button, +.play-button.basic.olive.active.button, +.ui.basic.olive.buttons .active.play-button, +.ui.basic.olive.active.play-button, +.download-button.basic.olive.buttons .active.button, +.download-button.basic.olive.active.button, +.ui.basic.olive.buttons .active.download-button, +.ui.basic.olive.active.download-button { + background: transparent !important; + box-shadow: 0px 0px 0px 1px #aac109 inset !important; + color: #8d9e13 !important; +} +.ui.basic.olive.buttons .button:active, +.ui.basic.olive.button:active, +.play-button.basic.olive.buttons .button:active, +.play-button.basic.olive.button:active, +.ui.basic.olive.buttons .play-button:active, +.ui.basic.olive.play-button:active, +.download-button.basic.olive.buttons .button:active, +.download-button.basic.olive.button:active, +.ui.basic.olive.buttons .download-button:active, +.ui.basic.olive.download-button:active { + box-shadow: 0px 0px 0px 1px #8d9e13 inset !important; + color: #8d9e13 !important; +} +.ui.buttons:not(.vertical) > .basic.olive.button:not(:first-child), +.play-button.buttons:not(.vertical) > .basic.olive.button:not(:first-child), +.ui.buttons:not(.vertical) > .basic.olive.play-button:not(:first-child), +.download-button.buttons:not(.vertical) > .basic.olive.button:not(:first-child), +.ui.buttons:not(.vertical) > .basic.olive.download-button:not(:first-child) { + margin-left: -1px; +} +/* Inverted */ +.ui.inverted.olive.buttons .button, +.ui.inverted.olive.button, +.play-button.inverted.olive.buttons .button, +.play-button.inverted.olive.button, +.ui.inverted.olive.buttons .play-button, +.ui.inverted.olive.play-button, +.download-button.inverted.olive.buttons .button, +.download-button.inverted.olive.button, +.ui.inverted.olive.buttons .download-button, +.ui.inverted.olive.download-button { + background-color: transparent; + box-shadow: 0px 0px 0px 2px #D9E778 inset !important; + color: #D9E778; +} +.ui.inverted.olive.buttons .button:hover, +.ui.inverted.olive.button:hover, +.ui.inverted.olive.buttons .button:focus, +.ui.inverted.olive.button:focus, +.ui.inverted.olive.buttons .button.active, +.ui.inverted.olive.button.active, +.ui.inverted.olive.buttons .button:active, +.ui.inverted.olive.button:active, +.play-button.inverted.olive.buttons .button:hover, +.play-button.inverted.olive.button:hover, +.play-button.inverted.olive.buttons .button:focus, +.play-button.inverted.olive.button:focus, +.play-button.inverted.olive.buttons .button.active, +.play-button.inverted.olive.button.active, +.play-button.inverted.olive.buttons .button:active, +.play-button.inverted.olive.button:active, +.ui.inverted.olive.buttons .play-button:hover, +.ui.inverted.olive.play-button:hover, +.ui.inverted.olive.buttons .play-button:focus, +.ui.inverted.olive.play-button:focus, +.ui.inverted.olive.buttons .play-button.active, +.ui.inverted.olive.play-button.active, +.ui.inverted.olive.buttons .play-button:active, +.ui.inverted.olive.play-button:active, +.download-button.inverted.olive.buttons .button:hover, +.download-button.inverted.olive.button:hover, +.download-button.inverted.olive.buttons .button:focus, +.download-button.inverted.olive.button:focus, +.download-button.inverted.olive.buttons .button.active, +.download-button.inverted.olive.button.active, +.download-button.inverted.olive.buttons .button:active, +.download-button.inverted.olive.button:active, +.ui.inverted.olive.buttons .download-button:hover, +.ui.inverted.olive.download-button:hover, +.ui.inverted.olive.buttons .download-button:focus, +.ui.inverted.olive.download-button:focus, +.ui.inverted.olive.buttons .download-button.active, +.ui.inverted.olive.download-button.active, +.ui.inverted.olive.buttons .download-button:active, +.ui.inverted.olive.download-button:active { + box-shadow: none !important; + color: rgba(0, 0, 0, 0.6); +} +.ui.inverted.olive.buttons .button:hover, +.ui.inverted.olive.button:hover, +.play-button.inverted.olive.buttons .button:hover, +.play-button.inverted.olive.button:hover, +.ui.inverted.olive.buttons .play-button:hover, +.ui.inverted.olive.play-button:hover, +.download-button.inverted.olive.buttons .button:hover, +.download-button.inverted.olive.button:hover, +.ui.inverted.olive.buttons .download-button:hover, +.ui.inverted.olive.download-button:hover { + background-color: #d8ea5c; +} +.ui.inverted.olive.buttons .button:focus, +.ui.inverted.olive.button:focus, +.play-button.inverted.olive.buttons .button:focus, +.play-button.inverted.olive.button:focus, +.ui.inverted.olive.buttons .play-button:focus, +.ui.inverted.olive.play-button:focus, +.download-button.inverted.olive.buttons .button:focus, +.download-button.inverted.olive.button:focus, +.ui.inverted.olive.buttons .download-button:focus, +.ui.inverted.olive.download-button:focus { + background-color: #daef47; +} +.ui.inverted.olive.buttons .active.button, +.ui.inverted.olive.active.button, +.play-button.inverted.olive.buttons .active.button, +.play-button.inverted.olive.active.button, +.ui.inverted.olive.buttons .active.play-button, +.ui.inverted.olive.active.play-button, +.download-button.inverted.olive.buttons .active.button, +.download-button.inverted.olive.active.button, +.ui.inverted.olive.buttons .active.download-button, +.ui.inverted.olive.active.download-button { + background-color: #daed59; +} +.ui.inverted.olive.buttons .button:active, +.ui.inverted.olive.button:active, +.play-button.inverted.olive.buttons .button:active, +.play-button.inverted.olive.button:active, +.ui.inverted.olive.buttons .play-button:active, +.ui.inverted.olive.play-button:active, +.download-button.inverted.olive.buttons .button:active, +.download-button.inverted.olive.button:active, +.ui.inverted.olive.buttons .download-button:active, +.ui.inverted.olive.download-button:active { + background-color: #cddf4d; +} +/* Inverted Basic */ +.ui.inverted.olive.basic.buttons .button, +.ui.inverted.olive.buttons .basic.button, +.ui.inverted.olive.basic.button, +.play-button.inverted.olive.basic.buttons .button, +.play-button.inverted.olive.buttons .basic.button, +.play-button.inverted.olive.basic.button, +.ui.inverted.olive.basic.buttons .play-button, +.ui.inverted.olive.buttons .basic.play-button, +.ui.inverted.olive.basic.play-button, +.download-button.inverted.olive.basic.buttons .button, +.download-button.inverted.olive.buttons .basic.button, +.download-button.inverted.olive.basic.button, +.ui.inverted.olive.basic.buttons .download-button, +.ui.inverted.olive.buttons .basic.download-button, +.ui.inverted.olive.basic.download-button { + background-color: transparent; + box-shadow: 0px 0px 0px 2px rgba(255, 255, 255, 0.5) inset !important; + color: #FFFFFF !important; +} +.ui.inverted.olive.basic.buttons .button:hover, +.ui.inverted.olive.buttons .basic.button:hover, +.ui.inverted.olive.basic.button:hover, +.play-button.inverted.olive.basic.buttons .button:hover, +.play-button.inverted.olive.buttons .basic.button:hover, +.play-button.inverted.olive.basic.button:hover, +.ui.inverted.olive.basic.buttons .play-button:hover, +.ui.inverted.olive.buttons .basic.play-button:hover, +.ui.inverted.olive.basic.play-button:hover, +.download-button.inverted.olive.basic.buttons .button:hover, +.download-button.inverted.olive.buttons .basic.button:hover, +.download-button.inverted.olive.basic.button:hover, +.ui.inverted.olive.basic.buttons .download-button:hover, +.ui.inverted.olive.buttons .basic.download-button:hover, +.ui.inverted.olive.basic.download-button:hover { + box-shadow: 0px 0px 0px 2px #d8ea5c inset !important; + color: #D9E778 !important; +} +.ui.inverted.olive.basic.buttons .button:focus, +.ui.inverted.olive.basic.buttons .button:focus, +.ui.inverted.olive.basic.button:focus, +.play-button.inverted.olive.basic.buttons .button:focus, +.play-button.inverted.olive.basic.buttons .button:focus, +.play-button.inverted.olive.basic.button:focus, +.ui.inverted.olive.basic.buttons .play-button:focus, +.ui.inverted.olive.basic.buttons .play-button:focus, +.ui.inverted.olive.basic.play-button:focus, +.download-button.inverted.olive.basic.buttons .button:focus, +.download-button.inverted.olive.basic.buttons .button:focus, +.download-button.inverted.olive.basic.button:focus, +.ui.inverted.olive.basic.buttons .download-button:focus, +.ui.inverted.olive.basic.buttons .download-button:focus, +.ui.inverted.olive.basic.download-button:focus { + box-shadow: 0px 0px 0px 2px #daef47 inset !important; + color: #D9E778 !important; +} +.ui.inverted.olive.basic.buttons .active.button, +.ui.inverted.olive.buttons .basic.active.button, +.ui.inverted.olive.basic.active.button, +.play-button.inverted.olive.basic.buttons .active.button, +.play-button.inverted.olive.buttons .basic.active.button, +.play-button.inverted.olive.basic.active.button, +.ui.inverted.olive.basic.buttons .active.play-button, +.ui.inverted.olive.buttons .basic.active.play-button, +.ui.inverted.olive.basic.active.play-button, +.download-button.inverted.olive.basic.buttons .active.button, +.download-button.inverted.olive.buttons .basic.active.button, +.download-button.inverted.olive.basic.active.button, +.ui.inverted.olive.basic.buttons .active.download-button, +.ui.inverted.olive.buttons .basic.active.download-button, +.ui.inverted.olive.basic.active.download-button { + box-shadow: 0px 0px 0px 2px #daed59 inset !important; + color: #D9E778 !important; +} +.ui.inverted.olive.basic.buttons .button:active, +.ui.inverted.olive.buttons .basic.button:active, +.ui.inverted.olive.basic.button:active, +.play-button.inverted.olive.basic.buttons .button:active, +.play-button.inverted.olive.buttons .basic.button:active, +.play-button.inverted.olive.basic.button:active, +.ui.inverted.olive.basic.buttons .play-button:active, +.ui.inverted.olive.buttons .basic.play-button:active, +.ui.inverted.olive.basic.play-button:active, +.download-button.inverted.olive.basic.buttons .button:active, +.download-button.inverted.olive.buttons .basic.button:active, +.download-button.inverted.olive.basic.button:active, +.ui.inverted.olive.basic.buttons .download-button:active, +.ui.inverted.olive.buttons .basic.download-button:active, +.ui.inverted.olive.basic.download-button:active { + box-shadow: 0px 0px 0px 2px #cddf4d inset !important; + color: #D9E778 !important; +} +/*--- Yellow ---*/ +.ui.yellow.buttons .button, +.ui.yellow.button, +.play-button.yellow.buttons .button, +.play-button.yellow.button, +.ui.yellow.buttons .play-button, +.ui.yellow.play-button, +.download-button.yellow.buttons .button, +.download-button.yellow.button, +.ui.yellow.buttons .download-button, +.ui.yellow.download-button, +.ui.download-button.buttons .button, +.ui.download-button.button { + background-color: #F4C918; + color: #FFFFFF; + text-shadow: none; + background-image: none; +} +.ui.yellow.button, +.play-button.yellow.button, +.ui.yellow.play-button, +.download-button.yellow.button, +.ui.yellow.download-button, +.ui.download-button.button { + box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset; +} +.ui.yellow.buttons .button:hover, +.ui.yellow.button:hover, +.play-button.yellow.buttons .button:hover, +.play-button.yellow.button:hover, +.ui.yellow.buttons .play-button:hover, +.ui.yellow.play-button:hover, +.download-button.yellow.buttons .button:hover, +.download-button.yellow.button:hover, +.ui.yellow.buttons .download-button:hover, +.ui.yellow.download-button:hover, +.ui.download-button.buttons .button:hover, +.ui.download-button.button:hover { + background-color: #f3c300; + color: #FFFFFF; + text-shadow: none; +} +.ui.yellow.buttons .button:focus, +.ui.yellow.button:focus, +.play-button.yellow.buttons .button:focus, +.play-button.yellow.button:focus, +.ui.yellow.buttons .play-button:focus, +.ui.yellow.play-button:focus, +.download-button.yellow.buttons .button:focus, +.download-button.yellow.button:focus, +.ui.yellow.buttons .download-button:focus, +.ui.yellow.download-button:focus, +.ui.download-button.buttons .button:focus, +.ui.download-button.button:focus { + background-color: #e3b700; + color: #FFFFFF; + text-shadow: none; +} +.ui.yellow.buttons .button:active, +.ui.yellow.button:active, +.play-button.yellow.buttons .button:active, +.play-button.yellow.button:active, +.ui.yellow.buttons .play-button:active, +.ui.yellow.play-button:active, +.download-button.yellow.buttons .button:active, +.download-button.yellow.button:active, +.ui.yellow.buttons .download-button:active, +.ui.yellow.download-button:active, +.ui.download-button.buttons .button:active, +.ui.download-button.button:active { + background-color: #cfa90a; + color: #FFFFFF; + text-shadow: none; +} +.ui.yellow.buttons .active.button, +.ui.yellow.buttons .active.button:active, +.ui.yellow.active.button, +.ui.yellow.button .active.button:active, +.play-button.yellow.buttons .active.button, +.play-button.yellow.buttons .active.button:active, +.play-button.yellow.active.button, +.play-button.yellow.button .active.button:active, +.ui.yellow.buttons .active.play-button, +.ui.yellow.buttons .active.play-button:active, +.ui.yellow.active.play-button, +.ui.yellow.play-button .active.play-button:active, +.download-button.yellow.buttons .active.button, +.download-button.yellow.buttons .active.button:active, +.download-button.yellow.active.button, +.download-button.yellow.button .active.button:active, +.ui.yellow.buttons .active.download-button, +.ui.yellow.buttons .active.download-button:active, +.ui.yellow.active.download-button, +.ui.yellow.download-button .active.download-button:active, +.ui.download-button.buttons .active.button, +.ui.download-button.buttons .active.button:active, +.ui.download-button.active.button, +.ui.download-button.button .active.button:active { + background-color: #f3c300; + color: #FFFFFF; + text-shadow: none; +} +/* Basic */ +.ui.basic.yellow.buttons .button, +.ui.basic.yellow.button, +.play-button.basic.yellow.buttons .button, +.play-button.basic.yellow.button, +.ui.basic.yellow.buttons .play-button, +.ui.basic.yellow.play-button, +.download-button.basic.yellow.buttons .button, +.download-button.basic.yellow.button, +.ui.basic.yellow.buttons .download-button, +.ui.basic.yellow.download-button, +.ui.basic.download-button.buttons .button, +.ui.basic.download-button.button { + box-shadow: 0px 0px 0px 1px #F4C918 inset !important; + color: #F4C918 !important; +} +.ui.basic.yellow.buttons .button:hover, +.ui.basic.yellow.button:hover, +.play-button.basic.yellow.buttons .button:hover, +.play-button.basic.yellow.button:hover, +.ui.basic.yellow.buttons .play-button:hover, +.ui.basic.yellow.play-button:hover, +.download-button.basic.yellow.buttons .button:hover, +.download-button.basic.yellow.button:hover, +.ui.basic.yellow.buttons .download-button:hover, +.ui.basic.yellow.download-button:hover, +.ui.basic.download-button.buttons .button:hover, +.ui.basic.download-button.button:hover { + background: transparent !important; + box-shadow: 0px 0px 0px 1px #f3c300 inset !important; + color: #f3c300 !important; +} +.ui.basic.yellow.buttons .button:focus, +.ui.basic.yellow.button:focus, +.play-button.basic.yellow.buttons .button:focus, +.play-button.basic.yellow.button:focus, +.ui.basic.yellow.buttons .play-button:focus, +.ui.basic.yellow.play-button:focus, +.download-button.basic.yellow.buttons .button:focus, +.download-button.basic.yellow.button:focus, +.ui.basic.yellow.buttons .download-button:focus, +.ui.basic.yellow.download-button:focus, +.ui.basic.download-button.buttons .button:focus, +.ui.basic.download-button.button:focus { + background: transparent !important; + box-shadow: 0px 0px 0px 1px #e3b700 inset !important; + color: #f3c300 !important; +} +.ui.basic.yellow.buttons .active.button, +.ui.basic.yellow.active.button, +.play-button.basic.yellow.buttons .active.button, +.play-button.basic.yellow.active.button, +.ui.basic.yellow.buttons .active.play-button, +.ui.basic.yellow.active.play-button, +.download-button.basic.yellow.buttons .active.button, +.download-button.basic.yellow.active.button, +.ui.basic.yellow.buttons .active.download-button, +.ui.basic.yellow.active.download-button, +.ui.basic.download-button.buttons .active.button, +.ui.basic.download-button.active.button { + background: transparent !important; + box-shadow: 0px 0px 0px 1px #f3c300 inset !important; + color: #cfa90a !important; +} +.ui.basic.yellow.buttons .button:active, +.ui.basic.yellow.button:active, +.play-button.basic.yellow.buttons .button:active, +.play-button.basic.yellow.button:active, +.ui.basic.yellow.buttons .play-button:active, +.ui.basic.yellow.play-button:active, +.download-button.basic.yellow.buttons .button:active, +.download-button.basic.yellow.button:active, +.ui.basic.yellow.buttons .download-button:active, +.ui.basic.yellow.download-button:active, +.ui.basic.download-button.buttons .button:active, +.ui.basic.download-button.button:active { + box-shadow: 0px 0px 0px 1px #cfa90a inset !important; + color: #cfa90a !important; +} +.ui.buttons:not(.vertical) > .basic.yellow.button:not(:first-child), +.play-button.buttons:not(.vertical) > .basic.yellow.button:not(:first-child), +.ui.buttons:not(.vertical) > .basic.yellow.play-button:not(:first-child), +.download-button.buttons:not(.vertical) > .basic.yellow.button:not(:first-child), +.ui.buttons:not(.vertical) > .basic.yellow.download-button:not(:first-child), +.ui.buttons:not(.vertical) > .basic.download-button.button:not(:first-child) { + margin-left: -1px; +} +/* Inverted */ +.ui.inverted.yellow.buttons .button, +.ui.inverted.yellow.button, +.play-button.inverted.yellow.buttons .button, +.play-button.inverted.yellow.button, +.ui.inverted.yellow.buttons .play-button, +.ui.inverted.yellow.play-button, +.download-button.inverted.yellow.buttons .button, +.download-button.inverted.yellow.button, +.ui.inverted.yellow.buttons .download-button, +.ui.inverted.yellow.download-button, +.ui.inverted.download-button.buttons .button, +.ui.inverted.download-button.button { + background-color: transparent; + box-shadow: 0px 0px 0px 2px #FFE21F inset !important; + color: #FFE21F; +} +.ui.inverted.yellow.buttons .button:hover, +.ui.inverted.yellow.button:hover, +.ui.inverted.yellow.buttons .button:focus, +.ui.inverted.yellow.button:focus, +.ui.inverted.yellow.buttons .button.active, +.ui.inverted.yellow.button.active, +.ui.inverted.yellow.buttons .button:active, +.ui.inverted.yellow.button:active, +.play-button.inverted.yellow.buttons .button:hover, +.play-button.inverted.yellow.button:hover, +.play-button.inverted.yellow.buttons .button:focus, +.play-button.inverted.yellow.button:focus, +.play-button.inverted.yellow.buttons .button.active, +.play-button.inverted.yellow.button.active, +.play-button.inverted.yellow.buttons .button:active, +.play-button.inverted.yellow.button:active, +.ui.inverted.yellow.buttons .play-button:hover, +.ui.inverted.yellow.play-button:hover, +.ui.inverted.yellow.buttons .play-button:focus, +.ui.inverted.yellow.play-button:focus, +.ui.inverted.yellow.buttons .play-button.active, +.ui.inverted.yellow.play-button.active, +.ui.inverted.yellow.buttons .play-button:active, +.ui.inverted.yellow.play-button:active, +.download-button.inverted.yellow.buttons .button:hover, +.download-button.inverted.yellow.button:hover, +.download-button.inverted.yellow.buttons .button:focus, +.download-button.inverted.yellow.button:focus, +.download-button.inverted.yellow.buttons .button.active, +.download-button.inverted.yellow.button.active, +.download-button.inverted.yellow.buttons .button:active, +.download-button.inverted.yellow.button:active, +.ui.inverted.yellow.buttons .download-button:hover, +.ui.inverted.yellow.download-button:hover, +.ui.inverted.yellow.buttons .download-button:focus, +.ui.inverted.yellow.download-button:focus, +.ui.inverted.yellow.buttons .download-button.active, +.ui.inverted.yellow.download-button.active, +.ui.inverted.yellow.buttons .download-button:active, +.ui.inverted.yellow.download-button:active, +.ui.inverted.download-button.buttons .button:hover, +.ui.inverted.download-button.button:hover, +.ui.inverted.download-button.buttons .button:focus, +.ui.inverted.download-button.button:focus, +.ui.inverted.download-button.buttons .button.active, +.ui.inverted.download-button.button.active, +.ui.inverted.download-button.buttons .button:active, +.ui.inverted.download-button.button:active { + box-shadow: none !important; + color: rgba(0, 0, 0, 0.6); +} +.ui.inverted.yellow.buttons .button:hover, +.ui.inverted.yellow.button:hover, +.play-button.inverted.yellow.buttons .button:hover, +.play-button.inverted.yellow.button:hover, +.ui.inverted.yellow.buttons .play-button:hover, +.ui.inverted.yellow.play-button:hover, +.download-button.inverted.yellow.buttons .button:hover, +.download-button.inverted.yellow.button:hover, +.ui.inverted.yellow.buttons .download-button:hover, +.ui.inverted.yellow.download-button:hover, +.ui.inverted.download-button.buttons .button:hover, +.ui.inverted.download-button.button:hover { + background-color: #ffdf05; +} +.ui.inverted.yellow.buttons .button:focus, +.ui.inverted.yellow.button:focus, +.play-button.inverted.yellow.buttons .button:focus, +.play-button.inverted.yellow.button:focus, +.ui.inverted.yellow.buttons .play-button:focus, +.ui.inverted.yellow.play-button:focus, +.download-button.inverted.yellow.buttons .button:focus, +.download-button.inverted.yellow.button:focus, +.ui.inverted.yellow.buttons .download-button:focus, +.ui.inverted.yellow.download-button:focus, +.ui.inverted.download-button.buttons .button:focus, +.ui.inverted.download-button.button:focus { + background-color: #f5d500; +} +.ui.inverted.yellow.buttons .active.button, +.ui.inverted.yellow.active.button, +.play-button.inverted.yellow.buttons .active.button, +.play-button.inverted.yellow.active.button, +.ui.inverted.yellow.buttons .active.play-button, +.ui.inverted.yellow.active.play-button, +.download-button.inverted.yellow.buttons .active.button, +.download-button.inverted.yellow.active.button, +.ui.inverted.yellow.buttons .active.download-button, +.ui.inverted.yellow.active.download-button, +.ui.inverted.download-button.buttons .active.button, +.ui.inverted.download-button.active.button { + background-color: #ffdf05; +} +.ui.inverted.yellow.buttons .button:active, +.ui.inverted.yellow.button:active, +.play-button.inverted.yellow.buttons .button:active, +.play-button.inverted.yellow.button:active, +.ui.inverted.yellow.buttons .play-button:active, +.ui.inverted.yellow.play-button:active, +.download-button.inverted.yellow.buttons .button:active, +.download-button.inverted.yellow.button:active, +.ui.inverted.yellow.buttons .download-button:active, +.ui.inverted.yellow.download-button:active, +.ui.inverted.download-button.buttons .button:active, +.ui.inverted.download-button.button:active { + background-color: #ebcd00; +} +/* Inverted Basic */ +.ui.inverted.yellow.basic.buttons .button, +.ui.inverted.yellow.buttons .basic.button, +.ui.inverted.yellow.basic.button, +.play-button.inverted.yellow.basic.buttons .button, +.play-button.inverted.yellow.buttons .basic.button, +.play-button.inverted.yellow.basic.button, +.ui.inverted.yellow.basic.buttons .play-button, +.ui.inverted.yellow.buttons .basic.play-button, +.ui.inverted.yellow.basic.play-button, +.download-button.inverted.yellow.basic.buttons .button, +.download-button.inverted.yellow.buttons .basic.button, +.download-button.inverted.yellow.basic.button, +.ui.inverted.yellow.basic.buttons .download-button, +.ui.inverted.yellow.buttons .basic.download-button, +.ui.inverted.yellow.basic.download-button, +.ui.inverted.download-button.basic.buttons .button, +.ui.inverted.download-button.buttons .basic.button, +.ui.inverted.download-button.basic.button { + background-color: transparent; + box-shadow: 0px 0px 0px 2px rgba(255, 255, 255, 0.5) inset !important; + color: #FFFFFF !important; +} +.ui.inverted.yellow.basic.buttons .button:hover, +.ui.inverted.yellow.buttons .basic.button:hover, +.ui.inverted.yellow.basic.button:hover, +.play-button.inverted.yellow.basic.buttons .button:hover, +.play-button.inverted.yellow.buttons .basic.button:hover, +.play-button.inverted.yellow.basic.button:hover, +.ui.inverted.yellow.basic.buttons .play-button:hover, +.ui.inverted.yellow.buttons .basic.play-button:hover, +.ui.inverted.yellow.basic.play-button:hover, +.download-button.inverted.yellow.basic.buttons .button:hover, +.download-button.inverted.yellow.buttons .basic.button:hover, +.download-button.inverted.yellow.basic.button:hover, +.ui.inverted.yellow.basic.buttons .download-button:hover, +.ui.inverted.yellow.buttons .basic.download-button:hover, +.ui.inverted.yellow.basic.download-button:hover, +.ui.inverted.download-button.basic.buttons .button:hover, +.ui.inverted.download-button.buttons .basic.button:hover, +.ui.inverted.download-button.basic.button:hover { + box-shadow: 0px 0px 0px 2px #ffdf05 inset !important; + color: #FFE21F !important; +} +.ui.inverted.yellow.basic.buttons .button:focus, +.ui.inverted.yellow.basic.buttons .button:focus, +.ui.inverted.yellow.basic.button:focus, +.play-button.inverted.yellow.basic.buttons .button:focus, +.play-button.inverted.yellow.basic.buttons .button:focus, +.play-button.inverted.yellow.basic.button:focus, +.ui.inverted.yellow.basic.buttons .play-button:focus, +.ui.inverted.yellow.basic.buttons .play-button:focus, +.ui.inverted.yellow.basic.play-button:focus, +.download-button.inverted.yellow.basic.buttons .button:focus, +.download-button.inverted.yellow.basic.buttons .button:focus, +.download-button.inverted.yellow.basic.button:focus, +.ui.inverted.yellow.basic.buttons .download-button:focus, +.ui.inverted.yellow.basic.buttons .download-button:focus, +.ui.inverted.yellow.basic.download-button:focus, +.ui.inverted.download-button.basic.buttons .button:focus, +.ui.inverted.download-button.basic.buttons .button:focus, +.ui.inverted.download-button.basic.button:focus { + box-shadow: 0px 0px 0px 2px #f5d500 inset !important; + color: #FFE21F !important; +} +.ui.inverted.yellow.basic.buttons .active.button, +.ui.inverted.yellow.buttons .basic.active.button, +.ui.inverted.yellow.basic.active.button, +.play-button.inverted.yellow.basic.buttons .active.button, +.play-button.inverted.yellow.buttons .basic.active.button, +.play-button.inverted.yellow.basic.active.button, +.ui.inverted.yellow.basic.buttons .active.play-button, +.ui.inverted.yellow.buttons .basic.active.play-button, +.ui.inverted.yellow.basic.active.play-button, +.download-button.inverted.yellow.basic.buttons .active.button, +.download-button.inverted.yellow.buttons .basic.active.button, +.download-button.inverted.yellow.basic.active.button, +.ui.inverted.yellow.basic.buttons .active.download-button, +.ui.inverted.yellow.buttons .basic.active.download-button, +.ui.inverted.yellow.basic.active.download-button, +.ui.inverted.download-button.basic.buttons .active.button, +.ui.inverted.download-button.buttons .basic.active.button, +.ui.inverted.download-button.basic.active.button { + box-shadow: 0px 0px 0px 2px #ffdf05 inset !important; + color: #FFE21F !important; +} +.ui.inverted.yellow.basic.buttons .button:active, +.ui.inverted.yellow.buttons .basic.button:active, +.ui.inverted.yellow.basic.button:active, +.play-button.inverted.yellow.basic.buttons .button:active, +.play-button.inverted.yellow.buttons .basic.button:active, +.play-button.inverted.yellow.basic.button:active, +.ui.inverted.yellow.basic.buttons .play-button:active, +.ui.inverted.yellow.buttons .basic.play-button:active, +.ui.inverted.yellow.basic.play-button:active, +.download-button.inverted.yellow.basic.buttons .button:active, +.download-button.inverted.yellow.buttons .basic.button:active, +.download-button.inverted.yellow.basic.button:active, +.ui.inverted.yellow.basic.buttons .download-button:active, +.ui.inverted.yellow.buttons .basic.download-button:active, +.ui.inverted.yellow.basic.download-button:active, +.ui.inverted.download-button.basic.buttons .button:active, +.ui.inverted.download-button.buttons .basic.button:active, +.ui.inverted.download-button.basic.button:active { + box-shadow: 0px 0px 0px 2px #ebcd00 inset !important; + color: #FFE21F !important; +} +/*------------------- + Primary +--------------------*/ +/*--- Standard ---*/ +.ui.primary.buttons .button, +.ui.primary.button, +.play-button.primary.buttons .button, +.play-button.primary.button, +.ui.primary.buttons .play-button, +.ui.primary.play-button, +.download-button.primary.buttons .button, +.download-button.primary.button, +.ui.primary.buttons .download-button, +.ui.primary.download-button { + background-color: #3CB5B5; + color: #FFFFFF; + text-shadow: none; + background-image: none; +} +.ui.primary.button, +.play-button.primary.button, +.ui.primary.play-button, +.download-button.primary.button, +.ui.primary.download-button { + box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset; +} +.ui.primary.buttons .button:hover, +.ui.primary.button:hover, +.play-button.primary.buttons .button:hover, +.play-button.primary.button:hover, +.ui.primary.buttons .play-button:hover, +.ui.primary.play-button:hover, +.download-button.primary.buttons .button:hover, +.download-button.primary.button:hover, +.ui.primary.buttons .download-button:hover, +.ui.primary.download-button:hover { + background-color: #30a7a7; + color: #FFFFFF; + text-shadow: none; +} +.ui.primary.buttons .button:focus, +.ui.primary.button:focus, +.play-button.primary.buttons .button:focus, +.play-button.primary.button:focus, +.ui.primary.buttons .play-button:focus, +.ui.primary.play-button:focus, +.download-button.primary.buttons .button:focus, +.download-button.primary.button:focus, +.ui.primary.buttons .download-button:focus, +.ui.primary.download-button:focus { + background-color: #28a0a0; + color: #FFFFFF; + text-shadow: none; +} +.ui.primary.buttons .button:active, +.ui.primary.button:active, +.play-button.primary.buttons .button:active, +.play-button.primary.button:active, +.ui.primary.buttons .play-button:active, +.ui.primary.play-button:active, +.download-button.primary.buttons .button:active, +.download-button.primary.button:active, +.ui.primary.buttons .download-button:active, +.ui.primary.download-button:active { + background-color: #2f8f8f; + color: #FFFFFF; + text-shadow: none; +} +.ui.primary.buttons .active.button, +.ui.primary.buttons .active.button:active, +.ui.primary.active.button, +.ui.primary.button .active.button:active, +.play-button.primary.buttons .active.button, +.play-button.primary.buttons .active.button:active, +.play-button.primary.active.button, +.play-button.primary.button .active.button:active, +.ui.primary.buttons .active.play-button, +.ui.primary.buttons .active.play-button:active, +.ui.primary.active.play-button, +.ui.primary.play-button .active.play-button:active, +.download-button.primary.buttons .active.button, +.download-button.primary.buttons .active.button:active, +.download-button.primary.active.button, +.download-button.primary.button .active.button:active, +.ui.primary.buttons .active.download-button, +.ui.primary.buttons .active.download-button:active, +.ui.primary.active.download-button, +.ui.primary.download-button .active.download-button:active { + background-color: #2eaaaa; + color: #FFFFFF; + text-shadow: none; +} +/* Basic */ +.ui.basic.primary.buttons .button, +.ui.basic.primary.button, +.play-button.basic.primary.buttons .button, +.play-button.basic.primary.button, +.ui.basic.primary.buttons .play-button, +.ui.basic.primary.play-button, +.download-button.basic.primary.buttons .button, +.download-button.basic.primary.button, +.ui.basic.primary.buttons .download-button, +.ui.basic.primary.download-button { + box-shadow: 0px 0px 0px 1px #3CB5B5 inset !important; + color: #3CB5B5 !important; +} +.ui.basic.primary.buttons .button:hover, +.ui.basic.primary.button:hover, +.play-button.basic.primary.buttons .button:hover, +.play-button.basic.primary.button:hover, +.ui.basic.primary.buttons .play-button:hover, +.ui.basic.primary.play-button:hover, +.download-button.basic.primary.buttons .button:hover, +.download-button.basic.primary.button:hover, +.ui.basic.primary.buttons .download-button:hover, +.ui.basic.primary.download-button:hover { + background: transparent !important; + box-shadow: 0px 0px 0px 1px #30a7a7 inset !important; + color: #30a7a7 !important; +} +.ui.basic.primary.buttons .button:focus, +.ui.basic.primary.button:focus, +.play-button.basic.primary.buttons .button:focus, +.play-button.basic.primary.button:focus, +.ui.basic.primary.buttons .play-button:focus, +.ui.basic.primary.play-button:focus, +.download-button.basic.primary.buttons .button:focus, +.download-button.basic.primary.button:focus, +.ui.basic.primary.buttons .download-button:focus, +.ui.basic.primary.download-button:focus { + background: transparent !important; + box-shadow: 0px 0px 0px 1px #28a0a0 inset !important; + color: #30a7a7 !important; +} +.ui.basic.primary.buttons .active.button, +.ui.basic.primary.active.button, +.play-button.basic.primary.buttons .active.button, +.play-button.basic.primary.active.button, +.ui.basic.primary.buttons .active.play-button, +.ui.basic.primary.active.play-button, +.download-button.basic.primary.buttons .active.button, +.download-button.basic.primary.active.button, +.ui.basic.primary.buttons .active.download-button, +.ui.basic.primary.active.download-button { + background: transparent !important; + box-shadow: 0px 0px 0px 1px #2eaaaa inset !important; + color: #2f8f8f !important; +} +.ui.basic.primary.buttons .button:active, +.ui.basic.primary.button:active, +.play-button.basic.primary.buttons .button:active, +.play-button.basic.primary.button:active, +.ui.basic.primary.buttons .play-button:active, +.ui.basic.primary.play-button:active, +.download-button.basic.primary.buttons .button:active, +.download-button.basic.primary.button:active, +.ui.basic.primary.buttons .download-button:active, +.ui.basic.primary.download-button:active { + box-shadow: 0px 0px 0px 1px #2f8f8f inset !important; + color: #2f8f8f !important; +} +.ui.buttons:not(.vertical) > .basic.primary.button:not(:first-child), +.play-button.buttons:not(.vertical) > .basic.primary.button:not(:first-child), +.ui.buttons:not(.vertical) > .basic.primary.play-button:not(:first-child), +.download-button.buttons:not(.vertical) > .basic.primary.button:not(:first-child), +.ui.buttons:not(.vertical) > .basic.primary.download-button:not(:first-child) { + margin-left: -1px; +} +/*------------------- + Secondary +--------------------*/ +/* Standard */ +.ui.secondary.buttons .button, +.ui.secondary.button, +.play-button.secondary.buttons .button, +.play-button.secondary.button, +.ui.secondary.buttons .play-button, +.ui.secondary.play-button, +.download-button.secondary.buttons .button, +.download-button.secondary.button, +.ui.secondary.buttons .download-button, +.ui.secondary.download-button { + background-color: #43C9C9; + color: #FFFFFF; + text-shadow: none; + background-image: none; +} +.ui.secondary.button, +.play-button.secondary.button, +.ui.secondary.play-button, +.download-button.secondary.button, +.ui.secondary.download-button { + box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset; +} +.ui.secondary.buttons .button:hover, +.ui.secondary.button:hover, +.play-button.secondary.buttons .button:hover, +.play-button.secondary.button:hover, +.ui.secondary.buttons .play-button:hover, +.ui.secondary.play-button:hover, +.download-button.secondary.buttons .button:hover, +.download-button.secondary.button:hover, +.ui.secondary.buttons .download-button:hover, +.ui.secondary.download-button:hover { + background-color: #51d5d5; + color: #FFFFFF; + text-shadow: none; +} +.ui.secondary.buttons .button:focus, +.ui.secondary.button:focus, +.play-button.secondary.buttons .button:focus, +.play-button.secondary.button:focus, +.ui.secondary.buttons .play-button:focus, +.ui.secondary.play-button:focus, +.download-button.secondary.buttons .button:focus, +.download-button.secondary.button:focus, +.ui.secondary.buttons .download-button:focus, +.ui.secondary.download-button:focus { + background-color: #58dddd; + color: #FFFFFF; + text-shadow: none; +} +.ui.secondary.buttons .button:active, +.ui.secondary.button:active, +.play-button.secondary.buttons .button:active, +.play-button.secondary.button:active, +.ui.secondary.buttons .play-button:active, +.ui.secondary.play-button:active, +.download-button.secondary.buttons .button:active, +.download-button.secondary.button:active, +.ui.secondary.buttons .download-button:active, +.ui.secondary.download-button:active { + background-color: #6bd4d4; + color: #FFFFFF; + text-shadow: none; +} +.ui.secondary.buttons .active.button, +.ui.secondary.buttons .active.button:active, +.ui.secondary.active.button, +.ui.secondary.button .active.button:active, +.play-button.secondary.buttons .active.button, +.play-button.secondary.buttons .active.button:active, +.play-button.secondary.active.button, +.play-button.secondary.button .active.button:active, +.ui.secondary.buttons .active.play-button, +.ui.secondary.buttons .active.play-button:active, +.ui.secondary.active.play-button, +.ui.secondary.play-button .active.play-button:active, +.download-button.secondary.buttons .active.button, +.download-button.secondary.buttons .active.button:active, +.download-button.secondary.active.button, +.download-button.secondary.button .active.button:active, +.ui.secondary.buttons .active.download-button, +.ui.secondary.buttons .active.download-button:active, +.ui.secondary.active.download-button, +.ui.secondary.download-button .active.download-button:active { + background-color: #4ed8d8; + color: #FFFFFF; + text-shadow: none; +} +/* Basic */ +.ui.basic.secondary.buttons .button, +.ui.basic.secondary.button, +.play-button.basic.secondary.buttons .button, +.play-button.basic.secondary.button, +.ui.basic.secondary.buttons .play-button, +.ui.basic.secondary.play-button, +.download-button.basic.secondary.buttons .button, +.download-button.basic.secondary.button, +.ui.basic.secondary.buttons .download-button, +.ui.basic.secondary.download-button { + box-shadow: 0px 0px 0px 1px #43C9C9 inset !important; + color: #43C9C9 !important; +} +.ui.basic.secondary.buttons .button:hover, +.ui.basic.secondary.button:hover, +.play-button.basic.secondary.buttons .button:hover, +.play-button.basic.secondary.button:hover, +.ui.basic.secondary.buttons .play-button:hover, +.ui.basic.secondary.play-button:hover, +.download-button.basic.secondary.buttons .button:hover, +.download-button.basic.secondary.button:hover, +.ui.basic.secondary.buttons .download-button:hover, +.ui.basic.secondary.download-button:hover { + background: transparent !important; + box-shadow: 0px 0px 0px 1px #51d5d5 inset !important; + color: #51d5d5 !important; +} +.ui.basic.secondary.buttons .button:focus, +.ui.basic.secondary.button:focus, +.play-button.basic.secondary.buttons .button:focus, +.play-button.basic.secondary.button:focus, +.ui.basic.secondary.buttons .play-button:focus, +.ui.basic.secondary.play-button:focus, +.download-button.basic.secondary.buttons .button:focus, +.download-button.basic.secondary.button:focus, +.ui.basic.secondary.buttons .download-button:focus, +.ui.basic.secondary.download-button:focus { + background: transparent !important; + box-shadow: 0px 0px 0px 1px #58dddd inset !important; + color: #51d5d5 !important; +} +.ui.basic.secondary.buttons .active.button, +.ui.basic.secondary.active.button, +.play-button.basic.secondary.buttons .active.button, +.play-button.basic.secondary.active.button, +.ui.basic.secondary.buttons .active.play-button, +.ui.basic.secondary.active.play-button, +.download-button.basic.secondary.buttons .active.button, +.download-button.basic.secondary.active.button, +.ui.basic.secondary.buttons .active.download-button, +.ui.basic.secondary.active.download-button { + background: transparent !important; + box-shadow: 0px 0px 0px 1px #4ed8d8 inset !important; + color: #6bd4d4 !important; +} +.ui.basic.secondary.buttons .button:active, +.ui.basic.secondary.button:active, +.play-button.basic.secondary.buttons .button:active, +.play-button.basic.secondary.button:active, +.ui.basic.secondary.buttons .play-button:active, +.ui.basic.secondary.play-button:active, +.download-button.basic.secondary.buttons .button:active, +.download-button.basic.secondary.button:active, +.ui.basic.secondary.buttons .download-button:active, +.ui.basic.secondary.download-button:active { + box-shadow: 0px 0px 0px 1px #6bd4d4 inset !important; + color: #6bd4d4 !important; +} +.ui.buttons:not(.vertical) > .basic.primary.button:not(:first-child), +.play-button.buttons:not(.vertical) > .basic.primary.button:not(:first-child), +.ui.buttons:not(.vertical) > .basic.primary.play-button:not(:first-child), +.download-button.buttons:not(.vertical) > .basic.primary.button:not(:first-child), +.ui.buttons:not(.vertical) > .basic.primary.download-button:not(:first-child) { + margin-left: -1px; +} +/*--------------- + Positive +----------------*/ +/* Standard */ +.ui.positive.buttons .button, +.ui.positive.button, +.play-button.positive.buttons .button, +.play-button.positive.button, +.ui.positive.buttons .play-button, +.ui.positive.play-button, +.download-button.positive.buttons .button, +.download-button.positive.button, +.ui.positive.buttons .download-button, +.ui.positive.download-button { + background-color: #3FC863; + color: #FFFFFF; + text-shadow: none; + background-image: none; +} +.ui.positive.button, +.play-button.positive.button, +.ui.positive.play-button, +.download-button.positive.button, +.ui.positive.download-button { + box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset; +} +.ui.positive.buttons .button:hover, +.ui.positive.button:hover, +.play-button.positive.buttons .button:hover, +.play-button.positive.button:hover, +.ui.positive.buttons .play-button:hover, +.ui.positive.play-button:hover, +.download-button.positive.buttons .button:hover, +.download-button.positive.button:hover, +.ui.positive.buttons .download-button:hover, +.ui.positive.download-button:hover { + background-color: #2ebf54; + color: #FFFFFF; + text-shadow: none; +} +.ui.positive.buttons .button:focus, +.ui.positive.button:focus, +.play-button.positive.buttons .button:focus, +.play-button.positive.button:focus, +.ui.positive.buttons .play-button:focus, +.ui.positive.play-button:focus, +.download-button.positive.buttons .button:focus, +.download-button.positive.button:focus, +.ui.positive.buttons .download-button:focus, +.ui.positive.download-button:focus { + background-color: #25b94c; + color: #FFFFFF; + text-shadow: none; +} +.ui.positive.buttons .button:active, +.ui.positive.button:active, +.play-button.positive.buttons .button:active, +.play-button.positive.button:active, +.ui.positive.buttons .play-button:active, +.ui.positive.play-button:active, +.download-button.positive.buttons .button:active, +.download-button.positive.button:active, +.ui.positive.buttons .download-button:active, +.ui.positive.download-button:active { + background-color: #2fa54e; + color: #FFFFFF; + text-shadow: none; +} +.ui.positive.buttons .active.button, +.ui.positive.buttons .active.button:active, +.ui.positive.active.button, +.ui.positive.button .active.button:active, +.play-button.positive.buttons .active.button, +.play-button.positive.buttons .active.button:active, +.play-button.positive.active.button, +.play-button.positive.button .active.button:active, +.ui.positive.buttons .active.play-button, +.ui.positive.buttons .active.play-button:active, +.ui.positive.active.play-button, +.ui.positive.play-button .active.play-button:active, +.download-button.positive.buttons .active.button, +.download-button.positive.buttons .active.button:active, +.download-button.positive.active.button, +.download-button.positive.button .active.button:active, +.ui.positive.buttons .active.download-button, +.ui.positive.buttons .active.download-button:active, +.ui.positive.active.download-button, +.ui.positive.download-button .active.download-button:active { + background-color: #2bc253; + color: #FFFFFF; + text-shadow: none; +} +/* Basic */ +.ui.basic.positive.buttons .button, +.ui.basic.positive.button, +.play-button.basic.positive.buttons .button, +.play-button.basic.positive.button, +.ui.basic.positive.buttons .play-button, +.ui.basic.positive.play-button, +.download-button.basic.positive.buttons .button, +.download-button.basic.positive.button, +.ui.basic.positive.buttons .download-button, +.ui.basic.positive.download-button { + box-shadow: 0px 0px 0px 1px #3FC863 inset !important; + color: #3FC863 !important; +} +.ui.basic.positive.buttons .button:hover, +.ui.basic.positive.button:hover, +.play-button.basic.positive.buttons .button:hover, +.play-button.basic.positive.button:hover, +.ui.basic.positive.buttons .play-button:hover, +.ui.basic.positive.play-button:hover, +.download-button.basic.positive.buttons .button:hover, +.download-button.basic.positive.button:hover, +.ui.basic.positive.buttons .download-button:hover, +.ui.basic.positive.download-button:hover { + background: transparent !important; + box-shadow: 0px 0px 0px 1px #2ebf54 inset !important; + color: #2ebf54 !important; +} +.ui.basic.positive.buttons .button:focus, +.ui.basic.positive.button:focus, +.play-button.basic.positive.buttons .button:focus, +.play-button.basic.positive.button:focus, +.ui.basic.positive.buttons .play-button:focus, +.ui.basic.positive.play-button:focus, +.download-button.basic.positive.buttons .button:focus, +.download-button.basic.positive.button:focus, +.ui.basic.positive.buttons .download-button:focus, +.ui.basic.positive.download-button:focus { + background: transparent !important; + box-shadow: 0px 0px 0px 1px #25b94c inset !important; + color: #2ebf54 !important; +} +.ui.basic.positive.buttons .active.button, +.ui.basic.positive.active.button, +.play-button.basic.positive.buttons .active.button, +.play-button.basic.positive.active.button, +.ui.basic.positive.buttons .active.play-button, +.ui.basic.positive.active.play-button, +.download-button.basic.positive.buttons .active.button, +.download-button.basic.positive.active.button, +.ui.basic.positive.buttons .active.download-button, +.ui.basic.positive.active.download-button { + background: transparent !important; + box-shadow: 0px 0px 0px 1px #2bc253 inset !important; + color: #2fa54e !important; +} +.ui.basic.positive.buttons .button:active, +.ui.basic.positive.button:active, +.play-button.basic.positive.buttons .button:active, +.play-button.basic.positive.button:active, +.ui.basic.positive.buttons .play-button:active, +.ui.basic.positive.play-button:active, +.download-button.basic.positive.buttons .button:active, +.download-button.basic.positive.button:active, +.ui.basic.positive.buttons .download-button:active, +.ui.basic.positive.download-button:active { + box-shadow: 0px 0px 0px 1px #2fa54e inset !important; + color: #2fa54e !important; +} +.ui.buttons:not(.vertical) > .basic.primary.button:not(:first-child), +.play-button.buttons:not(.vertical) > .basic.primary.button:not(:first-child), +.ui.buttons:not(.vertical) > .basic.primary.play-button:not(:first-child), +.download-button.buttons:not(.vertical) > .basic.primary.button:not(:first-child), +.ui.buttons:not(.vertical) > .basic.primary.download-button:not(:first-child) { + margin-left: -1px; +} +/*--------------- + Negative +----------------*/ +/* Standard */ +.ui.negative.buttons .button, +.ui.negative.button, +.play-button.negative.buttons .button, +.play-button.negative.button, +.ui.negative.buttons .play-button, +.ui.negative.play-button, +.download-button.negative.buttons .button, +.download-button.negative.button, +.ui.negative.buttons .download-button, +.ui.negative.download-button { + background-color: #E81123; + color: #FFFFFF; + text-shadow: none; + background-image: none; +} +.ui.negative.button, +.play-button.negative.button, +.ui.negative.play-button, +.download-button.negative.button, +.ui.negative.download-button { + box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset; +} +.ui.negative.buttons .button:hover, +.ui.negative.button:hover, +.play-button.negative.buttons .button:hover, +.play-button.negative.button:hover, +.ui.negative.buttons .play-button:hover, +.ui.negative.play-button:hover, +.download-button.negative.buttons .button:hover, +.download-button.negative.button:hover, +.ui.negative.buttons .download-button:hover, +.ui.negative.download-button:hover { + background-color: #da0617; + color: #FFFFFF; + text-shadow: none; +} +.ui.negative.buttons .button:focus, +.ui.negative.button:focus, +.play-button.negative.buttons .button:focus, +.play-button.negative.button:focus, +.ui.negative.buttons .play-button:focus, +.ui.negative.play-button:focus, +.download-button.negative.buttons .button:focus, +.download-button.negative.button:focus, +.ui.negative.buttons .download-button:focus, +.ui.negative.download-button:focus { + background-color: #d00011; + color: #FFFFFF; + text-shadow: none; +} +.ui.negative.buttons .button:active, +.ui.negative.button:active, +.play-button.negative.buttons .button:active, +.play-button.negative.button:active, +.ui.negative.buttons .play-button:active, +.ui.negative.play-button:active, +.download-button.negative.buttons .button:active, +.download-button.negative.button:active, +.ui.negative.buttons .download-button:active, +.ui.negative.download-button:active { + background-color: #b80e1c; + color: #FFFFFF; + text-shadow: none; +} +.ui.negative.buttons .active.button, +.ui.negative.buttons .active.button:active, +.ui.negative.active.button, +.ui.negative.button .active.button:active, +.play-button.negative.buttons .active.button, +.play-button.negative.buttons .active.button:active, +.play-button.negative.active.button, +.play-button.negative.button .active.button:active, +.ui.negative.buttons .active.play-button, +.ui.negative.buttons .active.play-button:active, +.ui.negative.active.play-button, +.ui.negative.play-button .active.play-button:active, +.download-button.negative.buttons .active.button, +.download-button.negative.buttons .active.button:active, +.download-button.negative.active.button, +.download-button.negative.button .active.button:active, +.ui.negative.buttons .active.download-button, +.ui.negative.buttons .active.download-button:active, +.ui.negative.active.download-button, +.ui.negative.download-button .active.download-button:active { + background-color: #df0113; + color: #FFFFFF; + text-shadow: none; +} +/* Basic */ +.ui.basic.negative.buttons .button, +.ui.basic.negative.button, +.play-button.basic.negative.buttons .button, +.play-button.basic.negative.button, +.ui.basic.negative.buttons .play-button, +.ui.basic.negative.play-button, +.download-button.basic.negative.buttons .button, +.download-button.basic.negative.button, +.ui.basic.negative.buttons .download-button, +.ui.basic.negative.download-button { + box-shadow: 0px 0px 0px 1px #E81123 inset !important; + color: #E81123 !important; +} +.ui.basic.negative.buttons .button:hover, +.ui.basic.negative.button:hover, +.play-button.basic.negative.buttons .button:hover, +.play-button.basic.negative.button:hover, +.ui.basic.negative.buttons .play-button:hover, +.ui.basic.negative.play-button:hover, +.download-button.basic.negative.buttons .button:hover, +.download-button.basic.negative.button:hover, +.ui.basic.negative.buttons .download-button:hover, +.ui.basic.negative.download-button:hover { + background: transparent !important; + box-shadow: 0px 0px 0px 1px #da0617 inset !important; + color: #da0617 !important; +} +.ui.basic.negative.buttons .button:focus, +.ui.basic.negative.button:focus, +.play-button.basic.negative.buttons .button:focus, +.play-button.basic.negative.button:focus, +.ui.basic.negative.buttons .play-button:focus, +.ui.basic.negative.play-button:focus, +.download-button.basic.negative.buttons .button:focus, +.download-button.basic.negative.button:focus, +.ui.basic.negative.buttons .download-button:focus, +.ui.basic.negative.download-button:focus { + background: transparent !important; + box-shadow: 0px 0px 0px 1px #d00011 inset !important; + color: #da0617 !important; +} +.ui.basic.negative.buttons .active.button, +.ui.basic.negative.active.button, +.play-button.basic.negative.buttons .active.button, +.play-button.basic.negative.active.button, +.ui.basic.negative.buttons .active.play-button, +.ui.basic.negative.active.play-button, +.download-button.basic.negative.buttons .active.button, +.download-button.basic.negative.active.button, +.ui.basic.negative.buttons .active.download-button, +.ui.basic.negative.active.download-button { + background: transparent !important; + box-shadow: 0px 0px 0px 1px #df0113 inset !important; + color: #b80e1c !important; +} +.ui.basic.negative.buttons .button:active, +.ui.basic.negative.button:active, +.play-button.basic.negative.buttons .button:active, +.play-button.basic.negative.button:active, +.ui.basic.negative.buttons .play-button:active, +.ui.basic.negative.play-button:active, +.download-button.basic.negative.buttons .button:active, +.download-button.basic.negative.button:active, +.ui.basic.negative.buttons .download-button:active, +.ui.basic.negative.download-button:active { + box-shadow: 0px 0px 0px 1px #b80e1c inset !important; + color: #b80e1c !important; +} +.ui.buttons:not(.vertical) > .basic.primary.button:not(:first-child), +.play-button.buttons:not(.vertical) > .basic.primary.button:not(:first-child), +.ui.buttons:not(.vertical) > .basic.primary.play-button:not(:first-child), +.download-button.buttons:not(.vertical) > .basic.primary.button:not(:first-child), +.ui.buttons:not(.vertical) > .basic.primary.download-button:not(:first-child) { + margin-left: -1px; +} +/******************************* + Groups +*******************************/ +.ui.buttons, +.play-button.buttons, +.download-button.buttons { + display: inline-flex; + flex-direction: row; + font-size: 0em; + vertical-align: baseline; + margin: 0em 0.25em 0em 0em; +} +.ui.buttons:not(.basic):not(.inverted), +.play-button.buttons:not(.basic):not(.inverted), +.download-button.buttons:not(.basic):not(.inverted) { + box-shadow: none; +} +/* Clearfix */ +.ui.buttons:after, +.play-button.buttons:after, +.download-button.buttons:after { + content: "."; + display: block; + height: 0; + clear: both; + visibility: hidden; +} +/* Standard Group */ +.ui.buttons .button, +.play-button.buttons .button, +.ui.buttons .play-button, +.download-button.buttons .button, +.ui.buttons .download-button { + flex: 1 0 auto; + margin: 0em; + border-radius: 0em; + margin: 0px 0px 0px 0px; +} +.ui.buttons > .ui.button:not(.basic):not(.inverted), +.ui.buttons:not(.basic):not(.inverted) > .button, +.play-button.buttons > .play-button.button:not(.basic):not(.inverted), +.play-button.buttons:not(.basic):not(.inverted) > .button, +.ui.buttons > .ui.play-button:not(.basic):not(.inverted), +.ui.buttons:not(.basic):not(.inverted) > .play-button, +.download-button.buttons > .download-button.button:not(.basic):not(.inverted), +.download-button.buttons:not(.basic):not(.inverted) > .button, +.ui.buttons > .ui.download-button:not(.basic):not(.inverted), +.ui.buttons:not(.basic):not(.inverted) > .download-button { + box-shadow: 0px 0px 0px 1px transparent inset, 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset; +} +.ui.buttons .button:first-child, +.play-button.buttons .button:first-child, +.ui.buttons .play-button:first-child, +.download-button.buttons .button:first-child, +.ui.buttons .download-button:first-child { + border-left: none; + margin-left: 0em; + border-top-left-radius: 0.28571429rem; + border-bottom-left-radius: 0.28571429rem; +} +.ui.buttons .button:last-child, +.play-button.buttons .button:last-child, +.ui.buttons .play-button:last-child, +.download-button.buttons .button:last-child, +.ui.buttons .download-button:last-child { + border-top-right-radius: 0.28571429rem; + border-bottom-right-radius: 0.28571429rem; +} +/* Vertical Style */ +.ui.vertical.buttons, +.play-button.vertical.buttons, +.download-button.vertical.buttons { + display: inline-flex; + flex-direction: column; +} +.ui.vertical.buttons .button, +.play-button.vertical.buttons .button, +.ui.vertical.buttons .play-button, +.download-button.vertical.buttons .button, +.ui.vertical.buttons .download-button { + display: block; + float: none; + width: 100%; + margin: 0px 0px 0px 0px; + box-shadow: none; + border-radius: 0em; +} +.ui.vertical.buttons .button:first-child, +.play-button.vertical.buttons .button:first-child, +.ui.vertical.buttons .play-button:first-child, +.download-button.vertical.buttons .button:first-child, +.ui.vertical.buttons .download-button:first-child { + border-top-left-radius: 0.28571429rem; + border-top-right-radius: 0.28571429rem; +} +.ui.vertical.buttons .button:last-child, +.play-button.vertical.buttons .button:last-child, +.ui.vertical.buttons .play-button:last-child, +.download-button.vertical.buttons .button:last-child, +.ui.vertical.buttons .download-button:last-child { + margin-bottom: 0px; + border-bottom-left-radius: 0.28571429rem; + border-bottom-right-radius: 0.28571429rem; +} +.ui.vertical.buttons .button:only-child, +.play-button.vertical.buttons .button:only-child, +.ui.vertical.buttons .play-button:only-child, +.download-button.vertical.buttons .button:only-child, +.ui.vertical.buttons .download-button:only-child { + border-radius: 0.28571429rem; +} +/******************************* + Site Overrides +*******************************/ +/******************************* + Site Overrides +*******************************/ +/*! + * # Semantic UI - Container + * http://github.com/semantic-org/semantic-ui/ + * + * + * Released under the MIT license + * http://opensource.org/licenses/MIT + * + */ +/******************************* + Theme +*******************************/ +/* + +████████╗██╗ ██╗███████╗███╗ ███╗███████╗███████╗ +╚══██╔══╝██║ ██║██╔════╝████╗ ████║██╔════╝██╔════╝ + ██║ ███████║█████╗ ██╔████╔██║█████╗ ███████╗ + ██║ ██╔══██║██╔══╝ ██║╚██╔╝██║██╔══╝ ╚════██║ + ██║ ██║ ██║███████╗██║ ╚═╝ ██║███████╗███████║ + ╚═╝ ╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝╚══════╝╚══════╝ + +*/ +/******************************* + Theme Selection +*******************************/ +/* To override a theme for an individual element + specify theme name below +*/ +/* Global */ +/* Elements */ +/* Collections */ +/* Modules */ +/* Views */ +/******************************* + Folders +*******************************/ +/* Path to theme packages */ +/* Path to site override folder */ +/******************************* + Import Theme +*******************************/ +/******************************* + Import Directives +*******************************/ +/*------------------ + Theme +-------------------*/ +/*-------------------- + Site Variables +---------------------*/ +/* Default site.variables */ +/******************************* + Site Settings +*******************************/ +/*------------------- + Fonts +--------------------*/ +/*------------------- + Base Sizes +--------------------*/ +/* This is the single variable that controls them all */ +/* The size of page text */ +/*------------------- + Border Radius +--------------------*/ +/* See Power-user section below + for explanation of @px variables +*/ +/*------------------- + Brand Colors +--------------------*/ +/*-------------- + Page Heading +---------------*/ +/*-------------- + Form Input +---------------*/ +/* This adjusts the default form input across all elements */ +/* Input Text Color */ +/* Line Height Default For Inputs in Browser (Descendors are 17px at 14px base em) */ +/*------------------- + Focused Input +--------------------*/ +/* Used on inputs, textarea etc */ +/* Used on dropdowns, other larger blocks */ +/*------------------- + Sizes +--------------------*/ +/* + Sizes are all expressed in terms of 14px/em (default em) + This ensures these "ratios" remain constant despite changes in EM +*/ +/*------------------- + Page +--------------------*/ +/*------------------- + Paragraph +--------------------*/ +/*------------------- + Links +--------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ +/*------------------- + Highlighted Text +--------------------*/ +/*------------------- + Loader +--------------------*/ +/*------------------- + Grid +--------------------*/ +/*------------------- + Transitions +--------------------*/ +/*------------------- + Breakpoints +--------------------*/ +/*------------------- + Site Colors +--------------------*/ +/*--- Colors ---*/ +/*--- Light Colors ---*/ +/*--- Neutrals ---*/ +/*--- Colored Backgrounds ---*/ +/*--- Colored Headers ---*/ +/*--- Colored Text ---*/ +/*--- Colored Border ---*/ +/*------------------- + Alpha Colors +--------------------*/ +/*------------------- + Accents +--------------------*/ +/* Differentiating Neutrals */ +/* Differentiating Layers */ +/******************************* + Power-User +*******************************/ +/*------------------- + Emotive Colors +--------------------*/ +/* Positive */ +/* Negative */ +/* Info */ +/* Warning */ +/*------------------- + Paths +--------------------*/ +/* For source only. Modified in gulp for dist */ +/*------------------- + Em Sizes +--------------------*/ +/* + This rounds @size values to the closest pixel then expresses that value in (r)em. + This ensures all size values round to exact pixels +*/ +/* em */ +/* rem */ +/*------------------- + Icons +--------------------*/ +/* Maximum Glyph Width of Icon */ +/*------------------- + Neutral Text +--------------------*/ +/*------------------- + Brand Colors +--------------------*/ +/*------------------- + Borders +--------------------*/ +/*------------------- + Derived Values +--------------------*/ +/* Loaders Position Offset */ +/* Rendered Scrollbar Width */ +/* Maximum Single Character Glyph Width, aka Capital "W" */ +/* Used to match floats with text */ +/* Header Spacing */ +/* Minimum Mobile Width */ +/* Positive / Negative Dupes */ +/* Responsive */ +/*------------------- + Exact Pixel Values +--------------------*/ +/* + These are used to specify exact pixel values in em + for things like borders that remain constantly + sized as emSize adjusts + + Since there are many more sizes than names for sizes, + these are named by their original pixel values. + +*/ +/* Columns */ +/******************************* + States +*******************************/ +/*------------------- + Disabled +--------------------*/ +/*------------------- + Hover +--------------------*/ +/*--- Shadows ---*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Focus +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Down (:active) +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Active +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/* Packaged site.variables */ +/******************************* + User Global Variables +*******************************/ +/*------------------- + Fonts +--------------------*/ +/*------------------- + Breakpoints +--------------------*/ +/* +@mobileBreakpoint : unit( (63 * @emSize), px); +@tabletBreakpoint : unit( (79 * @emSize), px); +@computerBreakpoint : unit( (91 * @emSize), px); +@largeMonitorBreakpoint : unit( (99 * @emSize), px); +@widescreenMonitorBreakpoint : unit( (119 * @emSize), px); +*/ +/******************************* + PXT Variables +*******************************/ +/*------------------- + Menu +--------------------*/ +/*------------------- + Layout +--------------------*/ +/*------------------- + Background +--------------------*/ +/*------------------- + Full screen +--------------------*/ +/*------------------- + Side Docs +--------------------*/ +/*------------------- + Editor +--------------------*/ +/* Component's site.variables */ +/******************************* + User Global Variables +*******************************/ +/*------------------- + Fonts +--------------------*/ +/*------------------- + Breakpoints +--------------------*/ +/* +@mobileBreakpoint : unit( (63 * @emSize), px); +@tabletBreakpoint : unit( (79 * @emSize), px); +@computerBreakpoint : unit( (91 * @emSize), px); +@largeMonitorBreakpoint : unit( (99 * @emSize), px); +@widescreenMonitorBreakpoint : unit( (119 * @emSize), px); +*/ +/******************************* + PXT Variables +*******************************/ +/*------------------- + Menu +--------------------*/ +/*------------------- + Layout +--------------------*/ +/*------------------- + Background +--------------------*/ +/*------------------- + Full screen +--------------------*/ +/*------------------- + Side Docs +--------------------*/ +/*------------------- + Editor +--------------------*/ +/* Site theme site.variables */ +/******************************* + User Global Variables +*******************************/ +/*------------------- + Site Colors +--------------------*/ +/******************************* + PXT Overrides +*******************************/ +/*------------------- + Component Variables +---------------------*/ +/* Default */ +/******************************* + Container +*******************************/ +/*------------------- + Element +--------------------*/ +/* Minimum Gutter is used to determine the maximum container width for a given device */ +/* Devices */ +/* Coupling (Add Negative Margin to container size) */ +/*------------------- + Types +--------------------*/ +/* Text */ +/* Packaged Theme */ +/******************************* + User Variable Overrides +*******************************/ +/* Site Theme */ +/******************************* + User Variable Overrides +*******************************/ +/******************************* + Mix-ins +*******************************/ +/*------------------ + Fonts +-------------------*/ +/*------------------ + Overrides +-------------------*/ +/* End Config */ +/******************************* + Container +*******************************/ +/* All Sizes */ +.ui.container, +.play-button.container, +.download-button.container { + display: block; + max-width: 100% !important; +} +/* Mobile */ +@media only screen and (max-width: 767px) { + .ui.container, + .play-button.container, + .download-button.container { + width: auto !important; + margin-left: 1em !important; + margin-right: 1em !important; + } + .ui.grid.container, + .play-button.grid.container, + .download-button.grid.container { + width: auto !important; + } + .ui.relaxed.grid.container, + .play-button.relaxed.grid.container, + .download-button.relaxed.grid.container { + width: auto !important; + } + .ui.very.relaxed.grid.container, + .play-button.very.relaxed.grid.container, + .download-button.very.relaxed.grid.container { + width: auto !important; + } +} +/* Tablet */ +@media only screen and (min-width: 768px) and (max-width: 991px) { + .ui.container, + .play-button.container, + .download-button.container { + width: 723px; + margin-left: auto !important; + margin-right: auto !important; + } + .ui.grid.container, + .play-button.grid.container, + .download-button.grid.container { + width: calc( 723px + 2rem ) !important; + } + .ui.relaxed.grid.container, + .play-button.relaxed.grid.container, + .download-button.relaxed.grid.container { + width: calc( 723px + 3rem ) !important; + } + .ui.very.relaxed.grid.container, + .play-button.very.relaxed.grid.container, + .download-button.very.relaxed.grid.container { + width: calc( 723px + 5rem ) !important; + } +} +/* Small Monitor */ +@media only screen and (min-width: 992px) and (max-width: 1199px) { + .ui.container, + .play-button.container, + .download-button.container { + width: 933px; + margin-left: auto !important; + margin-right: auto !important; + } + .ui.grid.container, + .play-button.grid.container, + .download-button.grid.container { + width: calc( 933px + 2rem ) !important; + } + .ui.relaxed.grid.container, + .play-button.relaxed.grid.container, + .download-button.relaxed.grid.container { + width: calc( 933px + 3rem ) !important; + } + .ui.very.relaxed.grid.container, + .play-button.very.relaxed.grid.container, + .download-button.very.relaxed.grid.container { + width: calc( 933px + 5rem ) !important; + } +} +/* Large Monitor */ +@media only screen and (min-width: 1200px) { + .ui.container, + .play-button.container, + .download-button.container { + width: 1127px; + margin-left: auto !important; + margin-right: auto !important; + } + .ui.grid.container, + .play-button.grid.container, + .download-button.grid.container { + width: calc( 1127px + 2rem ) !important; + } + .ui.relaxed.grid.container, + .play-button.relaxed.grid.container, + .download-button.relaxed.grid.container { + width: calc( 1127px + 3rem ) !important; + } + .ui.very.relaxed.grid.container, + .play-button.very.relaxed.grid.container, + .download-button.very.relaxed.grid.container { + width: calc( 1127px + 5rem ) !important; + } +} +/******************************* + Types +*******************************/ +/* Text Container */ +.ui.text.container, +.play-button.text.container, +.download-button.text.container { + font-family: 'Roboto Mono', 'Helvetica Neue', Arial, Helvetica, sans-serif; + max-width: 700px !important; + line-height: 1.5; +} +.ui.text.container, +.play-button.text.container, +.download-button.text.container { + font-size: 1.14285714rem; +} +/* Fluid */ +.ui.fluid.container, +.play-button.fluid.container, +.download-button.fluid.container { + width: 100%; +} +/******************************* + Variations +*******************************/ +.ui[class*="left aligned"].container, +.play-button[class*="left aligned"].container, +.download-button[class*="left aligned"].container { + text-align: left; +} +.ui[class*="center aligned"].container, +.play-button[class*="center aligned"].container, +.download-button[class*="center aligned"].container { + text-align: center; +} +.ui[class*="right aligned"].container, +.play-button[class*="right aligned"].container, +.download-button[class*="right aligned"].container { + text-align: right; +} +.ui.justified.container, +.play-button.justified.container, +.download-button.justified.container { + text-align: justify; + hyphens: auto; +} +/******************************* + Site Overrides +*******************************/ +/******************************* + Site Overrides +*******************************/ +/*! + * # Semantic UI - Divider + * http://github.com/semantic-org/semantic-ui/ + * + * + * Released under the MIT license + * http://opensource.org/licenses/MIT + * + */ +/******************************* + Theme +*******************************/ +/* + +████████╗██╗ ██╗███████╗███╗ ███╗███████╗███████╗ +╚══██╔══╝██║ ██║██╔════╝████╗ ████║██╔════╝██╔════╝ + ██║ ███████║█████╗ ██╔████╔██║█████╗ ███████╗ + ██║ ██╔══██║██╔══╝ ██║╚██╔╝██║██╔══╝ ╚════██║ + ██║ ██║ ██║███████╗██║ ╚═╝ ██║███████╗███████║ + ╚═╝ ╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝╚══════╝╚══════╝ + +*/ +/******************************* + Theme Selection +*******************************/ +/* To override a theme for an individual element + specify theme name below +*/ +/* Global */ +/* Elements */ +/* Collections */ +/* Modules */ +/* Views */ +/******************************* + Folders +*******************************/ +/* Path to theme packages */ +/* Path to site override folder */ +/******************************* + Import Theme +*******************************/ +/******************************* + Import Directives +*******************************/ +/*------------------ + Theme +-------------------*/ +/*-------------------- + Site Variables +---------------------*/ +/* Default site.variables */ +/******************************* + Site Settings +*******************************/ +/*------------------- + Fonts +--------------------*/ +/*------------------- + Base Sizes +--------------------*/ +/* This is the single variable that controls them all */ +/* The size of page text */ +/*------------------- + Border Radius +--------------------*/ +/* See Power-user section below + for explanation of @px variables +*/ +/*------------------- + Brand Colors +--------------------*/ +/*-------------- + Page Heading +---------------*/ +/*-------------- + Form Input +---------------*/ +/* This adjusts the default form input across all elements */ +/* Input Text Color */ +/* Line Height Default For Inputs in Browser (Descendors are 17px at 14px base em) */ +/*------------------- + Focused Input +--------------------*/ +/* Used on inputs, textarea etc */ +/* Used on dropdowns, other larger blocks */ +/*------------------- + Sizes +--------------------*/ +/* + Sizes are all expressed in terms of 14px/em (default em) + This ensures these "ratios" remain constant despite changes in EM +*/ +/*------------------- + Page +--------------------*/ +/*------------------- + Paragraph +--------------------*/ +/*------------------- + Links +--------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ +/*------------------- + Highlighted Text +--------------------*/ +/*------------------- + Loader +--------------------*/ +/*------------------- + Grid +--------------------*/ +/*------------------- + Transitions +--------------------*/ +/*------------------- + Breakpoints +--------------------*/ +/*------------------- + Site Colors +--------------------*/ +/*--- Colors ---*/ +/*--- Light Colors ---*/ +/*--- Neutrals ---*/ +/*--- Colored Backgrounds ---*/ +/*--- Colored Headers ---*/ +/*--- Colored Text ---*/ +/*--- Colored Border ---*/ +/*------------------- + Alpha Colors +--------------------*/ +/*------------------- + Accents +--------------------*/ +/* Differentiating Neutrals */ +/* Differentiating Layers */ +/******************************* + Power-User +*******************************/ +/*------------------- + Emotive Colors +--------------------*/ +/* Positive */ +/* Negative */ +/* Info */ +/* Warning */ +/*------------------- + Paths +--------------------*/ +/* For source only. Modified in gulp for dist */ +/*------------------- + Em Sizes +--------------------*/ +/* + This rounds @size values to the closest pixel then expresses that value in (r)em. + This ensures all size values round to exact pixels +*/ +/* em */ +/* rem */ +/*------------------- + Icons +--------------------*/ +/* Maximum Glyph Width of Icon */ +/*------------------- + Neutral Text +--------------------*/ +/*------------------- + Brand Colors +--------------------*/ +/*------------------- + Borders +--------------------*/ +/*------------------- + Derived Values +--------------------*/ +/* Loaders Position Offset */ +/* Rendered Scrollbar Width */ +/* Maximum Single Character Glyph Width, aka Capital "W" */ +/* Used to match floats with text */ +/* Header Spacing */ +/* Minimum Mobile Width */ +/* Positive / Negative Dupes */ +/* Responsive */ +/*------------------- + Exact Pixel Values +--------------------*/ +/* + These are used to specify exact pixel values in em + for things like borders that remain constantly + sized as emSize adjusts + + Since there are many more sizes than names for sizes, + these are named by their original pixel values. + +*/ +/* Columns */ +/******************************* + States +*******************************/ +/*------------------- + Disabled +--------------------*/ +/*------------------- + Hover +--------------------*/ +/*--- Shadows ---*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Focus +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Down (:active) +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Active +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/* Packaged site.variables */ +/******************************* + User Global Variables +*******************************/ +/*------------------- + Fonts +--------------------*/ +/*------------------- + Breakpoints +--------------------*/ +/* +@mobileBreakpoint : unit( (63 * @emSize), px); +@tabletBreakpoint : unit( (79 * @emSize), px); +@computerBreakpoint : unit( (91 * @emSize), px); +@largeMonitorBreakpoint : unit( (99 * @emSize), px); +@widescreenMonitorBreakpoint : unit( (119 * @emSize), px); +*/ +/******************************* + PXT Variables +*******************************/ +/*------------------- + Menu +--------------------*/ +/*------------------- + Layout +--------------------*/ +/*------------------- + Background +--------------------*/ +/*------------------- + Full screen +--------------------*/ +/*------------------- + Side Docs +--------------------*/ +/*------------------- + Editor +--------------------*/ +/* Component's site.variables */ +/******************************* + User Global Variables +*******************************/ +/*------------------- + Fonts +--------------------*/ +/*------------------- + Breakpoints +--------------------*/ +/* +@mobileBreakpoint : unit( (63 * @emSize), px); +@tabletBreakpoint : unit( (79 * @emSize), px); +@computerBreakpoint : unit( (91 * @emSize), px); +@largeMonitorBreakpoint : unit( (99 * @emSize), px); +@widescreenMonitorBreakpoint : unit( (119 * @emSize), px); +*/ +/******************************* + PXT Variables +*******************************/ +/*------------------- + Menu +--------------------*/ +/*------------------- + Layout +--------------------*/ +/*------------------- + Background +--------------------*/ +/*------------------- + Full screen +--------------------*/ +/*------------------- + Side Docs +--------------------*/ +/*------------------- + Editor +--------------------*/ +/* Site theme site.variables */ +/******************************* + User Global Variables +*******************************/ +/*------------------- + Site Colors +--------------------*/ +/******************************* + PXT Overrides +*******************************/ +/*------------------- + Component Variables +---------------------*/ +/* Default */ +/******************************* + Divider +*******************************/ +/*------------------- + Element +--------------------*/ +/* Text */ +/*------------------- + Coupling +--------------------*/ +/* Icon */ +/******************************* + Variations +*******************************/ +/* Horizontal / Vertical */ +/* Inverted */ +/* Section */ +/* Sizes */ +/* Packaged Theme */ +/******************************* + User Variable Overrides +*******************************/ +/* Site Theme */ +/******************************* + User Variable Overrides +*******************************/ +/******************************* + Mix-ins +*******************************/ +/*------------------ + Fonts +-------------------*/ +/*------------------ + Overrides +-------------------*/ +/* End Config */ +/******************************* + Divider +*******************************/ +.ui.divider, +.play-button.divider, +.download-button.divider { + margin: 1rem 0rem; + line-height: 1; + height: 0em; + font-weight: bold; + text-transform: uppercase; + letter-spacing: 0.05em; + color: rgba(0, 0, 0, 0.85); + user-select: none; + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); +} +/*-------------- + Basic +---------------*/ +.ui.divider:not(.vertical):not(.horizontal), +.play-button.divider:not(.vertical):not(.horizontal), +.download-button.divider:not(.vertical):not(.horizontal) { + border-top: 1px solid rgba(34, 36, 38, 0.15); + border-bottom: 1px solid rgba(255, 255, 255, 0.1); +} +/*-------------- + Coupling +---------------*/ +/* Allow divider between each column row */ +.ui.grid > .column + .divider, +.ui.grid > .row > .column + .divider, +.play-button.grid > .column + .divider, +.play-button.grid > .row > .column + .divider, +.download-button.grid > .column + .divider, +.download-button.grid > .row > .column + .divider { + left: auto; +} +/*-------------- + Horizontal +---------------*/ +.ui.horizontal.divider, +.play-button.horizontal.divider, +.download-button.horizontal.divider { + display: table; + white-space: nowrap; + height: auto; + margin: ''; + line-height: 1; + text-align: center; +} +.ui.horizontal.divider:before, +.ui.horizontal.divider:after, +.play-button.horizontal.divider:before, +.play-button.horizontal.divider:after, +.download-button.horizontal.divider:before, +.download-button.horizontal.divider:after { + content: ''; + display: table-cell; + position: relative; + top: 50%; + width: 50%; + background-repeat: no-repeat; +} +.ui.horizontal.divider:before, +.play-button.horizontal.divider:before, +.download-button.horizontal.divider:before { + background-position: right 1em top 50%; +} +.ui.horizontal.divider:after, +.play-button.horizontal.divider:after, +.download-button.horizontal.divider:after { + background-position: left 1em top 50%; +} +/*-------------- + Vertical +---------------*/ +.ui.vertical.divider, +.play-button.vertical.divider, +.download-button.vertical.divider { + position: absolute; + z-index: 2; + top: 50%; + left: 50%; + margin: 0rem; + padding: 0em; + width: auto; + height: 50%; + line-height: 0em; + text-align: center; + transform: translateX(-50%); +} +.ui.vertical.divider:before, +.ui.vertical.divider:after, +.play-button.vertical.divider:before, +.play-button.vertical.divider:after, +.download-button.vertical.divider:before, +.download-button.vertical.divider:after { + position: absolute; + left: 50%; + content: ''; + z-index: 3; + border-left: 1px solid rgba(34, 36, 38, 0.15); + border-right: 1px solid rgba(255, 255, 255, 0.1); + width: 0%; + height: calc(100% - 1rem ); +} +.ui.vertical.divider:before, +.play-button.vertical.divider:before, +.download-button.vertical.divider:before { + top: -100%; +} +.ui.vertical.divider:after, +.play-button.vertical.divider:after, +.download-button.vertical.divider:after { + top: auto; + bottom: 0px; +} +/* Inside grid */ +@media only screen and (max-width: 767px) { + .ui.stackable.grid .ui.vertical.divider, + .ui.grid .stackable.row .ui.vertical.divider, + .play-button.stackable.grid .play-button.vertical.divider, + .play-button.grid .stackable.row .play-button.vertical.divider, + .download-button.stackable.grid .download-button.vertical.divider, + .download-button.grid .stackable.row .download-button.vertical.divider { + display: table; + white-space: nowrap; + height: auto; + margin: ''; + overflow: hidden; + line-height: 1; + text-align: center; + position: static; + top: 0; + left: 0; + transform: none; + } + .ui.stackable.grid .ui.vertical.divider:before, + .ui.grid .stackable.row .ui.vertical.divider:before, + .ui.stackable.grid .ui.vertical.divider:after, + .ui.grid .stackable.row .ui.vertical.divider:after, + .play-button.stackable.grid .play-button.vertical.divider:before, + .play-button.grid .stackable.row .play-button.vertical.divider:before, + .play-button.stackable.grid .play-button.vertical.divider:after, + .play-button.grid .stackable.row .play-button.vertical.divider:after, + .download-button.stackable.grid .download-button.vertical.divider:before, + .download-button.grid .stackable.row .download-button.vertical.divider:before, + .download-button.stackable.grid .download-button.vertical.divider:after, + .download-button.grid .stackable.row .download-button.vertical.divider:after { + position: static; + left: 0; + border-left: none; + border-right: none; + content: ''; + display: table-cell; + position: relative; + top: 50%; + width: 50%; + background-repeat: no-repeat; + } + .ui.stackable.grid .ui.vertical.divider:before, + .ui.grid .stackable.row .ui.vertical.divider:before, + .play-button.stackable.grid .play-button.vertical.divider:before, + .play-button.grid .stackable.row .play-button.vertical.divider:before, + .download-button.stackable.grid .download-button.vertical.divider:before, + .download-button.grid .stackable.row .download-button.vertical.divider:before { + background-position: right 1em top 50%; + } + .ui.stackable.grid .ui.vertical.divider:after, + .ui.grid .stackable.row .ui.vertical.divider:after, + .play-button.stackable.grid .play-button.vertical.divider:after, + .play-button.grid .stackable.row .play-button.vertical.divider:after, + .download-button.stackable.grid .download-button.vertical.divider:after, + .download-button.grid .stackable.row .download-button.vertical.divider:after { + background-position: left 1em top 50%; + } +} +/*-------------- + Icon +---------------*/ +.ui.divider > .icon, +.play-button.divider > .icon, +.download-button.divider > .icon { + margin: 0rem; + font-size: 1rem; + height: 1em; + vertical-align: middle; +} +/******************************* + Variations +*******************************/ +/*-------------- + Hidden +---------------*/ +.ui.hidden.divider, +.play-button.hidden.divider, +.download-button.hidden.divider { + border-color: transparent !important; +} +.ui.hidden.divider:before, +.ui.hidden.divider:after, +.play-button.hidden.divider:before, +.play-button.hidden.divider:after, +.download-button.hidden.divider:before, +.download-button.hidden.divider:after { + display: none; +} +/*-------------- + Inverted +---------------*/ +.ui.divider.inverted, +.ui.vertical.inverted.divider, +.ui.horizontal.inverted.divider, +.play-button.divider.inverted, +.play-button.vertical.inverted.divider, +.play-button.horizontal.inverted.divider, +.download-button.divider.inverted, +.download-button.vertical.inverted.divider, +.download-button.horizontal.inverted.divider { + color: #FFFFFF; +} +.ui.divider.inverted, +.ui.divider.inverted:after, +.ui.divider.inverted:before, +.play-button.divider.inverted, +.play-button.divider.inverted:after, +.play-button.divider.inverted:before, +.download-button.divider.inverted, +.download-button.divider.inverted:after, +.download-button.divider.inverted:before { + border-top-color: rgba(34, 36, 38, 0.15) !important; + border-left-color: rgba(34, 36, 38, 0.15) !important; + border-bottom-color: rgba(255, 255, 255, 0.15) !important; + border-right-color: rgba(255, 255, 255, 0.15) !important; +} +/*-------------- + Fitted +---------------*/ +.ui.fitted.divider, +.play-button.fitted.divider, +.download-button.fitted.divider { + margin: 0em; +} +/*-------------- + Clearing +---------------*/ +.ui.clearing.divider, +.play-button.clearing.divider, +.download-button.clearing.divider { + clear: both; +} +/*-------------- + Section +---------------*/ +.ui.section.divider, +.play-button.section.divider, +.download-button.section.divider { + margin-top: 2rem; + margin-bottom: 2rem; +} +/*-------------- + Sizes +---------------*/ +.ui.divider, +.play-button.divider, +.download-button.divider { + font-size: 1rem; +} +/******************************* + Site Overrides +*******************************/ +/******************************* + Site Overrides +*******************************/ +/*! + * # Semantic UI - Flag + * http://github.com/semantic-org/semantic-ui/ + * + * + * Released under the MIT license + * http://opensource.org/licenses/MIT + * + */ +/******************************* + Theme +*******************************/ +/* + +████████╗██╗ ██╗███████╗███╗ ███╗███████╗███████╗ +╚══██╔══╝██║ ██║██╔════╝████╗ ████║██╔════╝██╔════╝ + ██║ ███████║█████╗ ██╔████╔██║█████╗ ███████╗ + ██║ ██╔══██║██╔══╝ ██║╚██╔╝██║██╔══╝ ╚════██║ + ██║ ██║ ██║███████╗██║ ╚═╝ ██║███████╗███████║ + ╚═╝ ╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝╚══════╝╚══════╝ + +*/ +/******************************* + Theme Selection +*******************************/ +/* To override a theme for an individual element + specify theme name below +*/ +/* Global */ +/* Elements */ +/* Collections */ +/* Modules */ +/* Views */ +/******************************* + Folders +*******************************/ +/* Path to theme packages */ +/* Path to site override folder */ +/******************************* + Import Theme +*******************************/ +/******************************* + Import Directives +*******************************/ +/*------------------ + Theme +-------------------*/ +/*-------------------- + Site Variables +---------------------*/ +/* Default site.variables */ +/******************************* + Site Settings +*******************************/ +/*------------------- + Fonts +--------------------*/ +/*------------------- + Base Sizes +--------------------*/ +/* This is the single variable that controls them all */ +/* The size of page text */ +/*------------------- + Border Radius +--------------------*/ +/* See Power-user section below + for explanation of @px variables +*/ +/*------------------- + Brand Colors +--------------------*/ +/*-------------- + Page Heading +---------------*/ +/*-------------- + Form Input +---------------*/ +/* This adjusts the default form input across all elements */ +/* Input Text Color */ +/* Line Height Default For Inputs in Browser (Descendors are 17px at 14px base em) */ +/*------------------- + Focused Input +--------------------*/ +/* Used on inputs, textarea etc */ +/* Used on dropdowns, other larger blocks */ +/*------------------- + Sizes +--------------------*/ +/* + Sizes are all expressed in terms of 14px/em (default em) + This ensures these "ratios" remain constant despite changes in EM +*/ +/*------------------- + Page +--------------------*/ +/*------------------- + Paragraph +--------------------*/ +/*------------------- + Links +--------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ +/*------------------- + Highlighted Text +--------------------*/ +/*------------------- + Loader +--------------------*/ +/*------------------- + Grid +--------------------*/ +/*------------------- + Transitions +--------------------*/ +/*------------------- + Breakpoints +--------------------*/ +/*------------------- + Site Colors +--------------------*/ +/*--- Colors ---*/ +/*--- Light Colors ---*/ +/*--- Neutrals ---*/ +/*--- Colored Backgrounds ---*/ +/*--- Colored Headers ---*/ +/*--- Colored Text ---*/ +/*--- Colored Border ---*/ +/*------------------- + Alpha Colors +--------------------*/ +/*------------------- + Accents +--------------------*/ +/* Differentiating Neutrals */ +/* Differentiating Layers */ +/******************************* + Power-User +*******************************/ +/*------------------- + Emotive Colors +--------------------*/ +/* Positive */ +/* Negative */ +/* Info */ +/* Warning */ +/*------------------- + Paths +--------------------*/ +/* For source only. Modified in gulp for dist */ +/*------------------- + Em Sizes +--------------------*/ +/* + This rounds @size values to the closest pixel then expresses that value in (r)em. + This ensures all size values round to exact pixels +*/ +/* em */ +/* rem */ +/*------------------- + Icons +--------------------*/ +/* Maximum Glyph Width of Icon */ +/*------------------- + Neutral Text +--------------------*/ +/*------------------- + Brand Colors +--------------------*/ +/*------------------- + Borders +--------------------*/ +/*------------------- + Derived Values +--------------------*/ +/* Loaders Position Offset */ +/* Rendered Scrollbar Width */ +/* Maximum Single Character Glyph Width, aka Capital "W" */ +/* Used to match floats with text */ +/* Header Spacing */ +/* Minimum Mobile Width */ +/* Positive / Negative Dupes */ +/* Responsive */ +/*------------------- + Exact Pixel Values +--------------------*/ +/* + These are used to specify exact pixel values in em + for things like borders that remain constantly + sized as emSize adjusts + + Since there are many more sizes than names for sizes, + these are named by their original pixel values. + +*/ +/* Columns */ +/******************************* + States +*******************************/ +/*------------------- + Disabled +--------------------*/ +/*------------------- + Hover +--------------------*/ +/*--- Shadows ---*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Focus +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Down (:active) +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Active +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/* Packaged site.variables */ +/******************************* + User Global Variables +*******************************/ +/*------------------- + Fonts +--------------------*/ +/*------------------- + Breakpoints +--------------------*/ +/* +@mobileBreakpoint : unit( (63 * @emSize), px); +@tabletBreakpoint : unit( (79 * @emSize), px); +@computerBreakpoint : unit( (91 * @emSize), px); +@largeMonitorBreakpoint : unit( (99 * @emSize), px); +@widescreenMonitorBreakpoint : unit( (119 * @emSize), px); +*/ +/******************************* + PXT Variables +*******************************/ +/*------------------- + Menu +--------------------*/ +/*------------------- + Layout +--------------------*/ +/*------------------- + Background +--------------------*/ +/*------------------- + Full screen +--------------------*/ +/*------------------- + Side Docs +--------------------*/ +/*------------------- + Editor +--------------------*/ +/* Component's site.variables */ +/******************************* + User Global Variables +*******************************/ +/*------------------- + Fonts +--------------------*/ +/*------------------- + Breakpoints +--------------------*/ +/* +@mobileBreakpoint : unit( (63 * @emSize), px); +@tabletBreakpoint : unit( (79 * @emSize), px); +@computerBreakpoint : unit( (91 * @emSize), px); +@largeMonitorBreakpoint : unit( (99 * @emSize), px); +@widescreenMonitorBreakpoint : unit( (119 * @emSize), px); +*/ +/******************************* + PXT Variables +*******************************/ +/*------------------- + Menu +--------------------*/ +/*------------------- + Layout +--------------------*/ +/*------------------- + Background +--------------------*/ +/*------------------- + Full screen +--------------------*/ +/*------------------- + Side Docs +--------------------*/ +/*------------------- + Editor +--------------------*/ +/* Site theme site.variables */ +/******************************* + User Global Variables +*******************************/ +/*------------------- + Site Colors +--------------------*/ +/******************************* + PXT Overrides +*******************************/ +/*------------------- + Component Variables +---------------------*/ +/* Default */ +/******************************* + Flag +*******************************/ +/*------------------- + Element +--------------------*/ +/* Packaged Theme */ +/*------------------- + Flag Variables +--------------------*/ +/* Site Theme */ +/*------------------- + Flag Variables +--------------------*/ +/******************************* + Mix-ins +*******************************/ +/*------------------ + Fonts +-------------------*/ +/*------------------ + Overrides +-------------------*/ +/* End Config */ +/******************************* + Flag +*******************************/ +i.flag:not(.icon) { + display: inline-block; + width: 16px; + height: 11px; + line-height: 11px; + vertical-align: baseline; + margin: 0em 0.5em 0em 0em; + text-decoration: inherit; + speak: none; + font-smoothing: antialiased; + backface-visibility: hidden; +} +/* Sprite */ +i.flag:not(.icon):before { + display: inline-block; + content: ''; + background: url("../../themes/default/assets/images/flags.png") no-repeat -108px -1976px; + width: 16px; + height: 11px; +} +/******************************* + Site Overrides +*******************************/ +/******************************* + Site Overrides +*******************************/ +/*! + * # Semantic UI - Header + * http://github.com/semantic-org/semantic-ui/ + * + * + * Released under the MIT license + * http://opensource.org/licenses/MIT + * + */ +/******************************* + Theme +*******************************/ +/* + +████████╗██╗ ██╗███████╗███╗ ███╗███████╗███████╗ +╚══██╔══╝██║ ██║██╔════╝████╗ ████║██╔════╝██╔════╝ + ██║ ███████║█████╗ ██╔████╔██║█████╗ ███████╗ + ██║ ██╔══██║██╔══╝ ██║╚██╔╝██║██╔══╝ ╚════██║ + ██║ ██║ ██║███████╗██║ ╚═╝ ██║███████╗███████║ + ╚═╝ ╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝╚══════╝╚══════╝ + +*/ +/******************************* + Theme Selection +*******************************/ +/* To override a theme for an individual element + specify theme name below +*/ +/* Global */ +/* Elements */ +/* Collections */ +/* Modules */ +/* Views */ +/******************************* + Folders +*******************************/ +/* Path to theme packages */ +/* Path to site override folder */ +/******************************* + Import Theme +*******************************/ +/******************************* + Import Directives +*******************************/ +/*------------------ + Theme +-------------------*/ +/*-------------------- + Site Variables +---------------------*/ +/* Default site.variables */ +/******************************* + Site Settings +*******************************/ +/*------------------- + Fonts +--------------------*/ +/*------------------- + Base Sizes +--------------------*/ +/* This is the single variable that controls them all */ +/* The size of page text */ +/*------------------- + Border Radius +--------------------*/ +/* See Power-user section below + for explanation of @px variables +*/ +/*------------------- + Brand Colors +--------------------*/ +/*-------------- + Page Heading +---------------*/ +/*-------------- + Form Input +---------------*/ +/* This adjusts the default form input across all elements */ +/* Input Text Color */ +/* Line Height Default For Inputs in Browser (Descendors are 17px at 14px base em) */ +/*------------------- + Focused Input +--------------------*/ +/* Used on inputs, textarea etc */ +/* Used on dropdowns, other larger blocks */ +/*------------------- + Sizes +--------------------*/ +/* + Sizes are all expressed in terms of 14px/em (default em) + This ensures these "ratios" remain constant despite changes in EM +*/ +/*------------------- + Page +--------------------*/ +/*------------------- + Paragraph +--------------------*/ +/*------------------- + Links +--------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ +/*------------------- + Highlighted Text +--------------------*/ +/*------------------- + Loader +--------------------*/ +/*------------------- + Grid +--------------------*/ +/*------------------- + Transitions +--------------------*/ +/*------------------- + Breakpoints +--------------------*/ +/*------------------- + Site Colors +--------------------*/ +/*--- Colors ---*/ +/*--- Light Colors ---*/ +/*--- Neutrals ---*/ +/*--- Colored Backgrounds ---*/ +/*--- Colored Headers ---*/ +/*--- Colored Text ---*/ +/*--- Colored Border ---*/ +/*------------------- + Alpha Colors +--------------------*/ +/*------------------- + Accents +--------------------*/ +/* Differentiating Neutrals */ +/* Differentiating Layers */ +/******************************* + Power-User +*******************************/ +/*------------------- + Emotive Colors +--------------------*/ +/* Positive */ +/* Negative */ +/* Info */ +/* Warning */ +/*------------------- + Paths +--------------------*/ +/* For source only. Modified in gulp for dist */ +/*------------------- + Em Sizes +--------------------*/ +/* + This rounds @size values to the closest pixel then expresses that value in (r)em. + This ensures all size values round to exact pixels +*/ +/* em */ +/* rem */ +/*------------------- + Icons +--------------------*/ +/* Maximum Glyph Width of Icon */ +/*------------------- + Neutral Text +--------------------*/ +/*------------------- + Brand Colors +--------------------*/ +/*------------------- + Borders +--------------------*/ +/*------------------- + Derived Values +--------------------*/ +/* Loaders Position Offset */ +/* Rendered Scrollbar Width */ +/* Maximum Single Character Glyph Width, aka Capital "W" */ +/* Used to match floats with text */ +/* Header Spacing */ +/* Minimum Mobile Width */ +/* Positive / Negative Dupes */ +/* Responsive */ +/*------------------- + Exact Pixel Values +--------------------*/ +/* + These are used to specify exact pixel values in em + for things like borders that remain constantly + sized as emSize adjusts + + Since there are many more sizes than names for sizes, + these are named by their original pixel values. + +*/ +/* Columns */ +/******************************* + States +*******************************/ +/*------------------- + Disabled +--------------------*/ +/*------------------- + Hover +--------------------*/ +/*--- Shadows ---*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Focus +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Down (:active) +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Active +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/* Packaged site.variables */ +/******************************* + User Global Variables +*******************************/ +/*------------------- + Fonts +--------------------*/ +/*------------------- + Breakpoints +--------------------*/ +/* +@mobileBreakpoint : unit( (63 * @emSize), px); +@tabletBreakpoint : unit( (79 * @emSize), px); +@computerBreakpoint : unit( (91 * @emSize), px); +@largeMonitorBreakpoint : unit( (99 * @emSize), px); +@widescreenMonitorBreakpoint : unit( (119 * @emSize), px); +*/ +/******************************* + PXT Variables +*******************************/ +/*------------------- + Menu +--------------------*/ +/*------------------- + Layout +--------------------*/ +/*------------------- + Background +--------------------*/ +/*------------------- + Full screen +--------------------*/ +/*------------------- + Side Docs +--------------------*/ +/*------------------- + Editor +--------------------*/ +/* Component's site.variables */ +/******************************* + User Global Variables +*******************************/ +/*------------------- + Fonts +--------------------*/ +/*------------------- + Breakpoints +--------------------*/ +/* +@mobileBreakpoint : unit( (63 * @emSize), px); +@tabletBreakpoint : unit( (79 * @emSize), px); +@computerBreakpoint : unit( (91 * @emSize), px); +@largeMonitorBreakpoint : unit( (99 * @emSize), px); +@widescreenMonitorBreakpoint : unit( (119 * @emSize), px); +*/ +/******************************* + PXT Variables +*******************************/ +/*------------------- + Menu +--------------------*/ +/*------------------- + Layout +--------------------*/ +/*------------------- + Background +--------------------*/ +/*------------------- + Full screen +--------------------*/ +/*------------------- + Side Docs +--------------------*/ +/*------------------- + Editor +--------------------*/ +/* Site theme site.variables */ +/******************************* + User Global Variables +*******************************/ +/*------------------- + Site Colors +--------------------*/ +/******************************* + PXT Overrides +*******************************/ +/*------------------- + Component Variables +---------------------*/ +/* Default */ +/******************************* + Header +*******************************/ +/*------------------- + Element +--------------------*/ +/* Sub Heading */ +/* Sub Header */ +/* Icon */ +/* Image */ +/* Label */ +/* Content */ +/* Paragraph after Header */ +/*------------------- + Variations +--------------------*/ +/* Sizing */ +/* Sub Header */ +/* Icon Header */ +/* No Line Height Offset */ +/* Divided */ +/* Block */ +/* Attached */ +/* Inverted */ +/* Floated */ +/* Packaged Theme */ +/******************************* + User Variable Overrides +*******************************/ +/* Site Theme */ +/******************************* + User Variable Overrides +*******************************/ +/******************************* + Mix-ins +*******************************/ +/*------------------ + Fonts +-------------------*/ +/*------------------ + Overrides +-------------------*/ +/* End Config */ +/******************************* + Header +*******************************/ +/* Standard */ +.ui.header, +.play-button.header, +.download-button.header { + border: none; + margin: calc(2rem - 0.14285714em ) 0em 1rem; + padding: 0em 0em; + font-family: 'Roboto Mono', 'Helvetica Neue', Arial, Helvetica, sans-serif; + font-weight: bold; + line-height: 1.28571429em; + text-transform: none; + color: rgba(0, 0, 0, 0.87); +} +.ui.header:first-child, +.play-button.header:first-child, +.download-button.header:first-child { + margin-top: -0.14285714em; +} +.ui.header:last-child, +.play-button.header:last-child, +.download-button.header:last-child { + margin-bottom: 0em; +} +/*-------------- + Sub Header +---------------*/ +.ui.header .sub.header, +.play-button.header .sub.header, +.download-button.header .sub.header { + display: block; + font-weight: normal; + padding: 0em; + margin: 0em; + font-size: 1rem; + line-height: 1.2em; + color: rgba(0, 0, 0, 0.6); +} +/*-------------- + Icon +---------------*/ +.ui.header > .icon, +.play-button.header > .icon, +.download-button.header > .icon { + display: table-cell; + opacity: 1; + font-size: 1.5em; + padding-top: 0em; + vertical-align: middle; +} +/* With Text Node */ +.ui.header .icon:only-child, +.play-button.header .icon:only-child, +.download-button.header .icon:only-child { + display: inline-block; + padding: 0em; + margin-right: 0.75rem; +} +/*------------------- + Image +--------------------*/ +.ui.header > .image:not(.icon), +.ui.header > img, +.play-button.header > .image:not(.icon), +.play-button.header > img, +.download-button.header > .image:not(.icon), +.download-button.header > img { + display: inline-block; + margin-top: 0.14285714em; + width: 2.5em; + height: auto; + vertical-align: middle; +} +.ui.header > .image:not(.icon):only-child, +.ui.header > img:only-child, +.play-button.header > .image:not(.icon):only-child, +.play-button.header > img:only-child, +.download-button.header > .image:not(.icon):only-child, +.download-button.header > img:only-child { + margin-right: 0.75rem; +} +/*-------------- + Content +---------------*/ +.ui.header .content, +.play-button.header .content, +.download-button.header .content { + display: inline-block; + vertical-align: top; +} +/* After Image */ +.ui.header > img + .content, +.ui.header > .image + .content, +.play-button.header > img + .content, +.play-button.header > .image + .content, +.download-button.header > img + .content, +.download-button.header > .image + .content { + padding-left: 0.75rem; + vertical-align: middle; +} +/* After Icon */ +.ui.header > .icon + .content, +.play-button.header > .icon + .content, +.download-button.header > .icon + .content { + padding-left: 0.75rem; + display: table-cell; + vertical-align: middle; +} +/*-------------- + Loose Coupling +---------------*/ +.ui.header .ui.label, +.play-button.header .play-button.label, +.download-button.header .download-button.label { + font-size: ''; + margin-left: 0.5rem; + vertical-align: middle; +} +/* Positioning */ +.ui.header + p, +.play-button.header + p, +.download-button.header + p { + margin-top: 0em; +} +/******************************* + Types +*******************************/ +/*-------------- + Page +---------------*/ +h1.ui.header, +h1.play-button.header, +h1.download-button.header { + font-size: 2rem; +} +h2.ui.header, +h2.play-button.header, +h2.download-button.header { + font-size: 1.71428571rem; +} +h3.ui.header, +h3.play-button.header, +h3.download-button.header { + font-size: 1.28571429rem; +} +h4.ui.header, +h4.play-button.header, +h4.download-button.header { + font-size: 1.07142857rem; +} +h5.ui.header, +h5.play-button.header, +h5.download-button.header { + font-size: 1rem; +} +/* Sub Header */ +h1.ui.header .sub.header, +h1.play-button.header .sub.header, +h1.download-button.header .sub.header { + font-size: 1.14285714rem; +} +h2.ui.header .sub.header, +h2.play-button.header .sub.header, +h2.download-button.header .sub.header { + font-size: 1.14285714rem; +} +h3.ui.header .sub.header, +h3.play-button.header .sub.header, +h3.download-button.header .sub.header { + font-size: 1rem; +} +h4.ui.header .sub.header, +h4.play-button.header .sub.header, +h4.download-button.header .sub.header { + font-size: 1rem; +} +h5.ui.header .sub.header, +h5.play-button.header .sub.header, +h5.download-button.header .sub.header { + font-size: 0.92857143rem; +} +/*-------------- + Content Heading +---------------*/ +.ui.huge.header, +.play-button.huge.header, +.download-button.huge.header { + min-height: 1em; + font-size: 2em; +} +.ui.large.header, +.play-button.large.header, +.download-button.large.header { + font-size: 1.71428571em; +} +.ui.medium.header, +.play-button.medium.header, +.download-button.medium.header { + font-size: 1.28571429em; +} +.ui.small.header, +.play-button.small.header, +.download-button.small.header { + font-size: 1.07142857em; +} +.ui.tiny.header, +.play-button.tiny.header, +.download-button.tiny.header { + font-size: 1em; +} +/* Sub Header */ +.ui.huge.header .sub.header, +.play-button.huge.header .sub.header, +.download-button.huge.header .sub.header { + font-size: 1.14285714rem; +} +.ui.large.header .sub.header, +.play-button.large.header .sub.header, +.download-button.large.header .sub.header { + font-size: 1.14285714rem; +} +.ui.header .sub.header, +.play-button.header .sub.header, +.download-button.header .sub.header { + font-size: 1rem; +} +.ui.small.header .sub.header, +.play-button.small.header .sub.header, +.download-button.small.header .sub.header { + font-size: 1rem; +} +.ui.tiny.header .sub.header, +.play-button.tiny.header .sub.header, +.download-button.tiny.header .sub.header { + font-size: 0.92857143rem; +} +/*-------------- + Sub Heading +---------------*/ +.ui.sub.header, +.play-button.sub.header, +.download-button.sub.header { + padding: 0em; + margin-bottom: 0.14285714rem; + font-weight: bold; + font-size: 0.85714286em; + text-transform: uppercase; + color: ''; +} +.ui.small.sub.header, +.play-button.small.sub.header, +.download-button.small.sub.header { + font-size: 0.78571429em; +} +.ui.sub.header, +.play-button.sub.header, +.download-button.sub.header { + font-size: 0.85714286em; +} +.ui.large.sub.header, +.play-button.large.sub.header, +.download-button.large.sub.header { + font-size: 0.92857143em; +} +.ui.huge.sub.header, +.play-button.huge.sub.header, +.download-button.huge.sub.header { + font-size: 1em; +} +/*------------------- + Icon +--------------------*/ +.ui.icon.header, +.play-button.icon.header, +.download-button.icon.header { + display: inline-block; + text-align: center; + margin: 2rem 0em 1rem; +} +.ui.icon.header:after, +.play-button.icon.header:after, +.download-button.icon.header:after { + content: ''; + display: block; + height: 0px; + clear: both; + visibility: hidden; +} +.ui.icon.header:first-child, +.play-button.icon.header:first-child, +.download-button.icon.header:first-child { + margin-top: 0em; +} +.ui.icon.header .icon, +.play-button.icon.header .icon, +.download-button.icon.header .icon { + float: none; + display: block; + width: auto; + height: auto; + line-height: 1; + padding: 0em; + font-size: 3em; + margin: 0em auto 0.5rem; + opacity: 1; +} +.ui.icon.header .content, +.play-button.icon.header .content, +.download-button.icon.header .content { + display: block; + padding: 0em; +} +.ui.icon.header .circular.icon, +.play-button.icon.header .circular.icon, +.download-button.icon.header .circular.icon { + font-size: 2em; +} +.ui.icon.header .square.icon, +.play-button.icon.header .square.icon, +.download-button.icon.header .square.icon { + font-size: 2em; +} +.ui.block.icon.header .icon, +.play-button.block.icon.header .icon, +.download-button.block.icon.header .icon { + margin-bottom: 0em; +} +.ui.icon.header.aligned, +.play-button.icon.header.aligned, +.download-button.icon.header.aligned { + margin-left: auto; + margin-right: auto; + display: block; +} +/******************************* + States +*******************************/ +.ui.disabled.header, +.play-button.disabled.header, +.download-button.disabled.header { + opacity: 0.45; +} +/******************************* + Variations +*******************************/ +/*------------------- + Inverted +--------------------*/ +.ui.inverted.header, +.play-button.inverted.header, +.download-button.inverted.header { + color: #FFFFFF; +} +.ui.inverted.header .sub.header, +.play-button.inverted.header .sub.header, +.download-button.inverted.header .sub.header { + color: rgba(255, 255, 255, 0.8); +} +.ui.inverted.attached.header, +.play-button.inverted.attached.header, +.download-button.inverted.attached.header { + background: #545454 linear-gradient(transparent, rgba(0, 0, 0, 0.05)); + box-shadow: none; + border-color: transparent; +} +.ui.inverted.block.header, +.play-button.inverted.block.header, +.download-button.inverted.block.header { + background: #545454 linear-gradient(transparent, rgba(0, 0, 0, 0.05)); + box-shadow: none; +} +.ui.inverted.block.header, +.play-button.inverted.block.header, +.download-button.inverted.block.header { + border-bottom: none; +} +/*------------------- + Colors +--------------------*/ +/*--- Red ---*/ +.ui.red.header, +.play-button.red.header, +.download-button.red.header { + color: #E81123 !important; +} +a.ui.red.header:hover, +a.play-button.red.header:hover, +a.download-button.red.header:hover { + color: #da0617 !important; +} +.ui.red.dividing.header, +.play-button.red.dividing.header, +.download-button.red.dividing.header { + border-bottom: 2px solid #E81123; +} +/* Inverted */ +.ui.inverted.red.header, +.play-button.inverted.red.header, +.download-button.inverted.red.header { + color: #FF695E !important; +} +a.ui.inverted.red.header:hover, +a.play-button.inverted.red.header:hover, +a.download-button.inverted.red.header:hover { + color: #ff5144 !important; +} +/*--- Orange ---*/ +.ui.orange.header, +.play-button.orange.header, +.download-button.orange.header { + color: #DF4600 !important; +} +a.ui.orange.header:hover, +a.play-button.orange.header:hover, +a.download-button.orange.header:hover { + color: #c63e00 !important; +} +.ui.orange.dividing.header, +.play-button.orange.dividing.header, +.download-button.orange.dividing.header { + border-bottom: 2px solid #DF4600; +} +/* Inverted */ +.ui.inverted.orange.header, +.play-button.inverted.orange.header, +.download-button.inverted.orange.header { + color: #FF851B !important; +} +a.ui.inverted.orange.header:hover, +a.play-button.inverted.orange.header:hover, +a.download-button.inverted.orange.header:hover { + color: #ff7701 !important; +} +/*--- Olive ---*/ +.ui.olive.header, +.play-button.olive.header, +.download-button.olive.header { + color: #B5CC18 !important; +} +a.ui.olive.header:hover, +a.play-button.olive.header:hover, +a.download-button.olive.header:hover { + color: #a7bd0d !important; +} +.ui.olive.dividing.header, +.play-button.olive.dividing.header, +.download-button.olive.dividing.header { + border-bottom: 2px solid #B5CC18; +} +/* Inverted */ +.ui.inverted.olive.header, +.play-button.inverted.olive.header, +.download-button.inverted.olive.header { + color: #D9E778 !important; +} +a.ui.inverted.olive.header:hover, +a.play-button.inverted.olive.header:hover, +a.download-button.inverted.olive.header:hover { + color: #d8ea5c !important; +} +/*--- Yellow ---*/ +.ui.yellow.header, +.play-button.yellow.header, +.download-button.yellow.header, +.ui.download-button.header { + color: #F4C918 !important; +} +a.ui.yellow.header:hover, +a.play-button.yellow.header:hover, +a.download-button.yellow.header:hover, +a.ui.download-button.header:hover { + color: #f3c300 !important; +} +.ui.yellow.dividing.header, +.play-button.yellow.dividing.header, +.download-button.yellow.dividing.header, +.ui.download-button.dividing.header { + border-bottom: 2px solid #F4C918; +} +/* Inverted */ +.ui.inverted.yellow.header, +.play-button.inverted.yellow.header, +.download-button.inverted.yellow.header, +.ui.inverted.download-button.header { + color: #FFE21F !important; +} +a.ui.inverted.yellow.header:hover, +a.play-button.inverted.yellow.header:hover, +a.download-button.inverted.yellow.header:hover, +a.ui.inverted.download-button.header:hover { + color: #ffdf05 !important; +} +/*--- Green ---*/ +.ui.green.header, +.ui.ui.button.getting-started-btn.header, +.play-button.green.header, +.download-button.green.header, +.ui.play-button.button.getting-started-btn.header, +.ui.ui.play-button.getting-started-btn.header, +.ui.download-button.button.getting-started-btn.header, +.ui.ui.download-button.getting-started-btn.header { + color: #3FC863 !important; +} +a.ui.green.header:hover, +a.ui.ui.button.getting-started-btn.header:hover, +a.play-button.green.header:hover, +a.download-button.green.header:hover, +a.ui.play-button.button.getting-started-btn.header:hover, +a.ui.ui.play-button.getting-started-btn.header:hover, +a.ui.download-button.button.getting-started-btn.header:hover, +a.ui.ui.download-button.getting-started-btn.header:hover { + color: #2ebf54 !important; +} +.ui.green.dividing.header, +.ui.ui.button.getting-started-btn.dividing.header, +.play-button.green.dividing.header, +.download-button.green.dividing.header, +.ui.play-button.button.getting-started-btn.dividing.header, +.ui.ui.play-button.getting-started-btn.dividing.header, +.ui.download-button.button.getting-started-btn.dividing.header, +.ui.ui.download-button.getting-started-btn.dividing.header { + border-bottom: 2px solid #3FC863; +} +/* Inverted */ +.ui.inverted.green.header, +.ui.inverted.ui.button.getting-started-btn.header, +.play-button.inverted.green.header, +.download-button.inverted.green.header, +.ui.inverted.play-button.button.getting-started-btn.header, +.ui.inverted.ui.play-button.getting-started-btn.header, +.ui.inverted.download-button.button.getting-started-btn.header, +.ui.inverted.ui.download-button.getting-started-btn.header { + color: #2ECC40 !important; +} +a.ui.inverted.green.header:hover, +a.ui.inverted.ui.button.getting-started-btn.header:hover, +a.play-button.inverted.green.header:hover, +a.download-button.inverted.green.header:hover, +a.ui.inverted.play-button.button.getting-started-btn.header:hover, +a.ui.inverted.ui.play-button.getting-started-btn.header:hover, +a.ui.inverted.download-button.button.getting-started-btn.header:hover, +a.ui.inverted.ui.download-button.getting-started-btn.header:hover { + color: #22be34 !important; +} +/*--- Teal ---*/ +.ui.teal.header, +.play-button.teal.header, +.download-button.teal.header { + color: #008272 !important; +} +a.ui.teal.header:hover, +a.play-button.teal.header:hover, +a.download-button.teal.header:hover { + color: #00695c !important; +} +.ui.teal.dividing.header, +.play-button.teal.dividing.header, +.download-button.teal.dividing.header { + border-bottom: 2px solid #008272; +} +/* Inverted */ +.ui.inverted.teal.header, +.play-button.inverted.teal.header, +.download-button.inverted.teal.header { + color: #6DFFFF !important; +} +a.ui.inverted.teal.header:hover, +a.play-button.inverted.teal.header:hover, +a.download-button.inverted.teal.header:hover { + color: #54ffff !important; +} +/*--- Blue ---*/ +.ui.blue.header, +.play-button.blue.header, +.ui.play-button.header, +.download-button.blue.header { + color: #54C9C9 !important; +} +a.ui.blue.header:hover, +a.play-button.blue.header:hover, +a.ui.play-button.header:hover, +a.download-button.blue.header:hover { + color: #3ac9c9 !important; +} +.ui.blue.dividing.header, +.play-button.blue.dividing.header, +.ui.play-button.dividing.header, +.download-button.blue.dividing.header { + border-bottom: 2px solid #54C9C9; +} +/* Inverted */ +.ui.inverted.blue.header, +.play-button.inverted.blue.header, +.ui.inverted.play-button.header, +.download-button.inverted.blue.header { + color: #54C8FF !important; +} +a.ui.inverted.blue.header:hover, +a.play-button.inverted.blue.header:hover, +a.ui.inverted.play-button.header:hover, +a.download-button.inverted.blue.header:hover { + color: #3ac0ff !important; +} +/*--- Violet ---*/ +.ui.violet.header, +.play-button.violet.header, +.download-button.violet.header { + color: #C90072 !important; +} +a.ui.violet.header:hover, +a.play-button.violet.header:hover, +a.download-button.violet.header:hover { + color: #b00064 !important; +} +.ui.violet.dividing.header, +.play-button.violet.dividing.header, +.download-button.violet.dividing.header { + border-bottom: 2px solid #C90072; +} +/* Inverted */ +.ui.inverted.violet.header, +.play-button.inverted.violet.header, +.download-button.inverted.violet.header { + color: #A291FB !important; +} +a.ui.inverted.violet.header:hover, +a.play-button.inverted.violet.header:hover, +a.download-button.inverted.violet.header:hover { + color: #8a73ff !important; +} +/*--- Purple ---*/ +.ui.purple.header, +.play-button.purple.header, +.download-button.purple.header { + color: #8169E6 !important; +} +a.ui.purple.header:hover, +a.play-button.purple.header:hover, +a.download-button.purple.header:hover { + color: #6a4cea !important; +} +.ui.purple.dividing.header, +.play-button.purple.dividing.header, +.download-button.purple.dividing.header { + border-bottom: 2px solid #8169E6; +} +/* Inverted */ +.ui.inverted.purple.header, +.play-button.inverted.purple.header, +.download-button.inverted.purple.header { + color: #DC73FF !important; +} +a.ui.inverted.purple.header:hover, +a.play-button.inverted.purple.header:hover, +a.download-button.inverted.purple.header:hover { + color: #d65aff !important; +} +/*--- Pink ---*/ +.ui.pink.header, +.play-button.pink.header, +.download-button.pink.header { + color: #E2008C !important; +} +a.ui.pink.header:hover, +a.play-button.pink.header:hover, +a.download-button.pink.header:hover { + color: #c9007c !important; +} +.ui.pink.dividing.header, +.play-button.pink.dividing.header, +.download-button.pink.dividing.header { + border-bottom: 2px solid #E2008C; +} +/* Inverted */ +.ui.inverted.pink.header, +.play-button.inverted.pink.header, +.download-button.inverted.pink.header { + color: #FF8EDF !important; +} +a.ui.inverted.pink.header:hover, +a.play-button.inverted.pink.header:hover, +a.download-button.inverted.pink.header:hover { + color: #ff74d8 !important; +} +/*--- Brown ---*/ +.ui.brown.header, +.play-button.brown.header, +.download-button.brown.header { + color: #6B5B4C !important; +} +a.ui.brown.header:hover, +a.play-button.brown.header:hover, +a.download-button.brown.header:hover { + color: #5d4e40 !important; +} +.ui.brown.dividing.header, +.play-button.brown.dividing.header, +.download-button.brown.dividing.header { + border-bottom: 2px solid #6B5B4C; +} +/* Inverted */ +.ui.inverted.brown.header, +.play-button.inverted.brown.header, +.download-button.inverted.brown.header { + color: #D67C1C !important; +} +a.ui.inverted.brown.header:hover, +a.play-button.inverted.brown.header:hover, +a.download-button.inverted.brown.header:hover { + color: #c86f11 !important; +} +/*--- Grey ---*/ +.ui.grey.header, +.ui.ui.button.editortools-btn.header, +.play-button.grey.header, +.download-button.grey.header, +.ui.play-button.button.editortools-btn.header, +.ui.ui.play-button.editortools-btn.header, +.ui.download-button.button.editortools-btn.header, +.ui.ui.download-button.editortools-btn.header { + color: #42495F !important; +} +a.ui.grey.header:hover, +a.ui.ui.button.editortools-btn.header:hover, +a.play-button.grey.header:hover, +a.download-button.grey.header:hover, +a.ui.play-button.button.editortools-btn.header:hover, +a.ui.ui.play-button.editortools-btn.header:hover, +a.ui.download-button.button.editortools-btn.header:hover, +a.ui.ui.download-button.editortools-btn.header:hover { + color: #4c556e !important; +} +.ui.grey.dividing.header, +.ui.ui.button.editortools-btn.dividing.header, +.play-button.grey.dividing.header, +.download-button.grey.dividing.header, +.ui.play-button.button.editortools-btn.dividing.header, +.ui.ui.play-button.editortools-btn.dividing.header, +.ui.download-button.button.editortools-btn.dividing.header, +.ui.ui.download-button.editortools-btn.dividing.header { + border-bottom: 2px solid #42495F; +} +/* Inverted */ +.ui.inverted.grey.header, +.ui.inverted.ui.button.editortools-btn.header, +.play-button.inverted.grey.header, +.download-button.inverted.grey.header, +.ui.inverted.play-button.button.editortools-btn.header, +.ui.inverted.ui.play-button.editortools-btn.header, +.ui.inverted.download-button.button.editortools-btn.header, +.ui.inverted.ui.download-button.editortools-btn.header { + color: #DCDDDE !important; +} +a.ui.inverted.grey.header:hover, +a.ui.inverted.ui.button.editortools-btn.header:hover, +a.play-button.inverted.grey.header:hover, +a.download-button.inverted.grey.header:hover, +a.ui.inverted.play-button.button.editortools-btn.header:hover, +a.ui.inverted.ui.play-button.editortools-btn.header:hover, +a.ui.inverted.download-button.button.editortools-btn.header:hover, +a.ui.inverted.ui.download-button.editortools-btn.header:hover { + color: #cfd0d2 !important; +} +/*------------------- + Aligned +--------------------*/ +.ui.left.aligned.header, +.play-button.left.aligned.header, +.download-button.left.aligned.header { + text-align: left; +} +.ui.right.aligned.header, +.play-button.right.aligned.header, +.download-button.right.aligned.header { + text-align: right; +} +.ui.centered.header, +.ui.center.aligned.header, +.play-button.centered.header, +.play-button.center.aligned.header, +.download-button.centered.header, +.download-button.center.aligned.header { + text-align: center; +} +.ui.justified.header, +.play-button.justified.header, +.download-button.justified.header { + text-align: justify; +} +.ui.justified.header:after, +.play-button.justified.header:after, +.download-button.justified.header:after { + display: inline-block; + content: ''; + width: 100%; +} +/*------------------- + Floated +--------------------*/ +.ui.floated.header, +.ui[class*="left floated"].header, +.play-button.floated.header, +.play-button[class*="left floated"].header, +.download-button.floated.header, +.download-button[class*="left floated"].header { + float: left; + margin-top: 0em; + margin-right: 0.5em; +} +.ui[class*="right floated"].header, +.play-button[class*="right floated"].header, +.download-button[class*="right floated"].header { + float: right; + margin-top: 0em; + margin-left: 0.5em; +} +/*------------------- + Fitted +--------------------*/ +.ui.fitted.header, +.play-button.fitted.header, +.download-button.fitted.header { + padding: 0em; +} +/*------------------- + Dividing +--------------------*/ +.ui.dividing.header, +.play-button.dividing.header, +.download-button.dividing.header { + padding-bottom: 0.21428571rem; + border-bottom: 1px solid rgba(34, 36, 38, 0.15); +} +.ui.dividing.header .sub.header, +.play-button.dividing.header .sub.header, +.download-button.dividing.header .sub.header { + padding-bottom: 0.21428571rem; +} +.ui.dividing.header .icon, +.play-button.dividing.header .icon, +.download-button.dividing.header .icon { + margin-bottom: 0em; +} +.ui.inverted.dividing.header, +.play-button.inverted.dividing.header, +.download-button.inverted.dividing.header { + border-bottom-color: rgba(255, 255, 255, 0.1); +} +/*------------------- + Block +--------------------*/ +.ui.block.header, +.play-button.block.header, +.download-button.block.header { + background: #F3F4F5; + padding: 0.78571429rem 1rem; + box-shadow: none; + border: 1px solid #D4D4D5; + border-radius: 0.28571429rem; +} +.ui.tiny.block.header, +.play-button.tiny.block.header, +.download-button.tiny.block.header { + font-size: 0.85714286rem; +} +.ui.small.block.header, +.play-button.small.block.header, +.download-button.small.block.header { + font-size: 0.92857143rem; +} +.ui.block.header:not(h1):not(h2):not(h3):not(h4):not(h5):not(h6), +.play-button.block.header:not(h1):not(h2):not(h3):not(h4):not(h5):not(h6), +.download-button.block.header:not(h1):not(h2):not(h3):not(h4):not(h5):not(h6) { + font-size: 1rem; +} +.ui.large.block.header, +.play-button.large.block.header, +.download-button.large.block.header { + font-size: 1.14285714rem; +} +.ui.huge.block.header, +.play-button.huge.block.header, +.download-button.huge.block.header { + font-size: 1.42857143rem; +} +/*------------------- + Attached +--------------------*/ +.ui.attached.header, +.play-button.attached.header, +.download-button.attached.header { + background: #FFFFFF; + padding: 0.78571429rem 1rem; + margin-left: -1px; + margin-right: -1px; + box-shadow: none; + border: 1px solid #D4D4D5; +} +.ui.attached.block.header, +.play-button.attached.block.header, +.download-button.attached.block.header { + background: #F3F4F5; +} +.ui.attached:not(.top):not(.bottom).header, +.play-button.attached:not(.top):not(.bottom).header, +.download-button.attached:not(.top):not(.bottom).header { + margin-top: 0em; + margin-bottom: 0em; + border-top: none; + border-radius: 0em; +} +.ui.top.attached.header, +.play-button.top.attached.header, +.download-button.top.attached.header { + margin-bottom: 0em; + border-radius: 0.28571429rem 0.28571429rem 0em 0em; +} +.ui.bottom.attached.header, +.play-button.bottom.attached.header, +.download-button.bottom.attached.header { + margin-top: 0em; + border-top: none; + border-radius: 0em 0em 0.28571429rem 0.28571429rem; +} +/* Attached Sizes */ +.ui.tiny.attached.header, +.play-button.tiny.attached.header, +.download-button.tiny.attached.header { + font-size: 0.85714286em; +} +.ui.small.attached.header, +.play-button.small.attached.header, +.download-button.small.attached.header { + font-size: 0.92857143em; +} +.ui.attached.header:not(h1):not(h2):not(h3):not(h4):not(h5):not(h6), +.play-button.attached.header:not(h1):not(h2):not(h3):not(h4):not(h5):not(h6), +.download-button.attached.header:not(h1):not(h2):not(h3):not(h4):not(h5):not(h6) { + font-size: 1em; +} +.ui.large.attached.header, +.play-button.large.attached.header, +.download-button.large.attached.header { + font-size: 1.14285714em; +} +.ui.huge.attached.header, +.play-button.huge.attached.header, +.download-button.huge.attached.header { + font-size: 1.42857143em; +} +/*------------------- + Sizing +--------------------*/ +.ui.header:not(h1):not(h2):not(h3):not(h4):not(h5):not(h6), +.play-button.header:not(h1):not(h2):not(h3):not(h4):not(h5):not(h6), +.download-button.header:not(h1):not(h2):not(h3):not(h4):not(h5):not(h6) { + font-size: 1.28571429em; +} +/******************************* + Site Overrides +*******************************/ +/******************************* + Site Overrides +*******************************/ +/*! + * # Semantic UI - Icon + * http://github.com/semantic-org/semantic-ui/ + * + * + * Released under the MIT license + * http://opensource.org/licenses/MIT + * + */ +/******************************* + Theme +*******************************/ +/* + +████████╗██╗ ██╗███████╗███╗ ███╗███████╗███████╗ +╚══██╔══╝██║ ██║██╔════╝████╗ ████║██╔════╝██╔════╝ + ██║ ███████║█████╗ ██╔████╔██║█████╗ ███████╗ + ██║ ██╔══██║██╔══╝ ██║╚██╔╝██║██╔══╝ ╚════██║ + ██║ ██║ ██║███████╗██║ ╚═╝ ██║███████╗███████║ + ╚═╝ ╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝╚══════╝╚══════╝ + +*/ +/******************************* + Theme Selection +*******************************/ +/* To override a theme for an individual element + specify theme name below +*/ +/* Global */ +/* Elements */ +/* Collections */ +/* Modules */ +/* Views */ +/******************************* + Folders +*******************************/ +/* Path to theme packages */ +/* Path to site override folder */ +/******************************* + Import Theme +*******************************/ +/******************************* + Import Directives +*******************************/ +/*------------------ + Theme +-------------------*/ +/*-------------------- + Site Variables +---------------------*/ +/* Default site.variables */ +/******************************* + Site Settings +*******************************/ +/*------------------- + Fonts +--------------------*/ +/*------------------- + Base Sizes +--------------------*/ +/* This is the single variable that controls them all */ +/* The size of page text */ +/*------------------- + Border Radius +--------------------*/ +/* See Power-user section below + for explanation of @px variables +*/ +/*------------------- + Brand Colors +--------------------*/ +/*-------------- + Page Heading +---------------*/ +/*-------------- + Form Input +---------------*/ +/* This adjusts the default form input across all elements */ +/* Input Text Color */ +/* Line Height Default For Inputs in Browser (Descendors are 17px at 14px base em) */ +/*------------------- + Focused Input +--------------------*/ +/* Used on inputs, textarea etc */ +/* Used on dropdowns, other larger blocks */ +/*------------------- + Sizes +--------------------*/ +/* + Sizes are all expressed in terms of 14px/em (default em) + This ensures these "ratios" remain constant despite changes in EM +*/ +/*------------------- + Page +--------------------*/ +/*------------------- + Paragraph +--------------------*/ +/*------------------- + Links +--------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ +/*------------------- + Highlighted Text +--------------------*/ +/*------------------- + Loader +--------------------*/ +/*------------------- + Grid +--------------------*/ +/*------------------- + Transitions +--------------------*/ +/*------------------- + Breakpoints +--------------------*/ +/*------------------- + Site Colors +--------------------*/ +/*--- Colors ---*/ +/*--- Light Colors ---*/ +/*--- Neutrals ---*/ +/*--- Colored Backgrounds ---*/ +/*--- Colored Headers ---*/ +/*--- Colored Text ---*/ +/*--- Colored Border ---*/ +/*------------------- + Alpha Colors +--------------------*/ +/*------------------- + Accents +--------------------*/ +/* Differentiating Neutrals */ +/* Differentiating Layers */ +/******************************* + Power-User +*******************************/ +/*------------------- + Emotive Colors +--------------------*/ +/* Positive */ +/* Negative */ +/* Info */ +/* Warning */ +/*------------------- + Paths +--------------------*/ +/* For source only. Modified in gulp for dist */ +/*------------------- + Em Sizes +--------------------*/ +/* + This rounds @size values to the closest pixel then expresses that value in (r)em. + This ensures all size values round to exact pixels +*/ +/* em */ +/* rem */ +/*------------------- + Icons +--------------------*/ +/* Maximum Glyph Width of Icon */ +/*------------------- + Neutral Text +--------------------*/ +/*------------------- + Brand Colors +--------------------*/ +/*------------------- + Borders +--------------------*/ +/*------------------- + Derived Values +--------------------*/ +/* Loaders Position Offset */ +/* Rendered Scrollbar Width */ +/* Maximum Single Character Glyph Width, aka Capital "W" */ +/* Used to match floats with text */ +/* Header Spacing */ +/* Minimum Mobile Width */ +/* Positive / Negative Dupes */ +/* Responsive */ +/*------------------- + Exact Pixel Values +--------------------*/ +/* + These are used to specify exact pixel values in em + for things like borders that remain constantly + sized as emSize adjusts + + Since there are many more sizes than names for sizes, + these are named by their original pixel values. + +*/ +/* Columns */ +/******************************* + States +*******************************/ +/*------------------- + Disabled +--------------------*/ +/*------------------- + Hover +--------------------*/ +/*--- Shadows ---*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Focus +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Down (:active) +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Active +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/* Packaged site.variables */ +/******************************* + User Global Variables +*******************************/ +/*------------------- + Fonts +--------------------*/ +/*------------------- + Breakpoints +--------------------*/ +/* +@mobileBreakpoint : unit( (63 * @emSize), px); +@tabletBreakpoint : unit( (79 * @emSize), px); +@computerBreakpoint : unit( (91 * @emSize), px); +@largeMonitorBreakpoint : unit( (99 * @emSize), px); +@widescreenMonitorBreakpoint : unit( (119 * @emSize), px); +*/ +/******************************* + PXT Variables +*******************************/ +/*------------------- + Menu +--------------------*/ +/*------------------- + Layout +--------------------*/ +/*------------------- + Background +--------------------*/ +/*------------------- + Full screen +--------------------*/ +/*------------------- + Side Docs +--------------------*/ +/*------------------- + Editor +--------------------*/ +/* Component's site.variables */ +/******************************* + Site Settings +*******************************/ +/*------------------- + Fonts +--------------------*/ +/*------------------- + Base Sizes +--------------------*/ +/* This is the single variable that controls them all */ +/* The size of page text */ +/*------------------- + Border Radius +--------------------*/ +/* See Power-user section below + for explanation of @px variables +*/ +/*------------------- + Brand Colors +--------------------*/ +/*-------------- + Page Heading +---------------*/ +/*-------------- + Form Input +---------------*/ +/* This adjusts the default form input across all elements */ +/* Input Text Color */ +/* Line Height Default For Inputs in Browser (Descendors are 17px at 14px base em) */ +/*------------------- + Focused Input +--------------------*/ +/* Used on inputs, textarea etc */ +/* Used on dropdowns, other larger blocks */ +/*------------------- + Sizes +--------------------*/ +/* + Sizes are all expressed in terms of 14px/em (default em) + This ensures these "ratios" remain constant despite changes in EM +*/ +/*------------------- + Page +--------------------*/ +/*------------------- + Paragraph +--------------------*/ +/*------------------- + Links +--------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ +/*------------------- + Highlighted Text +--------------------*/ +/*------------------- + Loader +--------------------*/ +/*------------------- + Grid +--------------------*/ +/*------------------- + Transitions +--------------------*/ +/*------------------- + Breakpoints +--------------------*/ +/*------------------- + Site Colors +--------------------*/ +/*--- Colors ---*/ +/*--- Light Colors ---*/ +/*--- Neutrals ---*/ +/*--- Colored Backgrounds ---*/ +/*--- Colored Headers ---*/ +/*--- Colored Text ---*/ +/*--- Colored Border ---*/ +/*------------------- + Alpha Colors +--------------------*/ +/*------------------- + Accents +--------------------*/ +/* Differentiating Neutrals */ +/* Differentiating Layers */ +/******************************* + Power-User +*******************************/ +/*------------------- + Emotive Colors +--------------------*/ +/* Positive */ +/* Negative */ +/* Info */ +/* Warning */ +/*------------------- + Paths +--------------------*/ +/* For source only. Modified in gulp for dist */ +/*------------------- + Em Sizes +--------------------*/ +/* + This rounds @size values to the closest pixel then expresses that value in (r)em. + This ensures all size values round to exact pixels +*/ +/* em */ +/* rem */ +/*------------------- + Icons +--------------------*/ +/* Maximum Glyph Width of Icon */ +/*------------------- + Neutral Text +--------------------*/ +/*------------------- + Brand Colors +--------------------*/ +/*------------------- + Borders +--------------------*/ +/*------------------- + Derived Values +--------------------*/ +/* Loaders Position Offset */ +/* Rendered Scrollbar Width */ +/* Maximum Single Character Glyph Width, aka Capital "W" */ +/* Used to match floats with text */ +/* Header Spacing */ +/* Minimum Mobile Width */ +/* Positive / Negative Dupes */ +/* Responsive */ +/*------------------- + Exact Pixel Values +--------------------*/ +/* + These are used to specify exact pixel values in em + for things like borders that remain constantly + sized as emSize adjusts + + Since there are many more sizes than names for sizes, + these are named by their original pixel values. + +*/ +/* Columns */ +/******************************* + States +*******************************/ +/*------------------- + Disabled +--------------------*/ +/*------------------- + Hover +--------------------*/ +/*--- Shadows ---*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Focus +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Down (:active) +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Active +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/* Site theme site.variables */ +/******************************* + User Global Variables +*******************************/ +/*------------------- + Site Colors +--------------------*/ +/******************************* + PXT Overrides +*******************************/ +/*------------------- + Component Variables +---------------------*/ +/* Default */ +/******************************* + Icon +*******************************/ +/*------------------- + Icon Variables +--------------------*/ +/* Variations */ +/* Packaged Theme */ +/******************************* + Icon +*******************************/ +/*------------------- + Icon Variables +--------------------*/ +/* Variations */ +/* Site Theme */ +/******************************* + User Variable Overrides +*******************************/ +/******************************* + Mix-ins +*******************************/ +/*------------------ + Fonts +-------------------*/ +/*------------------ + Overrides +-------------------*/ +/* End Config */ +/******************************* + Icon +*******************************/ +@font-face { + font-family: 'Icons'; + + src: url(data:application/font-woff;charset=utf-8;base64,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) format('woff'); + font-style: normal; + font-weight: normal; + font-variant: normal; + text-decoration: inherit; + text-transform: none; +} +i.icon { + display: inline-block; + opacity: 1; + margin: 0em 0.25rem 0em 0em; + width: 1.18em; + height: 1em; + font-family: 'Icons'; + font-style: normal; + font-weight: normal; + text-decoration: inherit; + text-align: center; + speak: none; + font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; + backface-visibility: hidden; +} +i.icon:before { + background: none !important; +} +/******************************* + Types +*******************************/ +/*-------------- + Loading +---------------*/ +i.icon.loading { + height: 1em; + line-height: 1; + animation: icon-loading 2s linear infinite; +} +@keyframes icon-loading { + from { + transform: rotate(0deg); + } + to { + transform: rotate(360deg); + } +} +/******************************* + States +*******************************/ +i.icon.hover { + opacity: 1 !important; +} +i.icon.active { + opacity: 1 !important; +} +i.emphasized.icon { + opacity: 1 !important; +} +i.disabled.icon { + opacity: 0.45 !important; +} +/******************************* + Variations +*******************************/ +/*------------------- + Fitted +--------------------*/ +i.fitted.icon { + width: auto; + margin: 0em; +} +/*------------------- + Link +--------------------*/ +i.link.icon, +i.link.icons { + cursor: pointer; + opacity: 0.8; + transition: opacity 0.1s ease; +} +i.link.icon:hover, +i.link.icons:hover { + opacity: 1 !important; +} +/*------------------- + Circular +--------------------*/ +i.circular.icon { + border-radius: 500em !important; + line-height: 1 !important; + padding: 0.5em 0.5em !important; + box-shadow: 0em 0em 0em 0.1em rgba(0, 0, 0, 0.1) inset; + width: 2em !important; + height: 2em !important; +} +i.circular.inverted.icon { + border: none; + box-shadow: none; +} +/*------------------- + Flipped +--------------------*/ +i.flipped.icon, +i.horizontally.flipped.icon { + transform: scale(-1, 1); +} +i.vertically.flipped.icon { + transform: scale(1, -1); +} +/*------------------- + Rotated +--------------------*/ +i.rotated.icon, +i.right.rotated.icon, +i.clockwise.rotated.icon { + transform: rotate(90deg); +} +i.left.rotated.icon, +i.counterclockwise.rotated.icon { + transform: rotate(-90deg); +} +/*------------------- + Bordered +--------------------*/ +i.bordered.icon { + line-height: 1; + vertical-align: baseline; + width: 2em; + height: 2em; + padding: 0.5em 0.41em !important; + box-shadow: 0em 0em 0em 0.1em rgba(0, 0, 0, 0.1) inset; +} +i.bordered.inverted.icon { + border: none; + box-shadow: none; +} +/*------------------- + Inverted +--------------------*/ +/* Inverted Shapes */ +i.inverted.bordered.icon, +i.inverted.circular.icon { + background-color: #1B1C1D !important; + color: #FFFFFF !important; +} +i.inverted.icon { + color: #FFFFFF; +} +/*------------------- + Colors +--------------------*/ +/* Red */ +i.red.icon { + color: #E81123 !important; +} +i.inverted.red.icon { + color: #FF695E !important; +} +i.inverted.bordered.red.icon, +i.inverted.circular.red.icon { + background-color: #E81123 !important; + color: #FFFFFF !important; +} +/* Orange */ +i.orange.icon { + color: #DF4600 !important; +} +i.inverted.orange.icon { + color: #FF851B !important; +} +i.inverted.bordered.orange.icon, +i.inverted.circular.orange.icon { + background-color: #DF4600 !important; + color: #FFFFFF !important; +} +/* Yellow */ +i.yellow.icon, +i.download-button.icon { + color: #F4C918 !important; +} +i.inverted.yellow.icon, +i.inverted.download-button.icon { + color: #FFE21F !important; +} +i.inverted.bordered.yellow.icon, +i.inverted.circular.yellow.icon, +i.inverted.bordered.download-button.icon, +i.inverted.circular.download-button.icon { + background-color: #F4C918 !important; + color: #FFFFFF !important; +} +/* Olive */ +i.olive.icon { + color: #B5CC18 !important; +} +i.inverted.olive.icon { + color: #D9E778 !important; +} +i.inverted.bordered.olive.icon, +i.inverted.circular.olive.icon { + background-color: #B5CC18 !important; + color: #FFFFFF !important; +} +/* Green */ +i.green.icon, +i.ui.button.getting-started-btn.icon, +i.play-button.button.getting-started-btn.icon, +i.ui.play-button.getting-started-btn.icon, +i.download-button.button.getting-started-btn.icon, +i.ui.download-button.getting-started-btn.icon { + color: #3FC863 !important; +} +i.inverted.green.icon, +i.inverted.ui.button.getting-started-btn.icon, +i.inverted.play-button.button.getting-started-btn.icon, +i.inverted.ui.play-button.getting-started-btn.icon, +i.inverted.download-button.button.getting-started-btn.icon, +i.inverted.ui.download-button.getting-started-btn.icon { + color: #2ECC40 !important; +} +i.inverted.bordered.green.icon, +i.inverted.circular.green.icon, +i.inverted.bordered.ui.button.getting-started-btn.icon, +i.inverted.circular.ui.button.getting-started-btn.icon, +i.inverted.bordered.play-button.button.getting-started-btn.icon, +i.inverted.circular.play-button.button.getting-started-btn.icon, +i.inverted.bordered.ui.play-button.getting-started-btn.icon, +i.inverted.circular.ui.play-button.getting-started-btn.icon, +i.inverted.bordered.download-button.button.getting-started-btn.icon, +i.inverted.circular.download-button.button.getting-started-btn.icon, +i.inverted.bordered.ui.download-button.getting-started-btn.icon, +i.inverted.circular.ui.download-button.getting-started-btn.icon { + background-color: #3FC863 !important; + color: #FFFFFF !important; +} +/* Teal */ +i.teal.icon { + color: #008272 !important; +} +i.inverted.teal.icon { + color: #6DFFFF !important; +} +i.inverted.bordered.teal.icon, +i.inverted.circular.teal.icon { + background-color: #008272 !important; + color: #FFFFFF !important; +} +/* Blue */ +i.blue.icon, +i.play-button.icon { + color: #54C9C9 !important; +} +i.inverted.blue.icon, +i.inverted.play-button.icon { + color: #54C8FF !important; +} +i.inverted.bordered.blue.icon, +i.inverted.circular.blue.icon, +i.inverted.bordered.play-button.icon, +i.inverted.circular.play-button.icon { + background-color: #54C9C9 !important; + color: #FFFFFF !important; +} +/* Violet */ +i.violet.icon { + color: #C90072 !important; +} +i.inverted.violet.icon { + color: #A291FB !important; +} +i.inverted.bordered.violet.icon, +i.inverted.circular.violet.icon { + background-color: #C90072 !important; + color: #FFFFFF !important; +} +/* Purple */ +i.purple.icon { + color: #8169E6 !important; +} +i.inverted.purple.icon { + color: #DC73FF !important; +} +i.inverted.bordered.purple.icon, +i.inverted.circular.purple.icon { + background-color: #8169E6 !important; + color: #FFFFFF !important; +} +/* Pink */ +i.pink.icon { + color: #E2008C !important; +} +i.inverted.pink.icon { + color: #FF8EDF !important; +} +i.inverted.bordered.pink.icon, +i.inverted.circular.pink.icon { + background-color: #E2008C !important; + color: #FFFFFF !important; +} +/* Brown */ +i.brown.icon { + color: #6B5B4C !important; +} +i.inverted.brown.icon { + color: #D67C1C !important; +} +i.inverted.bordered.brown.icon, +i.inverted.circular.brown.icon { + background-color: #6B5B4C !important; + color: #FFFFFF !important; +} +/* Grey */ +i.grey.icon, +i.ui.button.editortools-btn.icon, +i.play-button.button.editortools-btn.icon, +i.ui.play-button.editortools-btn.icon, +i.download-button.button.editortools-btn.icon, +i.ui.download-button.editortools-btn.icon { + color: #42495F !important; +} +i.inverted.grey.icon, +i.inverted.ui.button.editortools-btn.icon, +i.inverted.play-button.button.editortools-btn.icon, +i.inverted.ui.play-button.editortools-btn.icon, +i.inverted.download-button.button.editortools-btn.icon, +i.inverted.ui.download-button.editortools-btn.icon { + color: #DCDDDE !important; +} +i.inverted.bordered.grey.icon, +i.inverted.circular.grey.icon, +i.inverted.bordered.ui.button.editortools-btn.icon, +i.inverted.circular.ui.button.editortools-btn.icon, +i.inverted.bordered.play-button.button.editortools-btn.icon, +i.inverted.circular.play-button.button.editortools-btn.icon, +i.inverted.bordered.ui.play-button.editortools-btn.icon, +i.inverted.circular.ui.play-button.editortools-btn.icon, +i.inverted.bordered.download-button.button.editortools-btn.icon, +i.inverted.circular.download-button.button.editortools-btn.icon, +i.inverted.bordered.ui.download-button.editortools-btn.icon, +i.inverted.circular.ui.download-button.editortools-btn.icon { + background-color: #42495F !important; + color: #FFFFFF !important; +} +/* Black */ +i.black.icon { + color: #1B1C1D !important; +} +i.inverted.black.icon { + color: #545454 !important; +} +i.inverted.bordered.black.icon, +i.inverted.circular.black.icon { + background-color: #1B1C1D !important; + color: #FFFFFF !important; +} +/*------------------- + Sizes +--------------------*/ +i.mini.icon, +i.mini.icons { + line-height: 1; + font-size: 0.4em; +} +i.tiny.icon, +i.tiny.icons { + line-height: 1; + font-size: 0.5em; +} +i.small.icon, +i.small.icons { + line-height: 1; + font-size: 0.75em; +} +i.icon, +i.icons { + font-size: 1em; +} +i.large.icon, +i.large.icons { + line-height: 1; + vertical-align: middle; + font-size: 1.5em; +} +i.big.icon, +i.big.icons { + line-height: 1; + vertical-align: middle; + font-size: 2em; +} +i.huge.icon, +i.huge.icons { + line-height: 1; + vertical-align: middle; + font-size: 4em; +} +i.massive.icon, +i.massive.icons { + line-height: 1; + vertical-align: middle; + font-size: 8em; +} +/******************************* + Groups +*******************************/ +i.icons { + display: inline-block; + position: relative; + line-height: 1; +} +i.icons .icon { + position: absolute; + top: 50%; + left: 50%; + transform: translateX(-50%) translateY(-50%); + margin: 0em; + margin: 0; +} +i.icons .icon:first-child { + position: static; + width: auto; + height: auto; + vertical-align: top; + transform: none; + margin-right: 0.25rem; +} +/* Corner Icon */ +i.icons .corner.icon { + top: auto; + left: auto; + right: 0; + bottom: 0; + transform: none; + font-size: 0.45em; + text-shadow: -1px -1px 0 #FFFFFF, 1px -1px 0 #FFFFFF, -1px 1px 0 #FFFFFF, 1px 1px 0 #FFFFFF; +} +i.icons .top.right.corner.icon { + top: 0; + left: auto; + right: 0; + bottom: auto; +} +i.icons .top.left.corner.icon { + top: 0; + left: 0; + right: auto; + bottom: auto; +} +i.icons .bottom.left.corner.icon { + top: auto; + left: 0; + right: auto; + bottom: 0; +} +i.icons .bottom.right.corner.icon { + top: auto; + left: auto; + right: 0; + bottom: 0; +} +i.icons .inverted.corner.icon { + text-shadow: -1px -1px 0 #1B1C1D, 1px -1px 0 #1B1C1D, -1px 1px 0 #1B1C1D, 1px 1px 0 #1B1C1D; +} +/* + * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome + * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) + */ +/******************************* + +Semantic-UI integration of font-awesome : + +///class names are separated +i.icon.circle => i.icon.circle +i.icon.circle-o => i.icon.circle.outline + +//abbreviation are replaced by full letters: +i.icon.ellipsis-h => i.icon.ellipsis.horizontal +i.icon.ellipsis-v => i.icon.ellipsis.vertical +.alpha => .i.icon.alphabet +.asc => .i.icon.ascending +.desc => .i.icon.descending +.alt =>.alternate + +ASCII order is conserved for easier maintenance. + +Icons that only have one style 'outline', 'square' etc do not require this class +for instance `lemon icon` not `lemon outline icon` since there is only one lemon + +*******************************/ +/******************************* + Icons +*******************************/ +/* Web Content */ +i.icon.search:before { + content: "\f002"; +} +i.icon.mail.outline:before { + content: "\f003"; +} +i.icon.signal:before { + content: "\f012"; +} +i.icon.setting:before { + content: "\f013"; +} +i.icon.home:before { + content: "\f015"; +} +i.icon.inbox:before { + content: "\f01c"; +} +i.icon.browser:before { + content: "\f022"; +} +i.icon.tag:before { + content: "\f02b"; +} +i.icon.tags:before { + content: "\f02c"; +} +i.icon.image:before { + content: "\f03e"; +} +i.icon.calendar:before { + content: "\f073"; +} +i.icon.comment:before { + content: "\f075"; +} +i.icon.shop:before { + content: "\f07a"; +} +i.icon.comments:before { + content: "\f086"; +} +i.icon.external:before { + content: "\f08e"; +} +i.icon.privacy:before { + content: "\f084"; +} +i.icon.settings:before { + content: "\f085"; +} +i.icon.comments:before { + content: "\f086"; +} +i.icon.external:before { + content: "\f08e"; +} +i.icon.trophy:before { + content: "\f091"; +} +i.icon.payment:before { + content: "\f09d"; +} +i.icon.feed:before { + content: "\f09e"; +} +i.icon.alarm.outline:before { + content: "\f0a2"; +} +i.icon.tasks:before { + content: "\f0ae"; +} +i.icon.cloud:before { + content: "\f0c2"; +} +i.icon.lab:before { + content: "\f0c3"; +} +i.icon.mail:before { + content: "\f0e0"; +} +i.icon.dashboard:before { + content: "\f0e4"; +} +i.icon.comment.outline:before { + content: "\f0e5"; +} +i.icon.comments.outline:before { + content: "\f0e6"; +} +i.icon.sitemap:before { + content: "\f0e8"; +} +i.icon.idea:before { + content: "\f0eb"; +} +i.icon.alarm:before { + content: "\f0f3"; +} +i.icon.terminal:before { + content: "\f120"; +} +i.icon.code:before { + content: "\f121"; +} +i.icon.protect:before { + content: "\f132"; +} +i.icon.calendar.outline:before { + content: "\f133"; +} +i.icon.ticket:before { + content: "\f145"; +} +i.icon.external.square:before { + content: "\f14c"; +} +i.icon.bug:before { + content: "\f188"; +} +i.icon.mail.square:before { + content: "\f199"; +} +i.icon.history:before { + content: "\f1da"; +} +i.icon.options:before { + content: "\f1de"; +} +i.icon.text.telephone:before { + content: "\f1e4"; +} +i.icon.find:before { + content: "\f1e5"; +} +i.icon.alarm.mute:before { + content: "\f1f6"; +} +i.icon.alarm.mute.outline:before { + content: "\f1f7"; +} +i.icon.copyright:before { + content: "\f1f9"; +} +i.icon.at:before { + content: "\f1fa"; +} +i.icon.eyedropper:before { + content: "\f1fb"; +} +i.icon.paint.brush:before { + content: "\f1fc"; +} +i.icon.heartbeat:before { + content: "\f21e"; +} +i.icon.mouse.pointer:before { + content: "\f245"; +} +i.icon.hourglass.empty:before { + content: "\f250"; +} +i.icon.hourglass.start:before { + content: "\f251"; +} +i.icon.hourglass.half:before { + content: "\f252"; +} +i.icon.hourglass.end:before { + content: "\f253"; +} +i.icon.hourglass.full:before { + content: "\f254"; +} +i.icon.hand.pointer:before { + content: "\f25a"; +} +i.icon.trademark:before { + content: "\f25c"; +} +i.icon.registered:before { + content: "\f25d"; +} +i.icon.creative.commons:before { + content: "\f25e"; +} +i.icon.add.to.calendar:before { + content: "\f271"; +} +i.icon.remove.from.calendar:before { + content: "\f272"; +} +i.icon.delete.calendar:before { + content: "\f273"; +} +i.icon.checked.calendar:before { + content: "\f274"; +} +i.icon.industry:before { + content: "\f275"; +} +i.icon.shopping.bag:before { + content: "\f290"; +} +i.icon.shopping.basket:before { + content: "\f291"; +} +i.icon.hashtag:before { + content: "\f292"; +} +i.icon.percent:before { + content: "\f295"; +} +i.icon.handshake:before { + content: "\f2b5"; +} +i.icon.open.envelope:before { + content: "\f2b6"; +} +i.icon.open.envelope.outline:before { + content: "\f2b7"; +} +i.icon.address.book:before { + content: "\f2b9"; +} +i.icon.address.book.outline:before { + content: "\f2ba"; +} +i.icon.address.card:before { + content: "\f2bb"; +} +i.icon.address.card.outline:before { + content: "\f2bc"; +} +i.icon.id.badge:before { + content: "\f2c1"; +} +i.icon.id.card:before { + content: "\f2c2"; +} +i.icon.id.card.outline:before { + content: "\f2c3"; +} +i.icon.podcast:before { + content: "\f2ce"; +} +i.icon.window.maximize:before { + content: "\f2d0"; +} +i.icon.window.minimize:before { + content: "\f2d1"; +} +i.icon.window.restore:before { + content: "\f2d2"; +} +i.icon.window.close:before { + content: "\f2d3"; +} +i.icon.window.close.outline:before { + content: "\f2d4"; +} +/* User Actions */ +i.icon.wait:before { + content: "\f017"; +} +i.icon.download:before { + content: "\f019"; +} +i.icon.repeat:before { + content: "\f01e"; +} +i.icon.refresh:before { + content: "\f021"; +} +i.icon.lock:before { + content: "\f023"; +} +i.icon.bookmark:before { + content: "\f02e"; +} +i.icon.print:before { + content: "\f02f"; +} +i.icon.write:before { + content: "\f040"; +} +i.icon.adjust:before { + content: "\f042"; +} +i.icon.theme:before { + content: "\f043"; +} +i.icon.edit:before { + content: "\f044"; +} +i.icon.external.share:before { + content: "\f045"; +} +i.icon.ban:before { + content: "\f05e"; +} +i.icon.mail.forward:before { + content: "\f064"; +} +i.icon.share:before { + content: "\f064"; +} +i.icon.expand:before { + content: "\f065"; +} +i.icon.compress:before { + content: "\f066"; +} +i.icon.unhide:before { + content: "\f06e"; +} +i.icon.hide:before { + content: "\f070"; +} +i.icon.random:before { + content: "\f074"; +} +i.icon.retweet:before { + content: "\f079"; +} +i.icon.sign.out:before { + content: "\f08b"; +} +i.icon.pin:before { + content: "\f08d"; +} +i.icon.sign.in:before { + content: "\f090"; +} +i.icon.upload:before { + content: "\f093"; +} +i.icon.call:before { + content: "\f095"; +} +i.icon.remove.bookmark:before { + content: "\f097"; +} +i.icon.call.square:before { + content: "\f098"; +} +i.icon.unlock:before { + content: "\f09c"; +} +i.icon.configure:before { + content: "\f0ad"; +} +i.icon.filter:before { + content: "\f0b0"; +} +i.icon.wizard:before { + content: "\f0d0"; +} +i.icon.undo:before { + content: "\f0e2"; +} +i.icon.exchange:before { + content: "\f0ec"; +} +i.icon.cloud.download:before { + content: "\f0ed"; +} +i.icon.cloud.upload:before { + content: "\f0ee"; +} +i.icon.reply:before { + content: "\f112"; +} +i.icon.reply.all:before { + content: "\f122"; +} +i.icon.erase:before { + content: "\f12d"; +} +i.icon.unlock.alternate:before { + content: "\f13e"; +} +i.icon.write.square:before { + content: "\f14b"; +} +i.icon.share.square:before { + content: "\f14d"; +} +i.icon.archive:before { + content: "\f187"; +} +i.icon.translate:before { + content: "\f1ab"; +} +i.icon.recycle:before { + content: "\f1b8"; +} +i.icon.send:before { + content: "\f1d8"; +} +i.icon.send.outline:before { + content: "\f1d9"; +} +i.icon.share.alternate:before { + content: "\f1e0"; +} +i.icon.share.alternate.square:before { + content: "\f1e1"; +} +i.icon.add.to.cart:before { + content: "\f217"; +} +i.icon.in.cart:before { + content: "\f218"; +} +i.icon.add.user:before { + content: "\f234"; +} +i.icon.remove.user:before { + content: "\f235"; +} +i.icon.object.group:before { + content: "\f247"; +} +i.icon.object.ungroup:before { + content: "\f248"; +} +i.icon.clone:before { + content: "\f24d"; +} +i.icon.talk:before { + content: "\f27a"; +} +i.icon.talk.outline:before { + content: "\f27b"; +} +/* Messages */ +i.icon.help.circle:before { + content: "\f059"; +} +i.icon.info.circle:before { + content: "\f05a"; +} +i.icon.warning.circle:before { + content: "\f06a"; +} +i.icon.warning.sign:before { + content: "\f071"; +} +i.icon.announcement:before { + content: "\f0a1"; +} +i.icon.help:before { + content: "\f128"; +} +i.icon.info:before { + content: "\f129"; +} +i.icon.warning:before { + content: "\f12a"; +} +i.icon.birthday:before { + content: "\f1fd"; +} +i.icon.help.circle.outline:before { + content: "\f29c"; +} +/* Users */ +i.icon.user:before { + content: "\f007"; +} +i.icon.users:before { + content: "\f0c0"; +} +i.icon.doctor:before { + content: "\f0f0"; +} +i.icon.handicap:before { + content: "\f193"; +} +i.icon.student:before { + content: "\f19d"; +} +i.icon.child:before { + content: "\f1ae"; +} +i.icon.spy:before { + content: "\f21b"; +} +i.icon.user.circle:before { + content: "\f2bd"; +} +i.icon.user.circle.outline:before { + content: "\f2be"; +} +i.icon.user.outline:before { + content: "\f2c0"; +} +/* Gender & Sexuality */ +i.icon.female:before { + content: "\f182"; +} +i.icon.male:before { + content: "\f183"; +} +i.icon.woman:before { + content: "\f221"; +} +i.icon.man:before { + content: "\f222"; +} +i.icon.non.binary.transgender:before { + content: "\f223"; +} +i.icon.intergender:before { + content: "\f224"; +} +i.icon.transgender:before { + content: "\f225"; +} +i.icon.lesbian:before { + content: "\f226"; +} +i.icon.gay:before { + content: "\f227"; +} +i.icon.heterosexual:before { + content: "\f228"; +} +i.icon.other.gender:before { + content: "\f229"; +} +i.icon.other.gender.vertical:before { + content: "\f22a"; +} +i.icon.other.gender.horizontal:before { + content: "\f22b"; +} +i.icon.neuter:before { + content: "\f22c"; +} +i.icon.genderless:before { + content: "\f22d"; +} +/* Accessibility */ +i.icon.universal.access:before { + content: "\f29a"; +} +i.icon.wheelchair:before { + content: "\f29b"; +} +i.icon.blind:before { + content: "\f29d"; +} +i.icon.audio.description:before { + content: "\f29e"; +} +i.icon.volume.control.phone:before { + content: "\f2a0"; +} +i.icon.braille:before { + content: "\f2a1"; +} +i.icon.asl:before { + content: "\f2a3"; +} +i.icon.assistive.listening.systems:before { + content: "\f2a2"; +} +i.icon.deafness:before { + content: "\f2a4"; +} +i.icon.sign.language:before { + content: "\f2a7"; +} +i.icon.low.vision:before { + content: "\f2a8"; +} +/* View Adjustment */ +i.icon.block.layout:before { + content: "\f009"; +} +i.icon.grid.layout:before { + content: "\f00a"; +} +i.icon.list.layout:before { + content: "\f00b"; +} +i.icon.zoom:before { + content: "\f00e"; +} +i.icon.zoom.out:before { + content: "\f010"; +} +i.icon.resize.vertical:before { + content: "\f07d"; +} +i.icon.resize.horizontal:before { + content: "\f07e"; +} +i.icon.maximize:before { + content: "\f0b2"; +} +i.icon.crop:before { + content: "\f125"; +} +/* Literal Objects */ +i.icon.cocktail:before { + content: "\f000"; +} +i.icon.road:before { + content: "\f018"; +} +i.icon.flag:before { + content: "\f024"; +} +i.icon.book:before { + content: "\f02d"; +} +i.icon.gift:before { + content: "\f06b"; +} +i.icon.leaf:before { + content: "\f06c"; +} +i.icon.fire:before { + content: "\f06d"; +} +i.icon.plane:before { + content: "\f072"; +} +i.icon.magnet:before { + content: "\f076"; +} +i.icon.lemon:before { + content: "\f094"; +} +i.icon.world:before { + content: "\f0ac"; +} +i.icon.travel:before { + content: "\f0b1"; +} +i.icon.shipping:before { + content: "\f0d1"; +} +i.icon.money:before { + content: "\f0d6"; +} +i.icon.legal:before { + content: "\f0e3"; +} +i.icon.lightning:before { + content: "\f0e7"; +} +i.icon.umbrella:before { + content: "\f0e9"; +} +i.icon.treatment:before { + content: "\f0f1"; +} +i.icon.suitcase:before { + content: "\f0f2"; +} +i.icon.bar:before { + content: "\f0fc"; +} +i.icon.flag.outline:before { + content: "\f11d"; +} +i.icon.flag.checkered:before { + content: "\f11e"; +} +i.icon.puzzle:before { + content: "\f12e"; +} +i.icon.fire.extinguisher:before { + content: "\f134"; +} +i.icon.rocket:before { + content: "\f135"; +} +i.icon.anchor:before { + content: "\f13d"; +} +i.icon.bullseye:before { + content: "\f140"; +} +i.icon.sun:before { + content: "\f185"; +} +i.icon.moon:before { + content: "\f186"; +} +i.icon.fax:before { + content: "\f1ac"; +} +i.icon.life.ring:before { + content: "\f1cd"; +} +i.icon.bomb:before { + content: "\f1e2"; +} +i.icon.soccer:before { + content: "\f1e3"; +} +i.icon.calculator:before { + content: "\f1ec"; +} +i.icon.diamond:before { + content: "\f219"; +} +i.icon.sticky.note:before { + content: "\f249"; +} +i.icon.sticky.note.outline:before { + content: "\f24a"; +} +i.icon.law:before { + content: "\f24e"; +} +i.icon.hand.peace:before { + content: "\f25b"; +} +i.icon.hand.rock:before { + content: "\f255"; +} +i.icon.hand.paper:before { + content: "\f256"; +} +i.icon.hand.scissors:before { + content: "\f257"; +} +i.icon.hand.lizard:before { + content: "\f258"; +} +i.icon.hand.spock:before { + content: "\f259"; +} +i.icon.tv:before { + content: "\f26c"; +} +i.icon.thermometer.full:before { + content: "\f2c7"; +} +i.icon.thermometer.three.quarters:before { + content: "\f2c8"; +} +i.icon.thermometer.half:before { + content: "\f2c9"; +} +i.icon.thermometer.quarter:before { + content: "\f2ca"; +} +i.icon.thermometer.empty:before { + content: "\f2cb"; +} +i.icon.shower:before { + content: "\f2cc"; +} +i.icon.bathtub:before { + content: "\f2cd"; +} +i.icon.snowflake:before { + content: "\f2dc"; +} +/* Shapes */ +i.icon.crosshairs:before { + content: "\f05b"; +} +i.icon.asterisk:before { + content: "\f069"; +} +i.icon.square.outline:before { + content: "\f096"; +} +i.icon.certificate:before { + content: "\f0a3"; +} +i.icon.square:before { + content: "\f0c8"; +} +i.icon.quote.left:before { + content: "\f10d"; +} +i.icon.quote.right:before { + content: "\f10e"; +} +i.icon.spinner:before { + content: "\f110"; +} +i.icon.circle:before { + content: "\f111"; +} +i.icon.ellipsis.horizontal:before { + content: "\f141"; +} +i.icon.ellipsis.vertical:before { + content: "\f142"; +} +i.icon.cube:before { + content: "\f1b2"; +} +i.icon.cubes:before { + content: "\f1b3"; +} +i.icon.circle.notched:before { + content: "\f1ce"; +} +i.icon.circle.thin:before { + content: "\f1db"; +} +/* Item Selection */ +i.icon.checkmark:before { + content: "\f00c"; +} +i.icon.remove:before { + content: "\f00d"; +} +i.icon.checkmark.box:before { + content: "\f046"; +} +i.icon.move:before { + content: "\f047"; +} +i.icon.add.circle:before { + content: "\f055"; +} +i.icon.minus.circle:before { + content: "\f056"; +} +i.icon.remove.circle:before { + content: "\f057"; +} +i.icon.check.circle:before { + content: "\f058"; +} +i.icon.remove.circle.outline:before { + content: "\f05c"; +} +i.icon.check.circle.outline:before { + content: "\f05d"; +} +i.icon.plus:before { + content: "\f067"; +} +i.icon.minus:before { + content: "\f068"; +} +i.icon.add.square:before { + content: "\f0fe"; +} +i.icon.radio:before { + content: "\f10c"; +} +i.icon.minus.square:before { + content: "\f146"; +} +i.icon.minus.square.outline:before { + content: "\f147"; +} +i.icon.check.square:before { + content: "\f14a"; +} +i.icon.selected.radio:before { + content: "\f192"; +} +i.icon.plus.square.outline:before { + content: "\f196"; +} +i.icon.toggle.off:before { + content: "\f204"; +} +i.icon.toggle.on:before { + content: "\f205"; +} +/* Media */ +i.icon.film:before { + content: "\f008"; +} +i.icon.sound:before { + content: "\f025"; +} +i.icon.photo:before { + content: "\f030"; +} +i.icon.bar.chart:before { + content: "\f080"; +} +i.icon.camera.retro:before { + content: "\f083"; +} +i.icon.newspaper:before { + content: "\f1ea"; +} +i.icon.area.chart:before { + content: "\f1fe"; +} +i.icon.pie.chart:before { + content: "\f200"; +} +i.icon.line.chart:before { + content: "\f201"; +} +/* Pointers */ +i.icon.arrow.circle.outline.down:before { + content: "\f01a"; +} +i.icon.arrow.circle.outline.up:before { + content: "\f01b"; +} +i.icon.chevron.left:before { + content: "\f053"; +} +i.icon.chevron.right:before { + content: "\f054"; +} +i.icon.arrow.left:before { + content: "\f060"; +} +i.icon.arrow.right:before { + content: "\f061"; +} +i.icon.arrow.up:before { + content: "\f062"; +} +i.icon.arrow.down:before { + content: "\f063"; +} +i.icon.chevron.up:before { + content: "\f077"; +} +i.icon.chevron.down:before { + content: "\f078"; +} +i.icon.pointing.right:before { + content: "\f0a4"; +} +i.icon.pointing.left:before { + content: "\f0a5"; +} +i.icon.pointing.up:before { + content: "\f0a6"; +} +i.icon.pointing.down:before { + content: "\f0a7"; +} +i.icon.arrow.circle.left:before { + content: "\f0a8"; +} +i.icon.arrow.circle.right:before { + content: "\f0a9"; +} +i.icon.arrow.circle.up:before { + content: "\f0aa"; +} +i.icon.arrow.circle.down:before { + content: "\f0ab"; +} +i.icon.caret.down:before { + content: "\f0d7"; +} +i.icon.caret.up:before { + content: "\f0d8"; +} +i.icon.caret.left:before { + content: "\f0d9"; +} +i.icon.caret.right:before { + content: "\f0da"; +} +i.icon.angle.double.left:before { + content: "\f100"; +} +i.icon.angle.double.right:before { + content: "\f101"; +} +i.icon.angle.double.up:before { + content: "\f102"; +} +i.icon.angle.double.down:before { + content: "\f103"; +} +i.icon.angle.left:before { + content: "\f104"; +} +i.icon.angle.right:before { + content: "\f105"; +} +i.icon.angle.up:before { + content: "\f106"; +} +i.icon.angle.down:before { + content: "\f107"; +} +i.icon.chevron.circle.left:before { + content: "\f137"; +} +i.icon.chevron.circle.right:before { + content: "\f138"; +} +i.icon.chevron.circle.up:before { + content: "\f139"; +} +i.icon.chevron.circle.down:before { + content: "\f13a"; +} +i.icon.toggle.down:before { + content: "\f150"; +} +i.icon.toggle.up:before { + content: "\f151"; +} +i.icon.toggle.right:before { + content: "\f152"; +} +i.icon.long.arrow.down:before { + content: "\f175"; +} +i.icon.long.arrow.up:before { + content: "\f176"; +} +i.icon.long.arrow.left:before { + content: "\f177"; +} +i.icon.long.arrow.right:before { + content: "\f178"; +} +i.icon.arrow.circle.outline.right:before { + content: "\f18e"; +} +i.icon.arrow.circle.outline.left:before { + content: "\f190"; +} +i.icon.toggle.left:before { + content: "\f191"; +} +/* Mobile */ +i.icon.tablet:before { + content: "\f10a"; +} +i.icon.mobile:before { + content: "\f10b"; +} +i.icon.battery.full:before { + content: "\f240"; +} +i.icon.battery.high:before { + content: "\f241"; +} +i.icon.battery.medium:before { + content: "\f242"; +} +i.icon.battery.low:before { + content: "\f243"; +} +i.icon.battery.empty:before { + content: "\f244"; +} +/* Computer */ +i.icon.power:before { + content: "\f011"; +} +i.icon.trash.outline:before { + content: "\f014"; +} +i.icon.disk.outline:before { + content: "\f0a0"; +} +i.icon.desktop:before { + content: "\f108"; +} +i.icon.laptop:before { + content: "\f109"; +} +i.icon.game:before { + content: "\f11b"; +} +i.icon.keyboard:before { + content: "\f11c"; +} +i.icon.plug:before { + content: "\f1e6"; +} +/* File System */ +i.icon.trash:before { + content: "\f1f8"; +} +i.icon.file.outline:before { + content: "\f016"; +} +i.icon.folder:before { + content: "\f07b"; +} +i.icon.folder.open:before { + content: "\f07c"; +} +i.icon.file.text.outline:before { + content: "\f0f6"; +} +i.icon.folder.outline:before { + content: "\f114"; +} +i.icon.folder.open.outline:before { + content: "\f115"; +} +i.icon.level.up:before { + content: "\f148"; +} +i.icon.level.down:before { + content: "\f149"; +} +i.icon.file:before { + content: "\f15b"; +} +i.icon.file.text:before { + content: "\f15c"; +} +i.icon.file.pdf.outline:before { + content: "\f1c1"; +} +i.icon.file.word.outline:before { + content: "\f1c2"; +} +i.icon.file.excel.outline:before { + content: "\f1c3"; +} +i.icon.file.powerpoint.outline:before { + content: "\f1c4"; +} +i.icon.file.image.outline:before { + content: "\f1c5"; +} +i.icon.file.archive.outline:before { + content: "\f1c6"; +} +i.icon.file.audio.outline:before { + content: "\f1c7"; +} +i.icon.file.video.outline:before { + content: "\f1c8"; +} +i.icon.file.code.outline:before { + content: "\f1c9"; +} +/* Technologies */ +i.icon.qrcode:before { + content: "\f029"; +} +i.icon.barcode:before { + content: "\f02a"; +} +i.icon.rss:before { + content: "\f09e"; +} +i.icon.fork:before { + content: "\f126"; +} +i.icon.html5:before { + content: "\f13b"; +} +i.icon.css3:before { + content: "\f13c"; +} +i.icon.rss.square:before { + content: "\f143"; +} +i.icon.openid:before { + content: "\f19b"; +} +i.icon.database:before { + content: "\f1c0"; +} +i.icon.wifi:before { + content: "\f1eb"; +} +i.icon.server:before { + content: "\f233"; +} +i.icon.usb:before { + content: "\f287"; +} +i.icon.bluetooth:before { + content: "\f293"; +} +i.icon.bluetooth.alternative:before { + content: "\f294"; +} +i.icon.microchip:before { + content: "\f2db"; +} +/* Rating */ +i.icon.heart:before { + content: "\f004"; +} +i.icon.star:before { + content: "\f005"; +} +i.icon.empty.star:before { + content: "\f006"; +} +i.icon.thumbs.outline.up:before { + content: "\f087"; +} +i.icon.thumbs.outline.down:before { + content: "\f088"; +} +i.icon.star.half:before { + content: "\f089"; +} +i.icon.empty.heart:before { + content: "\f08a"; +} +i.icon.smile:before { + content: "\f118"; +} +i.icon.frown:before { + content: "\f119"; +} +i.icon.meh:before { + content: "\f11a"; +} +i.icon.star.half.empty:before { + content: "\f123"; +} +i.icon.thumbs.up:before { + content: "\f164"; +} +i.icon.thumbs.down:before { + content: "\f165"; +} +/* Audio */ +i.icon.music:before { + content: "\f001"; +} +i.icon.video.play.outline:before { + content: "\f01d"; +} +i.icon.volume.off:before { + content: "\f026"; +} +i.icon.volume.down:before { + content: "\f027"; +} +i.icon.volume.up:before { + content: "\f028"; +} +i.icon.record:before { + content: "\f03d"; +} +i.icon.step.backward:before { + content: "\f048"; +} +i.icon.fast.backward:before { + content: "\f049"; +} +i.icon.backward:before { + content: "\f04a"; +} +i.icon.play:before { + content: "\f04b"; +} +i.icon.pause:before { + content: "\f04c"; +} +i.icon.stop:before { + content: "\f04d"; +} +i.icon.forward:before { + content: "\f04e"; +} +i.icon.fast.forward:before { + content: "\f050"; +} +i.icon.step.forward:before { + content: "\f051"; +} +i.icon.eject:before { + content: "\f052"; +} +i.icon.unmute:before { + content: "\f130"; +} +i.icon.mute:before { + content: "\f131"; +} +i.icon.video.play:before { + content: "\f144"; +} +i.icon.closed.captioning:before { + content: "\f20a"; +} +i.icon.pause.circle:before { + content: "\f28b"; +} +i.icon.pause.circle.outline:before { + content: "\f28c"; +} +i.icon.stop.circle:before { + content: "\f28d"; +} +i.icon.stop.circle.outline:before { + content: "\f28e"; +} +/* Map, Locations, & Transportation */ +i.icon.marker:before { + content: "\f041"; +} +i.icon.coffee:before { + content: "\f0f4"; +} +i.icon.food:before { + content: "\f0f5"; +} +i.icon.building.outline:before { + content: "\f0f7"; +} +i.icon.hospital:before { + content: "\f0f8"; +} +i.icon.emergency:before { + content: "\f0f9"; +} +i.icon.first.aid:before { + content: "\f0fa"; +} +i.icon.military:before { + content: "\f0fb"; +} +i.icon.h:before { + content: "\f0fd"; +} +i.icon.location.arrow:before { + content: "\f124"; +} +i.icon.compass:before { + content: "\f14e"; +} +i.icon.space.shuttle:before { + content: "\f197"; +} +i.icon.university:before { + content: "\f19c"; +} +i.icon.building:before { + content: "\f1ad"; +} +i.icon.paw:before { + content: "\f1b0"; +} +i.icon.spoon:before { + content: "\f1b1"; +} +i.icon.car:before { + content: "\f1b9"; +} +i.icon.taxi:before { + content: "\f1ba"; +} +i.icon.tree:before { + content: "\f1bb"; +} +i.icon.bicycle:before { + content: "\f206"; +} +i.icon.bus:before { + content: "\f207"; +} +i.icon.ship:before { + content: "\f21a"; +} +i.icon.motorcycle:before { + content: "\f21c"; +} +i.icon.street.view:before { + content: "\f21d"; +} +i.icon.hotel:before { + content: "\f236"; +} +i.icon.train:before { + content: "\f238"; +} +i.icon.subway:before { + content: "\f239"; +} +i.icon.map.pin:before { + content: "\f276"; +} +i.icon.map.signs:before { + content: "\f277"; +} +i.icon.map.outline:before { + content: "\f278"; +} +i.icon.map:before { + content: "\f279"; +} +/* Tables */ +i.icon.table:before { + content: "\f0ce"; +} +i.icon.columns:before { + content: "\f0db"; +} +i.icon.sort:before { + content: "\f0dc"; +} +i.icon.sort.descending:before { + content: "\f0dd"; +} +i.icon.sort.ascending:before { + content: "\f0de"; +} +i.icon.sort.alphabet.ascending:before { + content: "\f15d"; +} +i.icon.sort.alphabet.descending:before { + content: "\f15e"; +} +i.icon.sort.content.ascending:before { + content: "\f160"; +} +i.icon.sort.content.descending:before { + content: "\f161"; +} +i.icon.sort.numeric.ascending:before { + content: "\f162"; +} +i.icon.sort.numeric.descending:before { + content: "\f163"; +} +/* Text Editor */ +i.icon.font:before { + content: "\f031"; +} +i.icon.bold:before { + content: "\f032"; +} +i.icon.italic:before { + content: "\f033"; +} +i.icon.text.height:before { + content: "\f034"; +} +i.icon.text.width:before { + content: "\f035"; +} +i.icon.align.left:before { + content: "\f036"; +} +i.icon.align.center:before { + content: "\f037"; +} +i.icon.align.right:before { + content: "\f038"; +} +i.icon.align.justify:before { + content: "\f039"; +} +i.icon.list:before { + content: "\f03a"; +} +i.icon.outdent:before { + content: "\f03b"; +} +i.icon.indent:before { + content: "\f03c"; +} +i.icon.linkify:before { + content: "\f0c1"; +} +i.icon.cut:before { + content: "\f0c4"; +} +i.icon.copy:before { + content: "\f0c5"; +} +i.icon.attach:before { + content: "\f0c6"; +} +i.icon.save:before { + content: "\f0c7"; +} +i.icon.content:before { + content: "\f0c9"; +} +i.icon.unordered.list:before { + content: "\f0ca"; +} +i.icon.ordered.list:before { + content: "\f0cb"; +} +i.icon.strikethrough:before { + content: "\f0cc"; +} +i.icon.underline:before { + content: "\f0cd"; +} +i.icon.paste:before { + content: "\f0ea"; +} +i.icon.unlinkify:before { + content: "\f127"; +} +i.icon.superscript:before { + content: "\f12b"; +} +i.icon.subscript:before { + content: "\f12c"; +} +i.icon.header:before { + content: "\f1dc"; +} +i.icon.paragraph:before { + content: "\f1dd"; +} +i.icon.text.cursor:before { + content: "\f246"; +} +/* Currency */ +i.icon.euro:before { + content: "\f153"; +} +i.icon.pound:before { + content: "\f154"; +} +i.icon.dollar:before { + content: "\f155"; +} +i.icon.rupee:before { + content: "\f156"; +} +i.icon.yen:before { + content: "\f157"; +} +i.icon.ruble:before { + content: "\f158"; +} +i.icon.won:before { + content: "\f159"; +} +i.icon.bitcoin:before { + content: "\f15a"; +} +i.icon.lira:before { + content: "\f195"; +} +i.icon.shekel:before { + content: "\f20b"; +} +/* Payment Options */ +i.icon.paypal:before { + content: "\f1ed"; +} +i.icon.google.wallet:before { + content: "\f1ee"; +} +i.icon.visa:before { + content: "\f1f0"; +} +i.icon.mastercard:before { + content: "\f1f1"; +} +i.icon.discover:before { + content: "\f1f2"; +} +i.icon.american.express:before { + content: "\f1f3"; +} +i.icon.paypal.card:before { + content: "\f1f4"; +} +i.icon.stripe:before { + content: "\f1f5"; +} +i.icon.japan.credit.bureau:before { + content: "\f24b"; +} +i.icon.diners.club:before { + content: "\f24c"; +} +i.icon.credit.card.alternative:before { + content: "\f283"; +} +/* Networks and Websites*/ +i.icon.twitter.square:before { + content: "\f081"; +} +i.icon.facebook.square:before { + content: "\f082"; +} +i.icon.linkedin.square:before { + content: "\f08c"; +} +i.icon.github.square:before { + content: "\f092"; +} +i.icon.twitter:before { + content: "\f099"; +} +i.icon.facebook.f:before { + content: "\f09a"; +} +i.icon.github:before { + content: "\f09b"; +} +i.icon.pinterest:before { + content: "\f0d2"; +} +i.icon.pinterest.square:before { + content: "\f0d3"; +} +i.icon.google.plus.square:before { + content: "\f0d4"; +} +i.icon.google.plus:before { + content: "\f0d5"; +} +i.icon.linkedin:before { + content: "\f0e1"; +} +i.icon.github.alternate:before { + content: "\f113"; +} +i.icon.maxcdn:before { + content: "\f136"; +} +i.icon.youtube.square:before { + content: "\f166"; +} +i.icon.youtube:before { + content: "\f167"; +} +i.icon.xing:before { + content: "\f168"; +} +i.icon.xing.square:before { + content: "\f169"; +} +i.icon.youtube.play:before { + content: "\f16a"; +} +i.icon.dropbox:before { + content: "\f16b"; +} +i.icon.stack.overflow:before { + content: "\f16c"; +} +i.icon.instagram:before { + content: "\f16d"; +} +i.icon.flickr:before { + content: "\f16e"; +} +i.icon.adn:before { + content: "\f170"; +} +i.icon.bitbucket:before { + content: "\f171"; +} +i.icon.bitbucket.square:before { + content: "\f172"; +} +i.icon.tumblr:before { + content: "\f173"; +} +i.icon.tumblr.square:before { + content: "\f174"; +} +i.icon.apple:before { + content: "\f179"; +} +i.icon.windows:before { + content: "\f17a"; +} +i.icon.android:before { + content: "\f17b"; +} +i.icon.linux:before { + content: "\f17c"; +} +i.icon.dribble:before { + content: "\f17d"; +} +i.icon.skype:before { + content: "\f17e"; +} +i.icon.foursquare:before { + content: "\f180"; +} +i.icon.trello:before { + content: "\f181"; +} +i.icon.gittip:before { + content: "\f184"; +} +i.icon.vk:before { + content: "\f189"; +} +i.icon.weibo:before { + content: "\f18a"; +} +i.icon.renren:before { + content: "\f18b"; +} +i.icon.pagelines:before { + content: "\f18c"; +} +i.icon.stack.exchange:before { + content: "\f18d"; +} +i.icon.vimeo.square:before { + content: "\f194"; +} +i.icon.slack:before { + content: "\f198"; +} +i.icon.wordpress:before { + content: "\f19a"; +} +i.icon.yahoo:before { + content: "\f19e"; +} +i.icon.google:before { + content: "\f1a0"; +} +i.icon.reddit:before { + content: "\f1a1"; +} +i.icon.reddit.square:before { + content: "\f1a2"; +} +i.icon.stumbleupon.circle:before { + content: "\f1a3"; +} +i.icon.stumbleupon:before { + content: "\f1a4"; +} +i.icon.delicious:before { + content: "\f1a5"; +} +i.icon.digg:before { + content: "\f1a6"; +} +i.icon.pied.piper:before { + content: "\f1a7"; +} +i.icon.pied.piper.alternate:before { + content: "\f1a8"; +} +i.icon.drupal:before { + content: "\f1a9"; +} +i.icon.joomla:before { + content: "\f1aa"; +} +i.icon.behance:before { + content: "\f1b4"; +} +i.icon.behance.square:before { + content: "\f1b5"; +} +i.icon.steam:before { + content: "\f1b6"; +} +i.icon.steam.square:before { + content: "\f1b7"; +} +i.icon.spotify:before { + content: "\f1bc"; +} +i.icon.deviantart:before { + content: "\f1bd"; +} +i.icon.soundcloud:before { + content: "\f1be"; +} +i.icon.vine:before { + content: "\f1ca"; +} +i.icon.codepen:before { + content: "\f1cb"; +} +i.icon.jsfiddle:before { + content: "\f1cc"; +} +i.icon.rebel:before { + content: "\f1d0"; +} +i.icon.empire:before { + content: "\f1d1"; +} +i.icon.git.square:before { + content: "\f1d2"; +} +i.icon.git:before { + content: "\f1d3"; +} +i.icon.hacker.news:before { + content: "\f1d4"; +} +i.icon.tencent.weibo:before { + content: "\f1d5"; +} +i.icon.qq:before { + content: "\f1d6"; +} +i.icon.wechat:before { + content: "\f1d7"; +} +i.icon.slideshare:before { + content: "\f1e7"; +} +i.icon.twitch:before { + content: "\f1e8"; +} +i.icon.yelp:before { + content: "\f1e9"; +} +i.icon.lastfm:before { + content: "\f202"; +} +i.icon.lastfm.square:before { + content: "\f203"; +} +i.icon.ioxhost:before { + content: "\f208"; +} +i.icon.angellist:before { + content: "\f209"; +} +i.icon.meanpath:before { + content: "\f20c"; +} +i.icon.buysellads:before { + content: "\f20d"; +} +i.icon.connectdevelop:before { + content: "\f20e"; +} +i.icon.dashcube:before { + content: "\f210"; +} +i.icon.forumbee:before { + content: "\f211"; +} +i.icon.leanpub:before { + content: "\f212"; +} +i.icon.sellsy:before { + content: "\f213"; +} +i.icon.shirtsinbulk:before { + content: "\f214"; +} +i.icon.simplybuilt:before { + content: "\f215"; +} +i.icon.skyatlas:before { + content: "\f216"; +} +i.icon.facebook:before { + content: "\f230"; +} +i.icon.pinterest:before { + content: "\f231"; +} +i.icon.whatsapp:before { + content: "\f232"; +} +i.icon.viacoin:before { + content: "\f237"; +} +i.icon.medium:before { + content: "\f23a"; +} +i.icon.y.combinator:before { + content: "\f23b"; +} +i.icon.optinmonster:before { + content: "\f23c"; +} +i.icon.opencart:before { + content: "\f23d"; +} +i.icon.expeditedssl:before { + content: "\f23e"; +} +i.icon.gg:before { + content: "\f260"; +} +i.icon.gg.circle:before { + content: "\f261"; +} +i.icon.tripadvisor:before { + content: "\f262"; +} +i.icon.odnoklassniki:before { + content: "\f263"; +} +i.icon.odnoklassniki.square:before { + content: "\f264"; +} +i.icon.pocket:before { + content: "\f265"; +} +i.icon.wikipedia:before { + content: "\f266"; +} +i.icon.safari:before { + content: "\f267"; +} +i.icon.chrome:before { + content: "\f268"; +} +i.icon.firefox:before { + content: "\f269"; +} +i.icon.opera:before { + content: "\f26a"; +} +i.icon.internet.explorer:before { + content: "\f26b"; +} +i.icon.contao:before { + content: "\f26d"; +} +i.icon.\35 00px:before { + content: "\f26e"; +} +i.icon.amazon:before { + content: "\f270"; +} +i.icon.houzz:before { + content: "\f27c"; +} +i.icon.vimeo:before { + content: "\f27d"; +} +i.icon.black.tie:before { + content: "\f27e"; +} +i.icon.fonticons:before { + content: "\f280"; +} +i.icon.reddit.alien:before { + content: "\f281"; +} +i.icon.microsoft.edge:before { + content: "\f282"; +} +i.icon.codiepie:before { + content: "\f284"; +} +i.icon.modx:before { + content: "\f285"; +} +i.icon.fort.awesome:before { + content: "\f286"; +} +i.icon.product.hunt:before { + content: "\f288"; +} +i.icon.mixcloud:before { + content: "\f289"; +} +i.icon.scribd:before { + content: "\f28a"; +} +i.icon.gitlab:before { + content: "\f296"; +} +i.icon.wpbeginner:before { + content: "\f297"; +} +i.icon.wpforms:before { + content: "\f298"; +} +i.icon.envira.gallery:before { + content: "\f299"; +} +i.icon.glide:before { + content: "\f2a5"; +} +i.icon.glide.g:before { + content: "\f2a6"; +} +i.icon.viadeo:before { + content: "\f2a9"; +} +i.icon.viadeo.square:before { + content: "\f2aa"; +} +i.icon.snapchat:before { + content: "\f2ab"; +} +i.icon.snapchat.ghost:before { + content: "\f2ac"; +} +i.icon.snapchat.square:before { + content: "\f2ad"; +} +i.icon.pied.piper.hat:before { + content: "\f2ae"; +} +i.icon.first.order:before { + content: "\f2b0"; +} +i.icon.yoast:before { + content: "\f2b1"; +} +i.icon.themeisle:before { + content: "\f2b2"; +} +i.icon.google.plus.circle:before { + content: "\f2b3"; +} +i.icon.font.awesome:before { + content: "\f2b4"; +} +i.icon.linode:before { + content: "\f2b8"; +} +i.icon.quora:before { + content: "\f2c4"; +} +i.icon.free.code.camp:before { + content: "\f2c5"; +} +i.icon.telegram:before { + content: "\f2c6"; +} +i.icon.bandcamp:before { + content: "\f2d5"; +} +i.icon.grav:before { + content: "\f2d6"; +} +i.icon.etsy:before { + content: "\f2d7"; +} +i.icon.imdb:before { + content: "\f2d8"; +} +i.icon.ravelry:before { + content: "\f2d9"; +} +i.icon.eercast:before { + content: "\f2da"; +} +i.icon.superpowers:before { + content: "\f2dd"; +} +i.icon.wpexplorer:before { + content: "\f2de"; +} +i.icon.meetup:before { + content: "\f2e0"; +} +/******************************* + Aliases +*******************************/ +i.icon.like:before { + content: "\f004"; +} +i.icon.favorite:before { + content: "\f005"; +} +i.icon.video:before { + content: "\f008"; +} +i.icon.check:before { + content: "\f00c"; +} +i.icon.close:before { + content: "\f00d"; +} +i.icon.cancel:before { + content: "\f00d"; +} +i.icon.delete:before { + content: "\f00d"; +} +i.icon.x:before { + content: "\f00d"; +} +i.icon.zoom.in:before { + content: "\f00e"; +} +i.icon.magnify:before { + content: "\f00e"; +} +i.icon.shutdown:before { + content: "\f011"; +} +i.icon.clock:before { + content: "\f017"; +} +i.icon.time:before { + content: "\f017"; +} +i.icon.play.circle.outline:before { + content: "\f01d"; +} +i.icon.headphone:before { + content: "\f025"; +} +i.icon.camera:before { + content: "\f030"; +} +i.icon.video.camera:before { + content: "\f03d"; +} +i.icon.picture:before { + content: "\f03e"; +} +i.icon.pencil:before { + content: "\f040"; +} +i.icon.compose:before { + content: "\f040"; +} +i.icon.point:before { + content: "\f041"; +} +i.icon.tint:before { + content: "\f043"; +} +i.icon.signup:before { + content: "\f044"; +} +i.icon.plus.circle:before { + content: "\f055"; +} +i.icon.question.circle:before { + content: "\f059"; +} +i.icon.dont:before { + content: "\f05e"; +} +i.icon.minimize:before { + content: "\f066"; +} +i.icon.add:before { + content: "\f067"; +} +i.icon.exclamation.circle:before { + content: "\f06a"; +} +i.icon.attention:before { + content: "\f06a"; +} +i.icon.eye:before { + content: "\f06e"; +} +i.icon.exclamation.triangle:before { + content: "\f071"; +} +i.icon.shuffle:before { + content: "\f074"; +} +i.icon.chat:before { + content: "\f075"; +} +i.icon.cart:before { + content: "\f07a"; +} +i.icon.shopping.cart:before { + content: "\f07a"; +} +i.icon.bar.graph:before { + content: "\f080"; +} +i.icon.key:before { + content: "\f084"; +} +i.icon.cogs:before { + content: "\f085"; +} +i.icon.discussions:before { + content: "\f086"; +} +i.icon.like.outline:before { + content: "\f087"; +} +i.icon.dislike.outline:before { + content: "\f088"; +} +i.icon.heart.outline:before { + content: "\f08a"; +} +i.icon.log.out:before { + content: "\f08b"; +} +i.icon.thumb.tack:before { + content: "\f08d"; +} +i.icon.winner:before { + content: "\f091"; +} +i.icon.phone:before { + content: "\f095"; +} +i.icon.bookmark.outline:before { + content: "\f097"; +} +i.icon.phone.square:before { + content: "\f098"; +} +i.icon.credit.card:before { + content: "\f09d"; +} +i.icon.hdd.outline:before { + content: "\f0a0"; +} +i.icon.bullhorn:before { + content: "\f0a1"; +} +i.icon.bell.outline:before { + content: "\f0a2"; +} +i.icon.hand.outline.right:before { + content: "\f0a4"; +} +i.icon.hand.outline.left:before { + content: "\f0a5"; +} +i.icon.hand.outline.up:before { + content: "\f0a6"; +} +i.icon.hand.outline.down:before { + content: "\f0a7"; +} +i.icon.globe:before { + content: "\f0ac"; +} +i.icon.wrench:before { + content: "\f0ad"; +} +i.icon.briefcase:before { + content: "\f0b1"; +} +i.icon.group:before { + content: "\f0c0"; +} +i.icon.linkify:before { + content: "\f0c1"; +} +i.icon.chain:before { + content: "\f0c1"; +} +i.icon.flask:before { + content: "\f0c3"; +} +i.icon.sidebar:before { + content: "\f0c9"; +} +i.icon.bars:before { + content: "\f0c9"; +} +i.icon.list.ul:before { + content: "\f0ca"; +} +i.icon.list.ol:before { + content: "\f0cb"; +} +i.icon.numbered.list:before { + content: "\f0cb"; +} +i.icon.magic:before { + content: "\f0d0"; +} +i.icon.truck:before { + content: "\f0d1"; +} +i.icon.currency:before { + content: "\f0d6"; +} +i.icon.triangle.down:before { + content: "\f0d7"; +} +i.icon.dropdown:before { + content: "\f0d7"; +} +i.icon.triangle.up:before { + content: "\f0d8"; +} +i.icon.triangle.left:before { + content: "\f0d9"; +} +i.icon.triangle.right:before { + content: "\f0da"; +} +i.icon.envelope:before { + content: "\f0e0"; +} +i.icon.conversation:before { + content: "\f0e6"; +} +i.icon.rain:before { + content: "\f0e9"; +} +i.icon.clipboard:before { + content: "\f0ea"; +} +i.icon.lightbulb:before { + content: "\f0eb"; +} +i.icon.bell:before { + content: "\f0f3"; +} +i.icon.ambulance:before { + content: "\f0f9"; +} +i.icon.medkit:before { + content: "\f0fa"; +} +i.icon.fighter.jet:before { + content: "\f0fb"; +} +i.icon.beer:before { + content: "\f0fc"; +} +i.icon.plus.square:before { + content: "\f0fe"; +} +i.icon.computer:before { + content: "\f108"; +} +i.icon.circle.outline:before { + content: "\f10c"; +} +i.icon.gamepad:before { + content: "\f11b"; +} +i.icon.star.half.full:before { + content: "\f123"; +} +i.icon.broken.chain:before { + content: "\f127"; +} +i.icon.question:before { + content: "\f128"; +} +i.icon.exclamation:before { + content: "\f12a"; +} +i.icon.eraser:before { + content: "\f12d"; +} +i.icon.microphone:before { + content: "\f130"; +} +i.icon.microphone.slash:before { + content: "\f131"; +} +i.icon.shield:before { + content: "\f132"; +} +i.icon.target:before { + content: "\f140"; +} +i.icon.play.circle:before { + content: "\f144"; +} +i.icon.pencil.square:before { + content: "\f14b"; +} +i.icon.eur:before { + content: "\f153"; +} +i.icon.gbp:before { + content: "\f154"; +} +i.icon.usd:before { + content: "\f155"; +} +i.icon.inr:before { + content: "\f156"; +} +i.icon.cny:before { + content: "\f157"; +} +i.icon.rmb:before { + content: "\f157"; +} +i.icon.jpy:before { + content: "\f157"; +} +i.icon.rouble:before { + content: "\f158"; +} +i.icon.rub:before { + content: "\f158"; +} +i.icon.krw:before { + content: "\f159"; +} +i.icon.btc:before { + content: "\f15a"; +} +i.icon.gratipay:before { + content: "\f184"; +} +i.icon.zip:before { + content: "\f187"; +} +i.icon.dot.circle.outline:before { + content: "\f192"; +} +i.icon.try:before { + content: "\f195"; +} +i.icon.graduation:before { + content: "\f19d"; +} +i.icon.circle.outline:before { + content: "\f1db"; +} +i.icon.sliders:before { + content: "\f1de"; +} +i.icon.weixin:before { + content: "\f1d7"; +} +i.icon.tty:before { + content: "\f1e4"; +} +i.icon.teletype:before { + content: "\f1e4"; +} +i.icon.binoculars:before { + content: "\f1e5"; +} +i.icon.power.cord:before { + content: "\f1e6"; +} +i.icon.wi-fi:before { + content: "\f1eb"; +} +i.icon.visa.card:before { + content: "\f1f0"; +} +i.icon.mastercard.card:before { + content: "\f1f1"; +} +i.icon.discover.card:before { + content: "\f1f2"; +} +i.icon.amex:before { + content: "\f1f3"; +} +i.icon.american.express.card:before { + content: "\f1f3"; +} +i.icon.stripe.card:before { + content: "\f1f5"; +} +i.icon.bell.slash:before { + content: "\f1f6"; +} +i.icon.bell.slash.outline:before { + content: "\f1f7"; +} +i.icon.area.graph:before { + content: "\f1fe"; +} +i.icon.pie.graph:before { + content: "\f200"; +} +i.icon.line.graph:before { + content: "\f201"; +} +i.icon.cc:before { + content: "\f20a"; +} +i.icon.sheqel:before { + content: "\f20b"; +} +i.icon.ils:before { + content: "\f20b"; +} +i.icon.plus.cart:before { + content: "\f217"; +} +i.icon.arrow.down.cart:before { + content: "\f218"; +} +i.icon.detective:before { + content: "\f21b"; +} +i.icon.venus:before { + content: "\f221"; +} +i.icon.mars:before { + content: "\f222"; +} +i.icon.mercury:before { + content: "\f223"; +} +i.icon.intersex:before { + content: "\f224"; +} +i.icon.venus.double:before { + content: "\f226"; +} +i.icon.female.homosexual:before { + content: "\f226"; +} +i.icon.mars.double:before { + content: "\f227"; +} +i.icon.male.homosexual:before { + content: "\f227"; +} +i.icon.venus.mars:before { + content: "\f228"; +} +i.icon.mars.stroke:before { + content: "\f229"; +} +i.icon.mars.alternate:before { + content: "\f229"; +} +i.icon.mars.vertical:before { + content: "\f22a"; +} +i.icon.mars.stroke.vertical:before { + content: "\f22a"; +} +i.icon.mars.horizontal:before { + content: "\f22b"; +} +i.icon.mars.stroke.horizontal:before { + content: "\f22b"; +} +i.icon.asexual:before { + content: "\f22d"; +} +i.icon.facebook.official:before { + content: "\f230"; +} +i.icon.user.plus:before { + content: "\f234"; +} +i.icon.user.times:before { + content: "\f235"; +} +i.icon.user.close:before { + content: "\f235"; +} +i.icon.user.cancel:before { + content: "\f235"; +} +i.icon.user.delete:before { + content: "\f235"; +} +i.icon.user.x:before { + content: "\f235"; +} +i.icon.bed:before { + content: "\f236"; +} +i.icon.yc:before { + content: "\f23b"; +} +i.icon.ycombinator:before { + content: "\f23b"; +} +i.icon.battery.four:before { + content: "\f240"; +} +i.icon.battery.three:before { + content: "\f241"; +} +i.icon.battery.three.quarters:before { + content: "\f241"; +} +i.icon.battery.two:before { + content: "\f242"; +} +i.icon.battery.half:before { + content: "\f242"; +} +i.icon.battery.one:before { + content: "\f243"; +} +i.icon.battery.quarter:before { + content: "\f243"; +} +i.icon.battery.zero:before { + content: "\f244"; +} +i.icon.i.cursor:before { + content: "\f246"; +} +i.icon.jcb:before { + content: "\f24b"; +} +i.icon.japan.credit.bureau.card:before { + content: "\f24b"; +} +i.icon.diners.club.card:before { + content: "\f24c"; +} +i.icon.balance:before { + content: "\f24e"; +} +i.icon.hourglass.outline:before { + content: "\f250"; +} +i.icon.hourglass.zero:before { + content: "\f250"; +} +i.icon.hourglass.one:before { + content: "\f251"; +} +i.icon.hourglass.two:before { + content: "\f252"; +} +i.icon.hourglass.three:before { + content: "\f253"; +} +i.icon.hourglass.four:before { + content: "\f254"; +} +i.icon.grab:before { + content: "\f255"; +} +i.icon.hand.victory:before { + content: "\f25b"; +} +i.icon.tm:before { + content: "\f25c"; +} +i.icon.r.circle:before { + content: "\f25d"; +} +i.icon.television:before { + content: "\f26c"; +} +i.icon.five.hundred.pixels:before { + content: "\f26e"; +} +i.icon.calendar.plus:before { + content: "\f271"; +} +i.icon.calendar.minus:before { + content: "\f272"; +} +i.icon.calendar.times:before { + content: "\f273"; +} +i.icon.calendar.check:before { + content: "\f274"; +} +i.icon.factory:before { + content: "\f275"; +} +i.icon.commenting:before { + content: "\f27a"; +} +i.icon.commenting.outline:before { + content: "\f27b"; +} +i.icon.edge:before { + content: "\f282"; +} +i.icon.ms.edge:before { + content: "\f282"; +} +i.icon.wordpress.beginner:before { + content: "\f297"; +} +i.icon.wordpress.forms:before { + content: "\f298"; +} +i.icon.envira:before { + content: "\f299"; +} +i.icon.question.circle.outline:before { + content: "\f29c"; +} +i.icon.assistive.listening.devices:before { + content: "\f2a2"; +} +i.icon.als:before { + content: "\f2a2"; +} +i.icon.ald:before { + content: "\f2a2"; +} +i.icon.asl.interpreting:before { + content: "\f2a3"; +} +i.icon.deaf:before { + content: "\f2a4"; +} +i.icon.american.sign.language.interpreting:before { + content: "\f2a3"; +} +i.icon.hard.of.hearing:before { + content: "\f2a4"; +} +i.icon.signing:before { + content: "\f2a7"; +} +i.icon.new.pied.piper:before { + content: "\f2ae"; +} +i.icon.theme.isle:before { + content: "\f2b2"; +} +i.icon.google.plus.official:before { + content: "\f2b3"; +} +i.icon.fa:before { + content: "\f2b4"; +} +i.icon.vcard:before { + content: "\f2bb"; +} +i.icon.vcard.outline:before { + content: "\f2bc"; +} +i.icon.drivers.license:before { + content: "\f2c2"; +} +i.icon.drivers.license.outline:before { + content: "\f2c3"; +} +i.icon.thermometer:before { + content: "\f2c7"; +} +i.icon.s15:before { + content: "\f2cd"; +} +i.icon.bath:before { + content: "\f2cd"; +} +i.icon.times.rectangle:before { + content: "\f2d3"; +} +i.icon.times.rectangle.outline:before { + content: "\f2d4"; +} +/******************************* + Site Overrides +*******************************/ +/*! + * # Semantic UI - Image + * http://github.com/semantic-org/semantic-ui/ + * + * + * Released under the MIT license + * http://opensource.org/licenses/MIT + * + */ +/******************************* + Theme +*******************************/ +/* + +████████╗██╗ ██╗███████╗███╗ ███╗███████╗███████╗ +╚══██╔══╝██║ ██║██╔════╝████╗ ████║██╔════╝██╔════╝ + ██║ ███████║█████╗ ██╔████╔██║█████╗ ███████╗ + ██║ ██╔══██║██╔══╝ ██║╚██╔╝██║██╔══╝ ╚════██║ + ██║ ██║ ██║███████╗██║ ╚═╝ ██║███████╗███████║ + ╚═╝ ╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝╚══════╝╚══════╝ + +*/ +/******************************* + Theme Selection +*******************************/ +/* To override a theme for an individual element + specify theme name below +*/ +/* Global */ +/* Elements */ +/* Collections */ +/* Modules */ +/* Views */ +/******************************* + Folders +*******************************/ +/* Path to theme packages */ +/* Path to site override folder */ +/******************************* + Import Theme +*******************************/ +/******************************* + Import Directives +*******************************/ +/*------------------ + Theme +-------------------*/ +/*-------------------- + Site Variables +---------------------*/ +/* Default site.variables */ +/******************************* + Site Settings +*******************************/ +/*------------------- + Fonts +--------------------*/ +/*------------------- + Base Sizes +--------------------*/ +/* This is the single variable that controls them all */ +/* The size of page text */ +/*------------------- + Border Radius +--------------------*/ +/* See Power-user section below + for explanation of @px variables +*/ +/*------------------- + Brand Colors +--------------------*/ +/*-------------- + Page Heading +---------------*/ +/*-------------- + Form Input +---------------*/ +/* This adjusts the default form input across all elements */ +/* Input Text Color */ +/* Line Height Default For Inputs in Browser (Descendors are 17px at 14px base em) */ +/*------------------- + Focused Input +--------------------*/ +/* Used on inputs, textarea etc */ +/* Used on dropdowns, other larger blocks */ +/*------------------- + Sizes +--------------------*/ +/* + Sizes are all expressed in terms of 14px/em (default em) + This ensures these "ratios" remain constant despite changes in EM +*/ +/*------------------- + Page +--------------------*/ +/*------------------- + Paragraph +--------------------*/ +/*------------------- + Links +--------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ +/*------------------- + Highlighted Text +--------------------*/ +/*------------------- + Loader +--------------------*/ +/*------------------- + Grid +--------------------*/ +/*------------------- + Transitions +--------------------*/ +/*------------------- + Breakpoints +--------------------*/ +/*------------------- + Site Colors +--------------------*/ +/*--- Colors ---*/ +/*--- Light Colors ---*/ +/*--- Neutrals ---*/ +/*--- Colored Backgrounds ---*/ +/*--- Colored Headers ---*/ +/*--- Colored Text ---*/ +/*--- Colored Border ---*/ +/*------------------- + Alpha Colors +--------------------*/ +/*------------------- + Accents +--------------------*/ +/* Differentiating Neutrals */ +/* Differentiating Layers */ +/******************************* + Power-User +*******************************/ +/*------------------- + Emotive Colors +--------------------*/ +/* Positive */ +/* Negative */ +/* Info */ +/* Warning */ +/*------------------- + Paths +--------------------*/ +/* For source only. Modified in gulp for dist */ +/*------------------- + Em Sizes +--------------------*/ +/* + This rounds @size values to the closest pixel then expresses that value in (r)em. + This ensures all size values round to exact pixels +*/ +/* em */ +/* rem */ +/*------------------- + Icons +--------------------*/ +/* Maximum Glyph Width of Icon */ +/*------------------- + Neutral Text +--------------------*/ +/*------------------- + Brand Colors +--------------------*/ +/*------------------- + Borders +--------------------*/ +/*------------------- + Derived Values +--------------------*/ +/* Loaders Position Offset */ +/* Rendered Scrollbar Width */ +/* Maximum Single Character Glyph Width, aka Capital "W" */ +/* Used to match floats with text */ +/* Header Spacing */ +/* Minimum Mobile Width */ +/* Positive / Negative Dupes */ +/* Responsive */ +/*------------------- + Exact Pixel Values +--------------------*/ +/* + These are used to specify exact pixel values in em + for things like borders that remain constantly + sized as emSize adjusts + + Since there are many more sizes than names for sizes, + these are named by their original pixel values. + +*/ +/* Columns */ +/******************************* + States +*******************************/ +/*------------------- + Disabled +--------------------*/ +/*------------------- + Hover +--------------------*/ +/*--- Shadows ---*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Focus +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Down (:active) +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Active +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/* Packaged site.variables */ +/******************************* + User Global Variables +*******************************/ +/*------------------- + Fonts +--------------------*/ +/*------------------- + Breakpoints +--------------------*/ +/* +@mobileBreakpoint : unit( (63 * @emSize), px); +@tabletBreakpoint : unit( (79 * @emSize), px); +@computerBreakpoint : unit( (91 * @emSize), px); +@largeMonitorBreakpoint : unit( (99 * @emSize), px); +@widescreenMonitorBreakpoint : unit( (119 * @emSize), px); +*/ +/******************************* + PXT Variables +*******************************/ +/*------------------- + Menu +--------------------*/ +/*------------------- + Layout +--------------------*/ +/*------------------- + Background +--------------------*/ +/*------------------- + Full screen +--------------------*/ +/*------------------- + Side Docs +--------------------*/ +/*------------------- + Editor +--------------------*/ +/* Component's site.variables */ +/******************************* + User Global Variables +*******************************/ +/*------------------- + Fonts +--------------------*/ +/*------------------- + Breakpoints +--------------------*/ +/* +@mobileBreakpoint : unit( (63 * @emSize), px); +@tabletBreakpoint : unit( (79 * @emSize), px); +@computerBreakpoint : unit( (91 * @emSize), px); +@largeMonitorBreakpoint : unit( (99 * @emSize), px); +@widescreenMonitorBreakpoint : unit( (119 * @emSize), px); +*/ +/******************************* + PXT Variables +*******************************/ +/*------------------- + Menu +--------------------*/ +/*------------------- + Layout +--------------------*/ +/*------------------- + Background +--------------------*/ +/*------------------- + Full screen +--------------------*/ +/*------------------- + Side Docs +--------------------*/ +/*------------------- + Editor +--------------------*/ +/* Site theme site.variables */ +/******************************* + User Global Variables +*******************************/ +/*------------------- + Site Colors +--------------------*/ +/******************************* + PXT Overrides +*******************************/ +/*------------------- + Component Variables +---------------------*/ +/* Default */ +/******************************* + Image +*******************************/ +/*------------------- + Element +--------------------*/ +/*------------------- + Types +--------------------*/ +/* Avatar */ +/*------------------- + Variations +--------------------*/ +/* Spaced */ +/* Floated */ +/* Size */ +/* Packaged Theme */ +/******************************* + User Variable Overrides +*******************************/ +/* Site Theme */ +/******************************* + User Variable Overrides +*******************************/ +/******************************* + Mix-ins +*******************************/ +/*------------------ + Fonts +-------------------*/ +/*------------------ + Overrides +-------------------*/ +/* End Config */ +/******************************* + Image +*******************************/ +.ui.image, +.play-button.image, +.download-button.image { + position: relative; + display: inline-block; + vertical-align: middle; + max-width: 100%; + background-color: transparent; +} +img.ui.image, +img.play-button.image, +img.download-button.image { + display: block; +} +.ui.image svg, +.ui.image img, +.play-button.image svg, +.play-button.image img, +.download-button.image svg, +.download-button.image img { + display: block; + max-width: 100%; + height: auto; +} +/******************************* + States +*******************************/ +.ui.hidden.images, +.ui.hidden.image, +.play-button.hidden.images, +.play-button.hidden.image, +.download-button.hidden.images, +.download-button.hidden.image { + display: none; +} +.ui.hidden.transition.images, +.ui.hidden.transition.image, +.play-button.hidden.transition.images, +.play-button.hidden.transition.image, +.download-button.hidden.transition.images, +.download-button.hidden.transition.image { + display: block; + visibility: hidden; +} +.ui.disabled.images, +.ui.disabled.image, +.play-button.disabled.images, +.play-button.disabled.image, +.download-button.disabled.images, +.download-button.disabled.image { + cursor: default; + opacity: 0.45; +} +/******************************* + Variations +*******************************/ +/*-------------- + Inline +---------------*/ +.ui.inline.image, +.ui.inline.image svg, +.ui.inline.image img, +.play-button.inline.image, +.play-button.inline.image svg, +.play-button.inline.image img, +.download-button.inline.image, +.download-button.inline.image svg, +.download-button.inline.image img { + display: inline-block; +} +/*------------------ + Vertical Aligned +-------------------*/ +.ui.top.aligned.images .image, +.ui.top.aligned.image, +.ui.top.aligned.image svg, +.ui.top.aligned.image img, +.play-button.top.aligned.images .image, +.play-button.top.aligned.image, +.play-button.top.aligned.image svg, +.play-button.top.aligned.image img, +.download-button.top.aligned.images .image, +.download-button.top.aligned.image, +.download-button.top.aligned.image svg, +.download-button.top.aligned.image img { + display: inline-block; + vertical-align: top; +} +.ui.middle.aligned.images .image, +.ui.middle.aligned.image, +.ui.middle.aligned.image svg, +.ui.middle.aligned.image img, +.play-button.middle.aligned.images .image, +.play-button.middle.aligned.image, +.play-button.middle.aligned.image svg, +.play-button.middle.aligned.image img, +.download-button.middle.aligned.images .image, +.download-button.middle.aligned.image, +.download-button.middle.aligned.image svg, +.download-button.middle.aligned.image img { + display: inline-block; + vertical-align: middle; +} +.ui.bottom.aligned.images .image, +.ui.bottom.aligned.image, +.ui.bottom.aligned.image svg, +.ui.bottom.aligned.image img, +.play-button.bottom.aligned.images .image, +.play-button.bottom.aligned.image, +.play-button.bottom.aligned.image svg, +.play-button.bottom.aligned.image img, +.download-button.bottom.aligned.images .image, +.download-button.bottom.aligned.image, +.download-button.bottom.aligned.image svg, +.download-button.bottom.aligned.image img { + display: inline-block; + vertical-align: bottom; +} +/*-------------- + Rounded +---------------*/ +.ui.rounded.images .image, +.ui.rounded.image, +.ui.rounded.images .image > *, +.ui.rounded.image > *, +.play-button.rounded.images .image, +.play-button.rounded.image, +.play-button.rounded.images .image > *, +.play-button.rounded.image > *, +.download-button.rounded.images .image, +.download-button.rounded.image, +.download-button.rounded.images .image > *, +.download-button.rounded.image > * { + border-radius: 0.3125em; +} +/*-------------- + Bordered +---------------*/ +.ui.bordered.images .image, +.ui.bordered.images img, +.ui.bordered.images svg, +.ui.bordered.image img, +.ui.bordered.image svg, +img.ui.bordered.image, +.play-button.bordered.images .image, +.play-button.bordered.images img, +.play-button.bordered.images svg, +.play-button.bordered.image img, +.play-button.bordered.image svg, +img.play-button.bordered.image, +.download-button.bordered.images .image, +.download-button.bordered.images img, +.download-button.bordered.images svg, +.download-button.bordered.image img, +.download-button.bordered.image svg, +img.download-button.bordered.image { + border: 1px solid rgba(0, 0, 0, 0.1); +} +/*-------------- + Circular +---------------*/ +.ui.circular.images, +.ui.circular.image, +.play-button.circular.images, +.play-button.circular.image, +.download-button.circular.images, +.download-button.circular.image { + overflow: hidden; +} +.ui.circular.images .image, +.ui.circular.image, +.ui.circular.images .image > *, +.ui.circular.image > *, +.play-button.circular.images .image, +.play-button.circular.image, +.play-button.circular.images .image > *, +.play-button.circular.image > *, +.download-button.circular.images .image, +.download-button.circular.image, +.download-button.circular.images .image > *, +.download-button.circular.image > * { + -webkit-border-radius: 500rem; + -moz-border-radius: 500rem; + border-radius: 500rem; +} +/*-------------- + Fluid +---------------*/ +.ui.fluid.images, +.ui.fluid.image, +.ui.fluid.images img, +.ui.fluid.images svg, +.ui.fluid.image svg, +.ui.fluid.image img, +.play-button.fluid.images, +.play-button.fluid.image, +.play-button.fluid.images img, +.play-button.fluid.images svg, +.play-button.fluid.image svg, +.play-button.fluid.image img, +.download-button.fluid.images, +.download-button.fluid.image, +.download-button.fluid.images img, +.download-button.fluid.images svg, +.download-button.fluid.image svg, +.download-button.fluid.image img { + display: block; + width: 100%; + height: auto; +} +/*-------------- + Avatar +---------------*/ +.ui.avatar.images .image, +.ui.avatar.images img, +.ui.avatar.images svg, +.ui.avatar.image img, +.ui.avatar.image svg, +.ui.avatar.image, +.play-button.avatar.images .image, +.play-button.avatar.images img, +.play-button.avatar.images svg, +.play-button.avatar.image img, +.play-button.avatar.image svg, +.play-button.avatar.image, +.download-button.avatar.images .image, +.download-button.avatar.images img, +.download-button.avatar.images svg, +.download-button.avatar.image img, +.download-button.avatar.image svg, +.download-button.avatar.image { + margin-right: 0.25em; + display: inline-block; + width: 2em; + height: 2em; + -webkit-border-radius: 500rem; + -moz-border-radius: 500rem; + border-radius: 500rem; +} +/*------------------- + Spaced +--------------------*/ +.ui.spaced.image, +.play-button.spaced.image, +.download-button.spaced.image { + display: inline-block !important; + margin-left: 0.5em; + margin-right: 0.5em; +} +.ui[class*="left spaced"].image, +.play-button[class*="left spaced"].image, +.download-button[class*="left spaced"].image { + margin-left: 0.5em; + margin-right: 0em; +} +.ui[class*="right spaced"].image, +.play-button[class*="right spaced"].image, +.download-button[class*="right spaced"].image { + margin-left: 0em; + margin-right: 0.5em; +} +/*------------------- + Floated +--------------------*/ +.ui.floated.image, +.ui.floated.images, +.play-button.floated.image, +.play-button.floated.images, +.download-button.floated.image, +.download-button.floated.images { + float: left; + margin-right: 1em; + margin-bottom: 1em; +} +.ui.right.floated.images, +.ui.right.floated.image, +.play-button.right.floated.images, +.play-button.right.floated.image, +.download-button.right.floated.images, +.download-button.right.floated.image { + float: right; + margin-right: 0em; + margin-bottom: 1em; + margin-left: 1em; +} +.ui.floated.images:last-child, +.ui.floated.image:last-child, +.play-button.floated.images:last-child, +.play-button.floated.image:last-child, +.download-button.floated.images:last-child, +.download-button.floated.image:last-child { + margin-bottom: 0em; +} +.ui.centered.images, +.ui.centered.image, +.play-button.centered.images, +.play-button.centered.image, +.download-button.centered.images, +.download-button.centered.image { + margin-left: auto; + margin-right: auto; +} +/*-------------- + Sizes +---------------*/ +.ui.mini.images .image, +.ui.mini.images img, +.ui.mini.images svg, +.ui.mini.image, +.play-button.mini.images .image, +.play-button.mini.images img, +.play-button.mini.images svg, +.play-button.mini.image, +.download-button.mini.images .image, +.download-button.mini.images img, +.download-button.mini.images svg, +.download-button.mini.image { + width: 35px; + height: auto; + font-size: 0.78571429rem; +} +.ui.tiny.images .image, +.ui.tiny.images img, +.ui.tiny.images svg, +.ui.tiny.image, +.play-button.tiny.images .image, +.play-button.tiny.images img, +.play-button.tiny.images svg, +.play-button.tiny.image, +.download-button.tiny.images .image, +.download-button.tiny.images img, +.download-button.tiny.images svg, +.download-button.tiny.image { + width: 80px; + height: auto; + font-size: 0.85714286rem; +} +.ui.small.images .image, +.ui.small.images img, +.ui.small.images svg, +.ui.small.image, +.play-button.small.images .image, +.play-button.small.images img, +.play-button.small.images svg, +.play-button.small.image, +.download-button.small.images .image, +.download-button.small.images img, +.download-button.small.images svg, +.download-button.small.image { + width: 150px; + height: auto; + font-size: 0.92857143rem; +} +.ui.medium.images .image, +.ui.medium.images img, +.ui.medium.images svg, +.ui.medium.image, +.play-button.medium.images .image, +.play-button.medium.images img, +.play-button.medium.images svg, +.play-button.medium.image, +.download-button.medium.images .image, +.download-button.medium.images img, +.download-button.medium.images svg, +.download-button.medium.image { + width: 300px; + height: auto; + font-size: 1rem; +} +.ui.large.images .image, +.ui.large.images img, +.ui.large.images svg, +.ui.large.image, +.play-button.large.images .image, +.play-button.large.images img, +.play-button.large.images svg, +.play-button.large.image, +.download-button.large.images .image, +.download-button.large.images img, +.download-button.large.images svg, +.download-button.large.image { + width: 450px; + height: auto; + font-size: 1.14285714rem; +} +.ui.big.images .image, +.ui.big.images img, +.ui.big.images svg, +.ui.big.image, +.play-button.big.images .image, +.play-button.big.images img, +.play-button.big.images svg, +.play-button.big.image, +.download-button.big.images .image, +.download-button.big.images img, +.download-button.big.images svg, +.download-button.big.image { + width: 600px; + height: auto; + font-size: 1.28571429rem; +} +.ui.huge.images .image, +.ui.huge.images img, +.ui.huge.images svg, +.ui.huge.image, +.play-button.huge.images .image, +.play-button.huge.images img, +.play-button.huge.images svg, +.play-button.huge.image, +.download-button.huge.images .image, +.download-button.huge.images img, +.download-button.huge.images svg, +.download-button.huge.image { + width: 800px; + height: auto; + font-size: 1.42857143rem; +} +.ui.massive.images .image, +.ui.massive.images img, +.ui.massive.images svg, +.ui.massive.image, +.play-button.massive.images .image, +.play-button.massive.images img, +.play-button.massive.images svg, +.play-button.massive.image, +.download-button.massive.images .image, +.download-button.massive.images img, +.download-button.massive.images svg, +.download-button.massive.image { + width: 960px; + height: auto; + font-size: 1.71428571rem; +} +/******************************* + Groups +*******************************/ +.ui.images, +.play-button.images, +.download-button.images { + font-size: 0em; + margin: 0em -0.25rem 0rem; +} +.ui.images .image, +.ui.images img, +.ui.images svg, +.play-button.images .image, +.play-button.images img, +.play-button.images svg, +.download-button.images .image, +.download-button.images img, +.download-button.images svg { + display: inline-block; + margin: 0em 0.25rem 0.5rem; +} +/******************************* + Site Overrides +*******************************/ +/******************************* + Site Overrides +*******************************/ +/*! + * # Semantic UI - Input + * http://github.com/semantic-org/semantic-ui/ + * + * + * Released under the MIT license + * http://opensource.org/licenses/MIT + * + */ +/******************************* + Theme +*******************************/ +/* + +████████╗██╗ ██╗███████╗███╗ ███╗███████╗███████╗ +╚══██╔══╝██║ ██║██╔════╝████╗ ████║██╔════╝██╔════╝ + ██║ ███████║█████╗ ██╔████╔██║█████╗ ███████╗ + ██║ ██╔══██║██╔══╝ ██║╚██╔╝██║██╔══╝ ╚════██║ + ██║ ██║ ██║███████╗██║ ╚═╝ ██║███████╗███████║ + ╚═╝ ╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝╚══════╝╚══════╝ + +*/ +/******************************* + Theme Selection +*******************************/ +/* To override a theme for an individual element + specify theme name below +*/ +/* Global */ +/* Elements */ +/* Collections */ +/* Modules */ +/* Views */ +/******************************* + Folders +*******************************/ +/* Path to theme packages */ +/* Path to site override folder */ +/******************************* + Import Theme +*******************************/ +/******************************* + Import Directives +*******************************/ +/*------------------ + Theme +-------------------*/ +/*-------------------- + Site Variables +---------------------*/ +/* Default site.variables */ +/******************************* + Site Settings +*******************************/ +/*------------------- + Fonts +--------------------*/ +/*------------------- + Base Sizes +--------------------*/ +/* This is the single variable that controls them all */ +/* The size of page text */ +/*------------------- + Border Radius +--------------------*/ +/* See Power-user section below + for explanation of @px variables +*/ +/*------------------- + Brand Colors +--------------------*/ +/*-------------- + Page Heading +---------------*/ +/*-------------- + Form Input +---------------*/ +/* This adjusts the default form input across all elements */ +/* Input Text Color */ +/* Line Height Default For Inputs in Browser (Descendors are 17px at 14px base em) */ +/*------------------- + Focused Input +--------------------*/ +/* Used on inputs, textarea etc */ +/* Used on dropdowns, other larger blocks */ +/*------------------- + Sizes +--------------------*/ +/* + Sizes are all expressed in terms of 14px/em (default em) + This ensures these "ratios" remain constant despite changes in EM +*/ +/*------------------- + Page +--------------------*/ +/*------------------- + Paragraph +--------------------*/ +/*------------------- + Links +--------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ +/*------------------- + Highlighted Text +--------------------*/ +/*------------------- + Loader +--------------------*/ +/*------------------- + Grid +--------------------*/ +/*------------------- + Transitions +--------------------*/ +/*------------------- + Breakpoints +--------------------*/ +/*------------------- + Site Colors +--------------------*/ +/*--- Colors ---*/ +/*--- Light Colors ---*/ +/*--- Neutrals ---*/ +/*--- Colored Backgrounds ---*/ +/*--- Colored Headers ---*/ +/*--- Colored Text ---*/ +/*--- Colored Border ---*/ +/*------------------- + Alpha Colors +--------------------*/ +/*------------------- + Accents +--------------------*/ +/* Differentiating Neutrals */ +/* Differentiating Layers */ +/******************************* + Power-User +*******************************/ +/*------------------- + Emotive Colors +--------------------*/ +/* Positive */ +/* Negative */ +/* Info */ +/* Warning */ +/*------------------- + Paths +--------------------*/ +/* For source only. Modified in gulp for dist */ +/*------------------- + Em Sizes +--------------------*/ +/* + This rounds @size values to the closest pixel then expresses that value in (r)em. + This ensures all size values round to exact pixels +*/ +/* em */ +/* rem */ +/*------------------- + Icons +--------------------*/ +/* Maximum Glyph Width of Icon */ +/*------------------- + Neutral Text +--------------------*/ +/*------------------- + Brand Colors +--------------------*/ +/*------------------- + Borders +--------------------*/ +/*------------------- + Derived Values +--------------------*/ +/* Loaders Position Offset */ +/* Rendered Scrollbar Width */ +/* Maximum Single Character Glyph Width, aka Capital "W" */ +/* Used to match floats with text */ +/* Header Spacing */ +/* Minimum Mobile Width */ +/* Positive / Negative Dupes */ +/* Responsive */ +/*------------------- + Exact Pixel Values +--------------------*/ +/* + These are used to specify exact pixel values in em + for things like borders that remain constantly + sized as emSize adjusts + + Since there are many more sizes than names for sizes, + these are named by their original pixel values. + +*/ +/* Columns */ +/******************************* + States +*******************************/ +/*------------------- + Disabled +--------------------*/ +/*------------------- + Hover +--------------------*/ +/*--- Shadows ---*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Focus +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Down (:active) +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Active +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/* Packaged site.variables */ +/******************************* + User Global Variables +*******************************/ +/*------------------- + Fonts +--------------------*/ +/*------------------- + Breakpoints +--------------------*/ +/* +@mobileBreakpoint : unit( (63 * @emSize), px); +@tabletBreakpoint : unit( (79 * @emSize), px); +@computerBreakpoint : unit( (91 * @emSize), px); +@largeMonitorBreakpoint : unit( (99 * @emSize), px); +@widescreenMonitorBreakpoint : unit( (119 * @emSize), px); +*/ +/******************************* + PXT Variables +*******************************/ +/*------------------- + Menu +--------------------*/ +/*------------------- + Layout +--------------------*/ +/*------------------- + Background +--------------------*/ +/*------------------- + Full screen +--------------------*/ +/*------------------- + Side Docs +--------------------*/ +/*------------------- + Editor +--------------------*/ +/* Component's site.variables */ +/******************************* + User Global Variables +*******************************/ +/*------------------- + Fonts +--------------------*/ +/*------------------- + Breakpoints +--------------------*/ +/* +@mobileBreakpoint : unit( (63 * @emSize), px); +@tabletBreakpoint : unit( (79 * @emSize), px); +@computerBreakpoint : unit( (91 * @emSize), px); +@largeMonitorBreakpoint : unit( (99 * @emSize), px); +@widescreenMonitorBreakpoint : unit( (119 * @emSize), px); +*/ +/******************************* + PXT Variables +*******************************/ +/*------------------- + Menu +--------------------*/ +/*------------------- + Layout +--------------------*/ +/*------------------- + Background +--------------------*/ +/*------------------- + Full screen +--------------------*/ +/*------------------- + Side Docs +--------------------*/ +/*------------------- + Editor +--------------------*/ +/* Site theme site.variables */ +/******************************* + User Global Variables +*******************************/ +/*------------------- + Site Colors +--------------------*/ +/******************************* + PXT Overrides +*******************************/ +/*------------------- + Component Variables +---------------------*/ +/* Default */ +/******************************* + Input +*******************************/ +/*------------------- + Element +--------------------*/ +/*------------------- + Types +--------------------*/ +/* Icon Input */ +/* Circular Icon Input */ +/* Labeled Input */ +/*------------------- + States +--------------------*/ +/* Placeholder */ +/* Down */ +/* Focus */ +/* Error */ +/* Loader */ +/*------------------- + Variations +--------------------*/ +/* Inverted */ +/* Packaged Theme */ +/******************************* + User Variable Overrides +*******************************/ +/* Site Theme */ +/******************************* + User Variable Overrides +*******************************/ +/******************************* + Mix-ins +*******************************/ +/*------------------ + Fonts +-------------------*/ +/*------------------ + Overrides +-------------------*/ +/* End Config */ +/******************************* + Standard +*******************************/ +/*-------------------- + Inputs +---------------------*/ +.ui.input, +.play-button.input, +.download-button.input { + position: relative; + font-weight: normal; + font-style: normal; + display: inline-flex; + color: rgba(0, 0, 0, 0.87); +} +.ui.input input, +.play-button.input input, +.download-button.input input { + margin: 0em; + max-width: 100%; + flex: 1 0 auto; + outline: none; + -webkit-tap-highlight-color: rgba(255, 255, 255, 0); + text-align: left; + line-height: 1.21428571em; + font-family: 'Roboto Mono', 'Helvetica Neue', Arial, Helvetica, sans-serif; + padding: 0.67857143em 1em; + background: #FFFFFF; + border: 1px solid rgba(34, 36, 38, 0.15); + color: rgba(0, 0, 0, 0.87); + border-radius: 0.28571429rem; + transition: box-shadow 0.1s ease, border-color 0.1s ease; + box-shadow: none; +} +/*-------------------- + Placeholder +---------------------*/ +/* browsers require these rules separate */ +.ui.input input::-webkit-input-placeholder, +.play-button.input input::-webkit-input-placeholder, +.download-button.input input::-webkit-input-placeholder { + color: rgba(191, 191, 191, 0.87); +} +.ui.input input::-moz-placeholder, +.play-button.input input::-moz-placeholder, +.download-button.input input::-moz-placeholder { + color: rgba(191, 191, 191, 0.87); +} +.ui.input input:-ms-input-placeholder, +.play-button.input input:-ms-input-placeholder, +.download-button.input input:-ms-input-placeholder { + color: rgba(191, 191, 191, 0.87); +} +/******************************* + States +*******************************/ +/*-------------------- + Disabled +---------------------*/ +.ui.disabled.input, +.ui.input:not(.disabled) input[disabled], +.play-button.disabled.input, +.play-button.input:not(.disabled) input[disabled], +.download-button.disabled.input, +.download-button.input:not(.disabled) input[disabled] { + opacity: 0.45; +} +.ui.disabled.input input, +.ui.input:not(.disabled) input[disabled], +.play-button.disabled.input input, +.play-button.input:not(.disabled) input[disabled], +.download-button.disabled.input input, +.download-button.input:not(.disabled) input[disabled] { + pointer-events: none; +} +/*-------------------- + Active +---------------------*/ +.ui.input input:active, +.ui.input.down input, +.play-button.input input:active, +.play-button.input.down input, +.download-button.input input:active, +.download-button.input.down input { + border-color: rgba(0, 0, 0, 0.3); + background: #FAFAFA; + color: rgba(0, 0, 0, 0.87); + box-shadow: none; +} +/*-------------------- + Loading +---------------------*/ +.ui.loading.loading.input > i.icon:before, +.play-button.loading.loading.input > i.icon:before, +.download-button.loading.loading.input > i.icon:before { + position: absolute; + content: ''; + top: 50%; + left: 50%; + margin: -0.64285714em 0em 0em -0.64285714em; + width: 1.28571429em; + height: 1.28571429em; + border-radius: 500rem; + border: 0.2em solid rgba(0, 0, 0, 0.1); +} +.ui.loading.loading.input > i.icon:after, +.play-button.loading.loading.input > i.icon:after, +.download-button.loading.loading.input > i.icon:after { + position: absolute; + content: ''; + top: 50%; + left: 50%; + margin: -0.64285714em 0em 0em -0.64285714em; + width: 1.28571429em; + height: 1.28571429em; + animation: button-spin 0.6s linear; + animation-iteration-count: infinite; + border-radius: 500rem; + border-color: #42495F transparent transparent; + border-style: solid; + border-width: 0.2em; + box-shadow: 0px 0px 0px 1px transparent; +} +/*-------------------- + Focus +---------------------*/ +.ui.input.focus input, +.ui.input input:focus, +.play-button.input.focus input, +.play-button.input input:focus, +.download-button.input.focus input, +.download-button.input input:focus { + border-color: #85B7D9; + background: #FFFFFF; + color: rgba(0, 0, 0, 0.8); + box-shadow: none; +} +.ui.input.focus input::-webkit-input-placeholder, +.ui.input input:focus::-webkit-input-placeholder, +.play-button.input.focus input::-webkit-input-placeholder, +.play-button.input input:focus::-webkit-input-placeholder, +.download-button.input.focus input::-webkit-input-placeholder, +.download-button.input input:focus::-webkit-input-placeholder { + color: rgba(115, 115, 115, 0.87); +} +.ui.input.focus input::-moz-placeholder, +.ui.input input:focus::-moz-placeholder, +.play-button.input.focus input::-moz-placeholder, +.play-button.input input:focus::-moz-placeholder, +.download-button.input.focus input::-moz-placeholder, +.download-button.input input:focus::-moz-placeholder { + color: rgba(115, 115, 115, 0.87); +} +.ui.input.focus input:-ms-input-placeholder, +.ui.input input:focus:-ms-input-placeholder, +.play-button.input.focus input:-ms-input-placeholder, +.play-button.input input:focus:-ms-input-placeholder, +.download-button.input.focus input:-ms-input-placeholder, +.download-button.input input:focus:-ms-input-placeholder { + color: rgba(115, 115, 115, 0.87); +} +/*-------------------- + Error +---------------------*/ +.ui.input.error input, +.play-button.input.error input, +.download-button.input.error input { + background-color: #FFF6F6; + border-color: #E0B4B4; + color: #9F3A38; + box-shadow: none; +} +/* Error Placeholder */ +.ui.input.error input::-webkit-input-placeholder, +.play-button.input.error input::-webkit-input-placeholder, +.download-button.input.error input::-webkit-input-placeholder { + color: #e7bdbc; +} +.ui.input.error input::-moz-placeholder, +.play-button.input.error input::-moz-placeholder, +.download-button.input.error input::-moz-placeholder { + color: #e7bdbc; +} +.ui.input.error input:-ms-input-placeholder, +.play-button.input.error input:-ms-input-placeholder, +.download-button.input.error input:-ms-input-placeholder { + color: #e7bdbc !important; +} +/* Focused Error Placeholder */ +.ui.input.error input:focus::-webkit-input-placeholder, +.play-button.input.error input:focus::-webkit-input-placeholder, +.download-button.input.error input:focus::-webkit-input-placeholder { + color: #da9796; +} +.ui.input.error input:focus::-moz-placeholder, +.play-button.input.error input:focus::-moz-placeholder, +.download-button.input.error input:focus::-moz-placeholder { + color: #da9796; +} +.ui.input.error input:focus:-ms-input-placeholder, +.play-button.input.error input:focus:-ms-input-placeholder, +.download-button.input.error input:focus:-ms-input-placeholder { + color: #da9796 !important; +} +/******************************* + Variations +*******************************/ +/*-------------------- + Transparent +---------------------*/ +.ui.transparent.input input, +.play-button.transparent.input input, +.download-button.transparent.input input { + border-color: transparent !important; + background-color: transparent !important; + padding: 0em !important; + box-shadow: none !important; + border-radius: 0px !important; +} +/* Transparent Icon */ +.ui.transparent.icon.input > i.icon, +.play-button.transparent.icon.input > i.icon, +.download-button.transparent.icon.input > i.icon { + width: 1.1em; +} +.ui.transparent.icon.input > input, +.play-button.transparent.icon.input > input, +.download-button.transparent.icon.input > input { + padding-left: 0em !important; + padding-right: 2em !important; +} +.ui.transparent[class*="left icon"].input > input, +.play-button.transparent[class*="left icon"].input > input, +.download-button.transparent[class*="left icon"].input > input { + padding-left: 2em !important; + padding-right: 0em !important; +} +/* Transparent Inverted */ +.ui.transparent.inverted.input, +.play-button.transparent.inverted.input, +.download-button.transparent.inverted.input { + color: #FFFFFF; +} +.ui.transparent.inverted.input input, +.play-button.transparent.inverted.input input, +.download-button.transparent.inverted.input input { + color: inherit; +} +.ui.transparent.inverted.input input::-webkit-input-placeholder, +.play-button.transparent.inverted.input input::-webkit-input-placeholder, +.download-button.transparent.inverted.input input::-webkit-input-placeholder { + color: rgba(255, 255, 255, 0.5); +} +.ui.transparent.inverted.input input::-moz-placeholder, +.play-button.transparent.inverted.input input::-moz-placeholder, +.download-button.transparent.inverted.input input::-moz-placeholder { + color: rgba(255, 255, 255, 0.5); +} +.ui.transparent.inverted.input input:-ms-input-placeholder, +.play-button.transparent.inverted.input input:-ms-input-placeholder, +.download-button.transparent.inverted.input input:-ms-input-placeholder { + color: rgba(255, 255, 255, 0.5); +} +/*-------------------- + Icon +---------------------*/ +.ui.icon.input > i.icon, +.play-button.icon.input > i.icon, +.download-button.icon.input > i.icon { + cursor: default; + position: absolute; + line-height: 1; + text-align: center; + top: 0px; + right: 0px; + margin: 0em; + height: 100%; + width: 2.67142857em; + opacity: 0.5; + border-radius: 0em 0.28571429rem 0.28571429rem 0em; + transition: opacity 0.3s ease; +} +.ui.icon.input > i.icon:not(.link), +.play-button.icon.input > i.icon:not(.link), +.download-button.icon.input > i.icon:not(.link) { + pointer-events: none; +} +.ui.icon.input input, +.play-button.icon.input input, +.download-button.icon.input input { + padding-right: 2.67142857em !important; +} +.ui.icon.input > i.icon:before, +.ui.icon.input > i.icon:after, +.play-button.icon.input > i.icon:before, +.play-button.icon.input > i.icon:after, +.download-button.icon.input > i.icon:before, +.download-button.icon.input > i.icon:after { + left: 0; + position: absolute; + text-align: center; + top: 50%; + width: 100%; + margin-top: -0.5em; +} +.ui.icon.input > i.link.icon, +.play-button.icon.input > i.link.icon, +.download-button.icon.input > i.link.icon { + cursor: pointer; +} +.ui.icon.input > i.circular.icon, +.play-button.icon.input > i.circular.icon, +.download-button.icon.input > i.circular.icon { + top: 0.35em; + right: 0.5em; +} +/* Left Icon Input */ +.ui[class*="left icon"].input > i.icon, +.play-button[class*="left icon"].input > i.icon, +.download-button[class*="left icon"].input > i.icon { + right: auto; + left: 1px; + border-radius: 0.28571429rem 0em 0em 0.28571429rem; +} +.ui[class*="left icon"].input > i.circular.icon, +.play-button[class*="left icon"].input > i.circular.icon, +.download-button[class*="left icon"].input > i.circular.icon { + right: auto; + left: 0.5em; +} +.ui[class*="left icon"].input > input, +.play-button[class*="left icon"].input > input, +.download-button[class*="left icon"].input > input { + padding-left: 2.67142857em !important; + padding-right: 1em !important; +} +/* Focus */ +.ui.icon.input > input:focus ~ i.icon, +.play-button.icon.input > input:focus ~ i.icon, +.download-button.icon.input > input:focus ~ i.icon { + opacity: 1; +} +/*-------------------- + Labeled +---------------------*/ +/* Adjacent Label */ +.ui.labeled.input > .label, +.play-button.labeled.input > .label, +.download-button.labeled.input > .label { + flex: 0 0 auto; + margin: 0; + font-size: 1em; +} +.ui.labeled.input > .label:not(.corner), +.play-button.labeled.input > .label:not(.corner), +.download-button.labeled.input > .label:not(.corner) { + padding-top: 0.78571429em; + padding-bottom: 0.78571429em; +} +/* Regular Label on Left */ +.ui.labeled.input:not([class*="corner labeled"]) .label:first-child, +.play-button.labeled.input:not([class*="corner labeled"]) .label:first-child, +.download-button.labeled.input:not([class*="corner labeled"]) .label:first-child { + border-top-right-radius: 0px; + border-bottom-right-radius: 0px; +} +.ui.labeled.input:not([class*="corner labeled"]) .label:first-child + input, +.play-button.labeled.input:not([class*="corner labeled"]) .label:first-child + input, +.download-button.labeled.input:not([class*="corner labeled"]) .label:first-child + input { + border-top-left-radius: 0px; + border-bottom-left-radius: 0px; + border-left-color: transparent; +} +.ui.labeled.input:not([class*="corner labeled"]) .label:first-child + input:focus, +.play-button.labeled.input:not([class*="corner labeled"]) .label:first-child + input:focus, +.download-button.labeled.input:not([class*="corner labeled"]) .label:first-child + input:focus { + border-left-color: #85B7D9; +} +/* Regular Label on Right */ +.ui[class*="right labeled"].input input, +.play-button[class*="right labeled"].input input, +.download-button[class*="right labeled"].input input { + border-top-right-radius: 0px !important; + border-bottom-right-radius: 0px !important; + border-right-color: transparent !important; +} +.ui[class*="right labeled"].input input + .label, +.play-button[class*="right labeled"].input input + .label, +.download-button[class*="right labeled"].input input + .label { + border-top-left-radius: 0px; + border-bottom-left-radius: 0px; +} +.ui[class*="right labeled"].input input:focus, +.play-button[class*="right labeled"].input input:focus, +.download-button[class*="right labeled"].input input:focus { + border-right-color: #85B7D9 !important; +} +/* Corner Label */ +.ui.labeled.input .corner.label, +.play-button.labeled.input .corner.label, +.download-button.labeled.input .corner.label { + top: 1px; + right: 1px; + font-size: 0.64285714em; + border-radius: 0em 0.28571429rem 0em 0em; +} +/* Spacing with corner label */ +.ui[class*="corner labeled"]:not([class*="left corner labeled"]).labeled.input input, +.play-button[class*="corner labeled"]:not([class*="left corner labeled"]).labeled.input input, +.download-button[class*="corner labeled"]:not([class*="left corner labeled"]).labeled.input input { + padding-right: 2.5em !important; +} +.ui[class*="corner labeled"].icon.input:not([class*="left corner labeled"]) > input, +.play-button[class*="corner labeled"].icon.input:not([class*="left corner labeled"]) > input, +.download-button[class*="corner labeled"].icon.input:not([class*="left corner labeled"]) > input { + padding-right: 3.25em !important; +} +.ui[class*="corner labeled"].icon.input:not([class*="left corner labeled"]) > .icon, +.play-button[class*="corner labeled"].icon.input:not([class*="left corner labeled"]) > .icon, +.download-button[class*="corner labeled"].icon.input:not([class*="left corner labeled"]) > .icon { + margin-right: 1.25em; +} +/* Left Labeled */ +.ui[class*="left corner labeled"].labeled.input input, +.play-button[class*="left corner labeled"].labeled.input input, +.download-button[class*="left corner labeled"].labeled.input input { + padding-left: 2.5em !important; +} +.ui[class*="left corner labeled"].icon.input > input, +.play-button[class*="left corner labeled"].icon.input > input, +.download-button[class*="left corner labeled"].icon.input > input { + padding-left: 3.25em !important; +} +.ui[class*="left corner labeled"].icon.input > .icon, +.play-button[class*="left corner labeled"].icon.input > .icon, +.download-button[class*="left corner labeled"].icon.input > .icon { + margin-left: 1.25em; +} +/* Corner Label Position */ +.ui.input > .ui.corner.label, +.play-button.input > .play-button.corner.label, +.download-button.input > .download-button.corner.label { + top: 1px; + right: 1px; +} +.ui.input > .ui.left.corner.label, +.play-button.input > .play-button.left.corner.label, +.download-button.input > .download-button.left.corner.label { + right: auto; + left: 1px; +} +/*-------------------- + Action +---------------------*/ +.ui.action.input > .button, +.ui.action.input > .buttons, +.play-button.action.input > .button, +.play-button.action.input > .buttons, +.ui.action.input > .play-button, +.download-button.action.input > .button, +.download-button.action.input > .buttons, +.ui.action.input > .download-button { + display: flex; + align-items: center; + flex: 0 0 auto; +} +.ui.action.input > .button, +.ui.action.input > .buttons > .button, +.play-button.action.input > .button, +.play-button.action.input > .buttons > .button, +.ui.action.input > .play-button, +.ui.action.input > .buttons > .play-button, +.download-button.action.input > .button, +.download-button.action.input > .buttons > .button, +.ui.action.input > .download-button, +.ui.action.input > .buttons > .download-button { + padding-top: 0.78571429em; + padding-bottom: 0.78571429em; + margin: 0; +} +/* Button on Right */ +.ui.action.input:not([class*="left action"]) > input, +.play-button.action.input:not([class*="left action"]) > input, +.download-button.action.input:not([class*="left action"]) > input { + border-top-right-radius: 0px !important; + border-bottom-right-radius: 0px !important; + border-right-color: transparent !important; +} +.ui.action.input:not([class*="left action"]) > .dropdown:not(:first-child), +.ui.action.input:not([class*="left action"]) > .button:not(:first-child), +.ui.action.input:not([class*="left action"]) > .buttons:not(:first-child) > .button, +.play-button.action.input:not([class*="left action"]) > .dropdown:not(:first-child), +.play-button.action.input:not([class*="left action"]) > .button:not(:first-child), +.play-button.action.input:not([class*="left action"]) > .buttons:not(:first-child) > .button, +.ui.action.input:not([class*="left action"]) > .play-button:not(:first-child), +.ui.action.input:not([class*="left action"]) > .buttons:not(:first-child) > .play-button, +.download-button.action.input:not([class*="left action"]) > .dropdown:not(:first-child), +.download-button.action.input:not([class*="left action"]) > .button:not(:first-child), +.download-button.action.input:not([class*="left action"]) > .buttons:not(:first-child) > .button, +.ui.action.input:not([class*="left action"]) > .download-button:not(:first-child), +.ui.action.input:not([class*="left action"]) > .buttons:not(:first-child) > .download-button { + border-radius: 0px; +} +.ui.action.input:not([class*="left action"]) > .dropdown:last-child, +.ui.action.input:not([class*="left action"]) > .button:last-child, +.ui.action.input:not([class*="left action"]) > .buttons:last-child > .button, +.play-button.action.input:not([class*="left action"]) > .dropdown:last-child, +.play-button.action.input:not([class*="left action"]) > .button:last-child, +.play-button.action.input:not([class*="left action"]) > .buttons:last-child > .button, +.ui.action.input:not([class*="left action"]) > .play-button:last-child, +.ui.action.input:not([class*="left action"]) > .buttons:last-child > .play-button, +.download-button.action.input:not([class*="left action"]) > .dropdown:last-child, +.download-button.action.input:not([class*="left action"]) > .button:last-child, +.download-button.action.input:not([class*="left action"]) > .buttons:last-child > .button, +.ui.action.input:not([class*="left action"]) > .download-button:last-child, +.ui.action.input:not([class*="left action"]) > .buttons:last-child > .download-button { + border-radius: 0px 0.28571429rem 0.28571429rem 0px; +} +/* Input Focus */ +.ui.action.input:not([class*="left action"]) input:focus, +.play-button.action.input:not([class*="left action"]) input:focus, +.download-button.action.input:not([class*="left action"]) input:focus { + border-right-color: #85B7D9 !important; +} +/* Button on Left */ +.ui[class*="left action"].input > input, +.play-button[class*="left action"].input > input, +.download-button[class*="left action"].input > input { + border-top-left-radius: 0px !important; + border-bottom-left-radius: 0px !important; + border-left-color: transparent !important; +} +.ui[class*="left action"].input > .dropdown, +.ui[class*="left action"].input > .button, +.ui[class*="left action"].input > .buttons > .button, +.play-button[class*="left action"].input > .dropdown, +.play-button[class*="left action"].input > .button, +.play-button[class*="left action"].input > .buttons > .button, +.ui[class*="left action"].input > .play-button, +.ui[class*="left action"].input > .buttons > .play-button, +.download-button[class*="left action"].input > .dropdown, +.download-button[class*="left action"].input > .button, +.download-button[class*="left action"].input > .buttons > .button, +.ui[class*="left action"].input > .download-button, +.ui[class*="left action"].input > .buttons > .download-button { + border-radius: 0px; +} +.ui[class*="left action"].input > .dropdown:first-child, +.ui[class*="left action"].input > .button:first-child, +.ui[class*="left action"].input > .buttons:first-child > .button, +.play-button[class*="left action"].input > .dropdown:first-child, +.play-button[class*="left action"].input > .button:first-child, +.play-button[class*="left action"].input > .buttons:first-child > .button, +.ui[class*="left action"].input > .play-button:first-child, +.ui[class*="left action"].input > .buttons:first-child > .play-button, +.download-button[class*="left action"].input > .dropdown:first-child, +.download-button[class*="left action"].input > .button:first-child, +.download-button[class*="left action"].input > .buttons:first-child > .button, +.ui[class*="left action"].input > .download-button:first-child, +.ui[class*="left action"].input > .buttons:first-child > .download-button { + border-radius: 0.28571429rem 0px 0px 0.28571429rem; +} +/* Input Focus */ +.ui[class*="left action"].input > input:focus, +.play-button[class*="left action"].input > input:focus, +.download-button[class*="left action"].input > input:focus { + border-left-color: #85B7D9 !important; +} +/*-------------------- + Inverted +---------------------*/ +/* Standard */ +.ui.inverted.input input, +.play-button.inverted.input input, +.download-button.inverted.input input { + border: none; +} +/*-------------------- + Fluid +---------------------*/ +.ui.fluid.input, +.play-button.fluid.input, +.download-button.fluid.input { + display: flex; +} +.ui.fluid.input > input, +.play-button.fluid.input > input, +.download-button.fluid.input > input { + width: 0px !important; +} +/*-------------------- + Size +---------------------*/ +.ui.mini.input, +.play-button.mini.input, +.download-button.mini.input { + font-size: 0.78571429em; +} +.ui.small.input, +.play-button.small.input, +.download-button.small.input { + font-size: 0.92857143em; +} +.ui.input, +.play-button.input, +.download-button.input { + font-size: 1em; +} +.ui.large.input, +.play-button.large.input, +.download-button.large.input { + font-size: 1.14285714em; +} +.ui.big.input, +.play-button.big.input, +.download-button.big.input { + font-size: 1.28571429em; +} +.ui.huge.input, +.play-button.huge.input, +.download-button.huge.input { + font-size: 1.42857143em; +} +.ui.massive.input, +.play-button.massive.input, +.download-button.massive.input { + font-size: 1.71428571em; +} +/******************************* + Site Overrides +*******************************/ +.ui.inverted.input input, +.play-button.inverted.input input, +.download-button.inverted.input input { + border: #FFFFFF 2px solid !important; + color: #FFFFFF; + background: transparent; +} +/******************************* + Site Overrides +*******************************/ +.ui.inverted.input input, +.play-button.inverted.input input, +.download-button.inverted.input input { + background: #424852; + border-radius: 20px; + border: 0px !important; + padding: 0.2em !important; + padding-left: 0.6em !important; +} +.rtl .ui.inverted.input input, +.rtl .play-button.inverted.input input, +.rtl .download-button.inverted.input input { + padding-right: 0.6em !important; +} +/*! + * # Semantic UI - Label + * http://github.com/semantic-org/semantic-ui/ + * + * + * Released under the MIT license + * http://opensource.org/licenses/MIT + * + */ +/******************************* + Theme +*******************************/ +/* + +████████╗██╗ ██╗███████╗███╗ ███╗███████╗███████╗ +╚══██╔══╝██║ ██║██╔════╝████╗ ████║██╔════╝██╔════╝ + ██║ ███████║█████╗ ██╔████╔██║█████╗ ███████╗ + ██║ ██╔══██║██╔══╝ ██║╚██╔╝██║██╔══╝ ╚════██║ + ██║ ██║ ██║███████╗██║ ╚═╝ ██║███████╗███████║ + ╚═╝ ╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝╚══════╝╚══════╝ + +*/ +/******************************* + Theme Selection +*******************************/ +/* To override a theme for an individual element + specify theme name below +*/ +/* Global */ +/* Elements */ +/* Collections */ +/* Modules */ +/* Views */ +/******************************* + Folders +*******************************/ +/* Path to theme packages */ +/* Path to site override folder */ +/******************************* + Import Theme +*******************************/ +/******************************* + Import Directives +*******************************/ +/*------------------ + Theme +-------------------*/ +/*-------------------- + Site Variables +---------------------*/ +/* Default site.variables */ +/******************************* + Site Settings +*******************************/ +/*------------------- + Fonts +--------------------*/ +/*------------------- + Base Sizes +--------------------*/ +/* This is the single variable that controls them all */ +/* The size of page text */ +/*------------------- + Border Radius +--------------------*/ +/* See Power-user section below + for explanation of @px variables +*/ +/*------------------- + Brand Colors +--------------------*/ +/*-------------- + Page Heading +---------------*/ +/*-------------- + Form Input +---------------*/ +/* This adjusts the default form input across all elements */ +/* Input Text Color */ +/* Line Height Default For Inputs in Browser (Descendors are 17px at 14px base em) */ +/*------------------- + Focused Input +--------------------*/ +/* Used on inputs, textarea etc */ +/* Used on dropdowns, other larger blocks */ +/*------------------- + Sizes +--------------------*/ +/* + Sizes are all expressed in terms of 14px/em (default em) + This ensures these "ratios" remain constant despite changes in EM +*/ +/*------------------- + Page +--------------------*/ +/*------------------- + Paragraph +--------------------*/ +/*------------------- + Links +--------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ +/*------------------- + Highlighted Text +--------------------*/ +/*------------------- + Loader +--------------------*/ +/*------------------- + Grid +--------------------*/ +/*------------------- + Transitions +--------------------*/ +/*------------------- + Breakpoints +--------------------*/ +/*------------------- + Site Colors +--------------------*/ +/*--- Colors ---*/ +/*--- Light Colors ---*/ +/*--- Neutrals ---*/ +/*--- Colored Backgrounds ---*/ +/*--- Colored Headers ---*/ +/*--- Colored Text ---*/ +/*--- Colored Border ---*/ +/*------------------- + Alpha Colors +--------------------*/ +/*------------------- + Accents +--------------------*/ +/* Differentiating Neutrals */ +/* Differentiating Layers */ +/******************************* + Power-User +*******************************/ +/*------------------- + Emotive Colors +--------------------*/ +/* Positive */ +/* Negative */ +/* Info */ +/* Warning */ +/*------------------- + Paths +--------------------*/ +/* For source only. Modified in gulp for dist */ +/*------------------- + Em Sizes +--------------------*/ +/* + This rounds @size values to the closest pixel then expresses that value in (r)em. + This ensures all size values round to exact pixels +*/ +/* em */ +/* rem */ +/*------------------- + Icons +--------------------*/ +/* Maximum Glyph Width of Icon */ +/*------------------- + Neutral Text +--------------------*/ +/*------------------- + Brand Colors +--------------------*/ +/*------------------- + Borders +--------------------*/ +/*------------------- + Derived Values +--------------------*/ +/* Loaders Position Offset */ +/* Rendered Scrollbar Width */ +/* Maximum Single Character Glyph Width, aka Capital "W" */ +/* Used to match floats with text */ +/* Header Spacing */ +/* Minimum Mobile Width */ +/* Positive / Negative Dupes */ +/* Responsive */ +/*------------------- + Exact Pixel Values +--------------------*/ +/* + These are used to specify exact pixel values in em + for things like borders that remain constantly + sized as emSize adjusts + + Since there are many more sizes than names for sizes, + these are named by their original pixel values. + +*/ +/* Columns */ +/******************************* + States +*******************************/ +/*------------------- + Disabled +--------------------*/ +/*------------------- + Hover +--------------------*/ +/*--- Shadows ---*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Focus +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Down (:active) +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Active +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/* Packaged site.variables */ +/******************************* + User Global Variables +*******************************/ +/*------------------- + Fonts +--------------------*/ +/*------------------- + Breakpoints +--------------------*/ +/* +@mobileBreakpoint : unit( (63 * @emSize), px); +@tabletBreakpoint : unit( (79 * @emSize), px); +@computerBreakpoint : unit( (91 * @emSize), px); +@largeMonitorBreakpoint : unit( (99 * @emSize), px); +@widescreenMonitorBreakpoint : unit( (119 * @emSize), px); +*/ +/******************************* + PXT Variables +*******************************/ +/*------------------- + Menu +--------------------*/ +/*------------------- + Layout +--------------------*/ +/*------------------- + Background +--------------------*/ +/*------------------- + Full screen +--------------------*/ +/*------------------- + Side Docs +--------------------*/ +/*------------------- + Editor +--------------------*/ +/* Component's site.variables */ +/******************************* + User Global Variables +*******************************/ +/*------------------- + Fonts +--------------------*/ +/*------------------- + Breakpoints +--------------------*/ +/* +@mobileBreakpoint : unit( (63 * @emSize), px); +@tabletBreakpoint : unit( (79 * @emSize), px); +@computerBreakpoint : unit( (91 * @emSize), px); +@largeMonitorBreakpoint : unit( (99 * @emSize), px); +@widescreenMonitorBreakpoint : unit( (119 * @emSize), px); +*/ +/******************************* + PXT Variables +*******************************/ +/*------------------- + Menu +--------------------*/ +/*------------------- + Layout +--------------------*/ +/*------------------- + Background +--------------------*/ +/*------------------- + Full screen +--------------------*/ +/*------------------- + Side Docs +--------------------*/ +/*------------------- + Editor +--------------------*/ +/* Site theme site.variables */ +/******************************* + User Global Variables +*******************************/ +/*------------------- + Site Colors +--------------------*/ +/******************************* + PXT Overrides +*******************************/ +/*------------------- + Component Variables +---------------------*/ +/* Default */ +/******************************* + Label +*******************************/ +/*------------------- + Element +--------------------*/ +/* medium is not @emSize custom value required */ +/* Group */ +/*------------------- + Parts +--------------------*/ +/* Link */ +/* Icon */ +/* Image */ +/* Detail */ +/* Delete */ +/*------------------- + Types +--------------------*/ +/* Image Label */ +/*------------------- + States +--------------------*/ +/* Hover */ +/* Active */ +/* Active Hover */ +/*------------------- + Variations +--------------------*/ +/* Basic */ +/* Tag */ +/* Avoids error with background: inherit; on animation */ +/* Ribbon */ +/* Rounding Offset on Triangle */ +/* Rounding Offset on Triangle */ +/* Colors */ +/* Attached */ +/* Corner */ +/* Corner Text */ +/* Horizontal */ +/* Circular Padding */ +/* Pointing */ +/* Basic Pointing */ +/* Floating */ +/*------------------- + Group +--------------------*/ +/* Sizing */ +/* Packaged Theme */ +/******************************* + User Variable Overrides +*******************************/ +/* Site Theme */ +/******************************* + User Variable Overrides +*******************************/ +/******************************* + Mix-ins +*******************************/ +/*------------------ + Fonts +-------------------*/ +/*------------------ + Overrides +-------------------*/ +/* End Config */ +/******************************* + Label +*******************************/ +.ui.label, +.play-button.label, +.download-button.label { + display: inline-block; + line-height: 1; + vertical-align: baseline; + margin: 0em 0.14285714em; + background-color: #E8E8E8; + background-image: none; + padding: 0.5833em 0.833em; + color: rgba(0, 0, 0, 0.6); + text-transform: none; + font-weight: bold; + border: 0px solid transparent; + border-radius: 0.28571429rem; + transition: background 0.1s ease; +} +.ui.label:first-child, +.play-button.label:first-child, +.download-button.label:first-child { + margin-left: 0em; +} +.ui.label:last-child, +.play-button.label:last-child, +.download-button.label:last-child { + margin-right: 0em; +} +/* Link */ +a.ui.label, +a.play-button.label, +a.download-button.label { + cursor: pointer; +} +/* Inside Link */ +.ui.label > a, +.play-button.label > a, +.download-button.label > a { + cursor: pointer; + color: inherit; + opacity: 0.5; + transition: 0.1s opacity ease; +} +.ui.label > a:hover, +.play-button.label > a:hover, +.download-button.label > a:hover { + opacity: 1; +} +/* Image */ +.ui.label > img, +.play-button.label > img, +.download-button.label > img { + width: auto !important; + vertical-align: middle; + height: 2.1666em !important; +} +/* Icon */ +.ui.label > .icon, +.play-button.label > .icon, +.download-button.label > .icon { + width: auto; + margin: 0em 0.75em 0em 0em; +} +/* Detail */ +.ui.label > .detail, +.play-button.label > .detail, +.download-button.label > .detail { + display: inline-block; + vertical-align: top; + font-weight: bold; + margin-left: 1em; + opacity: 0.8; +} +.ui.label > .detail .icon, +.play-button.label > .detail .icon, +.download-button.label > .detail .icon { + margin: 0em 0.25em 0em 0em; +} +/* Removable label */ +.ui.label > .close.icon, +.ui.label > .delete.icon, +.play-button.label > .close.icon, +.play-button.label > .delete.icon, +.download-button.label > .close.icon, +.download-button.label > .delete.icon { + cursor: pointer; + margin-right: 0em; + margin-left: 0.5em; + font-size: 0.92857143em; + opacity: 0.5; + transition: background 0.1s ease; +} +.ui.label > .delete.icon:hover, +.play-button.label > .delete.icon:hover, +.download-button.label > .delete.icon:hover { + opacity: 1; +} +/*------------------- + Group +--------------------*/ +.ui.labels > .label, +.play-button.labels > .label, +.download-button.labels > .label { + margin: 0em 0.5em 0.5em 0em; +} +/*------------------- + Coupling +--------------------*/ +.ui.header > .ui.label, +.play-button.header > .play-button.label, +.download-button.header > .download-button.label { + margin-top: -0.29165em; +} +/* Remove border radius on attached segment */ +.ui.attached.segment > .ui.top.left.attached.label, +.ui.bottom.attached.segment > .ui.top.left.attached.label, +.play-button.attached.segment > .play-button.top.left.attached.label, +.play-button.bottom.attached.segment > .play-button.top.left.attached.label, +.download-button.attached.segment > .download-button.top.left.attached.label, +.download-button.bottom.attached.segment > .download-button.top.left.attached.label { + border-top-left-radius: 0; +} +.ui.attached.segment > .ui.top.right.attached.label, +.ui.bottom.attached.segment > .ui.top.right.attached.label, +.play-button.attached.segment > .play-button.top.right.attached.label, +.play-button.bottom.attached.segment > .play-button.top.right.attached.label, +.download-button.attached.segment > .download-button.top.right.attached.label, +.download-button.bottom.attached.segment > .download-button.top.right.attached.label { + border-top-right-radius: 0; +} +.ui.top.attached.segment > .ui.bottom.left.attached.label, +.play-button.top.attached.segment > .play-button.bottom.left.attached.label, +.download-button.top.attached.segment > .download-button.bottom.left.attached.label { + border-bottom-left-radius: 0; +} +.ui.top.attached.segment > .ui.bottom.right.attached.label, +.play-button.top.attached.segment > .play-button.bottom.right.attached.label, +.download-button.top.attached.segment > .download-button.bottom.right.attached.label { + border-bottom-right-radius: 0; +} +/* Padding on next content after a label */ +.ui.top.attached.label:first-child + :not(.attached), +.ui.top.attached.label + [class*="right floated"] + *, +.play-button.top.attached.label:first-child + :not(.attached), +.play-button.top.attached.label + [class*="right floated"] + *, +.download-button.top.attached.label:first-child + :not(.attached), +.download-button.top.attached.label + [class*="right floated"] + * { + margin-top: 2rem !important; +} +.ui.bottom.attached.label:first-child ~ :last-child:not(.attached), +.play-button.bottom.attached.label:first-child ~ :last-child:not(.attached), +.download-button.bottom.attached.label:first-child ~ :last-child:not(.attached) { + margin-top: 0em; + margin-bottom: 2rem !important; +} +/******************************* + Types +*******************************/ +.ui.image.label, +.play-button.image.label, +.download-button.image.label { + width: auto !important; + margin-top: 0em; + margin-bottom: 0em; + max-width: 9999px; + vertical-align: baseline; + text-transform: none; + background: #E8E8E8; + padding: 0.5833em 0.833em 0.5833em 0.5em; + border-radius: 0.28571429rem; + box-shadow: none; +} +.ui.image.label img, +.play-button.image.label img, +.download-button.image.label img { + display: inline-block; + vertical-align: top; + height: 2.1666em; + margin: -0.5833em 0.5em -0.5833em -0.5em; + border-radius: 0.28571429rem 0em 0em 0.28571429rem; +} +.ui.image.label .detail, +.play-button.image.label .detail, +.download-button.image.label .detail { + background: rgba(0, 0, 0, 0.1); + margin: -0.5833em -0.833em -0.5833em 0.5em; + padding: 0.5833em 0.833em; + border-radius: 0em 0.28571429rem 0.28571429rem 0em; +} +/*------------------- + Tag +--------------------*/ +.ui.tag.labels .label, +.ui.tag.label, +.play-button.tag.labels .label, +.play-button.tag.label, +.download-button.tag.labels .label, +.download-button.tag.label { + margin-left: 1em; + position: relative; + padding-left: 1.5em; + padding-right: 1.5em; + border-radius: 0em 0.28571429rem 0.28571429rem 0em; + transition: none; +} +.ui.tag.labels .label:before, +.ui.tag.label:before, +.play-button.tag.labels .label:before, +.play-button.tag.label:before, +.download-button.tag.labels .label:before, +.download-button.tag.label:before { + position: absolute; + transform: translateY(-50%) translateX(50%) rotate(-45deg); + top: 50%; + right: 100%; + content: ''; + background-color: inherit; + background-image: none; + width: 1.56em; + height: 1.56em; + transition: none; +} +.ui.tag.labels .label:after, +.ui.tag.label:after, +.play-button.tag.labels .label:after, +.play-button.tag.label:after, +.download-button.tag.labels .label:after, +.download-button.tag.label:after { + position: absolute; + content: ''; + top: 50%; + left: -0.25em; + margin-top: -0.25em; + background-color: #FFFFFF !important; + width: 0.5em; + height: 0.5em; + box-shadow: 0 -1px 1px 0 rgba(0, 0, 0, 0.3); + border-radius: 500rem; +} +/*------------------- + Corner Label +--------------------*/ +.ui.corner.label, +.play-button.corner.label, +.download-button.corner.label { + position: absolute; + top: 0em; + right: 0em; + margin: 0em; + padding: 0em; + text-align: center; + border-color: #E8E8E8; + width: 4em; + height: 4em; + z-index: 1; + transition: border-color 0.1s ease; +} +/* Icon Label */ +.ui.corner.label, +.play-button.corner.label, +.download-button.corner.label { + background-color: transparent !important; +} +.ui.corner.label:after, +.play-button.corner.label:after, +.download-button.corner.label:after { + position: absolute; + content: ""; + right: 0em; + top: 0em; + z-index: -1; + width: 0em; + height: 0em; + background-color: transparent !important; + border-top: 0em solid transparent; + border-right: 4em solid transparent; + border-bottom: 4em solid transparent; + border-left: 0em solid transparent; + border-right-color: inherit; + transition: border-color 0.1s ease; +} +.ui.corner.label .icon, +.play-button.corner.label .icon, +.download-button.corner.label .icon { + cursor: default; + position: relative; + top: 0.64285714em; + left: 0.78571429em; + font-size: 1.14285714em; + margin: 0em; +} +/* Left Corner */ +.ui.left.corner.label, +.ui.left.corner.label:after, +.play-button.left.corner.label, +.play-button.left.corner.label:after, +.download-button.left.corner.label, +.download-button.left.corner.label:after { + right: auto; + left: 0em; +} +.ui.left.corner.label:after, +.play-button.left.corner.label:after, +.download-button.left.corner.label:after { + border-top: 4em solid transparent; + border-right: 4em solid transparent; + border-bottom: 0em solid transparent; + border-left: 0em solid transparent; + border-top-color: inherit; +} +.ui.left.corner.label .icon, +.play-button.left.corner.label .icon, +.download-button.left.corner.label .icon { + left: -0.78571429em; +} +/* Segment */ +.ui.segment > .ui.corner.label, +.play-button.segment > .play-button.corner.label, +.download-button.segment > .download-button.corner.label { + top: -1px; + right: -1px; +} +.ui.segment > .ui.left.corner.label, +.play-button.segment > .play-button.left.corner.label, +.download-button.segment > .download-button.left.corner.label { + right: auto; + left: -1px; +} +/*------------------- + Ribbon +--------------------*/ +.ui.ribbon.label, +.play-button.ribbon.label, +.download-button.ribbon.label { + position: relative; + margin: 0em; + min-width: max-content; + border-radius: 0em 0.28571429rem 0.28571429rem 0em; + border-color: rgba(0, 0, 0, 0.15); +} +.ui.ribbon.label:after, +.play-button.ribbon.label:after, +.download-button.ribbon.label:after { + position: absolute; + content: ''; + top: 100%; + left: 0%; + background-color: transparent !important; + border-style: solid; + border-width: 0em 1.2em 1.2em 0em; + border-color: transparent; + border-right-color: inherit; + width: 0em; + height: 0em; +} +/* Positioning */ +.ui.ribbon.label, +.play-button.ribbon.label, +.download-button.ribbon.label { + left: calc( -1rem - 1.2em ); + margin-right: -1.2em; + padding-left: calc( 1rem + 1.2em ); + padding-right: 1.2em; +} +.ui[class*="right ribbon"].label, +.play-button[class*="right ribbon"].label, +.download-button[class*="right ribbon"].label { + left: calc(100% + 1rem + 1.2em ); + padding-left: 1.2em; + padding-right: calc( 1rem + 1.2em ); +} +/* Right Ribbon */ +.ui[class*="right ribbon"].label, +.play-button[class*="right ribbon"].label, +.download-button[class*="right ribbon"].label { + text-align: left; + transform: translateX(-100%); + border-radius: 0.28571429rem 0em 0em 0.28571429rem; +} +.ui[class*="right ribbon"].label:after, +.play-button[class*="right ribbon"].label:after, +.download-button[class*="right ribbon"].label:after { + left: auto; + right: 0%; + border-style: solid; + border-width: 1.2em 1.2em 0em 0em; + border-color: transparent; + border-top-color: inherit; +} +/* Inside Table */ +.ui.image > .ribbon.label, +.ui.card .image > .ribbon.label, +.play-button.image > .ribbon.label, +.play-button.card .image > .ribbon.label, +.download-button.image > .ribbon.label, +.download-button.card .image > .ribbon.label { + position: absolute; + top: 1rem; +} +.ui.card .image > .ui.ribbon.label, +.ui.image > .ui.ribbon.label, +.play-button.card .image > .play-button.ribbon.label, +.play-button.image > .play-button.ribbon.label, +.download-button.card .image > .download-button.ribbon.label, +.download-button.image > .download-button.ribbon.label { + left: calc( 0.05rem - 1.2em ); +} +.ui.card .image > .ui[class*="right ribbon"].label, +.ui.image > .ui[class*="right ribbon"].label, +.play-button.card .image > .play-button[class*="right ribbon"].label, +.play-button.image > .play-button[class*="right ribbon"].label, +.download-button.card .image > .download-button[class*="right ribbon"].label, +.download-button.image > .download-button[class*="right ribbon"].label { + left: calc(100% + -0.05rem + 1.2em ); + padding-left: 0.833em; +} +/* Inside Table */ +.ui.table td > .ui.ribbon.label, +.play-button.table td > .play-button.ribbon.label, +.download-button.table td > .download-button.ribbon.label { + left: calc( -0.78571429em - 1.2em ); +} +.ui.table td > .ui[class*="right ribbon"].label, +.play-button.table td > .play-button[class*="right ribbon"].label, +.download-button.table td > .download-button[class*="right ribbon"].label { + left: calc(100% + 0.78571429em + 1.2em ); + padding-left: 0.833em; +} +/*------------------- + Attached +--------------------*/ +.ui[class*="top attached"].label, +.ui.attached.label, +.play-button[class*="top attached"].label, +.play-button.attached.label, +.download-button[class*="top attached"].label, +.download-button.attached.label { + width: 100%; + position: absolute; + margin: 0em; + top: 0em; + left: 0em; + padding: 0.75em 1em; + border-radius: 0.21428571rem 0.21428571rem 0em 0em; +} +.ui[class*="bottom attached"].label, +.play-button[class*="bottom attached"].label, +.download-button[class*="bottom attached"].label { + top: auto; + bottom: 0em; + border-radius: 0em 0em 0.21428571rem 0.21428571rem; +} +.ui[class*="top left attached"].label, +.play-button[class*="top left attached"].label, +.download-button[class*="top left attached"].label { + width: auto; + margin-top: 0em !important; + border-radius: 0.21428571rem 0em 0.28571429rem 0em; +} +.ui[class*="top right attached"].label, +.play-button[class*="top right attached"].label, +.download-button[class*="top right attached"].label { + width: auto; + left: auto; + right: 0em; + border-radius: 0em 0.21428571rem 0em 0.28571429rem; +} +.ui[class*="bottom left attached"].label, +.play-button[class*="bottom left attached"].label, +.download-button[class*="bottom left attached"].label { + width: auto; + top: auto; + bottom: 0em; + border-radius: 0em 0.28571429rem 0em 0.21428571rem; +} +.ui[class*="bottom right attached"].label, +.play-button[class*="bottom right attached"].label, +.download-button[class*="bottom right attached"].label { + top: auto; + bottom: 0em; + left: auto; + right: 0em; + width: auto; + border-radius: 0.28571429rem 0em 0.21428571rem 0em; +} +/******************************* + States +*******************************/ +/*------------------- + Disabled +--------------------*/ +.ui.label.disabled, +.play-button.label.disabled, +.download-button.label.disabled { + opacity: 0.5; +} +/*------------------- + Hover +--------------------*/ +a.ui.labels .label:hover, +a.ui.label:hover, +a.play-button.labels .label:hover, +a.play-button.label:hover, +a.download-button.labels .label:hover, +a.download-button.label:hover { + background-color: #E0E0E0; + border-color: #E0E0E0; + background-image: none; + color: rgba(0, 0, 0, 0.8); +} +.ui.labels a.label:hover:before, +a.ui.label:hover:before, +.play-button.labels a.label:hover:before, +a.play-button.label:hover:before, +.download-button.labels a.label:hover:before, +a.download-button.label:hover:before { + color: rgba(0, 0, 0, 0.8); +} +/*------------------- + Active +--------------------*/ +.ui.active.label, +.play-button.active.label, +.download-button.active.label { + background-color: #D0D0D0; + border-color: #D0D0D0; + background-image: none; + color: rgba(0, 0, 0, 0.95); +} +.ui.active.label:before, +.play-button.active.label:before, +.download-button.active.label:before { + background-color: #D0D0D0; + background-image: none; + color: rgba(0, 0, 0, 0.95); +} +/*------------------- + Active Hover +--------------------*/ +a.ui.labels .active.label:hover, +a.ui.active.label:hover, +a.play-button.labels .active.label:hover, +a.play-button.active.label:hover, +a.download-button.labels .active.label:hover, +a.download-button.active.label:hover { + background-color: #C8C8C8; + border-color: #C8C8C8; + background-image: none; + color: rgba(0, 0, 0, 0.95); +} +.ui.labels a.active.label:ActiveHover:before, +a.ui.active.label:ActiveHover:before, +.play-button.labels a.active.label:ActiveHover:before, +a.play-button.active.label:ActiveHover:before, +.download-button.labels a.active.label:ActiveHover:before, +a.download-button.active.label:ActiveHover:before { + background-color: #C8C8C8; + background-image: none; + color: rgba(0, 0, 0, 0.95); +} +/*------------------- + Visible +--------------------*/ +.ui.labels.visible .label, +.ui.label.visible:not(.dropdown), +.play-button.labels.visible .label, +.play-button.label.visible:not(.dropdown), +.download-button.labels.visible .label, +.download-button.label.visible:not(.dropdown) { + display: inline-block !important; +} +/*------------------- + Hidden +--------------------*/ +.ui.labels.hidden .label, +.ui.label.hidden, +.play-button.labels.hidden .label, +.play-button.label.hidden, +.download-button.labels.hidden .label, +.download-button.label.hidden { + display: none !important; +} +/******************************* + Variations +*******************************/ +/*------------------- + Colors +--------------------*/ +/*--- Red ---*/ +.ui.red.labels .label, +.ui.red.label, +.play-button.red.labels .label, +.play-button.red.label, +.download-button.red.labels .label, +.download-button.red.label { + background-color: #E81123 !important; + border-color: #E81123 !important; + color: #FFFFFF !important; +} +/* Link */ +.ui.red.labels .label:hover, +a.ui.red.label:hover, +.play-button.red.labels .label:hover, +a.play-button.red.label:hover, +.download-button.red.labels .label:hover, +a.download-button.red.label:hover { + background-color: #da0617 !important; + border-color: #da0617 !important; + color: #FFFFFF !important; +} +/* Corner */ +.ui.red.corner.label, +.ui.red.corner.label:hover, +.play-button.red.corner.label, +.play-button.red.corner.label:hover, +.download-button.red.corner.label, +.download-button.red.corner.label:hover { + background-color: transparent !important; +} +/* Ribbon */ +.ui.red.ribbon.label, +.play-button.red.ribbon.label, +.download-button.red.ribbon.label { + border-color: #b80e1c !important; +} +/* Basic */ +.ui.basic.red.label, +.play-button.basic.red.label, +.download-button.basic.red.label { + background-color: #FFFFFF !important; + color: #E81123 !important; + border-color: #E81123 !important; +} +.ui.basic.red.labels a.label:hover, +a.ui.basic.red.label:hover, +.play-button.basic.red.labels a.label:hover, +a.play-button.basic.red.label:hover, +.download-button.basic.red.labels a.label:hover, +a.download-button.basic.red.label:hover { + background-color: #FFFFFF !important; + color: #da0617 !important; + border-color: #da0617 !important; +} +/*--- Orange ---*/ +.ui.orange.labels .label, +.ui.orange.label, +.play-button.orange.labels .label, +.play-button.orange.label, +.download-button.orange.labels .label, +.download-button.orange.label { + background-color: #DF4600 !important; + border-color: #DF4600 !important; + color: #FFFFFF !important; +} +/* Link */ +.ui.orange.labels .label:hover, +a.ui.orange.label:hover, +.play-button.orange.labels .label:hover, +a.play-button.orange.label:hover, +.download-button.orange.labels .label:hover, +a.download-button.orange.label:hover { + background-color: #c63e00 !important; + border-color: #c63e00 !important; + color: #FFFFFF !important; +} +/* Corner */ +.ui.orange.corner.label, +.ui.orange.corner.label:hover, +.play-button.orange.corner.label, +.play-button.orange.corner.label:hover, +.download-button.orange.corner.label, +.download-button.orange.corner.label:hover { + background-color: transparent !important; +} +/* Ribbon */ +.ui.orange.ribbon.label, +.play-button.orange.ribbon.label, +.download-button.orange.ribbon.label { + border-color: #ac3600 !important; +} +/* Basic */ +.ui.basic.orange.label, +.play-button.basic.orange.label, +.download-button.basic.orange.label { + background-color: #FFFFFF !important; + color: #DF4600 !important; + border-color: #DF4600 !important; +} +.ui.basic.orange.labels a.label:hover, +a.ui.basic.orange.label:hover, +.play-button.basic.orange.labels a.label:hover, +a.play-button.basic.orange.label:hover, +.download-button.basic.orange.labels a.label:hover, +a.download-button.basic.orange.label:hover { + background-color: #FFFFFF !important; + color: #c63e00 !important; + border-color: #c63e00 !important; +} +/*--- Yellow ---*/ +.ui.yellow.labels .label, +.ui.yellow.label, +.play-button.yellow.labels .label, +.play-button.yellow.label, +.download-button.yellow.labels .label, +.download-button.yellow.label, +.ui.download-button.labels .label, +.ui.download-button.label { + background-color: #F4C918 !important; + border-color: #F4C918 !important; + color: #FFFFFF !important; +} +/* Link */ +.ui.yellow.labels .label:hover, +a.ui.yellow.label:hover, +.play-button.yellow.labels .label:hover, +a.play-button.yellow.label:hover, +.download-button.yellow.labels .label:hover, +a.download-button.yellow.label:hover, +.ui.download-button.labels .label:hover, +a.ui.download-button.label:hover { + background-color: #f3c300 !important; + border-color: #f3c300 !important; + color: #FFFFFF !important; +} +/* Corner */ +.ui.yellow.corner.label, +.ui.yellow.corner.label:hover, +.play-button.yellow.corner.label, +.play-button.yellow.corner.label:hover, +.download-button.yellow.corner.label, +.download-button.yellow.corner.label:hover, +.ui.download-button.corner.label, +.ui.download-button.corner.label:hover { + background-color: transparent !important; +} +/* Ribbon */ +.ui.yellow.ribbon.label, +.play-button.yellow.ribbon.label, +.download-button.yellow.ribbon.label, +.ui.download-button.ribbon.label { + border-color: #cfa90a !important; +} +/* Basic */ +.ui.basic.yellow.label, +.play-button.basic.yellow.label, +.download-button.basic.yellow.label, +.ui.basic.download-button.label { + background-color: #FFFFFF !important; + color: #F4C918 !important; + border-color: #F4C918 !important; +} +.ui.basic.yellow.labels a.label:hover, +a.ui.basic.yellow.label:hover, +.play-button.basic.yellow.labels a.label:hover, +a.play-button.basic.yellow.label:hover, +.download-button.basic.yellow.labels a.label:hover, +a.download-button.basic.yellow.label:hover, +.ui.basic.download-button.labels a.label:hover, +a.ui.basic.download-button.label:hover { + background-color: #FFFFFF !important; + color: #f3c300 !important; + border-color: #f3c300 !important; +} +/*--- Olive ---*/ +.ui.olive.labels .label, +.ui.olive.label, +.play-button.olive.labels .label, +.play-button.olive.label, +.download-button.olive.labels .label, +.download-button.olive.label { + background-color: #B5CC18 !important; + border-color: #B5CC18 !important; + color: #FFFFFF !important; +} +/* Link */ +.ui.olive.labels .label:hover, +a.ui.olive.label:hover, +.play-button.olive.labels .label:hover, +a.play-button.olive.label:hover, +.download-button.olive.labels .label:hover, +a.download-button.olive.label:hover { + background-color: #a7bd0d !important; + border-color: #a7bd0d !important; + color: #FFFFFF !important; +} +/* Corner */ +.ui.olive.corner.label, +.ui.olive.corner.label:hover, +.play-button.olive.corner.label, +.play-button.olive.corner.label:hover, +.download-button.olive.corner.label, +.download-button.olive.corner.label:hover { + background-color: transparent !important; +} +/* Ribbon */ +.ui.olive.ribbon.label, +.play-button.olive.ribbon.label, +.download-button.olive.ribbon.label { + border-color: #2fa54e !important; +} +/* Basic */ +.ui.basic.olive.label, +.play-button.basic.olive.label, +.download-button.basic.olive.label { + background-color: #FFFFFF !important; + color: #B5CC18 !important; + border-color: #B5CC18 !important; +} +.ui.basic.olive.labels a.label:hover, +a.ui.basic.olive.label:hover, +.play-button.basic.olive.labels a.label:hover, +a.play-button.basic.olive.label:hover, +.download-button.basic.olive.labels a.label:hover, +a.download-button.basic.olive.label:hover { + background-color: #FFFFFF !important; + color: #a7bd0d !important; + border-color: #a7bd0d !important; +} +/*--- Green ---*/ +.ui.green.labels .label, +.ui.green.label, +.ui.ui.button.getting-started-btn.labels .label, +.ui.ui.button.getting-started-btn.label, +.play-button.green.labels .label, +.play-button.green.label, +.download-button.green.labels .label, +.download-button.green.label, +.ui.play-button.button.getting-started-btn.labels .label, +.ui.play-button.button.getting-started-btn.label, +.ui.ui.play-button.getting-started-btn.labels .label, +.ui.ui.play-button.getting-started-btn.label, +.ui.download-button.button.getting-started-btn.labels .label, +.ui.download-button.button.getting-started-btn.label, +.ui.ui.download-button.getting-started-btn.labels .label, +.ui.ui.download-button.getting-started-btn.label { + background-color: #3FC863 !important; + border-color: #3FC863 !important; + color: #FFFFFF !important; +} +/* Link */ +.ui.green.labels .label:hover, +a.ui.green.label:hover, +.ui.ui.button.getting-started-btn.labels .label:hover, +a.ui.ui.button.getting-started-btn.label:hover, +.play-button.green.labels .label:hover, +a.play-button.green.label:hover, +.download-button.green.labels .label:hover, +a.download-button.green.label:hover, +.ui.play-button.button.getting-started-btn.labels .label:hover, +a.ui.play-button.button.getting-started-btn.label:hover, +.ui.ui.play-button.getting-started-btn.labels .label:hover, +a.ui.ui.play-button.getting-started-btn.label:hover, +.ui.download-button.button.getting-started-btn.labels .label:hover, +a.ui.download-button.button.getting-started-btn.label:hover, +.ui.ui.download-button.getting-started-btn.labels .label:hover, +a.ui.ui.download-button.getting-started-btn.label:hover { + background-color: #2ebf54 !important; + border-color: #2ebf54 !important; + color: #FFFFFF !important; +} +/* Corner */ +.ui.green.corner.label, +.ui.green.corner.label:hover, +.ui.ui.button.getting-started-btn.corner.label, +.ui.ui.button.getting-started-btn.corner.label:hover, +.play-button.green.corner.label, +.play-button.green.corner.label:hover, +.download-button.green.corner.label, +.download-button.green.corner.label:hover, +.ui.play-button.button.getting-started-btn.corner.label, +.ui.play-button.button.getting-started-btn.corner.label:hover, +.ui.ui.play-button.getting-started-btn.corner.label, +.ui.ui.play-button.getting-started-btn.corner.label:hover, +.ui.download-button.button.getting-started-btn.corner.label, +.ui.download-button.button.getting-started-btn.corner.label:hover, +.ui.ui.download-button.getting-started-btn.corner.label, +.ui.ui.download-button.getting-started-btn.corner.label:hover { + background-color: transparent !important; +} +/* Ribbon */ +.ui.green.ribbon.label, +.ui.ui.button.getting-started-btn.ribbon.label, +.play-button.green.ribbon.label, +.download-button.green.ribbon.label, +.ui.play-button.button.getting-started-btn.ribbon.label, +.ui.ui.play-button.getting-started-btn.ribbon.label, +.ui.download-button.button.getting-started-btn.ribbon.label, +.ui.ui.download-button.getting-started-btn.ribbon.label { + border-color: #2fa54e !important; +} +/* Basic */ +.ui.basic.green.label, +.ui.basic.ui.button.getting-started-btn.label, +.play-button.basic.green.label, +.download-button.basic.green.label, +.ui.basic.play-button.button.getting-started-btn.label, +.ui.basic.ui.play-button.getting-started-btn.label, +.ui.basic.download-button.button.getting-started-btn.label, +.ui.basic.ui.download-button.getting-started-btn.label { + background-color: #FFFFFF !important; + color: #3FC863 !important; + border-color: #3FC863 !important; +} +.ui.basic.green.labels a.label:hover, +a.ui.basic.green.label:hover, +.ui.basic.ui.button.getting-started-btn.labels a.label:hover, +a.ui.basic.ui.button.getting-started-btn.label:hover, +.play-button.basic.green.labels a.label:hover, +a.play-button.basic.green.label:hover, +.download-button.basic.green.labels a.label:hover, +a.download-button.basic.green.label:hover, +.ui.basic.play-button.button.getting-started-btn.labels a.label:hover, +a.ui.basic.play-button.button.getting-started-btn.label:hover, +.ui.basic.ui.play-button.getting-started-btn.labels a.label:hover, +a.ui.basic.ui.play-button.getting-started-btn.label:hover, +.ui.basic.download-button.button.getting-started-btn.labels a.label:hover, +a.ui.basic.download-button.button.getting-started-btn.label:hover, +.ui.basic.ui.download-button.getting-started-btn.labels a.label:hover, +a.ui.basic.ui.download-button.getting-started-btn.label:hover { + background-color: #FFFFFF !important; + color: #2ebf54 !important; + border-color: #2ebf54 !important; +} +/*--- Teal ---*/ +.ui.teal.labels .label, +.ui.teal.label, +.play-button.teal.labels .label, +.play-button.teal.label, +.download-button.teal.labels .label, +.download-button.teal.label { + background-color: #008272 !important; + border-color: #008272 !important; + color: #FFFFFF !important; +} +/* Link */ +.ui.teal.labels .label:hover, +a.ui.teal.label:hover, +.play-button.teal.labels .label:hover, +a.play-button.teal.label:hover, +.download-button.teal.labels .label:hover, +a.download-button.teal.label:hover { + background-color: #00695c !important; + border-color: #00695c !important; + color: #FFFFFF !important; +} +/* Corner */ +.ui.teal.corner.label, +.ui.teal.corner.label:hover, +.play-button.teal.corner.label, +.play-button.teal.corner.label:hover, +.download-button.teal.corner.label, +.download-button.teal.corner.label:hover { + background-color: transparent !important; +} +/* Ribbon */ +.ui.teal.ribbon.label, +.play-button.teal.ribbon.label, +.download-button.teal.ribbon.label { + border-color: #004f45 !important; +} +/* Basic */ +.ui.basic.teal.label, +.play-button.basic.teal.label, +.download-button.basic.teal.label { + background-color: #FFFFFF !important; + color: #008272 !important; + border-color: #008272 !important; +} +.ui.basic.teal.labels a.label:hover, +a.ui.basic.teal.label:hover, +.play-button.basic.teal.labels a.label:hover, +a.play-button.basic.teal.label:hover, +.download-button.basic.teal.labels a.label:hover, +a.download-button.basic.teal.label:hover { + background-color: #FFFFFF !important; + color: #00695c !important; + border-color: #00695c !important; +} +/*--- Blue ---*/ +.ui.blue.labels .label, +.ui.blue.label, +.play-button.blue.labels .label, +.play-button.blue.label, +.ui.play-button.labels .label, +.ui.play-button.label, +.download-button.blue.labels .label, +.download-button.blue.label { + background-color: #54C9C9 !important; + border-color: #54C9C9 !important; + color: #FFFFFF !important; +} +/* Link */ +.ui.blue.labels .label:hover, +a.ui.blue.label:hover, +.play-button.blue.labels .label:hover, +a.play-button.blue.label:hover, +.ui.play-button.labels .label:hover, +a.ui.play-button.label:hover, +.download-button.blue.labels .label:hover, +a.download-button.blue.label:hover { + background-color: #3ac9c9 !important; + border-color: #3ac9c9 !important; + color: #FFFFFF !important; +} +/* Corner */ +.ui.blue.corner.label, +.ui.blue.corner.label:hover, +.play-button.blue.corner.label, +.play-button.blue.corner.label:hover, +.ui.play-button.corner.label, +.ui.play-button.corner.label:hover, +.download-button.blue.corner.label, +.download-button.blue.corner.label:hover { + background-color: transparent !important; +} +/* Ribbon */ +.ui.blue.ribbon.label, +.play-button.blue.ribbon.label, +.ui.play-button.ribbon.label, +.download-button.blue.ribbon.label { + border-color: #38b2b2 !important; +} +/* Basic */ +.ui.basic.blue.label, +.play-button.basic.blue.label, +.ui.basic.play-button.label, +.download-button.basic.blue.label { + background-color: #FFFFFF !important; + color: #54C9C9 !important; + border-color: #54C9C9 !important; +} +.ui.basic.blue.labels a.label:hover, +a.ui.basic.blue.label:hover, +.play-button.basic.blue.labels a.label:hover, +a.play-button.basic.blue.label:hover, +.ui.basic.play-button.labels a.label:hover, +a.ui.basic.play-button.label:hover, +.download-button.basic.blue.labels a.label:hover, +a.download-button.basic.blue.label:hover { + background-color: #FFFFFF !important; + color: #3ac9c9 !important; + border-color: #3ac9c9 !important; +} +/*--- Violet ---*/ +.ui.violet.labels .label, +.ui.violet.label, +.play-button.violet.labels .label, +.play-button.violet.label, +.download-button.violet.labels .label, +.download-button.violet.label { + background-color: #C90072 !important; + border-color: #C90072 !important; + color: #FFFFFF !important; +} +/* Link */ +.ui.violet.labels .label:hover, +a.ui.violet.label:hover, +.play-button.violet.labels .label:hover, +a.play-button.violet.label:hover, +.download-button.violet.labels .label:hover, +a.download-button.violet.label:hover { + background-color: #b00064 !important; + border-color: #b00064 !important; + color: #FFFFFF !important; +} +/* Corner */ +.ui.violet.corner.label, +.ui.violet.corner.label:hover, +.play-button.violet.corner.label, +.play-button.violet.corner.label:hover, +.download-button.violet.corner.label, +.download-button.violet.corner.label:hover { + background-color: transparent !important; +} +/* Ribbon */ +.ui.violet.ribbon.label, +.play-button.violet.ribbon.label, +.download-button.violet.ribbon.label { + border-color: #960055 !important; +} +/* Basic */ +.ui.basic.violet.label, +.play-button.basic.violet.label, +.download-button.basic.violet.label { + background-color: #FFFFFF !important; + color: #C90072 !important; + border-color: #C90072 !important; +} +.ui.basic.violet.labels a.label:hover, +a.ui.basic.violet.label:hover, +.play-button.basic.violet.labels a.label:hover, +a.play-button.basic.violet.label:hover, +.download-button.basic.violet.labels a.label:hover, +a.download-button.basic.violet.label:hover { + background-color: #FFFFFF !important; + color: #b00064 !important; + border-color: #b00064 !important; +} +/*--- Purple ---*/ +.ui.purple.labels .label, +.ui.purple.label, +.play-button.purple.labels .label, +.play-button.purple.label, +.download-button.purple.labels .label, +.download-button.purple.label { + background-color: #8169E6 !important; + border-color: #8169E6 !important; + color: #FFFFFF !important; +} +/* Link */ +.ui.purple.labels .label:hover, +a.ui.purple.label:hover, +.play-button.purple.labels .label:hover, +a.play-button.purple.label:hover, +.download-button.purple.labels .label:hover, +a.download-button.purple.label:hover { + background-color: #6a4cea !important; + border-color: #6a4cea !important; + color: #FFFFFF !important; +} +/* Corner */ +.ui.purple.corner.label, +.ui.purple.corner.label:hover, +.play-button.purple.corner.label, +.play-button.purple.corner.label:hover, +.download-button.purple.corner.label, +.download-button.purple.corner.label:hover { + background-color: transparent !important; +} +/* Ribbon */ +.ui.purple.ribbon.label, +.play-button.purple.ribbon.label, +.download-button.purple.ribbon.label { + border-color: #5c3ddf !important; +} +/* Basic */ +.ui.basic.purple.label, +.play-button.basic.purple.label, +.download-button.basic.purple.label { + background-color: #FFFFFF !important; + color: #8169E6 !important; + border-color: #8169E6 !important; +} +.ui.basic.purple.labels a.label:hover, +a.ui.basic.purple.label:hover, +.play-button.basic.purple.labels a.label:hover, +a.play-button.basic.purple.label:hover, +.download-button.basic.purple.labels a.label:hover, +a.download-button.basic.purple.label:hover { + background-color: #FFFFFF !important; + color: #6a4cea !important; + border-color: #6a4cea !important; +} +/*--- Pink ---*/ +.ui.pink.labels .label, +.ui.pink.label, +.play-button.pink.labels .label, +.play-button.pink.label, +.download-button.pink.labels .label, +.download-button.pink.label { + background-color: #E2008C !important; + border-color: #E2008C !important; + color: #FFFFFF !important; +} +/* Link */ +.ui.pink.labels .label:hover, +a.ui.pink.label:hover, +.play-button.pink.labels .label:hover, +a.play-button.pink.label:hover, +.download-button.pink.labels .label:hover, +a.download-button.pink.label:hover { + background-color: #c9007c !important; + border-color: #c9007c !important; + color: #FFFFFF !important; +} +/* Corner */ +.ui.pink.corner.label, +.ui.pink.corner.label:hover, +.play-button.pink.corner.label, +.play-button.pink.corner.label:hover, +.download-button.pink.corner.label, +.download-button.pink.corner.label:hover { + background-color: transparent !important; +} +/* Ribbon */ +.ui.pink.ribbon.label, +.play-button.pink.ribbon.label, +.download-button.pink.ribbon.label { + border-color: #af006c !important; +} +/* Basic */ +.ui.basic.pink.label, +.play-button.basic.pink.label, +.download-button.basic.pink.label { + background-color: #FFFFFF !important; + color: #E2008C !important; + border-color: #E2008C !important; +} +.ui.basic.pink.labels a.label:hover, +a.ui.basic.pink.label:hover, +.play-button.basic.pink.labels a.label:hover, +a.play-button.basic.pink.label:hover, +.download-button.basic.pink.labels a.label:hover, +a.download-button.basic.pink.label:hover { + background-color: #FFFFFF !important; + color: #c9007c !important; + border-color: #c9007c !important; +} +/*--- Brown ---*/ +.ui.brown.labels .label, +.ui.brown.label, +.play-button.brown.labels .label, +.play-button.brown.label, +.download-button.brown.labels .label, +.download-button.brown.label { + background-color: #6B5B4C !important; + border-color: #6B5B4C !important; + color: #FFFFFF !important; +} +/* Link */ +.ui.brown.labels .label:hover, +a.ui.brown.label:hover, +.play-button.brown.labels .label:hover, +a.play-button.brown.label:hover, +.download-button.brown.labels .label:hover, +a.download-button.brown.label:hover { + background-color: #5d4e40 !important; + border-color: #5d4e40 !important; + color: #FFFFFF !important; +} +/* Corner */ +.ui.brown.corner.label, +.ui.brown.corner.label:hover, +.play-button.brown.corner.label, +.play-button.brown.corner.label:hover, +.download-button.brown.corner.label, +.download-button.brown.corner.label:hover { + background-color: transparent !important; +} +/* Ribbon */ +.ui.brown.ribbon.label, +.play-button.brown.ribbon.label, +.download-button.brown.ribbon.label { + border-color: #4d4237 !important; +} +/* Basic */ +.ui.basic.brown.label, +.play-button.basic.brown.label, +.download-button.basic.brown.label { + background-color: #FFFFFF !important; + color: #6B5B4C !important; + border-color: #6B5B4C !important; +} +.ui.basic.brown.labels a.label:hover, +a.ui.basic.brown.label:hover, +.play-button.basic.brown.labels a.label:hover, +a.play-button.basic.brown.label:hover, +.download-button.basic.brown.labels a.label:hover, +a.download-button.basic.brown.label:hover { + background-color: #FFFFFF !important; + color: #5d4e40 !important; + border-color: #5d4e40 !important; +} +/*--- Grey ---*/ +.ui.grey.labels .label, +.ui.grey.label, +.ui.ui.button.editortools-btn.labels .label, +.ui.ui.button.editortools-btn.label, +.play-button.grey.labels .label, +.play-button.grey.label, +.download-button.grey.labels .label, +.download-button.grey.label, +.ui.play-button.button.editortools-btn.labels .label, +.ui.play-button.button.editortools-btn.label, +.ui.ui.play-button.editortools-btn.labels .label, +.ui.ui.play-button.editortools-btn.label, +.ui.download-button.button.editortools-btn.labels .label, +.ui.download-button.button.editortools-btn.label, +.ui.ui.download-button.editortools-btn.labels .label, +.ui.ui.download-button.editortools-btn.label { + background-color: #42495F !important; + border-color: #42495F !important; + color: #FFFFFF !important; +} +/* Link */ +.ui.grey.labels .label:hover, +a.ui.grey.label:hover, +.ui.ui.button.editortools-btn.labels .label:hover, +a.ui.ui.button.editortools-btn.label:hover, +.play-button.grey.labels .label:hover, +a.play-button.grey.label:hover, +.download-button.grey.labels .label:hover, +a.download-button.grey.label:hover, +.ui.play-button.button.editortools-btn.labels .label:hover, +a.ui.play-button.button.editortools-btn.label:hover, +.ui.ui.play-button.editortools-btn.labels .label:hover, +a.ui.ui.play-button.editortools-btn.label:hover, +.ui.download-button.button.editortools-btn.labels .label:hover, +a.ui.download-button.button.editortools-btn.label:hover, +.ui.ui.download-button.editortools-btn.labels .label:hover, +a.ui.ui.download-button.editortools-btn.label:hover { + background-color: #4c556e !important; + border-color: #4c556e !important; + color: #FFFFFF !important; +} +/* Corner */ +.ui.grey.corner.label, +.ui.grey.corner.label:hover, +.ui.ui.button.editortools-btn.corner.label, +.ui.ui.button.editortools-btn.corner.label:hover, +.play-button.grey.corner.label, +.play-button.grey.corner.label:hover, +.download-button.grey.corner.label, +.download-button.grey.corner.label:hover, +.ui.play-button.button.editortools-btn.corner.label, +.ui.play-button.button.editortools-btn.corner.label:hover, +.ui.ui.play-button.editortools-btn.corner.label, +.ui.ui.play-button.editortools-btn.corner.label:hover, +.ui.download-button.button.editortools-btn.corner.label, +.ui.download-button.button.editortools-btn.corner.label:hover, +.ui.ui.download-button.editortools-btn.corner.label, +.ui.ui.download-button.editortools-btn.corner.label:hover { + background-color: transparent !important; +} +/* Ribbon */ +.ui.grey.ribbon.label, +.ui.ui.button.editortools-btn.ribbon.label, +.play-button.grey.ribbon.label, +.download-button.grey.ribbon.label, +.ui.play-button.button.editortools-btn.ribbon.label, +.ui.ui.play-button.editortools-btn.ribbon.label, +.ui.download-button.button.editortools-btn.ribbon.label, +.ui.ui.download-button.editortools-btn.ribbon.label { + border-color: #4d4237 !important; +} +/* Basic */ +.ui.basic.grey.label, +.ui.basic.ui.button.editortools-btn.label, +.play-button.basic.grey.label, +.download-button.basic.grey.label, +.ui.basic.play-button.button.editortools-btn.label, +.ui.basic.ui.play-button.editortools-btn.label, +.ui.basic.download-button.button.editortools-btn.label, +.ui.basic.ui.download-button.editortools-btn.label { + background-color: #FFFFFF !important; + color: #42495F !important; + border-color: #42495F !important; +} +.ui.basic.grey.labels a.label:hover, +a.ui.basic.grey.label:hover, +.ui.basic.ui.button.editortools-btn.labels a.label:hover, +a.ui.basic.ui.button.editortools-btn.label:hover, +.play-button.basic.grey.labels a.label:hover, +a.play-button.basic.grey.label:hover, +.download-button.basic.grey.labels a.label:hover, +a.download-button.basic.grey.label:hover, +.ui.basic.play-button.button.editortools-btn.labels a.label:hover, +a.ui.basic.play-button.button.editortools-btn.label:hover, +.ui.basic.ui.play-button.editortools-btn.labels a.label:hover, +a.ui.basic.ui.play-button.editortools-btn.label:hover, +.ui.basic.download-button.button.editortools-btn.labels a.label:hover, +a.ui.basic.download-button.button.editortools-btn.label:hover, +.ui.basic.ui.download-button.editortools-btn.labels a.label:hover, +a.ui.basic.ui.download-button.editortools-btn.label:hover { + background-color: #FFFFFF !important; + color: #4c556e !important; + border-color: #4c556e !important; +} +/*--- Black ---*/ +.ui.black.labels .label, +.ui.black.label, +.play-button.black.labels .label, +.play-button.black.label, +.download-button.black.labels .label, +.download-button.black.label { + background-color: #1B1C1D !important; + border-color: #1B1C1D !important; + color: #FFFFFF !important; +} +/* Link */ +.ui.black.labels .label:hover, +a.ui.black.label:hover, +.play-button.black.labels .label:hover, +a.play-button.black.label:hover, +.download-button.black.labels .label:hover, +a.download-button.black.label:hover { + background-color: #27292a !important; + border-color: #27292a !important; + color: #FFFFFF !important; +} +/* Corner */ +.ui.black.corner.label, +.ui.black.corner.label:hover, +.play-button.black.corner.label, +.play-button.black.corner.label:hover, +.download-button.black.corner.label, +.download-button.black.corner.label:hover { + background-color: transparent !important; +} +/* Ribbon */ +.ui.black.ribbon.label, +.play-button.black.ribbon.label, +.download-button.black.ribbon.label { + border-color: #4d4237 !important; +} +/* Basic */ +.ui.basic.black.label, +.play-button.basic.black.label, +.download-button.basic.black.label { + background-color: #FFFFFF !important; + color: #1B1C1D !important; + border-color: #1B1C1D !important; +} +.ui.basic.black.labels a.label:hover, +a.ui.basic.black.label:hover, +.play-button.basic.black.labels a.label:hover, +a.play-button.basic.black.label:hover, +.download-button.basic.black.labels a.label:hover, +a.download-button.basic.black.label:hover { + background-color: #FFFFFF !important; + color: #27292a !important; + border-color: #27292a !important; +} +/*------------------- + Basic +--------------------*/ +.ui.basic.label, +.play-button.basic.label, +.download-button.basic.label { + background: none #FFFFFF; + border: 1px solid rgba(34, 36, 38, 0.15); + color: rgba(0, 0, 0, 0.87); + box-shadow: none; +} +/* Link */ +a.ui.basic.label:hover, +a.play-button.basic.label:hover, +a.download-button.basic.label:hover { + text-decoration: none; + background: none #FFFFFF; + color: #1e70bf; + box-shadow: 1px solid rgba(34, 36, 38, 0.15); + box-shadow: none; +} +/* Pointing */ +.ui.basic.pointing.label:before, +.play-button.basic.pointing.label:before, +.download-button.basic.pointing.label:before { + border-color: inherit; +} +/*------------------- + Fluid +--------------------*/ +.ui.label.fluid, +.ui.fluid.labels > .label, +.play-button.label.fluid, +.play-button.fluid.labels > .label, +.download-button.label.fluid, +.download-button.fluid.labels > .label { + width: 100%; + box-sizing: border-box; +} +/*------------------- + Inverted +--------------------*/ +.ui.inverted.labels .label, +.ui.inverted.label, +.play-button.inverted.labels .label, +.play-button.inverted.label, +.download-button.inverted.labels .label, +.download-button.inverted.label { + color: rgba(255, 255, 255, 0.9) !important; +} +/*------------------- + Horizontal +--------------------*/ +.ui.horizontal.labels .label, +.ui.horizontal.label, +.play-button.horizontal.labels .label, +.play-button.horizontal.label, +.download-button.horizontal.labels .label, +.download-button.horizontal.label { + margin: 0em 0.5em 0em 0em; + padding: 0.4em 0.833em; + min-width: 3em; + text-align: center; +} +/*------------------- + Circular +--------------------*/ +.ui.circular.labels .label, +.ui.circular.label, +.play-button.circular.labels .label, +.play-button.circular.label, +.download-button.circular.labels .label, +.download-button.circular.label { + min-width: 2em; + min-height: 2em; + padding: 0.5em !important; + line-height: 1em; + text-align: center; + border-radius: 500rem; +} +.ui.empty.circular.labels .label, +.ui.empty.circular.label, +.play-button.empty.circular.labels .label, +.play-button.empty.circular.label, +.download-button.empty.circular.labels .label, +.download-button.empty.circular.label { + min-width: 0em; + min-height: 0em; + overflow: hidden; + width: 0.5em; + height: 0.5em; + vertical-align: baseline; +} +/*------------------- + Pointing +--------------------*/ +.ui.pointing.label, +.play-button.pointing.label, +.download-button.pointing.label { + position: relative; +} +.ui.attached.pointing.label, +.play-button.attached.pointing.label, +.download-button.attached.pointing.label { + position: absolute; +} +.ui.pointing.label:before, +.play-button.pointing.label:before, +.download-button.pointing.label:before { + background-color: inherit; + background-image: inherit; + border-width: none; + border-style: solid; + border-color: inherit; +} +/* Arrow */ +.ui.pointing.label:before, +.play-button.pointing.label:before, +.download-button.pointing.label:before { + position: absolute; + content: ''; + transform: rotate(45deg); + background-image: none; + z-index: 2; + width: 0.6666em; + height: 0.6666em; + transition: background 0.1s ease; +} +/*--- Above ---*/ +.ui.pointing.label, +.ui[class*="pointing above"].label, +.play-button.pointing.label, +.play-button[class*="pointing above"].label, +.download-button.pointing.label, +.download-button[class*="pointing above"].label { + margin-top: 1em; +} +.ui.pointing.label:before, +.ui[class*="pointing above"].label:before, +.play-button.pointing.label:before, +.play-button[class*="pointing above"].label:before, +.download-button.pointing.label:before, +.download-button[class*="pointing above"].label:before { + border-width: 1px 0px 0px 1px; + transform: translateX(-50%) translateY(-50%) rotate(45deg); + top: 0%; + left: 50%; +} +/*--- Below ---*/ +.ui[class*="bottom pointing"].label, +.ui[class*="pointing below"].label, +.play-button[class*="bottom pointing"].label, +.play-button[class*="pointing below"].label, +.download-button[class*="bottom pointing"].label, +.download-button[class*="pointing below"].label { + margin-top: 0em; + margin-bottom: 1em; +} +.ui[class*="bottom pointing"].label:before, +.ui[class*="pointing below"].label:before, +.play-button[class*="bottom pointing"].label:before, +.play-button[class*="pointing below"].label:before, +.download-button[class*="bottom pointing"].label:before, +.download-button[class*="pointing below"].label:before { + border-width: 0px 1px 1px 0px; + top: auto; + right: auto; + transform: translateX(-50%) translateY(-50%) rotate(45deg); + top: 100%; + left: 50%; +} +/*--- Left ---*/ +.ui[class*="left pointing"].label, +.play-button[class*="left pointing"].label, +.download-button[class*="left pointing"].label { + margin-top: 0em; + margin-left: 0.6666em; +} +.ui[class*="left pointing"].label:before, +.play-button[class*="left pointing"].label:before, +.download-button[class*="left pointing"].label:before { + border-width: 0px 0px 1px 1px; + transform: translateX(-50%) translateY(-50%) rotate(45deg); + bottom: auto; + right: auto; + top: 50%; + left: 0em; +} +/*--- Right ---*/ +.ui[class*="right pointing"].label, +.play-button[class*="right pointing"].label, +.download-button[class*="right pointing"].label { + margin-top: 0em; + margin-right: 0.6666em; +} +.ui[class*="right pointing"].label:before, +.play-button[class*="right pointing"].label:before, +.download-button[class*="right pointing"].label:before { + border-width: 1px 1px 0px 0px; + transform: translateX(50%) translateY(-50%) rotate(45deg); + top: 50%; + right: 0%; + bottom: auto; + left: auto; +} +/* Basic Pointing */ +/*--- Above ---*/ +.ui.basic.pointing.label:before, +.ui.basic[class*="pointing above"].label:before, +.play-button.basic.pointing.label:before, +.play-button.basic[class*="pointing above"].label:before, +.download-button.basic.pointing.label:before, +.download-button.basic[class*="pointing above"].label:before { + margin-top: -1px; +} +/*--- Below ---*/ +.ui.basic[class*="bottom pointing"].label:before, +.ui.basic[class*="pointing below"].label:before, +.play-button.basic[class*="bottom pointing"].label:before, +.play-button.basic[class*="pointing below"].label:before, +.download-button.basic[class*="bottom pointing"].label:before, +.download-button.basic[class*="pointing below"].label:before { + bottom: auto; + top: 100%; + margin-top: 1px; +} +/*--- Left ---*/ +.ui.basic[class*="left pointing"].label:before, +.play-button.basic[class*="left pointing"].label:before, +.download-button.basic[class*="left pointing"].label:before { + top: 50%; + left: -1px; +} +/*--- Right ---*/ +.ui.basic[class*="right pointing"].label:before, +.play-button.basic[class*="right pointing"].label:before, +.download-button.basic[class*="right pointing"].label:before { + top: 50%; + right: -1px; +} +/*------------------ + Floating Label +-------------------*/ +.ui.floating.label, +.play-button.floating.label, +.download-button.floating.label { + position: absolute; + z-index: 100; + top: -1em; + left: 100%; + margin: 0em 0em 0em -1.5em !important; +} +/*------------------- + Sizes +--------------------*/ +.ui.mini.labels .label, +.ui.mini.label, +.play-button.mini.labels .label, +.play-button.mini.label, +.download-button.mini.labels .label, +.download-button.mini.label { + font-size: 0.64285714rem; +} +.ui.tiny.labels .label, +.ui.tiny.label, +.play-button.tiny.labels .label, +.play-button.tiny.label, +.download-button.tiny.labels .label, +.download-button.tiny.label { + font-size: 0.71428571rem; +} +.ui.small.labels .label, +.ui.small.label, +.play-button.small.labels .label, +.play-button.small.label, +.download-button.small.labels .label, +.download-button.small.label { + font-size: 0.78571429rem; +} +.ui.labels .label, +.ui.label, +.play-button.labels .label, +.play-button.label, +.download-button.labels .label, +.download-button.label { + font-size: 0.85714286rem; +} +.ui.large.labels .label, +.ui.large.label, +.play-button.large.labels .label, +.play-button.large.label, +.download-button.large.labels .label, +.download-button.large.label { + font-size: 1rem; +} +.ui.big.labels .label, +.ui.big.label, +.play-button.big.labels .label, +.play-button.big.label, +.download-button.big.labels .label, +.download-button.big.label { + font-size: 1.28571429rem; +} +.ui.huge.labels .label, +.ui.huge.label, +.play-button.huge.labels .label, +.play-button.huge.label, +.download-button.huge.labels .label, +.download-button.huge.label { + font-size: 1.42857143rem; +} +.ui.massive.labels .label, +.ui.massive.label, +.play-button.massive.labels .label, +.play-button.massive.label, +.download-button.massive.labels .label, +.download-button.massive.label { + font-size: 1.71428571rem; +} +/******************************* + Site Overrides +*******************************/ +/******************************* + Site Overrides +*******************************/ +/*! + * # Semantic UI - List + * http://github.com/semantic-org/semantic-ui/ + * + * + * Released under the MIT license + * http://opensource.org/licenses/MIT + * + */ +/******************************* + Theme +*******************************/ +/* + +████████╗██╗ ██╗███████╗███╗ ███╗███████╗███████╗ +╚══██╔══╝██║ ██║██╔════╝████╗ ████║██╔════╝██╔════╝ + ██║ ███████║█████╗ ██╔████╔██║█████╗ ███████╗ + ██║ ██╔══██║██╔══╝ ██║╚██╔╝██║██╔══╝ ╚════██║ + ██║ ██║ ██║███████╗██║ ╚═╝ ██║███████╗███████║ + ╚═╝ ╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝╚══════╝╚══════╝ + +*/ +/******************************* + Theme Selection +*******************************/ +/* To override a theme for an individual element + specify theme name below +*/ +/* Global */ +/* Elements */ +/* Collections */ +/* Modules */ +/* Views */ +/******************************* + Folders +*******************************/ +/* Path to theme packages */ +/* Path to site override folder */ +/******************************* + Import Theme +*******************************/ +/******************************* + Import Directives +*******************************/ +/*------------------ + Theme +-------------------*/ +/*-------------------- + Site Variables +---------------------*/ +/* Default site.variables */ +/******************************* + Site Settings +*******************************/ +/*------------------- + Fonts +--------------------*/ +/*------------------- + Base Sizes +--------------------*/ +/* This is the single variable that controls them all */ +/* The size of page text */ +/*------------------- + Border Radius +--------------------*/ +/* See Power-user section below + for explanation of @px variables +*/ +/*------------------- + Brand Colors +--------------------*/ +/*-------------- + Page Heading +---------------*/ +/*-------------- + Form Input +---------------*/ +/* This adjusts the default form input across all elements */ +/* Input Text Color */ +/* Line Height Default For Inputs in Browser (Descendors are 17px at 14px base em) */ +/*------------------- + Focused Input +--------------------*/ +/* Used on inputs, textarea etc */ +/* Used on dropdowns, other larger blocks */ +/*------------------- + Sizes +--------------------*/ +/* + Sizes are all expressed in terms of 14px/em (default em) + This ensures these "ratios" remain constant despite changes in EM +*/ +/*------------------- + Page +--------------------*/ +/*------------------- + Paragraph +--------------------*/ +/*------------------- + Links +--------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ +/*------------------- + Highlighted Text +--------------------*/ +/*------------------- + Loader +--------------------*/ +/*------------------- + Grid +--------------------*/ +/*------------------- + Transitions +--------------------*/ +/*------------------- + Breakpoints +--------------------*/ +/*------------------- + Site Colors +--------------------*/ +/*--- Colors ---*/ +/*--- Light Colors ---*/ +/*--- Neutrals ---*/ +/*--- Colored Backgrounds ---*/ +/*--- Colored Headers ---*/ +/*--- Colored Text ---*/ +/*--- Colored Border ---*/ +/*------------------- + Alpha Colors +--------------------*/ +/*------------------- + Accents +--------------------*/ +/* Differentiating Neutrals */ +/* Differentiating Layers */ +/******************************* + Power-User +*******************************/ +/*------------------- + Emotive Colors +--------------------*/ +/* Positive */ +/* Negative */ +/* Info */ +/* Warning */ +/*------------------- + Paths +--------------------*/ +/* For source only. Modified in gulp for dist */ +/*------------------- + Em Sizes +--------------------*/ +/* + This rounds @size values to the closest pixel then expresses that value in (r)em. + This ensures all size values round to exact pixels +*/ +/* em */ +/* rem */ +/*------------------- + Icons +--------------------*/ +/* Maximum Glyph Width of Icon */ +/*------------------- + Neutral Text +--------------------*/ +/*------------------- + Brand Colors +--------------------*/ +/*------------------- + Borders +--------------------*/ +/*------------------- + Derived Values +--------------------*/ +/* Loaders Position Offset */ +/* Rendered Scrollbar Width */ +/* Maximum Single Character Glyph Width, aka Capital "W" */ +/* Used to match floats with text */ +/* Header Spacing */ +/* Minimum Mobile Width */ +/* Positive / Negative Dupes */ +/* Responsive */ +/*------------------- + Exact Pixel Values +--------------------*/ +/* + These are used to specify exact pixel values in em + for things like borders that remain constantly + sized as emSize adjusts + + Since there are many more sizes than names for sizes, + these are named by their original pixel values. + +*/ +/* Columns */ +/******************************* + States +*******************************/ +/*------------------- + Disabled +--------------------*/ +/*------------------- + Hover +--------------------*/ +/*--- Shadows ---*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Focus +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Down (:active) +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Active +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/* Packaged site.variables */ +/******************************* + User Global Variables +*******************************/ +/*------------------- + Fonts +--------------------*/ +/*------------------- + Breakpoints +--------------------*/ +/* +@mobileBreakpoint : unit( (63 * @emSize), px); +@tabletBreakpoint : unit( (79 * @emSize), px); +@computerBreakpoint : unit( (91 * @emSize), px); +@largeMonitorBreakpoint : unit( (99 * @emSize), px); +@widescreenMonitorBreakpoint : unit( (119 * @emSize), px); +*/ +/******************************* + PXT Variables +*******************************/ +/*------------------- + Menu +--------------------*/ +/*------------------- + Layout +--------------------*/ +/*------------------- + Background +--------------------*/ +/*------------------- + Full screen +--------------------*/ +/*------------------- + Side Docs +--------------------*/ +/*------------------- + Editor +--------------------*/ +/* Component's site.variables */ +/******************************* + User Global Variables +*******************************/ +/*------------------- + Fonts +--------------------*/ +/*------------------- + Breakpoints +--------------------*/ +/* +@mobileBreakpoint : unit( (63 * @emSize), px); +@tabletBreakpoint : unit( (79 * @emSize), px); +@computerBreakpoint : unit( (91 * @emSize), px); +@largeMonitorBreakpoint : unit( (99 * @emSize), px); +@widescreenMonitorBreakpoint : unit( (119 * @emSize), px); +*/ +/******************************* + PXT Variables +*******************************/ +/*------------------- + Menu +--------------------*/ +/*------------------- + Layout +--------------------*/ +/*------------------- + Background +--------------------*/ +/*------------------- + Full screen +--------------------*/ +/*------------------- + Side Docs +--------------------*/ +/*------------------- + Editor +--------------------*/ +/* Site theme site.variables */ +/******************************* + User Global Variables +*******************************/ +/*------------------- + Site Colors +--------------------*/ +/******************************* + PXT Overrides +*******************************/ +/*------------------- + Component Variables +---------------------*/ +/* Default */ +/******************************* + List +*******************************/ +/*------------------- + View +--------------------*/ +/* List */ +/* List Item */ +/* Sub List */ +/* Sub List Item */ +/*------------------- + Elements +--------------------*/ +/* Icon */ +/* Image */ +/* Content */ +/* Header */ +/* Description */ +/* Link */ +/* Header Link */ +/* Linked Icon */ +/*------------------- + States +--------------------*/ +/*------------------- + Variations +--------------------*/ +/* Float */ +/* Horizontal */ +/* Inverted */ +/* Link List */ +/* Inverted Link List */ +/* Selection List */ +/* Selection List States */ +/* Inverted Selection List */ +/* Animated List */ +/* Bulleted */ +/* Horizontal Bullets */ +/* Ordered List */ +/* Horizontal Ordered */ +/* Divided */ +/* Divided Horizontal */ +/* Divided */ +/* Divided Horizontal */ +/* Relaxed */ +/* Very Relaxed */ +/* Packaged Theme */ +/******************************* + User Variable Overrides +*******************************/ +/* Site Theme */ +/******************************* + User Variable Overrides +*******************************/ +/******************************* + Mix-ins +*******************************/ +/*------------------ + Fonts +-------------------*/ +/*------------------ + Overrides +-------------------*/ +/* End Config */ +/******************************* + List +*******************************/ +ul.ui.list, +ol.ui.list, +.ui.list, +ul.play-button.list, +ol.play-button.list, +.play-button.list, +ul.download-button.list, +ol.download-button.list, +.download-button.list { + list-style-type: none; + margin: 1em 0em; + padding: 0em 0em; +} +ul.ui.list:first-child, +ol.ui.list:first-child, +.ui.list:first-child, +ul.play-button.list:first-child, +ol.play-button.list:first-child, +.play-button.list:first-child, +ul.download-button.list:first-child, +ol.download-button.list:first-child, +.download-button.list:first-child { + margin-top: 0em; + padding-top: 0em; +} +ul.ui.list:last-child, +ol.ui.list:last-child, +.ui.list:last-child, +ul.play-button.list:last-child, +ol.play-button.list:last-child, +.play-button.list:last-child, +ul.download-button.list:last-child, +ol.download-button.list:last-child, +.download-button.list:last-child { + margin-bottom: 0em; + padding-bottom: 0em; +} +/******************************* + Content +*******************************/ +/* List Item */ +ul.ui.list li, +ol.ui.list li, +.ui.list > .item, +.ui.list .list > .item, +ul.play-button.list li, +ol.play-button.list li, +.play-button.list > .item, +.play-button.list .list > .item, +ul.download-button.list li, +ol.download-button.list li, +.download-button.list > .item, +.download-button.list .list > .item { + display: list-item; + table-layout: fixed; + list-style-type: none; + list-style-position: outside; + padding: 0.21428571em 0em; + line-height: 1.14285714em; +} +ul.ui.list > li:first-child:after, +ol.ui.list > li:first-child:after, +.ui.list > .list > .item, +.ui.list > .item:after, +ul.play-button.list > li:first-child:after, +ol.play-button.list > li:first-child:after, +.play-button.list > .list > .item, +.play-button.list > .item:after, +ul.download-button.list > li:first-child:after, +ol.download-button.list > li:first-child:after, +.download-button.list > .list > .item, +.download-button.list > .item:after { + content: ''; + display: block; + height: 0; + clear: both; + visibility: hidden; +} +ul.ui.list li:first-child, +ol.ui.list li:first-child, +.ui.list .list > .item:first-child, +.ui.list > .item:first-child, +ul.play-button.list li:first-child, +ol.play-button.list li:first-child, +.play-button.list .list > .item:first-child, +.play-button.list > .item:first-child, +ul.download-button.list li:first-child, +ol.download-button.list li:first-child, +.download-button.list .list > .item:first-child, +.download-button.list > .item:first-child { + padding-top: 0em; +} +ul.ui.list li:last-child, +ol.ui.list li:last-child, +.ui.list .list > .item:last-child, +.ui.list > .item:last-child, +ul.play-button.list li:last-child, +ol.play-button.list li:last-child, +.play-button.list .list > .item:last-child, +.play-button.list > .item:last-child, +ul.download-button.list li:last-child, +ol.download-button.list li:last-child, +.download-button.list .list > .item:last-child, +.download-button.list > .item:last-child { + padding-bottom: 0em; +} +/* Child List */ +ul.ui.list ul, +ol.ui.list ol, +.ui.list .list, +ul.play-button.list ul, +ol.play-button.list ol, +.play-button.list .list, +ul.download-button.list ul, +ol.download-button.list ol, +.download-button.list .list { + clear: both; + margin: 0em; + padding: 0.75em 0em 0.25em 0.5em; +} +/* Child Item */ +ul.ui.list ul li, +ol.ui.list ol li, +.ui.list .list > .item, +ul.play-button.list ul li, +ol.play-button.list ol li, +.play-button.list .list > .item, +ul.download-button.list ul li, +ol.download-button.list ol li, +.download-button.list .list > .item { + padding: 0.14285714em 0em; + line-height: inherit; +} +/* Icon */ +.ui.list .list > .item > i.icon, +.ui.list > .item > i.icon, +.play-button.list .list > .item > i.icon, +.play-button.list > .item > i.icon, +.download-button.list .list > .item > i.icon, +.download-button.list > .item > i.icon { + display: table-cell; + margin: 0em; + padding-top: 0em; + padding-right: 0.28571429em; + vertical-align: top; + transition: color 0.1s ease; +} +.ui.list .list > .item > i.icon:only-child, +.ui.list > .item > i.icon:only-child, +.play-button.list .list > .item > i.icon:only-child, +.play-button.list > .item > i.icon:only-child, +.download-button.list .list > .item > i.icon:only-child, +.download-button.list > .item > i.icon:only-child { + display: inline-block; + vertical-align: top; +} +/* Image */ +.ui.list .list > .item > .image, +.ui.list > .item > .image, +.play-button.list .list > .item > .image, +.play-button.list > .item > .image, +.download-button.list .list > .item > .image, +.download-button.list > .item > .image { + display: table-cell; + background-color: transparent; + margin: 0em; + vertical-align: top; +} +.ui.list .list > .item > .image:not(:only-child):not(img), +.ui.list > .item > .image:not(:only-child):not(img), +.play-button.list .list > .item > .image:not(:only-child):not(img), +.play-button.list > .item > .image:not(:only-child):not(img), +.download-button.list .list > .item > .image:not(:only-child):not(img), +.download-button.list > .item > .image:not(:only-child):not(img) { + padding-right: 0.5em; +} +.ui.list .list > .item > .image img, +.ui.list > .item > .image img, +.play-button.list .list > .item > .image img, +.play-button.list > .item > .image img, +.download-button.list .list > .item > .image img, +.download-button.list > .item > .image img { + vertical-align: top; +} +.ui.list .list > .item > img.image, +.ui.list .list > .item > .image:only-child, +.ui.list > .item > img.image, +.ui.list > .item > .image:only-child, +.play-button.list .list > .item > img.image, +.play-button.list .list > .item > .image:only-child, +.play-button.list > .item > img.image, +.play-button.list > .item > .image:only-child, +.download-button.list .list > .item > img.image, +.download-button.list .list > .item > .image:only-child, +.download-button.list > .item > img.image, +.download-button.list > .item > .image:only-child { + display: inline-block; +} +/* Content */ +.ui.list .list > .item > .content, +.ui.list > .item > .content, +.play-button.list .list > .item > .content, +.play-button.list > .item > .content, +.download-button.list .list > .item > .content, +.download-button.list > .item > .content { + line-height: 1.14285714em; +} +.ui.list .list > .item > .image + .content, +.ui.list .list > .item > .icon + .content, +.ui.list > .item > .image + .content, +.ui.list > .item > .icon + .content, +.play-button.list .list > .item > .image + .content, +.play-button.list .list > .item > .icon + .content, +.play-button.list > .item > .image + .content, +.play-button.list > .item > .icon + .content, +.download-button.list .list > .item > .image + .content, +.download-button.list .list > .item > .icon + .content, +.download-button.list > .item > .image + .content, +.download-button.list > .item > .icon + .content { + display: table-cell; + padding: 0em 0em 0em 0.5em; + vertical-align: top; +} +.ui.list .list > .item > img.image + .content, +.ui.list > .item > img.image + .content, +.play-button.list .list > .item > img.image + .content, +.play-button.list > .item > img.image + .content, +.download-button.list .list > .item > img.image + .content, +.download-button.list > .item > img.image + .content { + display: inline-block; +} +.ui.list .list > .item > .content > .list, +.ui.list > .item > .content > .list, +.play-button.list .list > .item > .content > .list, +.play-button.list > .item > .content > .list, +.download-button.list .list > .item > .content > .list, +.download-button.list > .item > .content > .list { + margin-left: 0em; + padding-left: 0em; +} +/* Header */ +.ui.list .list > .item .header, +.ui.list > .item .header, +.play-button.list .list > .item .header, +.play-button.list > .item .header, +.download-button.list .list > .item .header, +.download-button.list > .item .header { + display: block; + margin: 0em; + font-family: 'Roboto Mono', 'Helvetica Neue', Arial, Helvetica, sans-serif; + font-weight: bold; + color: rgba(0, 0, 0, 0.87); +} +/* Description */ +.ui.list .list > .item .description, +.ui.list > .item .description, +.play-button.list .list > .item .description, +.play-button.list > .item .description, +.download-button.list .list > .item .description, +.download-button.list > .item .description { + display: block; + color: rgba(0, 0, 0, 0.7); +} +/* Child Link */ +.ui.list > .item a, +.ui.list .list > .item a, +.play-button.list > .item a, +.play-button.list .list > .item a, +.download-button.list > .item a, +.download-button.list .list > .item a { + cursor: pointer; +} +/* Linking Item */ +.ui.list .list > a.item, +.ui.list > a.item, +.play-button.list .list > a.item, +.play-button.list > a.item, +.download-button.list .list > a.item, +.download-button.list > a.item { + cursor: pointer; + color: #4183C4; +} +.ui.list .list > a.item:hover, +.ui.list > a.item:hover, +.play-button.list .list > a.item:hover, +.play-button.list > a.item:hover, +.download-button.list .list > a.item:hover, +.download-button.list > a.item:hover { + color: #1e70bf; +} +/* Linked Item Icons */ +.ui.list .list > a.item i.icon, +.ui.list > a.item i.icon, +.play-button.list .list > a.item i.icon, +.play-button.list > a.item i.icon, +.download-button.list .list > a.item i.icon, +.download-button.list > a.item i.icon { + color: rgba(0, 0, 0, 0.4); +} +/* Header Link */ +.ui.list .list > .item a.header, +.ui.list > .item a.header, +.play-button.list .list > .item a.header, +.play-button.list > .item a.header, +.download-button.list .list > .item a.header, +.download-button.list > .item a.header { + cursor: pointer; + color: #4183C4 !important; +} +.ui.list .list > .item a.header:hover, +.ui.list > .item a.header:hover, +.play-button.list .list > .item a.header:hover, +.play-button.list > .item a.header:hover, +.download-button.list .list > .item a.header:hover, +.download-button.list > .item a.header:hover { + color: #1e70bf !important; +} +/* Floated Content */ +.ui[class*="left floated"].list, +.play-button[class*="left floated"].list, +.download-button[class*="left floated"].list { + float: left; +} +.ui[class*="right floated"].list, +.play-button[class*="right floated"].list, +.download-button[class*="right floated"].list { + float: right; +} +.ui.list .list > .item [class*="left floated"], +.ui.list > .item [class*="left floated"], +.play-button.list .list > .item [class*="left floated"], +.play-button.list > .item [class*="left floated"], +.download-button.list .list > .item [class*="left floated"], +.download-button.list > .item [class*="left floated"] { + float: left; + margin: 0em 1em 0em 0em; +} +.ui.list .list > .item [class*="right floated"], +.ui.list > .item [class*="right floated"], +.play-button.list .list > .item [class*="right floated"], +.play-button.list > .item [class*="right floated"], +.download-button.list .list > .item [class*="right floated"], +.download-button.list > .item [class*="right floated"] { + float: right; + margin: 0em 0em 0em 1em; +} +/******************************* + Coupling +*******************************/ +.ui.menu .ui.list > .item, +.ui.menu .ui.list .list > .item, +.play-button.menu .play-button.list > .item, +.play-button.menu .play-button.list .list > .item, +.download-button.menu .download-button.list > .item, +.download-button.menu .download-button.list .list > .item { + display: list-item; + table-layout: fixed; + background-color: transparent; + list-style-type: none; + list-style-position: outside; + padding: 0.21428571em 0em; + line-height: 1.14285714em; +} +.ui.menu .ui.list .list > .item:before, +.ui.menu .ui.list > .item:before, +.play-button.menu .play-button.list .list > .item:before, +.play-button.menu .play-button.list > .item:before, +.download-button.menu .download-button.list .list > .item:before, +.download-button.menu .download-button.list > .item:before { + border: none; + background: none; +} +.ui.menu .ui.list .list > .item:first-child, +.ui.menu .ui.list > .item:first-child, +.play-button.menu .play-button.list .list > .item:first-child, +.play-button.menu .play-button.list > .item:first-child, +.download-button.menu .download-button.list .list > .item:first-child, +.download-button.menu .download-button.list > .item:first-child { + padding-top: 0em; +} +.ui.menu .ui.list .list > .item:last-child, +.ui.menu .ui.list > .item:last-child, +.play-button.menu .play-button.list .list > .item:last-child, +.play-button.menu .play-button.list > .item:last-child, +.download-button.menu .download-button.list .list > .item:last-child, +.download-button.menu .download-button.list > .item:last-child { + padding-bottom: 0em; +} +/******************************* + Types +*******************************/ +/*------------------- + Horizontal +--------------------*/ +.ui.horizontal.list, +.play-button.horizontal.list, +.download-button.horizontal.list { + display: inline-block; + font-size: 0em; +} +.ui.horizontal.list > .item, +.play-button.horizontal.list > .item, +.download-button.horizontal.list > .item { + display: inline-block; + margin-left: 1em; + font-size: 1rem; +} +.ui.horizontal.list:not(.celled) > .item:first-child, +.play-button.horizontal.list:not(.celled) > .item:first-child, +.download-button.horizontal.list:not(.celled) > .item:first-child { + margin-left: 0em !important; + padding-left: 0em !important; +} +.ui.horizontal.list .list, +.play-button.horizontal.list .list, +.download-button.horizontal.list .list { + padding-left: 0em; + padding-bottom: 0em; +} +.ui.horizontal.list > .item > .image, +.ui.horizontal.list .list > .item > .image, +.ui.horizontal.list > .item > .icon, +.ui.horizontal.list .list > .item > .icon, +.ui.horizontal.list > .item > .content, +.ui.horizontal.list .list > .item > .content, +.play-button.horizontal.list > .item > .image, +.play-button.horizontal.list .list > .item > .image, +.play-button.horizontal.list > .item > .icon, +.play-button.horizontal.list .list > .item > .icon, +.play-button.horizontal.list > .item > .content, +.play-button.horizontal.list .list > .item > .content, +.download-button.horizontal.list > .item > .image, +.download-button.horizontal.list .list > .item > .image, +.download-button.horizontal.list > .item > .icon, +.download-button.horizontal.list .list > .item > .icon, +.download-button.horizontal.list > .item > .content, +.download-button.horizontal.list .list > .item > .content { + vertical-align: middle; +} +/* Padding on all elements */ +.ui.horizontal.list > .item:first-child, +.ui.horizontal.list > .item:last-child, +.play-button.horizontal.list > .item:first-child, +.play-button.horizontal.list > .item:last-child, +.download-button.horizontal.list > .item:first-child, +.download-button.horizontal.list > .item:last-child { + padding-top: 0.21428571em; + padding-bottom: 0.21428571em; +} +/* Horizontal List */ +.ui.horizontal.list > .item > i.icon, +.play-button.horizontal.list > .item > i.icon, +.download-button.horizontal.list > .item > i.icon { + margin: 0em; + padding: 0em 0.25em 0em 0em; +} +.ui.horizontal.list > .item > .icon, +.ui.horizontal.list > .item > .icon + .content, +.play-button.horizontal.list > .item > .icon, +.play-button.horizontal.list > .item > .icon + .content, +.download-button.horizontal.list > .item > .icon, +.download-button.horizontal.list > .item > .icon + .content { + float: none; + display: inline-block; +} +/******************************* + States +*******************************/ +/*------------------- + Disabled +--------------------*/ +.ui.list .list > .disabled.item, +.ui.list > .disabled.item, +.play-button.list .list > .disabled.item, +.play-button.list > .disabled.item, +.download-button.list .list > .disabled.item, +.download-button.list > .disabled.item { + pointer-events: none; + color: rgba(40, 40, 40, 0.3) !important; +} +.ui.inverted.list .list > .disabled.item, +.ui.inverted.list > .disabled.item, +.play-button.inverted.list .list > .disabled.item, +.play-button.inverted.list > .disabled.item, +.download-button.inverted.list .list > .disabled.item, +.download-button.inverted.list > .disabled.item { + color: rgba(225, 225, 225, 0.3) !important; +} +/*------------------- + Hover +--------------------*/ +.ui.list .list > a.item:hover .icon, +.ui.list > a.item:hover .icon, +.play-button.list .list > a.item:hover .icon, +.play-button.list > a.item:hover .icon, +.download-button.list .list > a.item:hover .icon, +.download-button.list > a.item:hover .icon { + color: rgba(0, 0, 0, 0.87); +} +/******************************* + Variations +*******************************/ +/*------------------- + Inverted +--------------------*/ +.ui.inverted.list .list > a.item > .icon, +.ui.inverted.list > a.item > .icon, +.play-button.inverted.list .list > a.item > .icon, +.play-button.inverted.list > a.item > .icon, +.download-button.inverted.list .list > a.item > .icon, +.download-button.inverted.list > a.item > .icon { + color: rgba(255, 255, 255, 0.7); +} +.ui.inverted.list .list > .item .header, +.ui.inverted.list > .item .header, +.play-button.inverted.list .list > .item .header, +.play-button.inverted.list > .item .header, +.download-button.inverted.list .list > .item .header, +.download-button.inverted.list > .item .header { + color: rgba(255, 255, 255, 0.9); +} +.ui.inverted.list .list > .item .description, +.ui.inverted.list > .item .description, +.play-button.inverted.list .list > .item .description, +.play-button.inverted.list > .item .description, +.download-button.inverted.list .list > .item .description, +.download-button.inverted.list > .item .description { + color: rgba(255, 255, 255, 0.7); +} +/* Item Link */ +.ui.inverted.list .list > a.item, +.ui.inverted.list > a.item, +.play-button.inverted.list .list > a.item, +.play-button.inverted.list > a.item, +.download-button.inverted.list .list > a.item, +.download-button.inverted.list > a.item { + cursor: pointer; + color: rgba(255, 255, 255, 0.9); +} +.ui.inverted.list .list > a.item:hover, +.ui.inverted.list > a.item:hover, +.play-button.inverted.list .list > a.item:hover, +.play-button.inverted.list > a.item:hover, +.download-button.inverted.list .list > a.item:hover, +.download-button.inverted.list > a.item:hover { + color: #1e70bf; +} +/* Linking Content */ +.ui.inverted.list .item a:not(.ui), +.play-button.inverted.list .item a:not(.ui), +.download-button.inverted.list .item a:not(.ui) { + color: rgba(255, 255, 255, 0.9) !important; +} +.ui.inverted.list .item a:not(.ui):hover, +.play-button.inverted.list .item a:not(.ui):hover, +.download-button.inverted.list .item a:not(.ui):hover { + color: #1e70bf !important; +} +/*------------------- + Aligned +--------------------*/ +.ui.list[class*="top aligned"] .image, +.ui.list[class*="top aligned"] .content, +.ui.list [class*="top aligned"], +.play-button.list[class*="top aligned"] .image, +.play-button.list[class*="top aligned"] .content, +.play-button.list [class*="top aligned"], +.download-button.list[class*="top aligned"] .image, +.download-button.list[class*="top aligned"] .content, +.download-button.list [class*="top aligned"] { + vertical-align: top !important; +} +.ui.list[class*="middle aligned"] .image, +.ui.list[class*="middle aligned"] .content, +.ui.list [class*="middle aligned"], +.play-button.list[class*="middle aligned"] .image, +.play-button.list[class*="middle aligned"] .content, +.play-button.list [class*="middle aligned"], +.download-button.list[class*="middle aligned"] .image, +.download-button.list[class*="middle aligned"] .content, +.download-button.list [class*="middle aligned"] { + vertical-align: middle !important; +} +.ui.list[class*="bottom aligned"] .image, +.ui.list[class*="bottom aligned"] .content, +.ui.list [class*="bottom aligned"], +.play-button.list[class*="bottom aligned"] .image, +.play-button.list[class*="bottom aligned"] .content, +.play-button.list [class*="bottom aligned"], +.download-button.list[class*="bottom aligned"] .image, +.download-button.list[class*="bottom aligned"] .content, +.download-button.list [class*="bottom aligned"] { + vertical-align: bottom !important; +} +/*------------------- + Link +--------------------*/ +.ui.link.list .item, +.ui.link.list a.item, +.ui.link.list .item a:not(.ui), +.play-button.link.list .item, +.play-button.link.list a.item, +.play-button.link.list .item a:not(.ui), +.download-button.link.list .item, +.download-button.link.list a.item, +.download-button.link.list .item a:not(.ui) { + color: rgba(0, 0, 0, 0.4); + transition: 0.1s color ease; +} +.ui.link.list a.item:hover, +.ui.link.list .item a:not(.ui):hover, +.play-button.link.list a.item:hover, +.play-button.link.list .item a:not(.ui):hover, +.download-button.link.list a.item:hover, +.download-button.link.list .item a:not(.ui):hover { + color: rgba(0, 0, 0, 0.8); +} +.ui.link.list a.item:active, +.ui.link.list .item a:not(.ui):active, +.play-button.link.list a.item:active, +.play-button.link.list .item a:not(.ui):active, +.download-button.link.list a.item:active, +.download-button.link.list .item a:not(.ui):active { + color: rgba(0, 0, 0, 0.9); +} +.ui.link.list .active.item, +.ui.link.list .active.item a:not(.ui), +.play-button.link.list .active.item, +.play-button.link.list .active.item a:not(.ui), +.download-button.link.list .active.item, +.download-button.link.list .active.item a:not(.ui) { + color: rgba(0, 0, 0, 0.95); +} +/* Inverted */ +.ui.inverted.link.list .item, +.ui.inverted.link.list a.item, +.ui.inverted.link.list .item a:not(.ui), +.play-button.inverted.link.list .item, +.play-button.inverted.link.list a.item, +.play-button.inverted.link.list .item a:not(.ui), +.download-button.inverted.link.list .item, +.download-button.inverted.link.list a.item, +.download-button.inverted.link.list .item a:not(.ui) { + color: rgba(255, 255, 255, 0.5); +} +.ui.inverted.link.list a.item:hover, +.ui.inverted.link.list .item a:not(.ui):hover, +.play-button.inverted.link.list a.item:hover, +.play-button.inverted.link.list .item a:not(.ui):hover, +.download-button.inverted.link.list a.item:hover, +.download-button.inverted.link.list .item a:not(.ui):hover { + color: #ffffff; +} +.ui.inverted.link.list a.item:active, +.ui.inverted.link.list .item a:not(.ui):active, +.play-button.inverted.link.list a.item:active, +.play-button.inverted.link.list .item a:not(.ui):active, +.download-button.inverted.link.list a.item:active, +.download-button.inverted.link.list .item a:not(.ui):active { + color: #ffffff; +} +.ui.inverted.link.list a.active.item, +.ui.inverted.link.list .active.item a:not(.ui), +.play-button.inverted.link.list a.active.item, +.play-button.inverted.link.list .active.item a:not(.ui), +.download-button.inverted.link.list a.active.item, +.download-button.inverted.link.list .active.item a:not(.ui) { + color: #ffffff; +} +/*------------------- + Selection +--------------------*/ +.ui.selection.list .list > .item, +.ui.selection.list > .item, +.play-button.selection.list .list > .item, +.play-button.selection.list > .item, +.download-button.selection.list .list > .item, +.download-button.selection.list > .item { + cursor: pointer; + background: transparent; + padding: 0.5em 0.5em; + margin: 0em; + color: rgba(0, 0, 0, 0.4); + border-radius: 0.5em; + transition: 0.1s color ease, 0.1s padding-left ease, 0.1s background-color ease; +} +.ui.selection.list .list > .item:last-child, +.ui.selection.list > .item:last-child, +.play-button.selection.list .list > .item:last-child, +.play-button.selection.list > .item:last-child, +.download-button.selection.list .list > .item:last-child, +.download-button.selection.list > .item:last-child { + margin-bottom: 0em; +} +.ui.selection.list.list > .item:hover, +.ui.selection.list > .item:hover, +.play-button.selection.list.list > .item:hover, +.play-button.selection.list > .item:hover, +.download-button.selection.list.list > .item:hover, +.download-button.selection.list > .item:hover { + background: rgba(0, 0, 0, 0.03); + color: rgba(0, 0, 0, 0.8); +} +.ui.selection.list .list > .item:active, +.ui.selection.list > .item:active, +.play-button.selection.list .list > .item:active, +.play-button.selection.list > .item:active, +.download-button.selection.list .list > .item:active, +.download-button.selection.list > .item:active { + background: rgba(0, 0, 0, 0.05); + color: rgba(0, 0, 0, 0.9); +} +.ui.selection.list .list > .item.active, +.ui.selection.list > .item.active, +.play-button.selection.list .list > .item.active, +.play-button.selection.list > .item.active, +.download-button.selection.list .list > .item.active, +.download-button.selection.list > .item.active { + background: rgba(0, 0, 0, 0.05); + color: rgba(0, 0, 0, 0.95); +} +/* Inverted */ +.ui.inverted.selection.list > .item, +.ui.inverted.selection.list > .item, +.play-button.inverted.selection.list > .item, +.play-button.inverted.selection.list > .item, +.download-button.inverted.selection.list > .item, +.download-button.inverted.selection.list > .item { + background: transparent; + color: rgba(255, 255, 255, 0.5); +} +.ui.inverted.selection.list > .item:hover, +.ui.inverted.selection.list > .item:hover, +.play-button.inverted.selection.list > .item:hover, +.play-button.inverted.selection.list > .item:hover, +.download-button.inverted.selection.list > .item:hover, +.download-button.inverted.selection.list > .item:hover { + background: rgba(255, 255, 255, 0.02); + color: #ffffff; +} +.ui.inverted.selection.list > .item:active, +.ui.inverted.selection.list > .item:active, +.play-button.inverted.selection.list > .item:active, +.play-button.inverted.selection.list > .item:active, +.download-button.inverted.selection.list > .item:active, +.download-button.inverted.selection.list > .item:active { + background: rgba(255, 255, 255, 0.08); + color: #ffffff; +} +.ui.inverted.selection.list > .item.active, +.ui.inverted.selection.list > .item.active, +.play-button.inverted.selection.list > .item.active, +.play-button.inverted.selection.list > .item.active, +.download-button.inverted.selection.list > .item.active, +.download-button.inverted.selection.list > .item.active { + background: rgba(255, 255, 255, 0.08); + color: #ffffff; +} +/* Celled / Divided Selection List */ +.ui.celled.selection.list .list > .item, +.ui.divided.selection.list .list > .item, +.ui.celled.selection.list > .item, +.ui.divided.selection.list > .item, +.play-button.celled.selection.list .list > .item, +.play-button.divided.selection.list .list > .item, +.play-button.celled.selection.list > .item, +.play-button.divided.selection.list > .item, +.download-button.celled.selection.list .list > .item, +.download-button.divided.selection.list .list > .item, +.download-button.celled.selection.list > .item, +.download-button.divided.selection.list > .item { + border-radius: 0em; +} +/*------------------- + Animated +--------------------*/ +.ui.animated.list > .item, +.play-button.animated.list > .item, +.download-button.animated.list > .item { + transition: 0.25s color ease 0.1s, 0.25s padding-left ease 0.1s, 0.25s background-color ease 0.1s; +} +.ui.animated.list:not(.horizontal) > .item:hover, +.play-button.animated.list:not(.horizontal) > .item:hover, +.download-button.animated.list:not(.horizontal) > .item:hover { + padding-left: 1em; +} +/*------------------- + Fitted +--------------------*/ +.ui.fitted.list:not(.selection) .list > .item, +.ui.fitted.list:not(.selection) > .item, +.play-button.fitted.list:not(.selection) .list > .item, +.play-button.fitted.list:not(.selection) > .item, +.download-button.fitted.list:not(.selection) .list > .item, +.download-button.fitted.list:not(.selection) > .item { + padding-left: 0em; + padding-right: 0em; +} +.ui.fitted.selection.list .list > .item, +.ui.fitted.selection.list > .item, +.play-button.fitted.selection.list .list > .item, +.play-button.fitted.selection.list > .item, +.download-button.fitted.selection.list .list > .item, +.download-button.fitted.selection.list > .item { + margin-left: -0.5em; + margin-right: -0.5em; +} +/*------------------- + Bulleted +--------------------*/ +ul.ui.list, +.ui.bulleted.list, +ul.play-button.list, +.play-button.bulleted.list, +ul.download-button.list, +.download-button.bulleted.list { + margin-left: 1.25rem; +} +ul.ui.list li, +.ui.bulleted.list .list > .item, +.ui.bulleted.list > .item, +ul.play-button.list li, +.play-button.bulleted.list .list > .item, +.play-button.bulleted.list > .item, +ul.download-button.list li, +.download-button.bulleted.list .list > .item, +.download-button.bulleted.list > .item { + position: relative; +} +ul.ui.list li:before, +.ui.bulleted.list .list > .item:before, +.ui.bulleted.list > .item:before, +ul.play-button.list li:before, +.play-button.bulleted.list .list > .item:before, +.play-button.bulleted.list > .item:before, +ul.download-button.list li:before, +.download-button.bulleted.list .list > .item:before, +.download-button.bulleted.list > .item:before { + user-select: none; + pointer-events: none; + position: absolute; + top: auto; + left: auto; + font-weight: normal; + margin-left: -1.25rem; + content: '•'; + opacity: 1; + color: inherit; + vertical-align: top; +} +ul.ui.list li:before, +.ui.bulleted.list .list > a.item:before, +.ui.bulleted.list > a.item:before, +ul.play-button.list li:before, +.play-button.bulleted.list .list > a.item:before, +.play-button.bulleted.list > a.item:before, +ul.download-button.list li:before, +.download-button.bulleted.list .list > a.item:before, +.download-button.bulleted.list > a.item:before { + color: rgba(0, 0, 0, 0.87); +} +ul.ui.list ul, +.ui.bulleted.list .list, +ul.play-button.list ul, +.play-button.bulleted.list .list, +ul.download-button.list ul, +.download-button.bulleted.list .list { + padding-left: 1.25rem; +} +/* Horizontal Bulleted */ +ul.ui.horizontal.bulleted.list, +.ui.horizontal.bulleted.list, +ul.play-button.horizontal.bulleted.list, +.play-button.horizontal.bulleted.list, +ul.download-button.horizontal.bulleted.list, +.download-button.horizontal.bulleted.list { + margin-left: 0em; +} +ul.ui.horizontal.bulleted.list li, +.ui.horizontal.bulleted.list > .item, +ul.play-button.horizontal.bulleted.list li, +.play-button.horizontal.bulleted.list > .item, +ul.download-button.horizontal.bulleted.list li, +.download-button.horizontal.bulleted.list > .item { + margin-left: 1.75rem; +} +ul.ui.horizontal.bulleted.list li:first-child, +.ui.horizontal.bulleted.list > .item:first-child, +ul.play-button.horizontal.bulleted.list li:first-child, +.play-button.horizontal.bulleted.list > .item:first-child, +ul.download-button.horizontal.bulleted.list li:first-child, +.download-button.horizontal.bulleted.list > .item:first-child { + margin-left: 0em; +} +ul.ui.horizontal.bulleted.list li::before, +.ui.horizontal.bulleted.list > .item::before, +ul.play-button.horizontal.bulleted.list li::before, +.play-button.horizontal.bulleted.list > .item::before, +ul.download-button.horizontal.bulleted.list li::before, +.download-button.horizontal.bulleted.list > .item::before { + color: rgba(0, 0, 0, 0.87); +} +ul.ui.horizontal.bulleted.list li:first-child::before, +.ui.horizontal.bulleted.list > .item:first-child::before, +ul.play-button.horizontal.bulleted.list li:first-child::before, +.play-button.horizontal.bulleted.list > .item:first-child::before, +ul.download-button.horizontal.bulleted.list li:first-child::before, +.download-button.horizontal.bulleted.list > .item:first-child::before { + display: none; +} +/*------------------- + Ordered +--------------------*/ +ol.ui.list, +.ui.ordered.list, +.ui.ordered.list .list, +ol.ui.list ol, +ol.play-button.list, +.play-button.ordered.list, +.play-button.ordered.list .list, +ol.play-button.list ol, +ol.download-button.list, +.download-button.ordered.list, +.download-button.ordered.list .list, +ol.download-button.list ol { + counter-reset: ordered; + margin-left: 1.25rem; + list-style-type: none; +} +ol.ui.list li, +.ui.ordered.list .list > .item, +.ui.ordered.list > .item, +ol.play-button.list li, +.play-button.ordered.list .list > .item, +.play-button.ordered.list > .item, +ol.download-button.list li, +.download-button.ordered.list .list > .item, +.download-button.ordered.list > .item { + list-style-type: none; + position: relative; +} +ol.ui.list li:before, +.ui.ordered.list .list > .item:before, +.ui.ordered.list > .item:before, +ol.play-button.list li:before, +.play-button.ordered.list .list > .item:before, +.play-button.ordered.list > .item:before, +ol.download-button.list li:before, +.download-button.ordered.list .list > .item:before, +.download-button.ordered.list > .item:before { + position: absolute; + top: auto; + left: auto; + user-select: none; + pointer-events: none; + margin-left: -1.25rem; + counter-increment: ordered; + content: counters(ordered, ".") " "; + text-align: right; + color: rgba(0, 0, 0, 0.87); + vertical-align: middle; + opacity: 0.8; +} +ol.ui.inverted.list li:before, +.ui.ordered.inverted.list .list > .item:before, +.ui.ordered.inverted.list > .item:before, +ol.play-button.inverted.list li:before, +.play-button.ordered.inverted.list .list > .item:before, +.play-button.ordered.inverted.list > .item:before, +ol.download-button.inverted.list li:before, +.download-button.ordered.inverted.list .list > .item:before, +.download-button.ordered.inverted.list > .item:before { + color: rgba(255, 255, 255, 0.7); +} +/* Value */ +.ui.ordered.list > .list > .item[data-value], +.ui.ordered.list > .item[data-value], +.play-button.ordered.list > .list > .item[data-value], +.play-button.ordered.list > .item[data-value], +.download-button.ordered.list > .list > .item[data-value], +.download-button.ordered.list > .item[data-value] { + content: attr(data-value); +} +ol.ui.list li[value]:before, +ol.play-button.list li[value]:before, +ol.download-button.list li[value]:before { + content: attr(value); +} +/* Child Lists */ +ol.ui.list ol, +.ui.ordered.list .list, +ol.play-button.list ol, +.play-button.ordered.list .list, +ol.download-button.list ol, +.download-button.ordered.list .list { + margin-left: 1em; +} +ol.ui.list ol li:before, +.ui.ordered.list .list > .item:before, +ol.play-button.list ol li:before, +.play-button.ordered.list .list > .item:before, +ol.download-button.list ol li:before, +.download-button.ordered.list .list > .item:before { + margin-left: -2em; +} +/* Horizontal Ordered */ +ol.ui.horizontal.list, +.ui.ordered.horizontal.list, +ol.play-button.horizontal.list, +.play-button.ordered.horizontal.list, +ol.download-button.horizontal.list, +.download-button.ordered.horizontal.list { + margin-left: 0em; +} +ol.ui.horizontal.list li:before, +.ui.ordered.horizontal.list .list > .item:before, +.ui.ordered.horizontal.list > .item:before, +ol.play-button.horizontal.list li:before, +.play-button.ordered.horizontal.list .list > .item:before, +.play-button.ordered.horizontal.list > .item:before, +ol.download-button.horizontal.list li:before, +.download-button.ordered.horizontal.list .list > .item:before, +.download-button.ordered.horizontal.list > .item:before { + position: static; + margin: 0em 0.5em 0em 0em; +} +/*------------------- + Divided +--------------------*/ +.ui.divided.list > .item, +.play-button.divided.list > .item, +.download-button.divided.list > .item { + border-top: 1px solid rgba(34, 36, 38, 0.15); +} +.ui.divided.list .list > .item, +.play-button.divided.list .list > .item, +.download-button.divided.list .list > .item { + border-top: none; +} +.ui.divided.list .item .list > .item, +.play-button.divided.list .item .list > .item, +.download-button.divided.list .item .list > .item { + border-top: none; +} +.ui.divided.list .list > .item:first-child, +.ui.divided.list > .item:first-child, +.play-button.divided.list .list > .item:first-child, +.play-button.divided.list > .item:first-child, +.download-button.divided.list .list > .item:first-child, +.download-button.divided.list > .item:first-child { + border-top: none; +} +/* Sub Menu */ +.ui.divided.list:not(.horizontal) .list > .item:first-child, +.play-button.divided.list:not(.horizontal) .list > .item:first-child, +.download-button.divided.list:not(.horizontal) .list > .item:first-child { + border-top-width: 1px; +} +/* Divided bulleted */ +.ui.divided.bulleted.list:not(.horizontal), +.ui.divided.bulleted.list .list, +.play-button.divided.bulleted.list:not(.horizontal), +.play-button.divided.bulleted.list .list, +.download-button.divided.bulleted.list:not(.horizontal), +.download-button.divided.bulleted.list .list { + margin-left: 0em; + padding-left: 0em; +} +.ui.divided.bulleted.list > .item:not(.horizontal), +.play-button.divided.bulleted.list > .item:not(.horizontal), +.download-button.divided.bulleted.list > .item:not(.horizontal) { + padding-left: 1.25rem; +} +/* Divided Ordered */ +.ui.divided.ordered.list, +.play-button.divided.ordered.list, +.download-button.divided.ordered.list { + margin-left: 0em; +} +.ui.divided.ordered.list .list > .item, +.ui.divided.ordered.list > .item, +.play-button.divided.ordered.list .list > .item, +.play-button.divided.ordered.list > .item, +.download-button.divided.ordered.list .list > .item, +.download-button.divided.ordered.list > .item { + padding-left: 1.25rem; +} +.ui.divided.ordered.list .item .list, +.play-button.divided.ordered.list .item .list, +.download-button.divided.ordered.list .item .list { + margin-left: 0em; + margin-right: 0em; + padding-bottom: 0.21428571em; +} +.ui.divided.ordered.list .item .list > .item, +.play-button.divided.ordered.list .item .list > .item, +.download-button.divided.ordered.list .item .list > .item { + padding-left: 1em; +} +/* Divided Selection */ +.ui.divided.selection.list .list > .item, +.ui.divided.selection.list > .item, +.play-button.divided.selection.list .list > .item, +.play-button.divided.selection.list > .item, +.download-button.divided.selection.list .list > .item, +.download-button.divided.selection.list > .item { + margin: 0em; + border-radius: 0em; +} +/* Divided horizontal */ +.ui.divided.horizontal.list, +.play-button.divided.horizontal.list, +.download-button.divided.horizontal.list { + margin-left: 0em; +} +.ui.divided.horizontal.list > .item:not(:first-child), +.play-button.divided.horizontal.list > .item:not(:first-child), +.download-button.divided.horizontal.list > .item:not(:first-child) { + padding-left: 0.5em; +} +.ui.divided.horizontal.list > .item:not(:last-child), +.play-button.divided.horizontal.list > .item:not(:last-child), +.download-button.divided.horizontal.list > .item:not(:last-child) { + padding-right: 0.5em; +} +.ui.divided.horizontal.list > .item, +.play-button.divided.horizontal.list > .item, +.download-button.divided.horizontal.list > .item { + border-top: none; + border-left: 1px solid rgba(34, 36, 38, 0.15); + margin: 0em; + line-height: 0.6; +} +.ui.horizontal.divided.list > .item:first-child, +.play-button.horizontal.divided.list > .item:first-child, +.download-button.horizontal.divided.list > .item:first-child { + border-left: none; +} +/* Inverted */ +.ui.divided.inverted.list > .item, +.ui.divided.inverted.list > .list, +.ui.divided.inverted.horizontal.list > .item, +.play-button.divided.inverted.list > .item, +.play-button.divided.inverted.list > .list, +.play-button.divided.inverted.horizontal.list > .item, +.download-button.divided.inverted.list > .item, +.download-button.divided.inverted.list > .list, +.download-button.divided.inverted.horizontal.list > .item { + border-color: rgba(255, 255, 255, 0.1); +} +/*------------------- + Celled +--------------------*/ +.ui.celled.list > .item, +.ui.celled.list > .list, +.play-button.celled.list > .item, +.play-button.celled.list > .list, +.download-button.celled.list > .item, +.download-button.celled.list > .list { + border-top: 1px solid rgba(34, 36, 38, 0.15); + padding-left: 0.5em; + padding-right: 0.5em; +} +.ui.celled.list > .item:last-child, +.play-button.celled.list > .item:last-child, +.download-button.celled.list > .item:last-child { + border-bottom: 1px solid rgba(34, 36, 38, 0.15); +} +/* Padding on all elements */ +.ui.celled.list > .item:first-child, +.ui.celled.list > .item:last-child, +.play-button.celled.list > .item:first-child, +.play-button.celled.list > .item:last-child, +.download-button.celled.list > .item:first-child, +.download-button.celled.list > .item:last-child { + padding-top: 0.21428571em; + padding-bottom: 0.21428571em; +} +/* Sub Menu */ +.ui.celled.list .item .list > .item, +.play-button.celled.list .item .list > .item, +.download-button.celled.list .item .list > .item { + border-width: 0px; +} +.ui.celled.list .list > .item:first-child, +.play-button.celled.list .list > .item:first-child, +.download-button.celled.list .list > .item:first-child { + border-top-width: 0px; +} +/* Celled Bulleted */ +.ui.celled.bulleted.list, +.play-button.celled.bulleted.list, +.download-button.celled.bulleted.list { + margin-left: 0em; +} +.ui.celled.bulleted.list .list > .item, +.ui.celled.bulleted.list > .item, +.play-button.celled.bulleted.list .list > .item, +.play-button.celled.bulleted.list > .item, +.download-button.celled.bulleted.list .list > .item, +.download-button.celled.bulleted.list > .item { + padding-left: 1.25rem; +} +.ui.celled.bulleted.list .item .list, +.play-button.celled.bulleted.list .item .list, +.download-button.celled.bulleted.list .item .list { + margin-left: -1.25rem; + margin-right: -1.25rem; + padding-bottom: 0.21428571em; +} +/* Celled Ordered */ +.ui.celled.ordered.list, +.play-button.celled.ordered.list, +.download-button.celled.ordered.list { + margin-left: 0em; +} +.ui.celled.ordered.list .list > .item, +.ui.celled.ordered.list > .item, +.play-button.celled.ordered.list .list > .item, +.play-button.celled.ordered.list > .item, +.download-button.celled.ordered.list .list > .item, +.download-button.celled.ordered.list > .item { + padding-left: 1.25rem; +} +.ui.celled.ordered.list .item .list, +.play-button.celled.ordered.list .item .list, +.download-button.celled.ordered.list .item .list { + margin-left: 0em; + margin-right: 0em; + padding-bottom: 0.21428571em; +} +.ui.celled.ordered.list .list > .item, +.play-button.celled.ordered.list .list > .item, +.download-button.celled.ordered.list .list > .item { + padding-left: 1em; +} +/* Celled Horizontal */ +.ui.horizontal.celled.list, +.play-button.horizontal.celled.list, +.download-button.horizontal.celled.list { + margin-left: 0em; +} +.ui.horizontal.celled.list .list > .item, +.ui.horizontal.celled.list > .item, +.play-button.horizontal.celled.list .list > .item, +.play-button.horizontal.celled.list > .item, +.download-button.horizontal.celled.list .list > .item, +.download-button.horizontal.celled.list > .item { + border-top: none; + border-left: 1px solid rgba(34, 36, 38, 0.15); + margin: 0em; + padding-left: 0.5em; + padding-right: 0.5em; + line-height: 0.6; +} +.ui.horizontal.celled.list .list > .item:last-child, +.ui.horizontal.celled.list > .item:last-child, +.play-button.horizontal.celled.list .list > .item:last-child, +.play-button.horizontal.celled.list > .item:last-child, +.download-button.horizontal.celled.list .list > .item:last-child, +.download-button.horizontal.celled.list > .item:last-child { + border-bottom: none; + border-right: 1px solid rgba(34, 36, 38, 0.15); +} +/* Inverted */ +.ui.celled.inverted.list > .item, +.ui.celled.inverted.list > .list, +.play-button.celled.inverted.list > .item, +.play-button.celled.inverted.list > .list, +.download-button.celled.inverted.list > .item, +.download-button.celled.inverted.list > .list { + border-color: 1px solid rgba(255, 255, 255, 0.1); +} +.ui.celled.inverted.horizontal.list .list > .item, +.ui.celled.inverted.horizontal.list > .item, +.play-button.celled.inverted.horizontal.list .list > .item, +.play-button.celled.inverted.horizontal.list > .item, +.download-button.celled.inverted.horizontal.list .list > .item, +.download-button.celled.inverted.horizontal.list > .item { + border-color: 1px solid rgba(255, 255, 255, 0.1); +} +/*------------------- + Relaxed +--------------------*/ +.ui.relaxed.list:not(.horizontal) > .item:not(:first-child), +.play-button.relaxed.list:not(.horizontal) > .item:not(:first-child), +.download-button.relaxed.list:not(.horizontal) > .item:not(:first-child) { + padding-top: 0.42857143em; +} +.ui.relaxed.list:not(.horizontal) > .item:not(:last-child), +.play-button.relaxed.list:not(.horizontal) > .item:not(:last-child), +.download-button.relaxed.list:not(.horizontal) > .item:not(:last-child) { + padding-bottom: 0.42857143em; +} +.ui.horizontal.relaxed.list .list > .item:not(:first-child), +.ui.horizontal.relaxed.list > .item:not(:first-child), +.play-button.horizontal.relaxed.list .list > .item:not(:first-child), +.play-button.horizontal.relaxed.list > .item:not(:first-child), +.download-button.horizontal.relaxed.list .list > .item:not(:first-child), +.download-button.horizontal.relaxed.list > .item:not(:first-child) { + padding-left: 1rem; +} +.ui.horizontal.relaxed.list .list > .item:not(:last-child), +.ui.horizontal.relaxed.list > .item:not(:last-child), +.play-button.horizontal.relaxed.list .list > .item:not(:last-child), +.play-button.horizontal.relaxed.list > .item:not(:last-child), +.download-button.horizontal.relaxed.list .list > .item:not(:last-child), +.download-button.horizontal.relaxed.list > .item:not(:last-child) { + padding-right: 1rem; +} +/* Very Relaxed */ +.ui[class*="very relaxed"].list:not(.horizontal) > .item:not(:first-child), +.play-button[class*="very relaxed"].list:not(.horizontal) > .item:not(:first-child), +.download-button[class*="very relaxed"].list:not(.horizontal) > .item:not(:first-child) { + padding-top: 0.85714286em; +} +.ui[class*="very relaxed"].list:not(.horizontal) > .item:not(:last-child), +.play-button[class*="very relaxed"].list:not(.horizontal) > .item:not(:last-child), +.download-button[class*="very relaxed"].list:not(.horizontal) > .item:not(:last-child) { + padding-bottom: 0.85714286em; +} +.ui.horizontal[class*="very relaxed"].list .list > .item:not(:first-child), +.ui.horizontal[class*="very relaxed"].list > .item:not(:first-child), +.play-button.horizontal[class*="very relaxed"].list .list > .item:not(:first-child), +.play-button.horizontal[class*="very relaxed"].list > .item:not(:first-child), +.download-button.horizontal[class*="very relaxed"].list .list > .item:not(:first-child), +.download-button.horizontal[class*="very relaxed"].list > .item:not(:first-child) { + padding-left: 1.5rem; +} +.ui.horizontal[class*="very relaxed"].list .list > .item:not(:last-child), +.ui.horizontal[class*="very relaxed"].list > .item:not(:last-child), +.play-button.horizontal[class*="very relaxed"].list .list > .item:not(:last-child), +.play-button.horizontal[class*="very relaxed"].list > .item:not(:last-child), +.download-button.horizontal[class*="very relaxed"].list .list > .item:not(:last-child), +.download-button.horizontal[class*="very relaxed"].list > .item:not(:last-child) { + padding-right: 1.5rem; +} +/*------------------- + Sizes +--------------------*/ +.ui.mini.list, +.play-button.mini.list, +.download-button.mini.list { + font-size: 0.78571429em; +} +.ui.tiny.list, +.play-button.tiny.list, +.download-button.tiny.list { + font-size: 0.85714286em; +} +.ui.small.list, +.play-button.small.list, +.download-button.small.list { + font-size: 0.92857143em; +} +.ui.list, +.play-button.list, +.download-button.list { + font-size: 1em; +} +.ui.large.list, +.play-button.large.list, +.download-button.large.list { + font-size: 1.14285714em; +} +.ui.big.list, +.play-button.big.list, +.download-button.big.list { + font-size: 1.28571429em; +} +.ui.huge.list, +.play-button.huge.list, +.download-button.huge.list { + font-size: 1.42857143em; +} +.ui.massive.list, +.play-button.massive.list, +.download-button.massive.list { + font-size: 1.71428571em; +} +.ui.mini.horizontal.list .list > .item, +.ui.mini.horizontal.list > .item, +.play-button.mini.horizontal.list .list > .item, +.play-button.mini.horizontal.list > .item, +.download-button.mini.horizontal.list .list > .item, +.download-button.mini.horizontal.list > .item { + font-size: 0.78571429rem; +} +.ui.tiny.horizontal.list .list > .item, +.ui.tiny.horizontal.list > .item, +.play-button.tiny.horizontal.list .list > .item, +.play-button.tiny.horizontal.list > .item, +.download-button.tiny.horizontal.list .list > .item, +.download-button.tiny.horizontal.list > .item { + font-size: 0.85714286rem; +} +.ui.small.horizontal.list .list > .item, +.ui.small.horizontal.list > .item, +.play-button.small.horizontal.list .list > .item, +.play-button.small.horizontal.list > .item, +.download-button.small.horizontal.list .list > .item, +.download-button.small.horizontal.list > .item { + font-size: 0.92857143rem; +} +.ui.horizontal.list .list > .item, +.ui.horizontal.list > .item, +.play-button.horizontal.list .list > .item, +.play-button.horizontal.list > .item, +.download-button.horizontal.list .list > .item, +.download-button.horizontal.list > .item { + font-size: 1rem; +} +.ui.large.horizontal.list .list > .item, +.ui.large.horizontal.list > .item, +.play-button.large.horizontal.list .list > .item, +.play-button.large.horizontal.list > .item, +.download-button.large.horizontal.list .list > .item, +.download-button.large.horizontal.list > .item { + font-size: 1.14285714rem; +} +.ui.big.horizontal.list .list > .item, +.ui.big.horizontal.list > .item, +.play-button.big.horizontal.list .list > .item, +.play-button.big.horizontal.list > .item, +.download-button.big.horizontal.list .list > .item, +.download-button.big.horizontal.list > .item { + font-size: 1.28571429rem; +} +.ui.huge.horizontal.list .list > .item, +.ui.huge.horizontal.list > .item, +.play-button.huge.horizontal.list .list > .item, +.play-button.huge.horizontal.list > .item, +.download-button.huge.horizontal.list .list > .item, +.download-button.huge.horizontal.list > .item { + font-size: 1.42857143rem; +} +.ui.massive.horizontal.list .list > .item, +.ui.massive.horizontal.list > .item, +.play-button.massive.horizontal.list .list > .item, +.play-button.massive.horizontal.list > .item, +.download-button.massive.horizontal.list .list > .item, +.download-button.massive.horizontal.list > .item { + font-size: 1.71428571rem; +} +/******************************* + User Variable Overrides +*******************************/ +/******************************* + User Variable Overrides +*******************************/ +/*! + * # Semantic UI - Loader + * http://github.com/semantic-org/semantic-ui/ + * + * + * Released under the MIT license + * http://opensource.org/licenses/MIT + * + */ +/******************************* + Theme +*******************************/ +/* + +████████╗██╗ ██╗███████╗███╗ ███╗███████╗███████╗ +╚══██╔══╝██║ ██║██╔════╝████╗ ████║██╔════╝██╔════╝ + ██║ ███████║█████╗ ██╔████╔██║█████╗ ███████╗ + ██║ ██╔══██║██╔══╝ ██║╚██╔╝██║██╔══╝ ╚════██║ + ██║ ██║ ██║███████╗██║ ╚═╝ ██║███████╗███████║ + ╚═╝ ╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝╚══════╝╚══════╝ + +*/ +/******************************* + Theme Selection +*******************************/ +/* To override a theme for an individual element + specify theme name below +*/ +/* Global */ +/* Elements */ +/* Collections */ +/* Modules */ +/* Views */ +/******************************* + Folders +*******************************/ +/* Path to theme packages */ +/* Path to site override folder */ +/******************************* + Import Theme +*******************************/ +/******************************* + Import Directives +*******************************/ +/*------------------ + Theme +-------------------*/ +/*-------------------- + Site Variables +---------------------*/ +/* Default site.variables */ +/******************************* + Site Settings +*******************************/ +/*------------------- + Fonts +--------------------*/ +/*------------------- + Base Sizes +--------------------*/ +/* This is the single variable that controls them all */ +/* The size of page text */ +/*------------------- + Border Radius +--------------------*/ +/* See Power-user section below + for explanation of @px variables +*/ +/*------------------- + Brand Colors +--------------------*/ +/*-------------- + Page Heading +---------------*/ +/*-------------- + Form Input +---------------*/ +/* This adjusts the default form input across all elements */ +/* Input Text Color */ +/* Line Height Default For Inputs in Browser (Descendors are 17px at 14px base em) */ +/*------------------- + Focused Input +--------------------*/ +/* Used on inputs, textarea etc */ +/* Used on dropdowns, other larger blocks */ +/*------------------- + Sizes +--------------------*/ +/* + Sizes are all expressed in terms of 14px/em (default em) + This ensures these "ratios" remain constant despite changes in EM +*/ +/*------------------- + Page +--------------------*/ +/*------------------- + Paragraph +--------------------*/ +/*------------------- + Links +--------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ +/*------------------- + Highlighted Text +--------------------*/ +/*------------------- + Loader +--------------------*/ +/*------------------- + Grid +--------------------*/ +/*------------------- + Transitions +--------------------*/ +/*------------------- + Breakpoints +--------------------*/ +/*------------------- + Site Colors +--------------------*/ +/*--- Colors ---*/ +/*--- Light Colors ---*/ +/*--- Neutrals ---*/ +/*--- Colored Backgrounds ---*/ +/*--- Colored Headers ---*/ +/*--- Colored Text ---*/ +/*--- Colored Border ---*/ +/*------------------- + Alpha Colors +--------------------*/ +/*------------------- + Accents +--------------------*/ +/* Differentiating Neutrals */ +/* Differentiating Layers */ +/******************************* + Power-User +*******************************/ +/*------------------- + Emotive Colors +--------------------*/ +/* Positive */ +/* Negative */ +/* Info */ +/* Warning */ +/*------------------- + Paths +--------------------*/ +/* For source only. Modified in gulp for dist */ +/*------------------- + Em Sizes +--------------------*/ +/* + This rounds @size values to the closest pixel then expresses that value in (r)em. + This ensures all size values round to exact pixels +*/ +/* em */ +/* rem */ +/*------------------- + Icons +--------------------*/ +/* Maximum Glyph Width of Icon */ +/*------------------- + Neutral Text +--------------------*/ +/*------------------- + Brand Colors +--------------------*/ +/*------------------- + Borders +--------------------*/ +/*------------------- + Derived Values +--------------------*/ +/* Loaders Position Offset */ +/* Rendered Scrollbar Width */ +/* Maximum Single Character Glyph Width, aka Capital "W" */ +/* Used to match floats with text */ +/* Header Spacing */ +/* Minimum Mobile Width */ +/* Positive / Negative Dupes */ +/* Responsive */ +/*------------------- + Exact Pixel Values +--------------------*/ +/* + These are used to specify exact pixel values in em + for things like borders that remain constantly + sized as emSize adjusts + + Since there are many more sizes than names for sizes, + these are named by their original pixel values. + +*/ +/* Columns */ +/******************************* + States +*******************************/ +/*------------------- + Disabled +--------------------*/ +/*------------------- + Hover +--------------------*/ +/*--- Shadows ---*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Focus +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Down (:active) +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Active +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/* Packaged site.variables */ +/******************************* + User Global Variables +*******************************/ +/*------------------- + Fonts +--------------------*/ +/*------------------- + Breakpoints +--------------------*/ +/* +@mobileBreakpoint : unit( (63 * @emSize), px); +@tabletBreakpoint : unit( (79 * @emSize), px); +@computerBreakpoint : unit( (91 * @emSize), px); +@largeMonitorBreakpoint : unit( (99 * @emSize), px); +@widescreenMonitorBreakpoint : unit( (119 * @emSize), px); +*/ +/******************************* + PXT Variables +*******************************/ +/*------------------- + Menu +--------------------*/ +/*------------------- + Layout +--------------------*/ +/*------------------- + Background +--------------------*/ +/*------------------- + Full screen +--------------------*/ +/*------------------- + Side Docs +--------------------*/ +/*------------------- + Editor +--------------------*/ +/* Component's site.variables */ +/******************************* + User Global Variables +*******************************/ +/*------------------- + Fonts +--------------------*/ +/*------------------- + Breakpoints +--------------------*/ +/* +@mobileBreakpoint : unit( (63 * @emSize), px); +@tabletBreakpoint : unit( (79 * @emSize), px); +@computerBreakpoint : unit( (91 * @emSize), px); +@largeMonitorBreakpoint : unit( (99 * @emSize), px); +@widescreenMonitorBreakpoint : unit( (119 * @emSize), px); +*/ +/******************************* + PXT Variables +*******************************/ +/*------------------- + Menu +--------------------*/ +/*------------------- + Layout +--------------------*/ +/*------------------- + Background +--------------------*/ +/*------------------- + Full screen +--------------------*/ +/*------------------- + Side Docs +--------------------*/ +/*------------------- + Editor +--------------------*/ +/* Site theme site.variables */ +/******************************* + User Global Variables +*******************************/ +/*------------------- + Site Colors +--------------------*/ +/******************************* + PXT Overrides +*******************************/ +/*------------------- + Component Variables +---------------------*/ +/* Default */ +/******************************* + Loader +*******************************/ +/* Some global loader styles defined in site.variables */ +/*------------------- + Standard +--------------------*/ +/*------------------- + Types +--------------------*/ +/* Text */ +/*------------------- + States +--------------------*/ +/*------------------- + Variations +--------------------*/ +/* Exact Sizes (Avoids Rounding Errors) */ +/* Packaged Theme */ +/******************************* + User Variable Overrides +*******************************/ +/* Site Theme */ +/******************************* + User Variable Overrides +*******************************/ +/******************************* + Mix-ins +*******************************/ +/*------------------ + Fonts +-------------------*/ +/*------------------ + Overrides +-------------------*/ +/* End Config */ +/******************************* + Loader +*******************************/ +/* Standard Size */ +.ui.loader, +.play-button.loader, +.download-button.loader { + display: none; + position: absolute; + top: 50%; + left: 50%; + margin: 0px; + text-align: center; + z-index: 1000; + transform: translateX(-50%) translateY(-50%); +} +/* Static Shape */ +.ui.loader:before, +.play-button.loader:before, +.download-button.loader:before { + position: absolute; + content: ''; + top: 0%; + left: 50%; + width: 100%; + height: 100%; + border-radius: 500rem; + border: 0.2em solid rgba(0, 0, 0, 0.1); +} +/* Active Shape */ +.ui.loader:after, +.play-button.loader:after, +.download-button.loader:after { + position: absolute; + content: ''; + top: 0%; + left: 50%; + width: 100%; + height: 100%; + animation: loader 2s linear; + animation-iteration-count: infinite; + border-radius: 500rem; + border-color: #42495F transparent transparent; + border-style: solid; + border-width: 0.2em; + box-shadow: 0px 0px 0px 1px transparent; +} +/* Active Animation */ +@keyframes loader { + from { + transform: rotate(0deg); + } + to { + transform: rotate(360deg); + } +} +/* Sizes */ +.ui.mini.loader:before, +.ui.mini.loader:after, +.play-button.mini.loader:before, +.play-button.mini.loader:after, +.download-button.mini.loader:before, +.download-button.mini.loader:after { + width: 1rem; + height: 1rem; + margin: 0em 0em 0em -0.5rem; +} +.ui.tiny.loader:before, +.ui.tiny.loader:after, +.play-button.tiny.loader:before, +.play-button.tiny.loader:after, +.download-button.tiny.loader:before, +.download-button.tiny.loader:after { + width: 1.14285714rem; + height: 1.14285714rem; + margin: 0em 0em 0em -0.57142857rem; +} +.ui.small.loader:before, +.ui.small.loader:after, +.play-button.small.loader:before, +.play-button.small.loader:after, +.download-button.small.loader:before, +.download-button.small.loader:after { + width: 1.71428571rem; + height: 1.71428571rem; + margin: 0em 0em 0em -0.85714286rem; +} +.ui.loader:before, +.ui.loader:after, +.play-button.loader:before, +.play-button.loader:after, +.download-button.loader:before, +.download-button.loader:after { + width: 2.28571429rem; + height: 2.28571429rem; + margin: 0em 0em 0em -1.14285714rem; +} +.ui.large.loader:before, +.ui.large.loader:after, +.play-button.large.loader:before, +.play-button.large.loader:after, +.download-button.large.loader:before, +.download-button.large.loader:after { + width: 200px; + height: 200px; + margin: 0em 0em 0em -100px; +} +.ui.big.loader:before, +.ui.big.loader:after, +.play-button.big.loader:before, +.play-button.big.loader:after, +.download-button.big.loader:before, +.download-button.big.loader:after { + width: 3.71428571rem; + height: 3.71428571rem; + margin: 0em 0em 0em -1.85714286rem; +} +.ui.huge.loader:before, +.ui.huge.loader:after, +.play-button.huge.loader:before, +.play-button.huge.loader:after, +.download-button.huge.loader:before, +.download-button.huge.loader:after { + width: 4.14285714rem; + height: 4.14285714rem; + margin: 0em 0em 0em -2.07142857rem; +} +.ui.massive.loader:before, +.ui.massive.loader:after, +.play-button.massive.loader:before, +.play-button.massive.loader:after, +.download-button.massive.loader:before, +.download-button.massive.loader:after { + width: 4.57142857rem; + height: 4.57142857rem; + margin: 0em 0em 0em -2.28571429rem; +} +/*------------------- + Coupling +--------------------*/ +/* Show inside active dimmer */ +.ui.dimmer .loader, +.play-button.dimmer .loader, +.download-button.dimmer .loader { + display: block; +} +/* Black Dimmer */ +.ui.dimmer .ui.loader, +.play-button.dimmer .play-button.loader, +.download-button.dimmer .download-button.loader { + color: rgba(255, 255, 255, 0.9); +} +.ui.dimmer .ui.loader:before, +.play-button.dimmer .play-button.loader:before, +.download-button.dimmer .download-button.loader:before { + border-color: rgba(255, 255, 255, 0.15); +} +.ui.dimmer .ui.loader:after, +.play-button.dimmer .play-button.loader:after, +.download-button.dimmer .download-button.loader:after { + border-color: #FFFFFF transparent transparent; +} +/* White Dimmer (Inverted) */ +.ui.inverted.dimmer .ui.loader, +.play-button.inverted.dimmer .play-button.loader, +.download-button.inverted.dimmer .download-button.loader { + color: rgba(0, 0, 0, 0.87); +} +.ui.inverted.dimmer .ui.loader:before, +.play-button.inverted.dimmer .play-button.loader:before, +.download-button.inverted.dimmer .download-button.loader:before { + border-color: rgba(0, 0, 0, 0.1); +} +.ui.inverted.dimmer .ui.loader:after, +.play-button.inverted.dimmer .play-button.loader:after, +.download-button.inverted.dimmer .download-button.loader:after { + border-color: #42495F transparent transparent; +} +/******************************* + Types +*******************************/ +/*------------------- + Text +--------------------*/ +.ui.text.loader, +.play-button.text.loader, +.download-button.text.loader { + width: auto !important; + height: auto !important; + text-align: center; + font-style: normal; +} +/******************************* + States +*******************************/ +.ui.indeterminate.loader:after, +.play-button.indeterminate.loader:after, +.download-button.indeterminate.loader:after { + animation-direction: reverse; + animation-duration: 4s; +} +.ui.loader.active, +.ui.loader.visible, +.play-button.loader.active, +.play-button.loader.visible, +.download-button.loader.active, +.download-button.loader.visible { + display: block; +} +.ui.loader.disabled, +.ui.loader.hidden, +.play-button.loader.disabled, +.play-button.loader.hidden, +.download-button.loader.disabled, +.download-button.loader.hidden { + display: none; +} +/******************************* + Variations +*******************************/ +/*------------------- + Sizes +--------------------*/ +/* Loader */ +.ui.inverted.dimmer .ui.mini.loader, +.ui.mini.loader, +.play-button.inverted.dimmer .play-button.mini.loader, +.play-button.mini.loader, +.download-button.inverted.dimmer .download-button.mini.loader, +.download-button.mini.loader { + width: 1rem; + height: 1rem; + font-size: 0.78571429em; +} +.ui.inverted.dimmer .ui.tiny.loader, +.ui.tiny.loader, +.play-button.inverted.dimmer .play-button.tiny.loader, +.play-button.tiny.loader, +.download-button.inverted.dimmer .download-button.tiny.loader, +.download-button.tiny.loader { + width: 1.14285714rem; + height: 1.14285714rem; + font-size: 0.85714286em; +} +.ui.inverted.dimmer .ui.small.loader, +.ui.small.loader, +.play-button.inverted.dimmer .play-button.small.loader, +.play-button.small.loader, +.download-button.inverted.dimmer .download-button.small.loader, +.download-button.small.loader { + width: 1.71428571rem; + height: 1.71428571rem; + font-size: 0.92857143em; +} +.ui.inverted.dimmer .ui.loader, +.ui.loader, +.play-button.inverted.dimmer .play-button.loader, +.play-button.loader, +.download-button.inverted.dimmer .download-button.loader, +.download-button.loader { + width: 2.28571429rem; + height: 2.28571429rem; + font-size: 1em; +} +.ui.inverted.dimmer .ui.large.loader, +.ui.large.loader, +.play-button.inverted.dimmer .play-button.large.loader, +.play-button.large.loader, +.download-button.inverted.dimmer .download-button.large.loader, +.download-button.large.loader { + width: 200px; + height: 200px; + font-size: 1.14285714em; +} +.ui.inverted.dimmer .ui.big.loader, +.ui.big.loader, +.play-button.inverted.dimmer .play-button.big.loader, +.play-button.big.loader, +.download-button.inverted.dimmer .download-button.big.loader, +.download-button.big.loader { + width: 3.71428571rem; + height: 3.71428571rem; + font-size: 1.28571429em; +} +.ui.inverted.dimmer .ui.huge.loader, +.ui.huge.loader, +.play-button.inverted.dimmer .play-button.huge.loader, +.play-button.huge.loader, +.download-button.inverted.dimmer .download-button.huge.loader, +.download-button.huge.loader { + width: 4.14285714rem; + height: 4.14285714rem; + font-size: 1.42857143em; +} +.ui.inverted.dimmer .ui.massive.loader, +.ui.massive.loader, +.play-button.inverted.dimmer .play-button.massive.loader, +.play-button.massive.loader, +.download-button.inverted.dimmer .download-button.massive.loader, +.download-button.massive.loader { + width: 4.57142857rem; + height: 4.57142857rem; + font-size: 1.71428571em; +} +/* Text Loader */ +.ui.mini.text.loader, +.play-button.mini.text.loader, +.download-button.mini.text.loader { + min-width: 1rem; + padding-top: 1.78571429rem; +} +.ui.tiny.text.loader, +.play-button.tiny.text.loader, +.download-button.tiny.text.loader { + min-width: 1.14285714rem; + padding-top: 1.92857143rem; +} +.ui.small.text.loader, +.play-button.small.text.loader, +.download-button.small.text.loader { + min-width: 1.71428571rem; + padding-top: 2.5rem; +} +.ui.text.loader, +.play-button.text.loader, +.download-button.text.loader { + min-width: 2.28571429rem; + padding-top: 3.07142857rem; +} +.ui.large.text.loader, +.play-button.large.text.loader, +.download-button.large.text.loader { + min-width: 200px; + padding-top: 200.78571429px; +} +.ui.big.text.loader, +.play-button.big.text.loader, +.download-button.big.text.loader { + min-width: 3.71428571rem; + padding-top: 4.5rem; +} +.ui.huge.text.loader, +.play-button.huge.text.loader, +.download-button.huge.text.loader { + min-width: 4.14285714rem; + padding-top: 4.92857143rem; +} +.ui.massive.text.loader, +.play-button.massive.text.loader, +.download-button.massive.text.loader { + min-width: 4.57142857rem; + padding-top: 5.35714286rem; +} +/*------------------- + Inverted +--------------------*/ +.ui.inverted.loader, +.play-button.inverted.loader, +.download-button.inverted.loader { + color: rgba(255, 255, 255, 0.9); +} +.ui.inverted.loader:before, +.play-button.inverted.loader:before, +.download-button.inverted.loader:before { + border-color: rgba(255, 255, 255, 0.15); +} +.ui.inverted.loader:after, +.play-button.inverted.loader:after, +.download-button.inverted.loader:after { + border-top-color: #FFFFFF; +} +/*------------------- + Inline +--------------------*/ +.ui.inline.loader, +.play-button.inline.loader, +.download-button.inline.loader { + position: relative; + vertical-align: middle; + margin: 0em; + left: 0em; + top: 0em; + transform: none; +} +.ui.inline.loader.active, +.ui.inline.loader.visible, +.play-button.inline.loader.active, +.play-button.inline.loader.visible, +.download-button.inline.loader.active, +.download-button.inline.loader.visible { + display: inline-block; +} +/* Centered Inline */ +.ui.centered.inline.loader.active, +.ui.centered.inline.loader.visible, +.play-button.centered.inline.loader.active, +.play-button.centered.inline.loader.visible, +.download-button.centered.inline.loader.active, +.download-button.centered.inline.loader.visible { + display: block; + margin-left: auto; + margin-right: auto; +} +/******************************* + Site Overrides +*******************************/ +.ui.loader:before, +.play-button.loader:before, +.download-button.loader:before { + border: none; + border-radius: 0px; + box-shadow: none; +} +.ui.loader:after, +.play-button.loader:after, +.download-button.loader:after { + border: none; + box-shadow: none; + border-radius: 0px; + margin: 40px auto; + background: transparent url("data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%20standalone%3D%22no%22%3F%3E%0A%3C!--%20Generator%3A%20Adobe%20Illustrator%2018.0.0%2C%20SVG%20Export%20Plug-In%20.%20SVG%20Version%3A%206.00%20Build%200)%20%20--%3E%0A%0A%3Csvg%0A%20%20%20xmlns%3Adc%3D%22http%3A%2F%2Fpurl.org%2Fdc%2Felements%2F1.1%2F%22%0A%20%20%20xmlns%3Acc%3D%22http%3A%2F%2Fcreativecommons.org%2Fns%23%22%0A%20%20%20xmlns%3Ardf%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2F02%2F22-rdf-syntax-ns%23%22%0A%20%20%20xmlns%3Asvg%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%0A%20%20%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%0A%20%20%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%0A%20%20%20xmlns%3Asodipodi%3D%22http%3A%2F%2Fsodipodi.sourceforge.net%2FDTD%2Fsodipodi-0.dtd%22%0A%20%20%20xmlns%3Ainkscape%3D%22http%3A%2F%2Fwww.inkscape.org%2Fnamespaces%2Finkscape%22%0A%20%20%20version%3D%221.1%22%0A%20%20%20id%3D%22Ebene_1%22%0A%20%20%20x%3D%220px%22%0A%20%20%20y%3D%220px%22%0A%20%20%20viewBox%3D%220%200%20175.49999%20172.4%22%0A%20%20%20enable-background%3D%22new%200%200%20841.9%20595.3%22%0A%20%20%20xml%3Aspace%3D%22preserve%22%0A%20%20%20inkscape%3Aversion%3D%220.91%20r13725%22%0A%20%20%20sodipodi%3Adocname%3D%22Logo_Calliope_Woman.svg%22%0A%20%20%20width%3D%22175.5%22%0A%20%20%20height%3D%22172.39999%22%3E%3Cmetadata%0A%20%20%20%20%20id%3D%22metadata5011%22%3E%3Crdf%3ARDF%3E%3Ccc%3AWork%0A%20%20%20%20%20%20%20%20%20rdf%3Aabout%3D%22%22%3E%3Cdc%3Aformat%3Eimage%2Fsvg%2Bxml%3C%2Fdc%3Aformat%3E%3Cdc%3Atype%0A%20%20%20%20%20%20%20%20%20%20%20rdf%3Aresource%3D%22http%3A%2F%2Fpurl.org%2Fdc%2Fdcmitype%2FStillImage%22%20%2F%3E%3Cdc%3Atitle%3E%3C%2Fdc%3Atitle%3E%3C%2Fcc%3AWork%3E%3C%2Frdf%3ARDF%3E%3C%2Fmetadata%3E%3Cdefs%0A%20%20%20%20%20id%3D%22defs5009%22%20%2F%3E%3Csodipodi%3Anamedview%0A%20%20%20%20%20pagecolor%3D%22%23ffffff%22%0A%20%20%20%20%20bordercolor%3D%22%23666666%22%0A%20%20%20%20%20borderopacity%3D%221%22%0A%20%20%20%20%20objecttolerance%3D%2210%22%0A%20%20%20%20%20gridtolerance%3D%2210%22%0A%20%20%20%20%20guidetolerance%3D%2210%22%0A%20%20%20%20%20inkscape%3Apageopacity%3D%220%22%0A%20%20%20%20%20inkscape%3Apageshadow%3D%222%22%0A%20%20%20%20%20inkscape%3Awindow-width%3D%221920%22%0A%20%20%20%20%20inkscape%3Awindow-height%3D%221137%22%0A%20%20%20%20%20id%3D%22namedview5007%22%0A%20%20%20%20%20showgrid%3D%22false%22%0A%20%20%20%20%20inkscape%3Azoom%3D%220.34208337%22%0A%20%20%20%20%20inkscape%3Acx%3D%22420.95001%22%0A%20%20%20%20%20inkscape%3Acy%3D%22297.64999%22%0A%20%20%20%20%20inkscape%3Awindow-x%3D%22-8%22%0A%20%20%20%20%20inkscape%3Awindow-y%3D%22156%22%0A%20%20%20%20%20inkscape%3Awindow-maximized%3D%221%22%0A%20%20%20%20%20inkscape%3Acurrent-layer%3D%22Ebene_1%22%20%2F%3E%3Cg%0A%20%20%20%20%20id%3D%22g4955%22%0A%20%20%20%20%20transform%3D%22translate(-260.90025%2C-204.1)%22%3E%3Cg%0A%20%20%20%20%20%20%20id%3D%22g4957%22%3E%3Cdefs%0A%20%20%20%20%20%20%20%20%20id%3D%22defs4959%22%3E%3Crect%0A%20%20%20%20%20%20%20%20%20%20%20id%3D%22SVGID_7_%22%0A%20%20%20%20%20%20%20%20%20%20%20x%3D%22193.10001%22%0A%20%20%20%20%20%20%20%20%20%20%20y%3D%22204.10001%22%0A%20%20%20%20%20%20%20%20%20%20%20width%3D%22318.29999%22%0A%20%20%20%20%20%20%20%20%20%20%20height%3D%22256.29999%22%20%2F%3E%3C%2Fdefs%3E%3CclipPath%0A%20%20%20%20%20%20%20%20%20id%3D%22SVGID_1_%22%3E%3Cuse%0A%20%20%20%20%20%20%20%20%20%20%20xlink%3Ahref%3D%22%23SVGID_7_%22%0A%20%20%20%20%20%20%20%20%20%20%20overflow%3D%22visible%22%0A%20%20%20%20%20%20%20%20%20%20%20id%3D%22use4963%22%0A%20%20%20%20%20%20%20%20%20%20%20style%3D%22overflow%3Avisible%22%0A%20%20%20%20%20%20%20%20%20%20%20x%3D%220%22%0A%20%20%20%20%20%20%20%20%20%20%20y%3D%220%22%0A%20%20%20%20%20%20%20%20%20%20%20width%3D%22100%25%22%0A%20%20%20%20%20%20%20%20%20%20%20height%3D%22100%25%22%20%2F%3E%3C%2FclipPath%3E%3C%2Fg%3E%3Cg%0A%20%20%20%20%20%20%20id%3D%22g4965%22%3E%3Cdefs%0A%20%20%20%20%20%20%20%20%20id%3D%22defs4967%22%3E%3Crect%0A%20%20%20%20%20%20%20%20%20%20%20id%3D%22SVGID_9_%22%0A%20%20%20%20%20%20%20%20%20%20%20x%3D%22193.10001%22%0A%20%20%20%20%20%20%20%20%20%20%20y%3D%22204.10001%22%0A%20%20%20%20%20%20%20%20%20%20%20width%3D%22318.29999%22%0A%20%20%20%20%20%20%20%20%20%20%20height%3D%22256.29999%22%20%2F%3E%3C%2Fdefs%3E%3CclipPath%0A%20%20%20%20%20%20%20%20%20id%3D%22SVGID_2_%22%3E%3Cuse%0A%20%20%20%20%20%20%20%20%20%20%20xlink%3Ahref%3D%22%23SVGID_9_%22%0A%20%20%20%20%20%20%20%20%20%20%20overflow%3D%22visible%22%0A%20%20%20%20%20%20%20%20%20%20%20id%3D%22use4971%22%0A%20%20%20%20%20%20%20%20%20%20%20style%3D%22overflow%3Avisible%22%0A%20%20%20%20%20%20%20%20%20%20%20x%3D%220%22%0A%20%20%20%20%20%20%20%20%20%20%20y%3D%220%22%0A%20%20%20%20%20%20%20%20%20%20%20width%3D%22100%25%22%0A%20%20%20%20%20%20%20%20%20%20%20height%3D%22100%25%22%20%2F%3E%3C%2FclipPath%3E%3C%2Fg%3E%3Cg%0A%20%20%20%20%20%20%20id%3D%22g4973%22%3E%3Cdefs%0A%20%20%20%20%20%20%20%20%20id%3D%22defs4975%22%3E%3Crect%0A%20%20%20%20%20%20%20%20%20%20%20id%3D%22SVGID_11_%22%0A%20%20%20%20%20%20%20%20%20%20%20x%3D%22193.10001%22%0A%20%20%20%20%20%20%20%20%20%20%20y%3D%22204.10001%22%0A%20%20%20%20%20%20%20%20%20%20%20width%3D%22318.29999%22%0A%20%20%20%20%20%20%20%20%20%20%20height%3D%22256.29999%22%20%2F%3E%3C%2Fdefs%3E%3CclipPath%0A%20%20%20%20%20%20%20%20%20id%3D%22SVGID_3_%22%3E%3Cuse%0A%20%20%20%20%20%20%20%20%20%20%20xlink%3Ahref%3D%22%23SVGID_11_%22%0A%20%20%20%20%20%20%20%20%20%20%20overflow%3D%22visible%22%0A%20%20%20%20%20%20%20%20%20%20%20id%3D%22use4979%22%0A%20%20%20%20%20%20%20%20%20%20%20style%3D%22overflow%3Avisible%22%0A%20%20%20%20%20%20%20%20%20%20%20x%3D%220%22%0A%20%20%20%20%20%20%20%20%20%20%20y%3D%220%22%0A%20%20%20%20%20%20%20%20%20%20%20width%3D%22100%25%22%0A%20%20%20%20%20%20%20%20%20%20%20height%3D%22100%25%22%20%2F%3E%3C%2FclipPath%3E%3Cpath%0A%20%20%20%20%20%20%20%20%20clip-path%3D%22url(%23SVGID_3_)%22%0A%20%20%20%20%20%20%20%20%20d%3D%22m%20436.4%2C262%20-47.9%2C0%200%2C-46%20c%200%2C-4.7%203.8%2C-8.4%208.4%2C-8.4%20l%2031%2C0%20c%204.7%2C0%208.4%2C3.8%208.4%2C8.4%20l%200%2C46%20z%22%0A%20%20%20%20%20%20%20%20%20id%3D%22path4981%22%0A%20%20%20%20%20%20%20%20%20inkscape%3Aconnector-curvature%3D%220%22%0A%20%20%20%20%20%20%20%20%20style%3D%22fill%3A%234a5261%22%20%2F%3E%3C%2Fg%3E%3Crect%0A%20%20%20%20%20%20%20x%3D%22394.79999%22%0A%20%20%20%20%20%20%20y%3D%22218.7%22%0A%20%20%20%20%20%20%20width%3D%2235.099998%22%0A%20%20%20%20%20%20%20height%3D%2243.200001%22%0A%20%20%20%20%20%20%20id%3D%22rect4983%22%0A%20%20%20%20%20%20%20style%3D%22fill%3A%238096a1%22%20%2F%3E%3Cpath%0A%20%20%20%20%20%20%20d%3D%22m%20317.6%2C239.5%200%2C61%2071%2C0.2%20c%200%2C0%200%2C-57.3%200%2C-61%200%2C-19.5%20-16.1%2C-35.6%20-35.6%2C-35.6%20-19.6%2C0%20-35.4%2C15.8%20-35.4%2C35.4%22%0A%20%20%20%20%20%20%20id%3D%22path4985%22%0A%20%20%20%20%20%20%20inkscape%3Aconnector-curvature%3D%220%22%0A%20%20%20%20%20%20%20style%3D%22fill%3A%23855c33%22%20%2F%3E%3Cpath%0A%20%20%20%20%20%20%20d%3D%22m%20412.4%2C376.5%20-114.2%2C0%20c%20-35.6%2C0%20-50.9%2C-45.2%20-22.6%2C-66.8%20l%2063.8%2C-47.8%2096.9%2C0%200%2C90.7%20c%200.1%2C13.2%20-10.6%2C23.9%20-23.9%2C23.9%22%0A%20%20%20%20%20%20%20id%3D%22path4987%22%0A%20%20%20%20%20%20%20inkscape%3Aconnector-curvature%3D%220%22%0A%20%20%20%20%20%20%20style%3D%22fill%3A%2326a6ab%22%20%2F%3E%3Cpolygon%0A%20%20%20%20%20%20%20points%3D%22345.7%2C257.3%20334.8%2C298.8%20285.1%2C302.5%20%22%0A%20%20%20%20%20%20%20id%3D%22polygon4989%22%0A%20%20%20%20%20%20%20style%3D%22fill%3A%2342c9c9%22%20%2F%3E%3Cpolygon%0A%20%20%20%20%20%20%20points%3D%22354%2C283.8%20332.5%2C283.8%20345.7%2C257.3%20%22%0A%20%20%20%20%20%20%20id%3D%22polygon4991%22%0A%20%20%20%20%20%20%20style%3D%22fill%3A%23f7f5e8%22%20%2F%3E%3Cpolygon%0A%20%20%20%20%20%20%20points%3D%22375.4%2C283.8%20354%2C283.8%20362.2%2C257.3%20%22%0A%20%20%20%20%20%20%20id%3D%22polygon4993%22%0A%20%20%20%20%20%20%20style%3D%22fill%3A%23f7f5e8%22%20%2F%3E%3Cpolygon%0A%20%20%20%20%20%20%20points%3D%22373.1%2C298.8%20334.8%2C298.8%20332.5%2C283.8%20375.4%2C283.8%20%22%0A%20%20%20%20%20%20%20id%3D%22polygon4995%22%0A%20%20%20%20%20%20%20style%3D%22fill%3A%23bdd1cf%22%20%2F%3E%3Cpath%0A%20%20%20%20%20%20%20d%3D%22m%20400.6%2C376.5%20c%20-3.5%2C-26.2%20-10.6%2C-58%20-27.3%2C-77.7%20l%20-0.2%2C0%20-19%2C0%20-19%2C0%20-0.2%2C0%20c%20-16.7%2C19.8%20-23.8%2C51.5%20-27.3%2C77.7%20l%2093%2C0%20z%22%0A%20%20%20%20%20%20%20id%3D%22path4997%22%0A%20%20%20%20%20%20%20inkscape%3Aconnector-curvature%3D%220%22%0A%20%20%20%20%20%20%20style%3D%22fill%3A%23f7f5e8%22%20%2F%3E%3Cpath%0A%20%20%20%20%20%20%20d%3D%22m%20357%2C258%20-6.1%2C0%20c%20-6.4%2C0%20-11.5%2C-5.2%20-11.5%2C-11.5%20l%200%2C-19.7%2029.2%2C0%200%2C19.7%20c%20-0.1%2C6.3%20-5.3%2C11.5%20-11.6%2C11.5%22%0A%20%20%20%20%20%20%20id%3D%22path4999%22%0A%20%20%20%20%20%20%20inkscape%3Aconnector-curvature%3D%220%22%0A%20%20%20%20%20%20%20style%3D%22fill%3A%23ffcc99%22%20%2F%3E%3Cpath%0A%20%20%20%20%20%20%20d%3D%22m%20335.8%2C376.5%200%2C-77.7%20c%2012.4%2C29.1%2027.7%2C64.3%2046.5%2C77.7%20l%20-46.5%2C0%20z%22%0A%20%20%20%20%20%20%20id%3D%22path5001%22%0A%20%20%20%20%20%20%20inkscape%3Aconnector-curvature%3D%220%22%0A%20%20%20%20%20%20%20style%3D%22fill%3A%23bdd1cf%22%20%2F%3E%3Cpolygon%0A%20%20%20%20%20%20%20points%3D%22362.2%2C257.3%20345.7%2C257.3%20354%2C283.8%20%22%0A%20%20%20%20%20%20%20id%3D%22polygon5003%22%0A%20%20%20%20%20%20%20style%3D%22fill%3A%23ffcc99%22%20%2F%3E%3Cpolygon%0A%20%20%20%20%20%20%20points%3D%22436.4%2C315.3%20394.8%2C262%20436.4%2C262%20%22%0A%20%20%20%20%20%20%20id%3D%22polygon5005%22%0A%20%20%20%20%20%20%20style%3D%22fill%3A%2342c9c9%22%20%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E") no-repeat center center; + background-size: 100%; + -webkit-animation: loader-pxt 2s infinite linear; + animation: loader-pxt 2s infinite linear; +} +@-webkit-keyframes loader-pxt { + 0% { + -webkit-transform: perspective(160px) rotateX(0deg) rotateY(0deg); + transform: perspective(160px) rotateX(0deg) rotateY(0deg); + } + 15% { + -webkit-transform: perspective(160px) rotateX(0deg) rotateY(-5deg); + transform: perspective(160px) rotateX(0deg) rotateY(-5deg); + } + 50% { + -webkit-transform: perspective(160px) rotateX(0deg) rotateY(5deg); + transform: perspective(160px) rotateX(0deg) rotateY(5deg); + } + 100% { + -webkit-transform: perspective(160px) rotateX(0deg) rotateY(0deg); + transform: perspective(160px) rotateX(0deg) rotateY(0deg); + } +} +@keyframes loader-pxt { + 0% { + -webkit-transform: perspective(160px) rotateX(0deg) rotateY(0deg); + transform: perspective(160px) rotateX(0deg) rotateY(0deg); + } + 15% { + -webkit-transform: perspective(160px) rotateX(0deg) rotateY(-5deg); + transform: perspective(160px) rotateX(0deg) rotateY(-5deg); + } + 50% { + -webkit-transform: perspective(160px) rotateX(0deg) rotateY(5deg); + transform: perspective(160px) rotateX(0deg) rotateY(5deg); + } + 100% { + -webkit-transform: perspective(160px) rotateX(0deg) rotateY(0deg); + transform: perspective(160px) rotateX(0deg) rotateY(0deg); + } +} +/******************************* + Site Overrides +*******************************/ +/*! + * # Semantic UI - Rail + * http://github.com/semantic-org/semantic-ui/ + * + * + * Released under the MIT license + * http://opensource.org/licenses/MIT + * + */ +/******************************* + Theme +*******************************/ +/* + +████████╗██╗ ██╗███████╗███╗ ███╗███████╗███████╗ +╚══██╔══╝██║ ██║██╔════╝████╗ ████║██╔════╝██╔════╝ + ██║ ███████║█████╗ ██╔████╔██║█████╗ ███████╗ + ██║ ██╔══██║██╔══╝ ██║╚██╔╝██║██╔══╝ ╚════██║ + ██║ ██║ ██║███████╗██║ ╚═╝ ██║███████╗███████║ + ╚═╝ ╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝╚══════╝╚══════╝ + +*/ +/******************************* + Theme Selection +*******************************/ +/* To override a theme for an individual element + specify theme name below +*/ +/* Global */ +/* Elements */ +/* Collections */ +/* Modules */ +/* Views */ +/******************************* + Folders +*******************************/ +/* Path to theme packages */ +/* Path to site override folder */ +/******************************* + Import Theme +*******************************/ +/******************************* + Import Directives +*******************************/ +/*------------------ + Theme +-------------------*/ +/*-------------------- + Site Variables +---------------------*/ +/* Default site.variables */ +/******************************* + Site Settings +*******************************/ +/*------------------- + Fonts +--------------------*/ +/*------------------- + Base Sizes +--------------------*/ +/* This is the single variable that controls them all */ +/* The size of page text */ +/*------------------- + Border Radius +--------------------*/ +/* See Power-user section below + for explanation of @px variables +*/ +/*------------------- + Brand Colors +--------------------*/ +/*-------------- + Page Heading +---------------*/ +/*-------------- + Form Input +---------------*/ +/* This adjusts the default form input across all elements */ +/* Input Text Color */ +/* Line Height Default For Inputs in Browser (Descendors are 17px at 14px base em) */ +/*------------------- + Focused Input +--------------------*/ +/* Used on inputs, textarea etc */ +/* Used on dropdowns, other larger blocks */ +/*------------------- + Sizes +--------------------*/ +/* + Sizes are all expressed in terms of 14px/em (default em) + This ensures these "ratios" remain constant despite changes in EM +*/ +/*------------------- + Page +--------------------*/ +/*------------------- + Paragraph +--------------------*/ +/*------------------- + Links +--------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ +/*------------------- + Highlighted Text +--------------------*/ +/*------------------- + Loader +--------------------*/ +/*------------------- + Grid +--------------------*/ +/*------------------- + Transitions +--------------------*/ +/*------------------- + Breakpoints +--------------------*/ +/*------------------- + Site Colors +--------------------*/ +/*--- Colors ---*/ +/*--- Light Colors ---*/ +/*--- Neutrals ---*/ +/*--- Colored Backgrounds ---*/ +/*--- Colored Headers ---*/ +/*--- Colored Text ---*/ +/*--- Colored Border ---*/ +/*------------------- + Alpha Colors +--------------------*/ +/*------------------- + Accents +--------------------*/ +/* Differentiating Neutrals */ +/* Differentiating Layers */ +/******************************* + Power-User +*******************************/ +/*------------------- + Emotive Colors +--------------------*/ +/* Positive */ +/* Negative */ +/* Info */ +/* Warning */ +/*------------------- + Paths +--------------------*/ +/* For source only. Modified in gulp for dist */ +/*------------------- + Em Sizes +--------------------*/ +/* + This rounds @size values to the closest pixel then expresses that value in (r)em. + This ensures all size values round to exact pixels +*/ +/* em */ +/* rem */ +/*------------------- + Icons +--------------------*/ +/* Maximum Glyph Width of Icon */ +/*------------------- + Neutral Text +--------------------*/ +/*------------------- + Brand Colors +--------------------*/ +/*------------------- + Borders +--------------------*/ +/*------------------- + Derived Values +--------------------*/ +/* Loaders Position Offset */ +/* Rendered Scrollbar Width */ +/* Maximum Single Character Glyph Width, aka Capital "W" */ +/* Used to match floats with text */ +/* Header Spacing */ +/* Minimum Mobile Width */ +/* Positive / Negative Dupes */ +/* Responsive */ +/*------------------- + Exact Pixel Values +--------------------*/ +/* + These are used to specify exact pixel values in em + for things like borders that remain constantly + sized as emSize adjusts + + Since there are many more sizes than names for sizes, + these are named by their original pixel values. + +*/ +/* Columns */ +/******************************* + States +*******************************/ +/*------------------- + Disabled +--------------------*/ +/*------------------- + Hover +--------------------*/ +/*--- Shadows ---*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Focus +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Down (:active) +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Active +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/* Packaged site.variables */ +/******************************* + User Global Variables +*******************************/ +/*------------------- + Fonts +--------------------*/ +/*------------------- + Breakpoints +--------------------*/ +/* +@mobileBreakpoint : unit( (63 * @emSize), px); +@tabletBreakpoint : unit( (79 * @emSize), px); +@computerBreakpoint : unit( (91 * @emSize), px); +@largeMonitorBreakpoint : unit( (99 * @emSize), px); +@widescreenMonitorBreakpoint : unit( (119 * @emSize), px); +*/ +/******************************* + PXT Variables +*******************************/ +/*------------------- + Menu +--------------------*/ +/*------------------- + Layout +--------------------*/ +/*------------------- + Background +--------------------*/ +/*------------------- + Full screen +--------------------*/ +/*------------------- + Side Docs +--------------------*/ +/*------------------- + Editor +--------------------*/ +/* Component's site.variables */ +/******************************* + User Global Variables +*******************************/ +/*------------------- + Fonts +--------------------*/ +/*------------------- + Breakpoints +--------------------*/ +/* +@mobileBreakpoint : unit( (63 * @emSize), px); +@tabletBreakpoint : unit( (79 * @emSize), px); +@computerBreakpoint : unit( (91 * @emSize), px); +@largeMonitorBreakpoint : unit( (99 * @emSize), px); +@widescreenMonitorBreakpoint : unit( (119 * @emSize), px); +*/ +/******************************* + PXT Variables +*******************************/ +/*------------------- + Menu +--------------------*/ +/*------------------- + Layout +--------------------*/ +/*------------------- + Background +--------------------*/ +/*------------------- + Full screen +--------------------*/ +/*------------------- + Side Docs +--------------------*/ +/*------------------- + Editor +--------------------*/ +/* Site theme site.variables */ +/******************************* + User Global Variables +*******************************/ +/*------------------- + Site Colors +--------------------*/ +/******************************* + PXT Overrides +*******************************/ +/*------------------- + Component Variables +---------------------*/ +/* Default */ +/******************************* + Rail +*******************************/ +/*------------------- + Element +--------------------*/ +/*------------------- + Variations +--------------------*/ +/* Close */ +/* Dividing */ +/* Packaged Theme */ +/******************************* + User Variable Overrides +*******************************/ +/* Site Theme */ +/******************************* + User Variable Overrides +*******************************/ +/******************************* + Mix-ins +*******************************/ +/*------------------ + Fonts +-------------------*/ +/*------------------ + Overrides +-------------------*/ +/* End Config */ +/******************************* + Rails +*******************************/ +.ui.rail, +.play-button.rail, +.download-button.rail { + position: absolute; + top: 0%; + width: 300px; + height: 100%; +} +.ui.left.rail, +.play-button.left.rail, +.download-button.left.rail { + left: auto; + right: 100%; + padding: 0em 2rem 0em 0em; + margin: 0em 2rem 0em 0em; +} +.ui.right.rail, +.play-button.right.rail, +.download-button.right.rail { + left: 100%; + right: auto; + padding: 0em 0em 0em 2rem; + margin: 0em 0em 0em 2rem; +} +/******************************* + Variations +*******************************/ +/*-------------- + Internal +---------------*/ +.ui.left.internal.rail, +.play-button.left.internal.rail, +.download-button.left.internal.rail { + left: 0%; + right: auto; + padding: 0em 0em 0em 2rem; + margin: 0em 0em 0em 2rem; +} +.ui.right.internal.rail, +.play-button.right.internal.rail, +.download-button.right.internal.rail { + left: auto; + right: 0%; + padding: 0em 2rem 0em 0em; + margin: 0em 2rem 0em 0em; +} +/*-------------- + Dividing +---------------*/ +.ui.dividing.rail, +.play-button.dividing.rail, +.download-button.dividing.rail { + width: 302.5px; +} +.ui.left.dividing.rail, +.play-button.left.dividing.rail, +.download-button.left.dividing.rail { + padding: 0em 2.5rem 0em 0em; + margin: 0em 2.5rem 0em 0em; + border-right: 1px solid rgba(34, 36, 38, 0.15); +} +.ui.right.dividing.rail, +.play-button.right.dividing.rail, +.download-button.right.dividing.rail { + border-left: 1px solid rgba(34, 36, 38, 0.15); + padding: 0em 0em 0em 2.5rem; + margin: 0em 0em 0em 2.5rem; +} +/*-------------- + Distance +---------------*/ +.ui.close.rail, +.play-button.close.rail, +.download-button.close.rail { + width: calc( 300px + 1em ); +} +.ui.close.left.rail, +.play-button.close.left.rail, +.download-button.close.left.rail { + padding: 0em 1em 0em 0em; + margin: 0em 1em 0em 0em; +} +.ui.close.right.rail, +.play-button.close.right.rail, +.download-button.close.right.rail { + padding: 0em 0em 0em 1em; + margin: 0em 0em 0em 1em; +} +.ui.very.close.rail, +.play-button.very.close.rail, +.download-button.very.close.rail { + width: calc( 300px + 0.5em ); +} +.ui.very.close.left.rail, +.play-button.very.close.left.rail, +.download-button.very.close.left.rail { + padding: 0em 0.5em 0em 0em; + margin: 0em 0.5em 0em 0em; +} +.ui.very.close.right.rail, +.play-button.very.close.right.rail, +.download-button.very.close.right.rail { + padding: 0em 0em 0em 0.5em; + margin: 0em 0em 0em 0.5em; +} +/*-------------- + Attached +---------------*/ +.ui.attached.left.rail, +.ui.attached.right.rail, +.play-button.attached.left.rail, +.play-button.attached.right.rail, +.download-button.attached.left.rail, +.download-button.attached.right.rail { + padding: 0em; + margin: 0em; +} +/*-------------- + Sizing +---------------*/ +.ui.mini.rail, +.play-button.mini.rail, +.download-button.mini.rail { + font-size: 0.78571429rem; +} +.ui.tiny.rail, +.play-button.tiny.rail, +.download-button.tiny.rail { + font-size: 0.85714286rem; +} +.ui.small.rail, +.play-button.small.rail, +.download-button.small.rail { + font-size: 0.92857143rem; +} +.ui.rail, +.play-button.rail, +.download-button.rail { + font-size: 1rem; +} +.ui.large.rail, +.play-button.large.rail, +.download-button.large.rail { + font-size: 1.14285714rem; +} +.ui.big.rail, +.play-button.big.rail, +.download-button.big.rail { + font-size: 1.28571429rem; +} +.ui.huge.rail, +.play-button.huge.rail, +.download-button.huge.rail { + font-size: 1.42857143rem; +} +.ui.massive.rail, +.play-button.massive.rail, +.download-button.massive.rail { + font-size: 1.71428571rem; +} +/******************************* + Site Overrides +*******************************/ +/******************************* + Site Overrides +*******************************/ +/*! + * # Semantic UI - Reveal + * http://github.com/semantic-org/semantic-ui/ + * + * + * Released under the MIT license + * http://opensource.org/licenses/MIT + * + */ +/******************************* + Theme +*******************************/ +/* + +████████╗██╗ ██╗███████╗███╗ ███╗███████╗███████╗ +╚══██╔══╝██║ ██║██╔════╝████╗ ████║██╔════╝██╔════╝ + ██║ ███████║█████╗ ██╔████╔██║█████╗ ███████╗ + ██║ ██╔══██║██╔══╝ ██║╚██╔╝██║██╔══╝ ╚════██║ + ██║ ██║ ██║███████╗██║ ╚═╝ ██║███████╗███████║ + ╚═╝ ╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝╚══════╝╚══════╝ + +*/ +/******************************* + Theme Selection +*******************************/ +/* To override a theme for an individual element + specify theme name below +*/ +/* Global */ +/* Elements */ +/* Collections */ +/* Modules */ +/* Views */ +/******************************* + Folders +*******************************/ +/* Path to theme packages */ +/* Path to site override folder */ +/******************************* + Import Theme +*******************************/ +/******************************* + Import Directives +*******************************/ +/*------------------ + Theme +-------------------*/ +/*-------------------- + Site Variables +---------------------*/ +/* Default site.variables */ +/******************************* + Site Settings +*******************************/ +/*------------------- + Fonts +--------------------*/ +/*------------------- + Base Sizes +--------------------*/ +/* This is the single variable that controls them all */ +/* The size of page text */ +/*------------------- + Border Radius +--------------------*/ +/* See Power-user section below + for explanation of @px variables +*/ +/*------------------- + Brand Colors +--------------------*/ +/*-------------- + Page Heading +---------------*/ +/*-------------- + Form Input +---------------*/ +/* This adjusts the default form input across all elements */ +/* Input Text Color */ +/* Line Height Default For Inputs in Browser (Descendors are 17px at 14px base em) */ +/*------------------- + Focused Input +--------------------*/ +/* Used on inputs, textarea etc */ +/* Used on dropdowns, other larger blocks */ +/*------------------- + Sizes +--------------------*/ +/* + Sizes are all expressed in terms of 14px/em (default em) + This ensures these "ratios" remain constant despite changes in EM +*/ +/*------------------- + Page +--------------------*/ +/*------------------- + Paragraph +--------------------*/ +/*------------------- + Links +--------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ +/*------------------- + Highlighted Text +--------------------*/ +/*------------------- + Loader +--------------------*/ +/*------------------- + Grid +--------------------*/ +/*------------------- + Transitions +--------------------*/ +/*------------------- + Breakpoints +--------------------*/ +/*------------------- + Site Colors +--------------------*/ +/*--- Colors ---*/ +/*--- Light Colors ---*/ +/*--- Neutrals ---*/ +/*--- Colored Backgrounds ---*/ +/*--- Colored Headers ---*/ +/*--- Colored Text ---*/ +/*--- Colored Border ---*/ +/*------------------- + Alpha Colors +--------------------*/ +/*------------------- + Accents +--------------------*/ +/* Differentiating Neutrals */ +/* Differentiating Layers */ +/******************************* + Power-User +*******************************/ +/*------------------- + Emotive Colors +--------------------*/ +/* Positive */ +/* Negative */ +/* Info */ +/* Warning */ +/*------------------- + Paths +--------------------*/ +/* For source only. Modified in gulp for dist */ +/*------------------- + Em Sizes +--------------------*/ +/* + This rounds @size values to the closest pixel then expresses that value in (r)em. + This ensures all size values round to exact pixels +*/ +/* em */ +/* rem */ +/*------------------- + Icons +--------------------*/ +/* Maximum Glyph Width of Icon */ +/*------------------- + Neutral Text +--------------------*/ +/*------------------- + Brand Colors +--------------------*/ +/*------------------- + Borders +--------------------*/ +/*------------------- + Derived Values +--------------------*/ +/* Loaders Position Offset */ +/* Rendered Scrollbar Width */ +/* Maximum Single Character Glyph Width, aka Capital "W" */ +/* Used to match floats with text */ +/* Header Spacing */ +/* Minimum Mobile Width */ +/* Positive / Negative Dupes */ +/* Responsive */ +/*------------------- + Exact Pixel Values +--------------------*/ +/* + These are used to specify exact pixel values in em + for things like borders that remain constantly + sized as emSize adjusts + + Since there are many more sizes than names for sizes, + these are named by their original pixel values. + +*/ +/* Columns */ +/******************************* + States +*******************************/ +/*------------------- + Disabled +--------------------*/ +/*------------------- + Hover +--------------------*/ +/*--- Shadows ---*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Focus +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Down (:active) +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Active +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/* Packaged site.variables */ +/******************************* + User Global Variables +*******************************/ +/*------------------- + Fonts +--------------------*/ +/*------------------- + Breakpoints +--------------------*/ +/* +@mobileBreakpoint : unit( (63 * @emSize), px); +@tabletBreakpoint : unit( (79 * @emSize), px); +@computerBreakpoint : unit( (91 * @emSize), px); +@largeMonitorBreakpoint : unit( (99 * @emSize), px); +@widescreenMonitorBreakpoint : unit( (119 * @emSize), px); +*/ +/******************************* + PXT Variables +*******************************/ +/*------------------- + Menu +--------------------*/ +/*------------------- + Layout +--------------------*/ +/*------------------- + Background +--------------------*/ +/*------------------- + Full screen +--------------------*/ +/*------------------- + Side Docs +--------------------*/ +/*------------------- + Editor +--------------------*/ +/* Component's site.variables */ +/******************************* + User Global Variables +*******************************/ +/*------------------- + Fonts +--------------------*/ +/*------------------- + Breakpoints +--------------------*/ +/* +@mobileBreakpoint : unit( (63 * @emSize), px); +@tabletBreakpoint : unit( (79 * @emSize), px); +@computerBreakpoint : unit( (91 * @emSize), px); +@largeMonitorBreakpoint : unit( (99 * @emSize), px); +@widescreenMonitorBreakpoint : unit( (119 * @emSize), px); +*/ +/******************************* + PXT Variables +*******************************/ +/*------------------- + Menu +--------------------*/ +/*------------------- + Layout +--------------------*/ +/*------------------- + Background +--------------------*/ +/*------------------- + Full screen +--------------------*/ +/*------------------- + Side Docs +--------------------*/ +/*------------------- + Editor +--------------------*/ +/* Site theme site.variables */ +/******************************* + User Global Variables +*******************************/ +/*------------------- + Site Colors +--------------------*/ +/******************************* + PXT Overrides +*******************************/ +/*------------------- + Component Variables +---------------------*/ +/* Default */ +/******************************* + Reveal +*******************************/ +/* Types */ +/* Packaged Theme */ +/******************************* + User Variable Overrides +*******************************/ +/* Site Theme */ +/******************************* + User Variable Overrides +*******************************/ +/******************************* + Mix-ins +*******************************/ +/*------------------ + Fonts +-------------------*/ +/*------------------ + Overrides +-------------------*/ +/* End Config */ +/******************************* + Reveal +*******************************/ +.ui.reveal, +.play-button.reveal, +.download-button.reveal { + display: inherit; + position: relative !important; + font-size: 0em !important; +} +.ui.reveal > .visible.content, +.play-button.reveal > .visible.content, +.download-button.reveal > .visible.content { + position: absolute !important; + top: 0em !important; + left: 0em !important; + z-index: 3 !important; + transition: all 0.5s ease 0.1s; +} +.ui.reveal > .hidden.content, +.play-button.reveal > .hidden.content, +.download-button.reveal > .hidden.content { + position: relative !important; + z-index: 2 !important; +} +/* Make sure hovered element is on top of other reveal */ +.ui.active.reveal .visible.content, +.ui.reveal:hover .visible.content, +.play-button.active.reveal .visible.content, +.play-button.reveal:hover .visible.content, +.download-button.active.reveal .visible.content, +.download-button.reveal:hover .visible.content { + z-index: 4 !important; +} +/******************************* + Types +*******************************/ +/*-------------- + Slide +---------------*/ +.ui.slide.reveal, +.play-button.slide.reveal, +.download-button.slide.reveal { + position: relative !important; + overflow: hidden !important; + white-space: nowrap; +} +.ui.slide.reveal > .content, +.play-button.slide.reveal > .content, +.download-button.slide.reveal > .content { + display: block; + width: 100%; + float: left; + margin: 0em; + transition: transform 0.5s ease 0.1s; +} +.ui.slide.reveal > .visible.content, +.play-button.slide.reveal > .visible.content, +.download-button.slide.reveal > .visible.content { + position: relative !important; +} +.ui.slide.reveal > .hidden.content, +.play-button.slide.reveal > .hidden.content, +.download-button.slide.reveal > .hidden.content { + position: absolute !important; + left: 0% !important; + width: 100% !important; + transform: translateX(100%) !important; +} +.ui.slide.active.reveal > .visible.content, +.ui.slide.reveal:hover > .visible.content, +.play-button.slide.active.reveal > .visible.content, +.play-button.slide.reveal:hover > .visible.content, +.download-button.slide.active.reveal > .visible.content, +.download-button.slide.reveal:hover > .visible.content { + transform: translateX(-100%) !important; +} +.ui.slide.active.reveal > .hidden.content, +.ui.slide.reveal:hover > .hidden.content, +.play-button.slide.active.reveal > .hidden.content, +.play-button.slide.reveal:hover > .hidden.content, +.download-button.slide.active.reveal > .hidden.content, +.download-button.slide.reveal:hover > .hidden.content { + transform: translateX(0%) !important; +} +.ui.slide.right.reveal > .visible.content, +.play-button.slide.right.reveal > .visible.content, +.download-button.slide.right.reveal > .visible.content { + transform: translateX(0%) !important; +} +.ui.slide.right.reveal > .hidden.content, +.play-button.slide.right.reveal > .hidden.content, +.download-button.slide.right.reveal > .hidden.content { + transform: translateX(-100%) !important; +} +.ui.slide.right.active.reveal > .visible.content, +.ui.slide.right.reveal:hover > .visible.content, +.play-button.slide.right.active.reveal > .visible.content, +.play-button.slide.right.reveal:hover > .visible.content, +.download-button.slide.right.active.reveal > .visible.content, +.download-button.slide.right.reveal:hover > .visible.content { + transform: translateX(100%) !important; +} +.ui.slide.right.active.reveal > .hidden.content, +.ui.slide.right.reveal:hover > .hidden.content, +.play-button.slide.right.active.reveal > .hidden.content, +.play-button.slide.right.reveal:hover > .hidden.content, +.download-button.slide.right.active.reveal > .hidden.content, +.download-button.slide.right.reveal:hover > .hidden.content { + transform: translateX(0%) !important; +} +.ui.slide.up.reveal > .hidden.content, +.play-button.slide.up.reveal > .hidden.content, +.download-button.slide.up.reveal > .hidden.content { + transform: translateY(100%) !important; +} +.ui.slide.up.active.reveal > .visible.content, +.ui.slide.up.reveal:hover > .visible.content, +.play-button.slide.up.active.reveal > .visible.content, +.play-button.slide.up.reveal:hover > .visible.content, +.download-button.slide.up.active.reveal > .visible.content, +.download-button.slide.up.reveal:hover > .visible.content { + transform: translateY(-100%) !important; +} +.ui.slide.up.active.reveal > .hidden.content, +.ui.slide.up.reveal:hover > .hidden.content, +.play-button.slide.up.active.reveal > .hidden.content, +.play-button.slide.up.reveal:hover > .hidden.content, +.download-button.slide.up.active.reveal > .hidden.content, +.download-button.slide.up.reveal:hover > .hidden.content { + transform: translateY(0%) !important; +} +.ui.slide.down.reveal > .hidden.content, +.play-button.slide.down.reveal > .hidden.content, +.download-button.slide.down.reveal > .hidden.content { + transform: translateY(-100%) !important; +} +.ui.slide.down.active.reveal > .visible.content, +.ui.slide.down.reveal:hover > .visible.content, +.play-button.slide.down.active.reveal > .visible.content, +.play-button.slide.down.reveal:hover > .visible.content, +.download-button.slide.down.active.reveal > .visible.content, +.download-button.slide.down.reveal:hover > .visible.content { + transform: translateY(100%) !important; +} +.ui.slide.down.active.reveal > .hidden.content, +.ui.slide.down.reveal:hover > .hidden.content, +.play-button.slide.down.active.reveal > .hidden.content, +.play-button.slide.down.reveal:hover > .hidden.content, +.download-button.slide.down.active.reveal > .hidden.content, +.download-button.slide.down.reveal:hover > .hidden.content { + transform: translateY(0%) !important; +} +/*-------------- + Fade +---------------*/ +.ui.fade.reveal > .visible.content, +.play-button.fade.reveal > .visible.content, +.download-button.fade.reveal > .visible.content { + opacity: 1; +} +.ui.fade.active.reveal > .visible.content, +.ui.fade.reveal:hover > .visible.content, +.play-button.fade.active.reveal > .visible.content, +.play-button.fade.reveal:hover > .visible.content, +.download-button.fade.active.reveal > .visible.content, +.download-button.fade.reveal:hover > .visible.content { + opacity: 0; +} +/*-------------- + Move +---------------*/ +.ui.move.reveal, +.play-button.move.reveal, +.download-button.move.reveal { + position: relative !important; + overflow: hidden !important; + white-space: nowrap; +} +.ui.move.reveal > .content, +.play-button.move.reveal > .content, +.download-button.move.reveal > .content { + display: block; + float: left; + margin: 0em; + transition: transform 0.5s cubic-bezier(0.175, 0.885, 0.32, 1) 0.1s; +} +.ui.move.reveal > .visible.content, +.play-button.move.reveal > .visible.content, +.download-button.move.reveal > .visible.content { + position: relative !important; +} +.ui.move.reveal > .hidden.content, +.play-button.move.reveal > .hidden.content, +.download-button.move.reveal > .hidden.content { + position: absolute !important; + left: 0% !important; + width: 100% !important; +} +.ui.move.active.reveal > .visible.content, +.ui.move.reveal:hover > .visible.content, +.play-button.move.active.reveal > .visible.content, +.play-button.move.reveal:hover > .visible.content, +.download-button.move.active.reveal > .visible.content, +.download-button.move.reveal:hover > .visible.content { + transform: translateX(-100%) !important; +} +.ui.move.right.active.reveal > .visible.content, +.ui.move.right.reveal:hover > .visible.content, +.play-button.move.right.active.reveal > .visible.content, +.play-button.move.right.reveal:hover > .visible.content, +.download-button.move.right.active.reveal > .visible.content, +.download-button.move.right.reveal:hover > .visible.content { + transform: translateX(100%) !important; +} +.ui.move.up.active.reveal > .visible.content, +.ui.move.up.reveal:hover > .visible.content, +.play-button.move.up.active.reveal > .visible.content, +.play-button.move.up.reveal:hover > .visible.content, +.download-button.move.up.active.reveal > .visible.content, +.download-button.move.up.reveal:hover > .visible.content { + transform: translateY(-100%) !important; +} +.ui.move.down.active.reveal > .visible.content, +.ui.move.down.reveal:hover > .visible.content, +.play-button.move.down.active.reveal > .visible.content, +.play-button.move.down.reveal:hover > .visible.content, +.download-button.move.down.active.reveal > .visible.content, +.download-button.move.down.reveal:hover > .visible.content { + transform: translateY(100%) !important; +} +/*-------------- + Rotate +---------------*/ +.ui.rotate.reveal > .visible.content, +.play-button.rotate.reveal > .visible.content, +.download-button.rotate.reveal > .visible.content { + transition-duration: 0.5s; + transform: rotate(0deg); +} +.ui.rotate.reveal > .visible.content, +.ui.rotate.right.reveal > .visible.content, +.play-button.rotate.reveal > .visible.content, +.play-button.rotate.right.reveal > .visible.content, +.download-button.rotate.reveal > .visible.content, +.download-button.rotate.right.reveal > .visible.content { + transform-origin: bottom right; +} +.ui.rotate.active.reveal > .visible.content, +.ui.rotate.reveal:hover > .visible.content, +.ui.rotate.right.active.reveal > .visible.content, +.ui.rotate.right.reveal:hover > .visible.content, +.play-button.rotate.active.reveal > .visible.content, +.play-button.rotate.reveal:hover > .visible.content, +.play-button.rotate.right.active.reveal > .visible.content, +.play-button.rotate.right.reveal:hover > .visible.content, +.download-button.rotate.active.reveal > .visible.content, +.download-button.rotate.reveal:hover > .visible.content, +.download-button.rotate.right.active.reveal > .visible.content, +.download-button.rotate.right.reveal:hover > .visible.content { + transform: rotate(110deg); +} +.ui.rotate.left.reveal > .visible.content, +.play-button.rotate.left.reveal > .visible.content, +.download-button.rotate.left.reveal > .visible.content { + transform-origin: bottom left; +} +.ui.rotate.left.active.reveal > .visible.content, +.ui.rotate.left.reveal:hover > .visible.content, +.play-button.rotate.left.active.reveal > .visible.content, +.play-button.rotate.left.reveal:hover > .visible.content, +.download-button.rotate.left.active.reveal > .visible.content, +.download-button.rotate.left.reveal:hover > .visible.content { + transform: rotate(-110deg); +} +/******************************* + States +*******************************/ +.ui.disabled.reveal:hover > .visible.visible.content, +.play-button.disabled.reveal:hover > .visible.visible.content, +.download-button.disabled.reveal:hover > .visible.visible.content { + position: static !important; + display: block !important; + opacity: 1 !important; + top: 0 !important; + left: 0 !important; + right: auto !important; + bottom: auto !important; + transform: none !important; +} +.ui.disabled.reveal:hover > .hidden.hidden.content, +.play-button.disabled.reveal:hover > .hidden.hidden.content, +.download-button.disabled.reveal:hover > .hidden.hidden.content { + display: none !important; +} +/******************************* + Variations +*******************************/ +/*-------------- + Visible +---------------*/ +.ui.visible.reveal, +.play-button.visible.reveal, +.download-button.visible.reveal { + overflow: visible; +} +/*-------------- + Instant +---------------*/ +.ui.instant.reveal > .content, +.play-button.instant.reveal > .content, +.download-button.instant.reveal > .content { + transition-delay: 0s !important; +} +/*-------------- + Sizing +---------------*/ +.ui.reveal > .content, +.play-button.reveal > .content, +.download-button.reveal > .content { + font-size: 1rem !important; +} +/******************************* + Site Overrides +*******************************/ +/******************************* + Site Overrides +*******************************/ +/*! + * # Semantic UI - Segment + * http://github.com/semantic-org/semantic-ui/ + * + * + * Released under the MIT license + * http://opensource.org/licenses/MIT + * + */ +/******************************* + Theme +*******************************/ +/* + +████████╗██╗ ██╗███████╗███╗ ███╗███████╗███████╗ +╚══██╔══╝██║ ██║██╔════╝████╗ ████║██╔════╝██╔════╝ + ██║ ███████║█████╗ ██╔████╔██║█████╗ ███████╗ + ██║ ██╔══██║██╔══╝ ██║╚██╔╝██║██╔══╝ ╚════██║ + ██║ ██║ ██║███████╗██║ ╚═╝ ██║███████╗███████║ + ╚═╝ ╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝╚══════╝╚══════╝ + +*/ +/******************************* + Theme Selection +*******************************/ +/* To override a theme for an individual element + specify theme name below +*/ +/* Global */ +/* Elements */ +/* Collections */ +/* Modules */ +/* Views */ +/******************************* + Folders +*******************************/ +/* Path to theme packages */ +/* Path to site override folder */ +/******************************* + Import Theme +*******************************/ +/******************************* + Import Directives +*******************************/ +/*------------------ + Theme +-------------------*/ +/*-------------------- + Site Variables +---------------------*/ +/* Default site.variables */ +/******************************* + Site Settings +*******************************/ +/*------------------- + Fonts +--------------------*/ +/*------------------- + Base Sizes +--------------------*/ +/* This is the single variable that controls them all */ +/* The size of page text */ +/*------------------- + Border Radius +--------------------*/ +/* See Power-user section below + for explanation of @px variables +*/ +/*------------------- + Brand Colors +--------------------*/ +/*-------------- + Page Heading +---------------*/ +/*-------------- + Form Input +---------------*/ +/* This adjusts the default form input across all elements */ +/* Input Text Color */ +/* Line Height Default For Inputs in Browser (Descendors are 17px at 14px base em) */ +/*------------------- + Focused Input +--------------------*/ +/* Used on inputs, textarea etc */ +/* Used on dropdowns, other larger blocks */ +/*------------------- + Sizes +--------------------*/ +/* + Sizes are all expressed in terms of 14px/em (default em) + This ensures these "ratios" remain constant despite changes in EM +*/ +/*------------------- + Page +--------------------*/ +/*------------------- + Paragraph +--------------------*/ +/*------------------- + Links +--------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ +/*------------------- + Highlighted Text +--------------------*/ +/*------------------- + Loader +--------------------*/ +/*------------------- + Grid +--------------------*/ +/*------------------- + Transitions +--------------------*/ +/*------------------- + Breakpoints +--------------------*/ +/*------------------- + Site Colors +--------------------*/ +/*--- Colors ---*/ +/*--- Light Colors ---*/ +/*--- Neutrals ---*/ +/*--- Colored Backgrounds ---*/ +/*--- Colored Headers ---*/ +/*--- Colored Text ---*/ +/*--- Colored Border ---*/ +/*------------------- + Alpha Colors +--------------------*/ +/*------------------- + Accents +--------------------*/ +/* Differentiating Neutrals */ +/* Differentiating Layers */ +/******************************* + Power-User +*******************************/ +/*------------------- + Emotive Colors +--------------------*/ +/* Positive */ +/* Negative */ +/* Info */ +/* Warning */ +/*------------------- + Paths +--------------------*/ +/* For source only. Modified in gulp for dist */ +/*------------------- + Em Sizes +--------------------*/ +/* + This rounds @size values to the closest pixel then expresses that value in (r)em. + This ensures all size values round to exact pixels +*/ +/* em */ +/* rem */ +/*------------------- + Icons +--------------------*/ +/* Maximum Glyph Width of Icon */ +/*------------------- + Neutral Text +--------------------*/ +/*------------------- + Brand Colors +--------------------*/ +/*------------------- + Borders +--------------------*/ +/*------------------- + Derived Values +--------------------*/ +/* Loaders Position Offset */ +/* Rendered Scrollbar Width */ +/* Maximum Single Character Glyph Width, aka Capital "W" */ +/* Used to match floats with text */ +/* Header Spacing */ +/* Minimum Mobile Width */ +/* Positive / Negative Dupes */ +/* Responsive */ +/*------------------- + Exact Pixel Values +--------------------*/ +/* + These are used to specify exact pixel values in em + for things like borders that remain constantly + sized as emSize adjusts + + Since there are many more sizes than names for sizes, + these are named by their original pixel values. + +*/ +/* Columns */ +/******************************* + States +*******************************/ +/*------------------- + Disabled +--------------------*/ +/*------------------- + Hover +--------------------*/ +/*--- Shadows ---*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Focus +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Down (:active) +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Active +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/* Packaged site.variables */ +/******************************* + User Global Variables +*******************************/ +/*------------------- + Fonts +--------------------*/ +/*------------------- + Breakpoints +--------------------*/ +/* +@mobileBreakpoint : unit( (63 * @emSize), px); +@tabletBreakpoint : unit( (79 * @emSize), px); +@computerBreakpoint : unit( (91 * @emSize), px); +@largeMonitorBreakpoint : unit( (99 * @emSize), px); +@widescreenMonitorBreakpoint : unit( (119 * @emSize), px); +*/ +/******************************* + PXT Variables +*******************************/ +/*------------------- + Menu +--------------------*/ +/*------------------- + Layout +--------------------*/ +/*------------------- + Background +--------------------*/ +/*------------------- + Full screen +--------------------*/ +/*------------------- + Side Docs +--------------------*/ +/*------------------- + Editor +--------------------*/ +/* Component's site.variables */ +/******************************* + User Global Variables +*******************************/ +/*------------------- + Fonts +--------------------*/ +/*------------------- + Breakpoints +--------------------*/ +/* +@mobileBreakpoint : unit( (63 * @emSize), px); +@tabletBreakpoint : unit( (79 * @emSize), px); +@computerBreakpoint : unit( (91 * @emSize), px); +@largeMonitorBreakpoint : unit( (99 * @emSize), px); +@widescreenMonitorBreakpoint : unit( (119 * @emSize), px); +*/ +/******************************* + PXT Variables +*******************************/ +/*------------------- + Menu +--------------------*/ +/*------------------- + Layout +--------------------*/ +/*------------------- + Background +--------------------*/ +/*------------------- + Full screen +--------------------*/ +/*------------------- + Side Docs +--------------------*/ +/*------------------- + Editor +--------------------*/ +/* Site theme site.variables */ +/******************************* + User Global Variables +*******************************/ +/*------------------- + Site Colors +--------------------*/ +/******************************* + PXT Overrides +*******************************/ +/*------------------- + Component Variables +---------------------*/ +/* Default */ +/******************************* + Segment +*******************************/ +/*------------------- + Element +--------------------*/ +/*------------------- + Group +--------------------*/ +/*------------------- + Coupling +--------------------*/ +/* Page Grid Segment */ +/******************************* + States +*******************************/ +/* Loading Dimmer */ +/* Loading Spinner */ +/******************************* + Variations +*******************************/ +/* Piled */ +/* Circular */ +/* Stacked */ +/* Raised */ +/* Padded */ +/* Attached */ +/* Inverted */ +/* Floated */ +/* Basic */ +/* Colors */ +/* Ordinality */ +/* Packaged Theme */ +/******************************* + User Variable Overrides +*******************************/ +/* Site Theme */ +/******************************* + User Variable Overrides +*******************************/ +/******************************* + Mix-ins +*******************************/ +/*------------------ + Fonts +-------------------*/ +/*------------------ + Overrides +-------------------*/ +/* End Config */ +/******************************* + Segment +*******************************/ +.ui.segment, +.play-button.segment, +.download-button.segment { + position: relative; + background: #FFFFFF; + box-shadow: 0px 1px 2px 0 rgba(34, 36, 38, 0.15); + margin: 1rem 0em; + padding: 1em 1em; + border-radius: 0.28571429rem; + border: 1px solid rgba(34, 36, 38, 0.15); +} +.ui.segment:first-child, +.play-button.segment:first-child, +.download-button.segment:first-child { + margin-top: 0em; +} +.ui.segment:last-child, +.play-button.segment:last-child, +.download-button.segment:last-child { + margin-bottom: 0em; +} +/* Vertical */ +.ui.vertical.segment, +.play-button.vertical.segment, +.download-button.vertical.segment { + margin: 0em; + padding-left: 0em; + padding-right: 0em; + background: none transparent; + border-radius: 0px; + box-shadow: none; + border: none; + border-bottom: 1px solid rgba(34, 36, 38, 0.15); +} +.ui.vertical.segment:last-child, +.play-button.vertical.segment:last-child, +.download-button.vertical.segment:last-child { + border-bottom: none; +} +/*------------------- + Loose Coupling +--------------------*/ +/* Header */ +.ui.inverted.segment > .ui.header, +.play-button.inverted.segment > .play-button.header, +.download-button.inverted.segment > .download-button.header { + color: #FFFFFF; +} +/* Label */ +.ui[class*="bottom attached"].segment > [class*="top attached"].label, +.play-button[class*="bottom attached"].segment > [class*="top attached"].label, +.download-button[class*="bottom attached"].segment > [class*="top attached"].label { + border-top-left-radius: 0em; + border-top-right-radius: 0em; +} +.ui[class*="top attached"].segment > [class*="bottom attached"].label, +.play-button[class*="top attached"].segment > [class*="bottom attached"].label, +.download-button[class*="top attached"].segment > [class*="bottom attached"].label { + border-bottom-left-radius: 0em; + border-bottom-right-radius: 0em; +} +.ui.attached.segment:not(.top):not(.bottom) > [class*="top attached"].label, +.play-button.attached.segment:not(.top):not(.bottom) > [class*="top attached"].label, +.download-button.attached.segment:not(.top):not(.bottom) > [class*="top attached"].label { + border-top-left-radius: 0em; + border-top-right-radius: 0em; +} +.ui.attached.segment:not(.top):not(.bottom) > [class*="bottom attached"].label, +.play-button.attached.segment:not(.top):not(.bottom) > [class*="bottom attached"].label, +.download-button.attached.segment:not(.top):not(.bottom) > [class*="bottom attached"].label { + border-bottom-left-radius: 0em; + border-bottom-right-radius: 0em; +} +/* Grid */ +.ui.page.grid.segment, +.ui.grid > .row > .ui.segment.column, +.ui.grid > .ui.segment.column, +.play-button.page.grid.segment, +.play-button.grid > .row > .play-button.segment.column, +.play-button.grid > .play-button.segment.column, +.download-button.page.grid.segment, +.download-button.grid > .row > .download-button.segment.column, +.download-button.grid > .download-button.segment.column { + padding-top: 2em; + padding-bottom: 2em; +} +.ui.grid.segment, +.play-button.grid.segment, +.download-button.grid.segment { + margin: 1rem 0em; + border-radius: 0.28571429rem; +} +/* Table */ +.ui.basic.table.segment, +.play-button.basic.table.segment, +.download-button.basic.table.segment { + background: #FFFFFF; + border: 1px solid rgba(34, 36, 38, 0.15); + box-shadow: 0px 1px 2px 0 rgba(34, 36, 38, 0.15); +} +.ui[class*="very basic"].table.segment, +.play-button[class*="very basic"].table.segment, +.download-button[class*="very basic"].table.segment { + padding: 1em 1em; +} +/******************************* + Types +*******************************/ +/*------------------- + Piled +--------------------*/ +.ui.piled.segments, +.ui.piled.segment, +.play-button.piled.segments, +.play-button.piled.segment, +.download-button.piled.segments, +.download-button.piled.segment { + margin: 3em 0em; + box-shadow: ''; + z-index: auto; +} +.ui.piled.segment:first-child, +.play-button.piled.segment:first-child, +.download-button.piled.segment:first-child { + margin-top: 0em; +} +.ui.piled.segment:last-child, +.play-button.piled.segment:last-child, +.download-button.piled.segment:last-child { + margin-bottom: 0em; +} +.ui.piled.segments:after, +.ui.piled.segments:before, +.ui.piled.segment:after, +.ui.piled.segment:before, +.play-button.piled.segments:after, +.play-button.piled.segments:before, +.play-button.piled.segment:after, +.play-button.piled.segment:before, +.download-button.piled.segments:after, +.download-button.piled.segments:before, +.download-button.piled.segment:after, +.download-button.piled.segment:before { + background-color: #FFFFFF; + visibility: visible; + content: ''; + display: block; + height: 100%; + left: 0px; + position: absolute; + width: 100%; + border: 1px solid rgba(34, 36, 38, 0.15); + box-shadow: ''; +} +.ui.piled.segments:before, +.ui.piled.segment:before, +.play-button.piled.segments:before, +.play-button.piled.segment:before, +.download-button.piled.segments:before, +.download-button.piled.segment:before { + transform: rotate(-1.2deg); + top: 0; + z-index: -2; +} +.ui.piled.segments:after, +.ui.piled.segment:after, +.play-button.piled.segments:after, +.play-button.piled.segment:after, +.download-button.piled.segments:after, +.download-button.piled.segment:after { + transform: rotate(1.2deg); + top: 0; + z-index: -1; +} +/* Piled Attached */ +.ui[class*="top attached"].piled.segment, +.play-button[class*="top attached"].piled.segment, +.download-button[class*="top attached"].piled.segment { + margin-top: 3em; + margin-bottom: 0em; +} +.ui.piled.segment[class*="top attached"]:first-child, +.play-button.piled.segment[class*="top attached"]:first-child, +.download-button.piled.segment[class*="top attached"]:first-child { + margin-top: 0em; +} +.ui.piled.segment[class*="bottom attached"], +.play-button.piled.segment[class*="bottom attached"], +.download-button.piled.segment[class*="bottom attached"] { + margin-top: 0em; + margin-bottom: 3em; +} +.ui.piled.segment[class*="bottom attached"]:last-child, +.play-button.piled.segment[class*="bottom attached"]:last-child, +.download-button.piled.segment[class*="bottom attached"]:last-child { + margin-bottom: 0em; +} +/*------------------- + Stacked +--------------------*/ +.ui.stacked.segment, +.play-button.stacked.segment, +.download-button.stacked.segment { + padding-bottom: 1.4em; +} +.ui.stacked.segments:before, +.ui.stacked.segments:after, +.ui.stacked.segment:before, +.ui.stacked.segment:after, +.play-button.stacked.segments:before, +.play-button.stacked.segments:after, +.play-button.stacked.segment:before, +.play-button.stacked.segment:after, +.download-button.stacked.segments:before, +.download-button.stacked.segments:after, +.download-button.stacked.segment:before, +.download-button.stacked.segment:after { + content: ''; + position: absolute; + bottom: -3px; + left: 0%; + border-top: 1px solid rgba(34, 36, 38, 0.15); + background: rgba(0, 0, 0, 0.03); + width: 100%; + height: 6px; + visibility: visible; +} +.ui.stacked.segments:before, +.ui.stacked.segment:before, +.play-button.stacked.segments:before, +.play-button.stacked.segment:before, +.download-button.stacked.segments:before, +.download-button.stacked.segment:before { + display: none; +} +/* Add additional page */ +.ui.tall.stacked.segments:before, +.ui.tall.stacked.segment:before, +.play-button.tall.stacked.segments:before, +.play-button.tall.stacked.segment:before, +.download-button.tall.stacked.segments:before, +.download-button.tall.stacked.segment:before { + display: block; + bottom: 0px; +} +/* Inverted */ +.ui.stacked.inverted.segments:before, +.ui.stacked.inverted.segments:after, +.ui.stacked.inverted.segment:before, +.ui.stacked.inverted.segment:after, +.play-button.stacked.inverted.segments:before, +.play-button.stacked.inverted.segments:after, +.play-button.stacked.inverted.segment:before, +.play-button.stacked.inverted.segment:after, +.download-button.stacked.inverted.segments:before, +.download-button.stacked.inverted.segments:after, +.download-button.stacked.inverted.segment:before, +.download-button.stacked.inverted.segment:after { + background-color: rgba(0, 0, 0, 0.03); + border-top: 1px solid rgba(34, 36, 38, 0.35); +} +/*------------------- + Padded +--------------------*/ +.ui.padded.segment, +.play-button.padded.segment, +.download-button.padded.segment { + padding: 1.5em; +} +.ui[class*="very padded"].segment, +.play-button[class*="very padded"].segment, +.download-button[class*="very padded"].segment { + padding: 3em; +} +/* Padded vertical */ +.ui.padded.segment.vertical.segment, +.ui[class*="very padded"].vertical.segment, +.play-button.padded.segment.vertical.segment, +.play-button[class*="very padded"].vertical.segment, +.download-button.padded.segment.vertical.segment, +.download-button[class*="very padded"].vertical.segment { + padding-left: 0px; + padding-right: 0px; +} +/*------------------- + Compact +--------------------*/ +.ui.compact.segment, +.play-button.compact.segment, +.download-button.compact.segment { + display: table; +} +/* Compact Group */ +.ui.compact.segments, +.play-button.compact.segments, +.download-button.compact.segments { + display: inline-flex; +} +.ui.compact.segments .segment, +.ui.segments .compact.segment, +.play-button.compact.segments .segment, +.play-button.segments .compact.segment, +.download-button.compact.segments .segment, +.download-button.segments .compact.segment { + display: block; + flex: 0 1 auto; +} +/*------------------- + Circular +--------------------*/ +.ui.circular.segment, +.play-button.circular.segment, +.download-button.circular.segment { + display: table-cell; + padding: 2em; + text-align: center; + vertical-align: middle; + border-radius: 500em; +} +/*------------------- + Raised +--------------------*/ +.ui.raised.segments, +.ui.raised.segment, +.play-button.raised.segments, +.play-button.raised.segment, +.download-button.raised.segments, +.download-button.raised.segment { + box-shadow: 0px 2px 4px 0px rgba(34, 36, 38, 0.12), 0px 2px 10px 0px rgba(34, 36, 38, 0.15); +} +/******************************* + Groups +*******************************/ +/* Group */ +.ui.segments, +.play-button.segments, +.download-button.segments { + flex-direction: column; + position: relative; + margin: 1rem 0em; + border: 1px solid rgba(34, 36, 38, 0.15); + box-shadow: 0px 1px 2px 0 rgba(34, 36, 38, 0.15); + border-radius: 0.28571429rem; +} +.ui.segments:first-child, +.play-button.segments:first-child, +.download-button.segments:first-child { + margin-top: 0em; +} +.ui.segments:last-child, +.play-button.segments:last-child, +.download-button.segments:last-child { + margin-bottom: 0em; +} +/* Nested Segment */ +.ui.segments > .segment, +.play-button.segments > .segment, +.download-button.segments > .segment { + top: 0px; + bottom: 0px; + border-radius: 0px; + margin: 0em; + width: auto; + box-shadow: none; + border: none; + border-top: 1px solid rgba(34, 36, 38, 0.15); +} +.ui.segments:not(.horizontal) > .segment:first-child, +.play-button.segments:not(.horizontal) > .segment:first-child, +.download-button.segments:not(.horizontal) > .segment:first-child { + border-top: none; + margin-top: 0em; + bottom: 0px; + margin-bottom: 0em; + top: 0px; + border-radius: 0.28571429rem 0.28571429rem 0em 0em; +} +/* Bottom */ +.ui.segments:not(.horizontal) > .segment:last-child, +.play-button.segments:not(.horizontal) > .segment:last-child, +.download-button.segments:not(.horizontal) > .segment:last-child { + top: 0px; + bottom: 0px; + margin-top: 0em; + margin-bottom: 0em; + box-shadow: 0px 1px 2px 0 rgba(34, 36, 38, 0.15), none; + border-radius: 0em 0em 0.28571429rem 0.28571429rem; +} +/* Only */ +.ui.segments:not(.horizontal) > .segment:only-child, +.play-button.segments:not(.horizontal) > .segment:only-child, +.download-button.segments:not(.horizontal) > .segment:only-child { + border-radius: 0.28571429rem; +} +/* Nested Group */ +.ui.segments > .ui.segments, +.play-button.segments > .play-button.segments, +.download-button.segments > .download-button.segments { + border-top: 1px solid rgba(34, 36, 38, 0.15); + margin: 1rem 1rem; +} +.ui.segments > .segments:first-child, +.play-button.segments > .segments:first-child, +.download-button.segments > .segments:first-child { + border-top: none; +} +.ui.segments > .segment + .segments:not(.horizontal), +.play-button.segments > .segment + .segments:not(.horizontal), +.download-button.segments > .segment + .segments:not(.horizontal) { + margin-top: 0em; +} +/* Horizontal Group */ +.ui.horizontal.segments, +.play-button.horizontal.segments, +.download-button.horizontal.segments { + display: flex; + flex-direction: row; + background-color: transparent; + border-radius: 0px; + padding: 0em; + background-color: #FFFFFF; + box-shadow: 0px 1px 2px 0 rgba(34, 36, 38, 0.15); + margin: 1rem 0em; + border-radius: 0.28571429rem; + border: 1px solid rgba(34, 36, 38, 0.15); +} +/* Nested Horizontal Group */ +.ui.segments > .horizontal.segments, +.play-button.segments > .horizontal.segments, +.download-button.segments > .horizontal.segments { + margin: 0em; + background-color: transparent; + border-radius: 0px; + border: none; + box-shadow: none; + border-top: 1px solid rgba(34, 36, 38, 0.15); +} +/* Horizontal Segment */ +.ui.horizontal.segments > .segment, +.play-button.horizontal.segments > .segment, +.download-button.horizontal.segments > .segment { + flex: 1 1 auto; + -ms-flex: 1 1 0px; + /* Solves #2550 MS Flex */ + margin: 0em; + min-width: 0px; + background-color: transparent; + border-radius: 0px; + border: none; + box-shadow: none; + border-left: 1px solid rgba(34, 36, 38, 0.15); +} +/* Border Fixes */ +.ui.segments > .horizontal.segments:first-child, +.play-button.segments > .horizontal.segments:first-child, +.download-button.segments > .horizontal.segments:first-child { + border-top: none; +} +.ui.horizontal.segments > .segment:first-child, +.play-button.horizontal.segments > .segment:first-child, +.download-button.horizontal.segments > .segment:first-child { + border-left: none; +} +/******************************* + States +*******************************/ +/*-------------- + Disabled +---------------*/ +.ui.disabled.segment, +.play-button.disabled.segment, +.download-button.disabled.segment { + opacity: 0.45; + color: rgba(40, 40, 40, 0.3); +} +/*-------------- + Loading +---------------*/ +.ui.loading.segment, +.play-button.loading.segment, +.download-button.loading.segment { + position: relative; + cursor: default; + pointer-events: none; + text-shadow: none !important; + color: transparent !important; + transition: all 0s linear; +} +.ui.loading.segment:before, +.play-button.loading.segment:before, +.download-button.loading.segment:before { + position: absolute; + content: ''; + top: 0%; + left: 0%; + background: rgba(255, 255, 255, 0.8); + width: 100%; + height: 100%; + border-radius: 0.28571429rem; + z-index: 100; +} +.ui.loading.segment:after, +.play-button.loading.segment:after, +.download-button.loading.segment:after { + position: absolute; + content: ''; + top: 50%; + left: 50%; + margin: -1.5em 0em 0em -1.5em; + width: 3em; + height: 3em; + animation: segment-spin 0.6s linear; + animation-iteration-count: infinite; + border-radius: 500rem; + border-color: #42495F rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1); + border-style: solid; + border-width: 0.2em; + box-shadow: 0px 0px 0px 1px transparent; + visibility: visible; + z-index: 101; +} +@keyframes segment-spin { + from { + transform: rotate(0deg); + } + to { + transform: rotate(360deg); + } +} +/******************************* + Variations +*******************************/ +/*------------------- + Basic +--------------------*/ +.ui.basic.segment, +.play-button.basic.segment, +.download-button.basic.segment { + background: none transparent; + box-shadow: none; + border: none; + border-radius: 0px; +} +/*------------------- + Clearing +--------------------*/ +.ui.clearing.segment:after, +.play-button.clearing.segment:after, +.download-button.clearing.segment:after { + content: "."; + display: block; + height: 0; + clear: both; + visibility: hidden; +} +/*------------------- + Colors +--------------------*/ +/* Red */ +.ui.red.segment:not(.inverted), +.play-button.red.segment:not(.inverted), +.download-button.red.segment:not(.inverted) { + border-top: 2px solid #E81123 !important; +} +.ui.inverted.red.segment, +.play-button.inverted.red.segment, +.download-button.inverted.red.segment { + background-color: #E81123 !important; + color: #FFFFFF !important; +} +/* Orange */ +.ui.orange.segment:not(.inverted), +.play-button.orange.segment:not(.inverted), +.download-button.orange.segment:not(.inverted) { + border-top: 2px solid #DF4600 !important; +} +.ui.inverted.orange.segment, +.play-button.inverted.orange.segment, +.download-button.inverted.orange.segment { + background-color: #DF4600 !important; + color: #FFFFFF !important; +} +/* Yellow */ +.ui.yellow.segment:not(.inverted), +.play-button.yellow.segment:not(.inverted), +.download-button.yellow.segment:not(.inverted), +.ui.download-button.segment:not(.inverted) { + border-top: 2px solid #F4C918 !important; +} +.ui.inverted.yellow.segment, +.play-button.inverted.yellow.segment, +.download-button.inverted.yellow.segment, +.ui.inverted.download-button.segment { + background-color: #F4C918 !important; + color: #FFFFFF !important; +} +/* Olive */ +.ui.olive.segment:not(.inverted), +.play-button.olive.segment:not(.inverted), +.download-button.olive.segment:not(.inverted) { + border-top: 2px solid #B5CC18 !important; +} +.ui.inverted.olive.segment, +.play-button.inverted.olive.segment, +.download-button.inverted.olive.segment { + background-color: #B5CC18 !important; + color: #FFFFFF !important; +} +/* Green */ +.ui.green.segment:not(.inverted), +.ui.ui.button.getting-started-btn.segment:not(.inverted), +.play-button.green.segment:not(.inverted), +.download-button.green.segment:not(.inverted), +.ui.play-button.button.getting-started-btn.segment:not(.inverted), +.ui.ui.play-button.getting-started-btn.segment:not(.inverted), +.ui.download-button.button.getting-started-btn.segment:not(.inverted), +.ui.ui.download-button.getting-started-btn.segment:not(.inverted) { + border-top: 2px solid #3FC863 !important; +} +.ui.inverted.green.segment, +.ui.inverted.ui.button.getting-started-btn.segment, +.play-button.inverted.green.segment, +.download-button.inverted.green.segment, +.ui.inverted.play-button.button.getting-started-btn.segment, +.ui.inverted.ui.play-button.getting-started-btn.segment, +.ui.inverted.download-button.button.getting-started-btn.segment, +.ui.inverted.ui.download-button.getting-started-btn.segment { + background-color: #3FC863 !important; + color: #FFFFFF !important; +} +/* Teal */ +.ui.teal.segment:not(.inverted), +.play-button.teal.segment:not(.inverted), +.download-button.teal.segment:not(.inverted) { + border-top: 2px solid #008272 !important; +} +.ui.inverted.teal.segment, +.play-button.inverted.teal.segment, +.download-button.inverted.teal.segment { + background-color: #008272 !important; + color: #FFFFFF !important; +} +/* Blue */ +.ui.blue.segment:not(.inverted), +.play-button.blue.segment:not(.inverted), +.ui.play-button.segment:not(.inverted), +.download-button.blue.segment:not(.inverted) { + border-top: 2px solid #54C9C9 !important; +} +.ui.inverted.blue.segment, +.play-button.inverted.blue.segment, +.ui.inverted.play-button.segment, +.download-button.inverted.blue.segment { + background-color: #54C9C9 !important; + color: #FFFFFF !important; +} +/* Violet */ +.ui.violet.segment:not(.inverted), +.play-button.violet.segment:not(.inverted), +.download-button.violet.segment:not(.inverted) { + border-top: 2px solid #C90072 !important; +} +.ui.inverted.violet.segment, +.play-button.inverted.violet.segment, +.download-button.inverted.violet.segment { + background-color: #C90072 !important; + color: #FFFFFF !important; +} +/* Purple */ +.ui.purple.segment:not(.inverted), +.play-button.purple.segment:not(.inverted), +.download-button.purple.segment:not(.inverted) { + border-top: 2px solid #8169E6 !important; +} +.ui.inverted.purple.segment, +.play-button.inverted.purple.segment, +.download-button.inverted.purple.segment { + background-color: #8169E6 !important; + color: #FFFFFF !important; +} +/* Pink */ +.ui.pink.segment:not(.inverted), +.play-button.pink.segment:not(.inverted), +.download-button.pink.segment:not(.inverted) { + border-top: 2px solid #E2008C !important; +} +.ui.inverted.pink.segment, +.play-button.inverted.pink.segment, +.download-button.inverted.pink.segment { + background-color: #E2008C !important; + color: #FFFFFF !important; +} +/* Brown */ +.ui.brown.segment:not(.inverted), +.play-button.brown.segment:not(.inverted), +.download-button.brown.segment:not(.inverted) { + border-top: 2px solid #6B5B4C !important; +} +.ui.inverted.brown.segment, +.play-button.inverted.brown.segment, +.download-button.inverted.brown.segment { + background-color: #6B5B4C !important; + color: #FFFFFF !important; +} +/* Grey */ +.ui.grey.segment:not(.inverted), +.ui.ui.button.editortools-btn.segment:not(.inverted), +.play-button.grey.segment:not(.inverted), +.download-button.grey.segment:not(.inverted), +.ui.play-button.button.editortools-btn.segment:not(.inverted), +.ui.ui.play-button.editortools-btn.segment:not(.inverted), +.ui.download-button.button.editortools-btn.segment:not(.inverted), +.ui.ui.download-button.editortools-btn.segment:not(.inverted) { + border-top: 2px solid #42495F !important; +} +.ui.inverted.grey.segment, +.ui.inverted.ui.button.editortools-btn.segment, +.play-button.inverted.grey.segment, +.download-button.inverted.grey.segment, +.ui.inverted.play-button.button.editortools-btn.segment, +.ui.inverted.ui.play-button.editortools-btn.segment, +.ui.inverted.download-button.button.editortools-btn.segment, +.ui.inverted.ui.download-button.editortools-btn.segment { + background-color: #42495F !important; + color: #FFFFFF !important; +} +/* Black */ +.ui.black.segment:not(.inverted), +.play-button.black.segment:not(.inverted), +.download-button.black.segment:not(.inverted) { + border-top: 2px solid #1B1C1D !important; +} +.ui.inverted.black.segment, +.play-button.inverted.black.segment, +.download-button.inverted.black.segment { + background-color: #1B1C1D !important; + color: #FFFFFF !important; +} +/*------------------- + Aligned +--------------------*/ +.ui[class*="left aligned"].segment, +.play-button[class*="left aligned"].segment, +.download-button[class*="left aligned"].segment { + text-align: left; +} +.ui[class*="right aligned"].segment, +.play-button[class*="right aligned"].segment, +.download-button[class*="right aligned"].segment { + text-align: right; +} +.ui[class*="center aligned"].segment, +.play-button[class*="center aligned"].segment, +.download-button[class*="center aligned"].segment { + text-align: center; +} +/*------------------- + Floated +--------------------*/ +.ui.floated.segment, +.ui[class*="left floated"].segment, +.play-button.floated.segment, +.play-button[class*="left floated"].segment, +.download-button.floated.segment, +.download-button[class*="left floated"].segment { + float: left; + margin-right: 1em; +} +.ui[class*="right floated"].segment, +.play-button[class*="right floated"].segment, +.download-button[class*="right floated"].segment { + float: right; + margin-left: 1em; +} +/*------------------- + Inverted +--------------------*/ +.ui.inverted.segment, +.play-button.inverted.segment, +.download-button.inverted.segment { + border: none; + box-shadow: none; +} +.ui.inverted.segment, +.ui.primary.inverted.segment, +.play-button.inverted.segment, +.play-button.primary.inverted.segment, +.download-button.inverted.segment, +.download-button.primary.inverted.segment { + background: #1B1C1D; + color: rgba(255, 255, 255, 0.9); +} +/* Nested */ +.ui.inverted.segment .segment, +.play-button.inverted.segment .segment, +.download-button.inverted.segment .segment { + color: rgba(0, 0, 0, 0.87); +} +.ui.inverted.segment .inverted.segment, +.play-button.inverted.segment .inverted.segment, +.download-button.inverted.segment .inverted.segment { + color: rgba(255, 255, 255, 0.9); +} +/* Attached */ +.ui.inverted.attached.segment, +.play-button.inverted.attached.segment, +.download-button.inverted.attached.segment { + border-color: #555555; +} +/*------------------- + Emphasis +--------------------*/ +/* Secondary */ +.ui.secondary.segment, +.play-button.secondary.segment, +.download-button.secondary.segment { + background: #F3F4F5; + color: rgba(0, 0, 0, 0.6); +} +.ui.secondary.inverted.segment, +.play-button.secondary.inverted.segment, +.download-button.secondary.inverted.segment { + background: #4c4f52 linear-gradient(rgba(255, 255, 255, 0.2) 0%, rgba(255, 255, 255, 0.2) 100%); + color: rgba(255, 255, 255, 0.8); +} +/* Tertiary */ +.ui.tertiary.segment, +.play-button.tertiary.segment, +.download-button.tertiary.segment { + background: #DCDDDE; + color: rgba(0, 0, 0, 0.6); +} +.ui.tertiary.inverted.segment, +.play-button.tertiary.inverted.segment, +.download-button.tertiary.inverted.segment { + background: #717579 linear-gradient(rgba(255, 255, 255, 0.35) 0%, rgba(255, 255, 255, 0.35) 100%); + color: rgba(255, 255, 255, 0.8); +} +/*------------------- + Attached +--------------------*/ +/* Middle */ +.ui.attached.segment, +.play-button.attached.segment, +.download-button.attached.segment { + top: 0px; + bottom: 0px; + border-radius: 0px; + margin: 0em -1px; + width: calc(100% + 2px ); + max-width: calc(100% + 2px ); + box-shadow: none; + border: 1px solid #D4D4D5; +} +.ui.attached:not(.message) + .ui.attached.segment:not(.top), +.play-button.attached:not(.message) + .play-button.attached.segment:not(.top), +.download-button.attached:not(.message) + .download-button.attached.segment:not(.top) { + border-top: none; +} +/* Top */ +.ui[class*="top attached"].segment, +.play-button[class*="top attached"].segment, +.download-button[class*="top attached"].segment { + bottom: 0px; + margin-bottom: 0em; + top: 0px; + margin-top: 1rem; + border-radius: 0.28571429rem 0.28571429rem 0em 0em; +} +.ui.segment[class*="top attached"]:first-child, +.play-button.segment[class*="top attached"]:first-child, +.download-button.segment[class*="top attached"]:first-child { + margin-top: 0em; +} +/* Bottom */ +.ui.segment[class*="bottom attached"], +.play-button.segment[class*="bottom attached"], +.download-button.segment[class*="bottom attached"] { + bottom: 0px; + margin-top: 0em; + top: 0px; + margin-bottom: 1rem; + box-shadow: 0px 1px 2px 0 rgba(34, 36, 38, 0.15), none; + border-radius: 0em 0em 0.28571429rem 0.28571429rem; +} +.ui.segment[class*="bottom attached"]:last-child, +.play-button.segment[class*="bottom attached"]:last-child, +.download-button.segment[class*="bottom attached"]:last-child { + margin-bottom: 0em; +} +/*------------------- + Size +--------------------*/ +.ui.mini.segments .segment, +.ui.mini.segment, +.play-button.mini.segments .segment, +.play-button.mini.segment, +.download-button.mini.segments .segment, +.download-button.mini.segment { + font-size: 0.78571429rem; +} +.ui.tiny.segments .segment, +.ui.tiny.segment, +.play-button.tiny.segments .segment, +.play-button.tiny.segment, +.download-button.tiny.segments .segment, +.download-button.tiny.segment { + font-size: 0.85714286rem; +} +.ui.small.segments .segment, +.ui.small.segment, +.play-button.small.segments .segment, +.play-button.small.segment, +.download-button.small.segments .segment, +.download-button.small.segment { + font-size: 0.92857143rem; +} +.ui.segments .segment, +.ui.segment, +.play-button.segments .segment, +.play-button.segment, +.download-button.segments .segment, +.download-button.segment { + font-size: 1rem; +} +.ui.large.segments .segment, +.ui.large.segment, +.play-button.large.segments .segment, +.play-button.large.segment, +.download-button.large.segments .segment, +.download-button.large.segment { + font-size: 1.14285714rem; +} +.ui.big.segments .segment, +.ui.big.segment, +.play-button.big.segments .segment, +.play-button.big.segment, +.download-button.big.segments .segment, +.download-button.big.segment { + font-size: 1.28571429rem; +} +.ui.huge.segments .segment, +.ui.huge.segment, +.play-button.huge.segments .segment, +.play-button.huge.segment, +.download-button.huge.segments .segment, +.download-button.huge.segment { + font-size: 1.42857143rem; +} +.ui.massive.segments .segment, +.ui.massive.segment, +.play-button.massive.segments .segment, +.play-button.massive.segment, +.download-button.massive.segments .segment, +.download-button.massive.segment { + font-size: 1.71428571rem; +} +/******************************* + Site Overrides +*******************************/ +/******************************* + Site Overrides +*******************************/ +/*! + * # Semantic UI - Step + * http://github.com/semantic-org/semantic-ui/ + * + * + * Released under the MIT license + * http://opensource.org/licenses/MIT + * + */ +/******************************* + Step +*******************************/ +/*-------------- + Load Theme +---------------*/ +/* + +████████╗██╗ ██╗███████╗███╗ ███╗███████╗███████╗ +╚══██╔══╝██║ ██║██╔════╝████╗ ████║██╔════╝██╔════╝ + ██║ ███████║█████╗ ██╔████╔██║█████╗ ███████╗ + ██║ ██╔══██║██╔══╝ ██║╚██╔╝██║██╔══╝ ╚════██║ + ██║ ██║ ██║███████╗██║ ╚═╝ ██║███████╗███████║ + ╚═╝ ╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝╚══════╝╚══════╝ + +*/ +/******************************* + Theme Selection +*******************************/ +/* To override a theme for an individual element + specify theme name below +*/ +/* Global */ +/* Elements */ +/* Collections */ +/* Modules */ +/* Views */ +/******************************* + Folders +*******************************/ +/* Path to theme packages */ +/* Path to site override folder */ +/******************************* + Import Theme +*******************************/ +/******************************* + Import Directives +*******************************/ +/*------------------ + Theme +-------------------*/ +/*-------------------- + Site Variables +---------------------*/ +/* Default site.variables */ +/******************************* + Site Settings +*******************************/ +/*------------------- + Fonts +--------------------*/ +/*------------------- + Base Sizes +--------------------*/ +/* This is the single variable that controls them all */ +/* The size of page text */ +/*------------------- + Border Radius +--------------------*/ +/* See Power-user section below + for explanation of @px variables +*/ +/*------------------- + Brand Colors +--------------------*/ +/*-------------- + Page Heading +---------------*/ +/*-------------- + Form Input +---------------*/ +/* This adjusts the default form input across all elements */ +/* Input Text Color */ +/* Line Height Default For Inputs in Browser (Descendors are 17px at 14px base em) */ +/*------------------- + Focused Input +--------------------*/ +/* Used on inputs, textarea etc */ +/* Used on dropdowns, other larger blocks */ +/*------------------- + Sizes +--------------------*/ +/* + Sizes are all expressed in terms of 14px/em (default em) + This ensures these "ratios" remain constant despite changes in EM +*/ +/*------------------- + Page +--------------------*/ +/*------------------- + Paragraph +--------------------*/ +/*------------------- + Links +--------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ +/*------------------- + Highlighted Text +--------------------*/ +/*------------------- + Loader +--------------------*/ +/*------------------- + Grid +--------------------*/ +/*------------------- + Transitions +--------------------*/ +/*------------------- + Breakpoints +--------------------*/ +/*------------------- + Site Colors +--------------------*/ +/*--- Colors ---*/ +/*--- Light Colors ---*/ +/*--- Neutrals ---*/ +/*--- Colored Backgrounds ---*/ +/*--- Colored Headers ---*/ +/*--- Colored Text ---*/ +/*--- Colored Border ---*/ +/*------------------- + Alpha Colors +--------------------*/ +/*------------------- + Accents +--------------------*/ +/* Differentiating Neutrals */ +/* Differentiating Layers */ +/******************************* + Power-User +*******************************/ +/*------------------- + Emotive Colors +--------------------*/ +/* Positive */ +/* Negative */ +/* Info */ +/* Warning */ +/*------------------- + Paths +--------------------*/ +/* For source only. Modified in gulp for dist */ +/*------------------- + Em Sizes +--------------------*/ +/* + This rounds @size values to the closest pixel then expresses that value in (r)em. + This ensures all size values round to exact pixels +*/ +/* em */ +/* rem */ +/*------------------- + Icons +--------------------*/ +/* Maximum Glyph Width of Icon */ +/*------------------- + Neutral Text +--------------------*/ +/*------------------- + Brand Colors +--------------------*/ +/*------------------- + Borders +--------------------*/ +/*------------------- + Derived Values +--------------------*/ +/* Loaders Position Offset */ +/* Rendered Scrollbar Width */ +/* Maximum Single Character Glyph Width, aka Capital "W" */ +/* Used to match floats with text */ +/* Header Spacing */ +/* Minimum Mobile Width */ +/* Positive / Negative Dupes */ +/* Responsive */ +/*------------------- + Exact Pixel Values +--------------------*/ +/* + These are used to specify exact pixel values in em + for things like borders that remain constantly + sized as emSize adjusts + + Since there are many more sizes than names for sizes, + these are named by their original pixel values. + +*/ +/* Columns */ +/******************************* + States +*******************************/ +/*------------------- + Disabled +--------------------*/ +/*------------------- + Hover +--------------------*/ +/*--- Shadows ---*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Focus +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Down (:active) +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Active +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/* Packaged site.variables */ +/******************************* + User Global Variables +*******************************/ +/*------------------- + Fonts +--------------------*/ +/*------------------- + Breakpoints +--------------------*/ +/* +@mobileBreakpoint : unit( (63 * @emSize), px); +@tabletBreakpoint : unit( (79 * @emSize), px); +@computerBreakpoint : unit( (91 * @emSize), px); +@largeMonitorBreakpoint : unit( (99 * @emSize), px); +@widescreenMonitorBreakpoint : unit( (119 * @emSize), px); +*/ +/******************************* + PXT Variables +*******************************/ +/*------------------- + Menu +--------------------*/ +/*------------------- + Layout +--------------------*/ +/*------------------- + Background +--------------------*/ +/*------------------- + Full screen +--------------------*/ +/*------------------- + Side Docs +--------------------*/ +/*------------------- + Editor +--------------------*/ +/* Component's site.variables */ +/******************************* + User Global Variables +*******************************/ +/*------------------- + Fonts +--------------------*/ +/*------------------- + Breakpoints +--------------------*/ +/* +@mobileBreakpoint : unit( (63 * @emSize), px); +@tabletBreakpoint : unit( (79 * @emSize), px); +@computerBreakpoint : unit( (91 * @emSize), px); +@largeMonitorBreakpoint : unit( (99 * @emSize), px); +@widescreenMonitorBreakpoint : unit( (119 * @emSize), px); +*/ +/******************************* + PXT Variables +*******************************/ +/*------------------- + Menu +--------------------*/ +/*------------------- + Layout +--------------------*/ +/*------------------- + Background +--------------------*/ +/*------------------- + Full screen +--------------------*/ +/*------------------- + Side Docs +--------------------*/ +/*------------------- + Editor +--------------------*/ +/* Site theme site.variables */ +/******************************* + User Global Variables +*******************************/ +/*------------------- + Site Colors +--------------------*/ +/******************************* + PXT Overrides +*******************************/ +/*------------------- + Component Variables +---------------------*/ +/* Default */ +/******************************* + Step +*******************************/ +/*------------------- + Group +--------------------*/ +/*------------------- + Element +--------------------*/ +/* Icon */ +/* Title */ +/* Description */ +/* Arrow */ +/* Mobile */ +/*------------------- + Types +--------------------*/ +/* Vertical */ +/*------------------- + Variations +--------------------*/ +/*------------------- + States +--------------------*/ +/* Completed */ +/* Hover */ +/* Down */ +/* Active */ +/* Active + Hover */ +/* Disabled */ +/* Packaged Theme */ +/******************************* + User Variable Overrides +*******************************/ +/* Site Theme */ +/******************************* + User Variable Overrides +*******************************/ +/******************************* + Mix-ins +*******************************/ +/*------------------ + Fonts +-------------------*/ +/*------------------ + Overrides +-------------------*/ +/* End Config */ +/******************************* + Plural +*******************************/ +.ui.steps, +.play-button.steps, +.download-button.steps { + display: inline-flex; + flex-direction: row; + align-items: stretch; + margin: 1em 0em; + background: ''; + box-shadow: none; + line-height: 1.14285714em; + border-radius: 0.28571429rem; + border: 1px solid rgba(34, 36, 38, 0.15); +} +/* First Steps */ +.ui.steps:first-child, +.play-button.steps:first-child, +.download-button.steps:first-child { + margin-top: 0em; +} +/* Last Steps */ +.ui.steps:last-child, +.play-button.steps:last-child, +.download-button.steps:last-child { + margin-bottom: 0em; +} +/******************************* + Singular +*******************************/ +.ui.steps .step, +.play-button.steps .step, +.download-button.steps .step { + position: relative; + display: flex; + flex: 1 0 auto; + flex-wrap: wrap; + flex-direction: row; + vertical-align: middle; + align-items: center; + justify-content: center; + margin: 0em 0em; + padding: 1.14285714em 2em; + background: #FFFFFF; + color: rgba(0, 0, 0, 0.87); + box-shadow: none; + border-radius: 0em; + border: none; + border-right: 1px solid rgba(34, 36, 38, 0.15); + transition: background-color 0.1s ease, opacity 0.1s ease, color 0.1s ease, box-shadow 0.1s ease; +} +/* Arrow */ +.ui.steps .step:after, +.play-button.steps .step:after, +.download-button.steps .step:after { + display: none; + position: absolute; + z-index: 2; + content: ''; + top: 50%; + right: 0%; + border: medium none; + background-color: #FFFFFF; + width: 1.14285714em; + height: 1.14285714em; + border-style: solid; + border-color: rgba(34, 36, 38, 0.15); + border-width: 0px 1px 1px 0px; + transition: background-color 0.1s ease, opacity 0.1s ease, color 0.1s ease, box-shadow 0.1s ease; + transform: translateY(-50%) translateX(50%) rotate(-45deg); +} +/* First Step */ +.ui.steps .step:first-child, +.play-button.steps .step:first-child, +.download-button.steps .step:first-child { + padding-left: 2em; + border-radius: 0.28571429rem 0em 0em 0.28571429rem; +} +/* Last Step */ +.ui.steps .step:last-child, +.play-button.steps .step:last-child, +.download-button.steps .step:last-child { + border-radius: 0em 0.28571429rem 0.28571429rem 0em; +} +.ui.steps .step:last-child, +.play-button.steps .step:last-child, +.download-button.steps .step:last-child { + border-right: none; + margin-right: 0em; +} +/* Only Step */ +.ui.steps .step:only-child, +.play-button.steps .step:only-child, +.download-button.steps .step:only-child { + border-radius: 0.28571429rem; +} +/******************************* + Content +*******************************/ +/* Title */ +.ui.steps .step .title, +.play-button.steps .step .title, +.download-button.steps .step .title { + font-family: 'Roboto Mono', 'Helvetica Neue', Arial, Helvetica, sans-serif; + font-size: 1.14285714em; + font-weight: bold; +} +.ui.steps .step > .title, +.play-button.steps .step > .title, +.download-button.steps .step > .title { + width: 100%; +} +/* Description */ +.ui.steps .step .description, +.play-button.steps .step .description, +.download-button.steps .step .description { + font-weight: normal; + font-size: 0.92857143em; + color: rgba(0, 0, 0, 0.87); +} +.ui.steps .step > .description, +.play-button.steps .step > .description, +.download-button.steps .step > .description { + width: 100%; +} +.ui.steps .step .title ~ .description, +.play-button.steps .step .title ~ .description, +.download-button.steps .step .title ~ .description { + margin-top: 0.25em; +} +/* Icon */ +.ui.steps .step > .icon, +.play-button.steps .step > .icon, +.download-button.steps .step > .icon { + line-height: 1; + font-size: 2.5em; + margin: 0em 1rem 0em 0em; +} +.ui.steps .step > .icon, +.ui.steps .step > .icon ~ .content, +.play-button.steps .step > .icon, +.play-button.steps .step > .icon ~ .content, +.download-button.steps .step > .icon, +.download-button.steps .step > .icon ~ .content { + display: block; + flex: 0 1 auto; + align-self: middle; +} +.ui.steps .step > .icon ~ .content, +.play-button.steps .step > .icon ~ .content, +.download-button.steps .step > .icon ~ .content { + flex-grow: 1 0 auto; +} +/* Horizontal Icon */ +.ui.steps:not(.vertical) .step > .icon, +.play-button.steps:not(.vertical) .step > .icon, +.download-button.steps:not(.vertical) .step > .icon { + width: auto; +} +/* Link */ +.ui.steps .link.step, +.ui.steps a.step, +.play-button.steps .link.step, +.play-button.steps a.step, +.download-button.steps .link.step, +.download-button.steps a.step { + cursor: pointer; +} +/******************************* + Types +*******************************/ +/*-------------- + Ordered +---------------*/ +.ui.ordered.steps, +.play-button.ordered.steps, +.download-button.ordered.steps { + counter-reset: ordered; +} +.ui.ordered.steps .step:before, +.play-button.ordered.steps .step:before, +.download-button.ordered.steps .step:before { + display: block; + position: static; + text-align: center; + content: counters(ordered, "."); + align-self: middle; + margin-right: 1rem; + font-size: 2.5em; + counter-increment: ordered; + font-family: inherit; + font-weight: bold; +} +.ui.ordered.steps .step > *, +.play-button.ordered.steps .step > *, +.download-button.ordered.steps .step > * { + display: block; + align-self: middle; +} +/*-------------- + Vertical +---------------*/ +.ui.vertical.steps, +.play-button.vertical.steps, +.download-button.vertical.steps { + display: inline-flex; + flex-direction: column; + overflow: visible; +} +.ui.vertical.steps .step, +.play-button.vertical.steps .step, +.download-button.vertical.steps .step { + justify-content: flex-start; + border-radius: 0em; + padding: 1.14285714em 2em; + border-right: none; + border-bottom: 1px solid rgba(34, 36, 38, 0.15); +} +.ui.vertical.steps .step:first-child, +.play-button.vertical.steps .step:first-child, +.download-button.vertical.steps .step:first-child { + padding: 1.14285714em 2em; + border-radius: 0.28571429rem 0.28571429rem 0em 0em; +} +.ui.vertical.steps .step:last-child, +.play-button.vertical.steps .step:last-child, +.download-button.vertical.steps .step:last-child { + border-bottom: none; + border-radius: 0em 0em 0.28571429rem 0.28571429rem; +} +.ui.vertical.steps .step:only-child, +.play-button.vertical.steps .step:only-child, +.download-button.vertical.steps .step:only-child { + border-radius: 0.28571429rem; +} +/* Arrow */ +.ui.vertical.steps .step:after, +.play-button.vertical.steps .step:after, +.download-button.vertical.steps .step:after { + display: none; +} +.ui.vertical.steps .step:after, +.play-button.vertical.steps .step:after, +.download-button.vertical.steps .step:after { + top: 50%; + right: 0%; + border-width: 0px 1px 1px 0px; +} +.ui.vertical.steps .step:after, +.play-button.vertical.steps .step:after, +.download-button.vertical.steps .step:after { + display: none; +} +.ui.vertical.steps .active.step:after, +.play-button.vertical.steps .active.step:after, +.download-button.vertical.steps .active.step:after { + display: block; +} +.ui.vertical.steps .step:last-child:after, +.play-button.vertical.steps .step:last-child:after, +.download-button.vertical.steps .step:last-child:after { + display: none; +} +.ui.vertical.steps .active.step:last-child:after, +.play-button.vertical.steps .active.step:last-child:after, +.download-button.vertical.steps .active.step:last-child:after { + display: block; +} +/*--------------- + Responsive +----------------*/ +/* Mobile (Default) */ +@media only screen and (max-width: 767px) { + .ui.steps:not(.unstackable), + .play-button.steps:not(.unstackable), + .download-button.steps:not(.unstackable) { + display: inline-flex; + overflow: visible; + flex-direction: column; + } + .ui.steps:not(.unstackable) .step, + .play-button.steps:not(.unstackable) .step, + .download-button.steps:not(.unstackable) .step { + width: 100% !important; + flex-direction: column; + border-radius: 0em; + padding: 1.14285714em 2em; + } + .ui.steps:not(.unstackable) .step:first-child, + .play-button.steps:not(.unstackable) .step:first-child, + .download-button.steps:not(.unstackable) .step:first-child { + padding: 1.14285714em 2em; + border-radius: 0.28571429rem 0.28571429rem 0em 0em; + } + .ui.steps:not(.unstackable) .step:last-child, + .play-button.steps:not(.unstackable) .step:last-child, + .download-button.steps:not(.unstackable) .step:last-child { + border-radius: 0em 0em 0.28571429rem 0.28571429rem; + } + /* Arrow */ + .ui.steps:not(.unstackable) .step:after, + .play-button.steps:not(.unstackable) .step:after, + .download-button.steps:not(.unstackable) .step:after { + display: none !important; + } + /* Content */ + .ui.steps:not(.unstackable) .step .content, + .play-button.steps:not(.unstackable) .step .content, + .download-button.steps:not(.unstackable) .step .content { + text-align: center; + } + /* Icon */ + .ui.steps:not(.unstackable) .step > .icon, + .ui.ordered.steps:not(.unstackable) .step:before, + .play-button.steps:not(.unstackable) .step > .icon, + .play-button.ordered.steps:not(.unstackable) .step:before, + .download-button.steps:not(.unstackable) .step > .icon, + .download-button.ordered.steps:not(.unstackable) .step:before { + margin: 0em 0em 1rem 0em; + } +} +/******************************* + States +*******************************/ +/* Link Hover */ +.ui.steps .link.step:hover::after, +.ui.steps .link.step:hover, +.ui.steps a.step:hover::after, +.ui.steps a.step:hover, +.play-button.steps .link.step:hover::after, +.play-button.steps .link.step:hover, +.play-button.steps a.step:hover::after, +.play-button.steps a.step:hover, +.download-button.steps .link.step:hover::after, +.download-button.steps .link.step:hover, +.download-button.steps a.step:hover::after, +.download-button.steps a.step:hover { + background: #F9FAFB; + color: rgba(0, 0, 0, 0.8); +} +/* Link Down */ +.ui.steps .link.step:active::after, +.ui.steps .link.step:active, +.ui.steps a.step:active::after, +.ui.steps a.step:active, +.play-button.steps .link.step:active::after, +.play-button.steps .link.step:active, +.play-button.steps a.step:active::after, +.play-button.steps a.step:active, +.download-button.steps .link.step:active::after, +.download-button.steps .link.step:active, +.download-button.steps a.step:active::after, +.download-button.steps a.step:active { + background: #F3F4F5; + color: rgba(0, 0, 0, 0.9); +} +/* Active */ +.ui.steps .step.active, +.play-button.steps .step.active, +.download-button.steps .step.active { + cursor: auto; + background: #F3F4F5; +} +.ui.steps .step.active:after, +.play-button.steps .step.active:after, +.download-button.steps .step.active:after { + background: #F3F4F5; +} +.ui.steps .step.active .title, +.play-button.steps .step.active .title, +.download-button.steps .step.active .title { + color: #4183C4; +} +.ui.ordered.steps .step.active:before, +.ui.steps .active.step .icon, +.play-button.ordered.steps .step.active:before, +.play-button.steps .active.step .icon, +.download-button.ordered.steps .step.active:before, +.download-button.steps .active.step .icon { + color: rgba(0, 0, 0, 0.85); +} +/* Active Arrow */ +.ui.steps .step:after, +.play-button.steps .step:after, +.download-button.steps .step:after { + display: block; +} +.ui.steps .active.step:after, +.play-button.steps .active.step:after, +.download-button.steps .active.step:after { + display: block; +} +.ui.steps .step:last-child:after, +.play-button.steps .step:last-child:after, +.download-button.steps .step:last-child:after { + display: none; +} +.ui.steps .active.step:last-child:after, +.play-button.steps .active.step:last-child:after, +.download-button.steps .active.step:last-child:after { + display: none; +} +/* Active Hover */ +.ui.steps .link.active.step:hover::after, +.ui.steps .link.active.step:hover, +.ui.steps a.active.step:hover::after, +.ui.steps a.active.step:hover, +.play-button.steps .link.active.step:hover::after, +.play-button.steps .link.active.step:hover, +.play-button.steps a.active.step:hover::after, +.play-button.steps a.active.step:hover, +.download-button.steps .link.active.step:hover::after, +.download-button.steps .link.active.step:hover, +.download-button.steps a.active.step:hover::after, +.download-button.steps a.active.step:hover { + cursor: pointer; + background: #DCDDDE; + color: rgba(0, 0, 0, 0.87); +} +/* Completed */ +.ui.steps .step.completed > .icon:before, +.ui.ordered.steps .step.completed:before, +.play-button.steps .step.completed > .icon:before, +.play-button.ordered.steps .step.completed:before, +.download-button.steps .step.completed > .icon:before, +.download-button.ordered.steps .step.completed:before { + color: #3FC863; +} +/* Disabled */ +.ui.steps .disabled.step, +.play-button.steps .disabled.step, +.download-button.steps .disabled.step { + cursor: auto; + background: #FFFFFF; + pointer-events: none; +} +.ui.steps .disabled.step, +.ui.steps .disabled.step .title, +.ui.steps .disabled.step .description, +.play-button.steps .disabled.step, +.play-button.steps .disabled.step .title, +.play-button.steps .disabled.step .description, +.download-button.steps .disabled.step, +.download-button.steps .disabled.step .title, +.download-button.steps .disabled.step .description { + color: rgba(40, 40, 40, 0.3); +} +.ui.steps .disabled.step:after, +.play-button.steps .disabled.step:after, +.download-button.steps .disabled.step:after { + background: #FFFFFF; +} +/******************************* + Variations +*******************************/ +/*-------------- + Stackable +---------------*/ +/* Tablet Or Below */ +@media only screen and (max-width: 991px) { + .ui[class*="tablet stackable"].steps, + .play-button[class*="tablet stackable"].steps, + .download-button[class*="tablet stackable"].steps { + display: inline-flex; + overflow: visible; + flex-direction: column; + } + /* Steps */ + .ui[class*="tablet stackable"].steps .step, + .play-button[class*="tablet stackable"].steps .step, + .download-button[class*="tablet stackable"].steps .step { + flex-direction: column; + border-radius: 0em; + padding: 1.14285714em 2em; + } + .ui[class*="tablet stackable"].steps .step:first-child, + .play-button[class*="tablet stackable"].steps .step:first-child, + .download-button[class*="tablet stackable"].steps .step:first-child { + padding: 1.14285714em 2em; + border-radius: 0.28571429rem 0.28571429rem 0em 0em; + } + .ui[class*="tablet stackable"].steps .step:last-child, + .play-button[class*="tablet stackable"].steps .step:last-child, + .download-button[class*="tablet stackable"].steps .step:last-child { + border-radius: 0em 0em 0.28571429rem 0.28571429rem; + } + /* Arrow */ + .ui[class*="tablet stackable"].steps .step:after, + .play-button[class*="tablet stackable"].steps .step:after, + .download-button[class*="tablet stackable"].steps .step:after { + display: none !important; + } + /* Content */ + .ui[class*="tablet stackable"].steps .step .content, + .play-button[class*="tablet stackable"].steps .step .content, + .download-button[class*="tablet stackable"].steps .step .content { + text-align: center; + } + /* Icon */ + .ui[class*="tablet stackable"].steps .step > .icon, + .ui[class*="tablet stackable"].ordered.steps .step:before, + .play-button[class*="tablet stackable"].steps .step > .icon, + .play-button[class*="tablet stackable"].ordered.steps .step:before, + .download-button[class*="tablet stackable"].steps .step > .icon, + .download-button[class*="tablet stackable"].ordered.steps .step:before { + margin: 0em 0em 1rem 0em; + } +} +/*-------------- + Fluid +---------------*/ +/* Fluid */ +.ui.fluid.steps, +.play-button.fluid.steps, +.download-button.fluid.steps { + display: flex; + width: 100%; +} +/*-------------- + Attached +---------------*/ +/* Top */ +.ui.attached.steps, +.play-button.attached.steps, +.download-button.attached.steps { + width: calc(100% + 2px ) !important; + margin: 0em -1px 0; + max-width: calc(100% + 2px ); + border-radius: 0.28571429rem 0.28571429rem 0em 0em; +} +.ui.attached.steps .step:first-child, +.play-button.attached.steps .step:first-child, +.download-button.attached.steps .step:first-child { + border-radius: 0.28571429rem 0em 0em 0em; +} +.ui.attached.steps .step:last-child, +.play-button.attached.steps .step:last-child, +.download-button.attached.steps .step:last-child { + border-radius: 0em 0.28571429rem 0em 0em; +} +/* Bottom */ +.ui.bottom.attached.steps, +.play-button.bottom.attached.steps, +.download-button.bottom.attached.steps { + margin: 0 -1px 0em; + border-radius: 0em 0em 0.28571429rem 0.28571429rem; +} +.ui.bottom.attached.steps .step:first-child, +.play-button.bottom.attached.steps .step:first-child, +.download-button.bottom.attached.steps .step:first-child { + border-radius: 0em 0em 0em 0.28571429rem; +} +.ui.bottom.attached.steps .step:last-child, +.play-button.bottom.attached.steps .step:last-child, +.download-button.bottom.attached.steps .step:last-child { + border-radius: 0em 0em 0.28571429rem 0em; +} +/*------------------- + Evenly Divided +--------------------*/ +.ui.one.steps, +.ui.two.steps, +.ui.three.steps, +.ui.four.steps, +.ui.five.steps, +.ui.six.steps, +.ui.seven.steps, +.ui.eight.steps, +.play-button.one.steps, +.play-button.two.steps, +.play-button.three.steps, +.play-button.four.steps, +.play-button.five.steps, +.play-button.six.steps, +.play-button.seven.steps, +.play-button.eight.steps, +.download-button.one.steps, +.download-button.two.steps, +.download-button.three.steps, +.download-button.four.steps, +.download-button.five.steps, +.download-button.six.steps, +.download-button.seven.steps, +.download-button.eight.steps { + width: 100%; +} +.ui.one.steps > .step, +.ui.two.steps > .step, +.ui.three.steps > .step, +.ui.four.steps > .step, +.ui.five.steps > .step, +.ui.six.steps > .step, +.ui.seven.steps > .step, +.ui.eight.steps > .step, +.play-button.one.steps > .step, +.play-button.two.steps > .step, +.play-button.three.steps > .step, +.play-button.four.steps > .step, +.play-button.five.steps > .step, +.play-button.six.steps > .step, +.play-button.seven.steps > .step, +.play-button.eight.steps > .step, +.download-button.one.steps > .step, +.download-button.two.steps > .step, +.download-button.three.steps > .step, +.download-button.four.steps > .step, +.download-button.five.steps > .step, +.download-button.six.steps > .step, +.download-button.seven.steps > .step, +.download-button.eight.steps > .step { + flex-wrap: nowrap; +} +.ui.one.steps > .step, +.play-button.one.steps > .step, +.download-button.one.steps > .step { + width: 100%; +} +.ui.two.steps > .step, +.play-button.two.steps > .step, +.download-button.two.steps > .step { + width: 50%; +} +.ui.three.steps > .step, +.play-button.three.steps > .step, +.download-button.three.steps > .step { + width: 33.333%; +} +.ui.four.steps > .step, +.play-button.four.steps > .step, +.download-button.four.steps > .step { + width: 25%; +} +.ui.five.steps > .step, +.play-button.five.steps > .step, +.download-button.five.steps > .step { + width: 20%; +} +.ui.six.steps > .step, +.play-button.six.steps > .step, +.download-button.six.steps > .step { + width: 16.666%; +} +.ui.seven.steps > .step, +.play-button.seven.steps > .step, +.download-button.seven.steps > .step { + width: 14.285%; +} +.ui.eight.steps > .step, +.play-button.eight.steps > .step, +.download-button.eight.steps > .step { + width: 12.500%; +} +/*------------------- + Sizes +--------------------*/ +.ui.mini.steps .step, +.ui.mini.step, +.play-button.mini.steps .step, +.play-button.mini.step, +.download-button.mini.steps .step, +.download-button.mini.step { + font-size: 0.78571429rem; +} +.ui.tiny.steps .step, +.ui.tiny.step, +.play-button.tiny.steps .step, +.play-button.tiny.step, +.download-button.tiny.steps .step, +.download-button.tiny.step { + font-size: 0.85714286rem; +} +.ui.small.steps .step, +.ui.small.step, +.play-button.small.steps .step, +.play-button.small.step, +.download-button.small.steps .step, +.download-button.small.step { + font-size: 0.92857143rem; +} +.ui.steps .step, +.ui.step, +.play-button.steps .step, +.play-button.step, +.download-button.steps .step, +.download-button.step { + font-size: 1rem; +} +.ui.large.steps .step, +.ui.large.step, +.play-button.large.steps .step, +.play-button.large.step, +.download-button.large.steps .step, +.download-button.large.step { + font-size: 1.14285714rem; +} +.ui.big.steps .step, +.ui.big.step, +.play-button.big.steps .step, +.play-button.big.step, +.download-button.big.steps .step, +.download-button.big.step { + font-size: 1.28571429rem; +} +.ui.huge.steps .step, +.ui.huge.step, +.play-button.huge.steps .step, +.play-button.huge.step, +.download-button.huge.steps .step, +.download-button.huge.step { + font-size: 1.42857143rem; +} +.ui.massive.steps .step, +.ui.massive.step, +.play-button.massive.steps .step, +.play-button.massive.step, +.download-button.massive.steps .step, +.download-button.massive.step { + font-size: 1.71428571rem; +} +/******************************* + Site Overrides +*******************************/ +/******************************* + Site Overrides +*******************************/ +/* Collections */ +/*! + * # Semantic UI - Breadcrumb + * http://github.com/semantic-org/semantic-ui/ + * + * + * Released under the MIT license + * http://opensource.org/licenses/MIT + * + */ +/******************************* + Theme +*******************************/ +/* + +████████╗██╗ ██╗███████╗███╗ ███╗███████╗███████╗ +╚══██╔══╝██║ ██║██╔════╝████╗ ████║██╔════╝██╔════╝ + ██║ ███████║█████╗ ██╔████╔██║█████╗ ███████╗ + ██║ ██╔══██║██╔══╝ ██║╚██╔╝██║██╔══╝ ╚════██║ + ██║ ██║ ██║███████╗██║ ╚═╝ ██║███████╗███████║ + ╚═╝ ╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝╚══════╝╚══════╝ + +*/ +/******************************* + Theme Selection +*******************************/ +/* To override a theme for an individual element + specify theme name below +*/ +/* Global */ +/* Elements */ +/* Collections */ +/* Modules */ +/* Views */ +/******************************* + Folders +*******************************/ +/* Path to theme packages */ +/* Path to site override folder */ +/******************************* + Import Theme +*******************************/ +/******************************* + Import Directives +*******************************/ +/*------------------ + Theme +-------------------*/ +/*-------------------- + Site Variables +---------------------*/ +/* Default site.variables */ +/******************************* + Site Settings +*******************************/ +/*------------------- + Fonts +--------------------*/ +/*------------------- + Base Sizes +--------------------*/ +/* This is the single variable that controls them all */ +/* The size of page text */ +/*------------------- + Border Radius +--------------------*/ +/* See Power-user section below + for explanation of @px variables +*/ +/*------------------- + Brand Colors +--------------------*/ +/*-------------- + Page Heading +---------------*/ +/*-------------- + Form Input +---------------*/ +/* This adjusts the default form input across all elements */ +/* Input Text Color */ +/* Line Height Default For Inputs in Browser (Descendors are 17px at 14px base em) */ +/*------------------- + Focused Input +--------------------*/ +/* Used on inputs, textarea etc */ +/* Used on dropdowns, other larger blocks */ +/*------------------- + Sizes +--------------------*/ +/* + Sizes are all expressed in terms of 14px/em (default em) + This ensures these "ratios" remain constant despite changes in EM +*/ +/*------------------- + Page +--------------------*/ +/*------------------- + Paragraph +--------------------*/ +/*------------------- + Links +--------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ +/*------------------- + Highlighted Text +--------------------*/ +/*------------------- + Loader +--------------------*/ +/*------------------- + Grid +--------------------*/ +/*------------------- + Transitions +--------------------*/ +/*------------------- + Breakpoints +--------------------*/ +/*------------------- + Site Colors +--------------------*/ +/*--- Colors ---*/ +/*--- Light Colors ---*/ +/*--- Neutrals ---*/ +/*--- Colored Backgrounds ---*/ +/*--- Colored Headers ---*/ +/*--- Colored Text ---*/ +/*--- Colored Border ---*/ +/*------------------- + Alpha Colors +--------------------*/ +/*------------------- + Accents +--------------------*/ +/* Differentiating Neutrals */ +/* Differentiating Layers */ +/******************************* + Power-User +*******************************/ +/*------------------- + Emotive Colors +--------------------*/ +/* Positive */ +/* Negative */ +/* Info */ +/* Warning */ +/*------------------- + Paths +--------------------*/ +/* For source only. Modified in gulp for dist */ +/*------------------- + Em Sizes +--------------------*/ +/* + This rounds @size values to the closest pixel then expresses that value in (r)em. + This ensures all size values round to exact pixels +*/ +/* em */ +/* rem */ +/*------------------- + Icons +--------------------*/ +/* Maximum Glyph Width of Icon */ +/*------------------- + Neutral Text +--------------------*/ +/*------------------- + Brand Colors +--------------------*/ +/*------------------- + Borders +--------------------*/ +/*------------------- + Derived Values +--------------------*/ +/* Loaders Position Offset */ +/* Rendered Scrollbar Width */ +/* Maximum Single Character Glyph Width, aka Capital "W" */ +/* Used to match floats with text */ +/* Header Spacing */ +/* Minimum Mobile Width */ +/* Positive / Negative Dupes */ +/* Responsive */ +/*------------------- + Exact Pixel Values +--------------------*/ +/* + These are used to specify exact pixel values in em + for things like borders that remain constantly + sized as emSize adjusts + + Since there are many more sizes than names for sizes, + these are named by their original pixel values. + +*/ +/* Columns */ +/******************************* + States +*******************************/ +/*------------------- + Disabled +--------------------*/ +/*------------------- + Hover +--------------------*/ +/*--- Shadows ---*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Focus +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Down (:active) +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Active +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/* Packaged site.variables */ +/******************************* + User Global Variables +*******************************/ +/*------------------- + Fonts +--------------------*/ +/*------------------- + Breakpoints +--------------------*/ +/* +@mobileBreakpoint : unit( (63 * @emSize), px); +@tabletBreakpoint : unit( (79 * @emSize), px); +@computerBreakpoint : unit( (91 * @emSize), px); +@largeMonitorBreakpoint : unit( (99 * @emSize), px); +@widescreenMonitorBreakpoint : unit( (119 * @emSize), px); +*/ +/******************************* + PXT Variables +*******************************/ +/*------------------- + Menu +--------------------*/ +/*------------------- + Layout +--------------------*/ +/*------------------- + Background +--------------------*/ +/*------------------- + Full screen +--------------------*/ +/*------------------- + Side Docs +--------------------*/ +/*------------------- + Editor +--------------------*/ +/* Component's site.variables */ +/******************************* + Site Settings +*******************************/ +/*------------------- + Fonts +--------------------*/ +/*------------------- + Base Sizes +--------------------*/ +/* This is the single variable that controls them all */ +/* The size of page text */ +/*------------------- + Border Radius +--------------------*/ +/* See Power-user section below + for explanation of @px variables +*/ +/*------------------- + Brand Colors +--------------------*/ +/*-------------- + Page Heading +---------------*/ +/*-------------- + Form Input +---------------*/ +/* This adjusts the default form input across all elements */ +/* Input Text Color */ +/* Line Height Default For Inputs in Browser (Descendors are 17px at 14px base em) */ +/*------------------- + Focused Input +--------------------*/ +/* Used on inputs, textarea etc */ +/* Used on dropdowns, other larger blocks */ +/*------------------- + Sizes +--------------------*/ +/* + Sizes are all expressed in terms of 14px/em (default em) + This ensures these "ratios" remain constant despite changes in EM +*/ +/*------------------- + Page +--------------------*/ +/*------------------- + Paragraph +--------------------*/ +/*------------------- + Links +--------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ +/*------------------- + Highlighted Text +--------------------*/ +/*------------------- + Loader +--------------------*/ +/*------------------- + Grid +--------------------*/ +/*------------------- + Transitions +--------------------*/ +/*------------------- + Breakpoints +--------------------*/ +/*------------------- + Site Colors +--------------------*/ +/*--- Colors ---*/ +/*--- Light Colors ---*/ +/*--- Neutrals ---*/ +/*--- Colored Backgrounds ---*/ +/*--- Colored Headers ---*/ +/*--- Colored Text ---*/ +/*--- Colored Border ---*/ +/*------------------- + Alpha Colors +--------------------*/ +/*------------------- + Accents +--------------------*/ +/* Differentiating Neutrals */ +/* Differentiating Layers */ +/******************************* + Power-User +*******************************/ +/*------------------- + Emotive Colors +--------------------*/ +/* Positive */ +/* Negative */ +/* Info */ +/* Warning */ +/*------------------- + Paths +--------------------*/ +/* For source only. Modified in gulp for dist */ +/*------------------- + Em Sizes +--------------------*/ +/* + This rounds @size values to the closest pixel then expresses that value in (r)em. + This ensures all size values round to exact pixels +*/ +/* em */ +/* rem */ +/*------------------- + Icons +--------------------*/ +/* Maximum Glyph Width of Icon */ +/*------------------- + Neutral Text +--------------------*/ +/*------------------- + Brand Colors +--------------------*/ +/*------------------- + Borders +--------------------*/ +/*------------------- + Derived Values +--------------------*/ +/* Loaders Position Offset */ +/* Rendered Scrollbar Width */ +/* Maximum Single Character Glyph Width, aka Capital "W" */ +/* Used to match floats with text */ +/* Header Spacing */ +/* Minimum Mobile Width */ +/* Positive / Negative Dupes */ +/* Responsive */ +/*------------------- + Exact Pixel Values +--------------------*/ +/* + These are used to specify exact pixel values in em + for things like borders that remain constantly + sized as emSize adjusts + + Since there are many more sizes than names for sizes, + these are named by their original pixel values. + +*/ +/* Columns */ +/******************************* + States +*******************************/ +/*------------------- + Disabled +--------------------*/ +/*------------------- + Hover +--------------------*/ +/*--- Shadows ---*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Focus +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Down (:active) +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Active +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/* Site theme site.variables */ +/******************************* + User Global Variables +*******************************/ +/*------------------- + Site Colors +--------------------*/ +/******************************* + PXT Overrides +*******************************/ +/*------------------- + Component Variables +---------------------*/ +/* Default */ +/******************************* + Breadcrumb +*******************************/ +/*------------------- + Breadcrumb +--------------------*/ +/* Coupling */ +/*------------------- + States +--------------------*/ +/* Packaged Theme */ +/******************************* + Breadcrumb +*******************************/ +/*------------------- + Breadcrumb +--------------------*/ +/* Coupling */ +/*------------------- + States +--------------------*/ +/* Site Theme */ +/******************************* + Site Overrides +*******************************/ +/******************************* + Mix-ins +*******************************/ +/*------------------ + Fonts +-------------------*/ +/*------------------ + Overrides +-------------------*/ +/* End Config */ +/******************************* + Breadcrumb +*******************************/ +.ui.breadcrumb, +.play-button.breadcrumb, +.download-button.breadcrumb { + line-height: 1; + display: inline-block; + margin: 0em 0em; + vertical-align: middle; +} +.ui.breadcrumb:first-child, +.play-button.breadcrumb:first-child, +.download-button.breadcrumb:first-child { + margin-top: 0em; +} +.ui.breadcrumb:last-child, +.play-button.breadcrumb:last-child, +.download-button.breadcrumb:last-child { + margin-bottom: 0em; +} +/******************************* + Content +*******************************/ +/* Divider */ +.ui.breadcrumb .divider, +.play-button.breadcrumb .divider, +.download-button.breadcrumb .divider { + display: inline-block; + opacity: 0.7; + margin: 0em 0.21428571rem 0em; + font-size: 0.92857143em; + color: rgba(0, 0, 0, 0.4); + vertical-align: baseline; +} +/* Link */ +.ui.breadcrumb a, +.play-button.breadcrumb a, +.download-button.breadcrumb a { + color: #4183C4; +} +.ui.breadcrumb a:hover, +.play-button.breadcrumb a:hover, +.download-button.breadcrumb a:hover { + color: #1e70bf; +} +/* Icon Divider */ +.ui.breadcrumb .icon.divider, +.play-button.breadcrumb .icon.divider, +.download-button.breadcrumb .icon.divider { + font-size: 0.85714286em; + vertical-align: baseline; +} +/* Section */ +.ui.breadcrumb a.section, +.play-button.breadcrumb a.section, +.download-button.breadcrumb a.section { + cursor: pointer; +} +.ui.breadcrumb .section, +.play-button.breadcrumb .section, +.download-button.breadcrumb .section { + display: inline-block; + margin: 0em; + padding: 0em; +} +/* Loose Coupling */ +.ui.breadcrumb.segment, +.play-button.breadcrumb.segment, +.download-button.breadcrumb.segment { + display: inline-block; + padding: 0.78571429em 1em; +} +/******************************* + States +*******************************/ +.ui.breadcrumb .active.section, +.play-button.breadcrumb .active.section, +.download-button.breadcrumb .active.section { + font-weight: bold; +} +/******************************* + Variations +*******************************/ +.ui.mini.breadcrumb, +.play-button.mini.breadcrumb, +.download-button.mini.breadcrumb { + font-size: 0.78571429rem; +} +.ui.tiny.breadcrumb, +.play-button.tiny.breadcrumb, +.download-button.tiny.breadcrumb { + font-size: 0.85714286rem; +} +.ui.small.breadcrumb, +.play-button.small.breadcrumb, +.download-button.small.breadcrumb { + font-size: 0.92857143rem; +} +.ui.breadcrumb, +.play-button.breadcrumb, +.download-button.breadcrumb { + font-size: 1rem; +} +.ui.large.breadcrumb, +.play-button.large.breadcrumb, +.download-button.large.breadcrumb { + font-size: 1.14285714rem; +} +.ui.big.breadcrumb, +.play-button.big.breadcrumb, +.download-button.big.breadcrumb { + font-size: 1.28571429rem; +} +.ui.huge.breadcrumb, +.play-button.huge.breadcrumb, +.download-button.huge.breadcrumb { + font-size: 1.42857143rem; +} +.ui.massive.breadcrumb, +.play-button.massive.breadcrumb, +.download-button.massive.breadcrumb { + font-size: 1.71428571rem; +} +/******************************* + Theme Overrides +*******************************/ +/******************************* + Site Overrides +*******************************/ +/*! + * # Semantic UI - Form + * http://github.com/semantic-org/semantic-ui/ + * + * + * Released under the MIT license + * http://opensource.org/licenses/MIT + * + */ +/******************************* + Theme +*******************************/ +/* + +████████╗██╗ ██╗███████╗███╗ ███╗███████╗███████╗ +╚══██╔══╝██║ ██║██╔════╝████╗ ████║██╔════╝██╔════╝ + ██║ ███████║█████╗ ██╔████╔██║█████╗ ███████╗ + ██║ ██╔══██║██╔══╝ ██║╚██╔╝██║██╔══╝ ╚════██║ + ██║ ██║ ██║███████╗██║ ╚═╝ ██║███████╗███████║ + ╚═╝ ╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝╚══════╝╚══════╝ + +*/ +/******************************* + Theme Selection +*******************************/ +/* To override a theme for an individual element + specify theme name below +*/ +/* Global */ +/* Elements */ +/* Collections */ +/* Modules */ +/* Views */ +/******************************* + Folders +*******************************/ +/* Path to theme packages */ +/* Path to site override folder */ +/******************************* + Import Theme +*******************************/ +/******************************* + Import Directives +*******************************/ +/*------------------ + Theme +-------------------*/ +/*-------------------- + Site Variables +---------------------*/ +/* Default site.variables */ +/******************************* + Site Settings +*******************************/ +/*------------------- + Fonts +--------------------*/ +/*------------------- + Base Sizes +--------------------*/ +/* This is the single variable that controls them all */ +/* The size of page text */ +/*------------------- + Border Radius +--------------------*/ +/* See Power-user section below + for explanation of @px variables +*/ +/*------------------- + Brand Colors +--------------------*/ +/*-------------- + Page Heading +---------------*/ +/*-------------- + Form Input +---------------*/ +/* This adjusts the default form input across all elements */ +/* Input Text Color */ +/* Line Height Default For Inputs in Browser (Descendors are 17px at 14px base em) */ +/*------------------- + Focused Input +--------------------*/ +/* Used on inputs, textarea etc */ +/* Used on dropdowns, other larger blocks */ +/*------------------- + Sizes +--------------------*/ +/* + Sizes are all expressed in terms of 14px/em (default em) + This ensures these "ratios" remain constant despite changes in EM +*/ +/*------------------- + Page +--------------------*/ +/*------------------- + Paragraph +--------------------*/ +/*------------------- + Links +--------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ +/*------------------- + Highlighted Text +--------------------*/ +/*------------------- + Loader +--------------------*/ +/*------------------- + Grid +--------------------*/ +/*------------------- + Transitions +--------------------*/ +/*------------------- + Breakpoints +--------------------*/ +/*------------------- + Site Colors +--------------------*/ +/*--- Colors ---*/ +/*--- Light Colors ---*/ +/*--- Neutrals ---*/ +/*--- Colored Backgrounds ---*/ +/*--- Colored Headers ---*/ +/*--- Colored Text ---*/ +/*--- Colored Border ---*/ +/*------------------- + Alpha Colors +--------------------*/ +/*------------------- + Accents +--------------------*/ +/* Differentiating Neutrals */ +/* Differentiating Layers */ +/******************************* + Power-User +*******************************/ +/*------------------- + Emotive Colors +--------------------*/ +/* Positive */ +/* Negative */ +/* Info */ +/* Warning */ +/*------------------- + Paths +--------------------*/ +/* For source only. Modified in gulp for dist */ +/*------------------- + Em Sizes +--------------------*/ +/* + This rounds @size values to the closest pixel then expresses that value in (r)em. + This ensures all size values round to exact pixels +*/ +/* em */ +/* rem */ +/*------------------- + Icons +--------------------*/ +/* Maximum Glyph Width of Icon */ +/*------------------- + Neutral Text +--------------------*/ +/*------------------- + Brand Colors +--------------------*/ +/*------------------- + Borders +--------------------*/ +/*------------------- + Derived Values +--------------------*/ +/* Loaders Position Offset */ +/* Rendered Scrollbar Width */ +/* Maximum Single Character Glyph Width, aka Capital "W" */ +/* Used to match floats with text */ +/* Header Spacing */ +/* Minimum Mobile Width */ +/* Positive / Negative Dupes */ +/* Responsive */ +/*------------------- + Exact Pixel Values +--------------------*/ +/* + These are used to specify exact pixel values in em + for things like borders that remain constantly + sized as emSize adjusts + + Since there are many more sizes than names for sizes, + these are named by their original pixel values. + +*/ +/* Columns */ +/******************************* + States +*******************************/ +/*------------------- + Disabled +--------------------*/ +/*------------------- + Hover +--------------------*/ +/*--- Shadows ---*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Focus +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Down (:active) +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Active +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/* Packaged site.variables */ +/******************************* + User Global Variables +*******************************/ +/*------------------- + Fonts +--------------------*/ +/*------------------- + Breakpoints +--------------------*/ +/* +@mobileBreakpoint : unit( (63 * @emSize), px); +@tabletBreakpoint : unit( (79 * @emSize), px); +@computerBreakpoint : unit( (91 * @emSize), px); +@largeMonitorBreakpoint : unit( (99 * @emSize), px); +@widescreenMonitorBreakpoint : unit( (119 * @emSize), px); +*/ +/******************************* + PXT Variables +*******************************/ +/*------------------- + Menu +--------------------*/ +/*------------------- + Layout +--------------------*/ +/*------------------- + Background +--------------------*/ +/*------------------- + Full screen +--------------------*/ +/*------------------- + Side Docs +--------------------*/ +/*------------------- + Editor +--------------------*/ +/* Component's site.variables */ +/******************************* + Site Settings +*******************************/ +/*------------------- + Fonts +--------------------*/ +/*------------------- + Base Sizes +--------------------*/ +/* This is the single variable that controls them all */ +/* The size of page text */ +/*------------------- + Border Radius +--------------------*/ +/* See Power-user section below + for explanation of @px variables +*/ +/*------------------- + Brand Colors +--------------------*/ +/*-------------- + Page Heading +---------------*/ +/*-------------- + Form Input +---------------*/ +/* This adjusts the default form input across all elements */ +/* Input Text Color */ +/* Line Height Default For Inputs in Browser (Descendors are 17px at 14px base em) */ +/*------------------- + Focused Input +--------------------*/ +/* Used on inputs, textarea etc */ +/* Used on dropdowns, other larger blocks */ +/*------------------- + Sizes +--------------------*/ +/* + Sizes are all expressed in terms of 14px/em (default em) + This ensures these "ratios" remain constant despite changes in EM +*/ +/*------------------- + Page +--------------------*/ +/*------------------- + Paragraph +--------------------*/ +/*------------------- + Links +--------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ +/*------------------- + Highlighted Text +--------------------*/ +/*------------------- + Loader +--------------------*/ +/*------------------- + Grid +--------------------*/ +/*------------------- + Transitions +--------------------*/ +/*------------------- + Breakpoints +--------------------*/ +/*------------------- + Site Colors +--------------------*/ +/*--- Colors ---*/ +/*--- Light Colors ---*/ +/*--- Neutrals ---*/ +/*--- Colored Backgrounds ---*/ +/*--- Colored Headers ---*/ +/*--- Colored Text ---*/ +/*--- Colored Border ---*/ +/*------------------- + Alpha Colors +--------------------*/ +/*------------------- + Accents +--------------------*/ +/* Differentiating Neutrals */ +/* Differentiating Layers */ +/******************************* + Power-User +*******************************/ +/*------------------- + Emotive Colors +--------------------*/ +/* Positive */ +/* Negative */ +/* Info */ +/* Warning */ +/*------------------- + Paths +--------------------*/ +/* For source only. Modified in gulp for dist */ +/*------------------- + Em Sizes +--------------------*/ +/* + This rounds @size values to the closest pixel then expresses that value in (r)em. + This ensures all size values round to exact pixels +*/ +/* em */ +/* rem */ +/*------------------- + Icons +--------------------*/ +/* Maximum Glyph Width of Icon */ +/*------------------- + Neutral Text +--------------------*/ +/*------------------- + Brand Colors +--------------------*/ +/*------------------- + Borders +--------------------*/ +/*------------------- + Derived Values +--------------------*/ +/* Loaders Position Offset */ +/* Rendered Scrollbar Width */ +/* Maximum Single Character Glyph Width, aka Capital "W" */ +/* Used to match floats with text */ +/* Header Spacing */ +/* Minimum Mobile Width */ +/* Positive / Negative Dupes */ +/* Responsive */ +/*------------------- + Exact Pixel Values +--------------------*/ +/* + These are used to specify exact pixel values in em + for things like borders that remain constantly + sized as emSize adjusts + + Since there are many more sizes than names for sizes, + these are named by their original pixel values. + +*/ +/* Columns */ +/******************************* + States +*******************************/ +/*------------------- + Disabled +--------------------*/ +/*------------------- + Hover +--------------------*/ +/*--- Shadows ---*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Focus +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Down (:active) +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Active +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/* Site theme site.variables */ +/******************************* + User Global Variables +*******************************/ +/*------------------- + Site Colors +--------------------*/ +/******************************* + PXT Overrides +*******************************/ +/*------------------- + Component Variables +---------------------*/ +/* Default */ +/******************************* + Form +*******************************/ +/*------------------- + Elements +--------------------*/ +/* Form */ +/* Text */ +/* Field */ +/* Fields */ +/* Form Label */ +/* Input */ +/* Select */ +/* Text Area */ +/* Checkbox */ +/* Inline Validation Prompt */ +/*------------------- + States +--------------------*/ +/* Focus */ +/* Input Focus */ +/* Text Area Focus */ +/* Disabled */ +/* Errored Input */ +/* AutoFill */ +/* Input Error */ +/* Dropdown Error */ +/* Focused Error */ +/* Placeholder Error */ +/* Loading Dimmer */ +/* Loading Spinner */ +/*------------------- + Types +--------------------*/ +/* Required */ +/* Inverted */ +/*------------------- + Variations +--------------------*/ +/* Grouped Fields */ +/* Inline */ +/*------------------- + Groups +--------------------*/ +/* Packaged Theme */ +/******************************* + Form +*******************************/ +/*------------------- + Elements +--------------------*/ +/* Form */ +/* Text */ +/* Field */ +/* Fields */ +/* Form Label */ +/* Input */ +/* Select */ +/* Text Area */ +/* Checkbox */ +/* Inline Validation Prompt */ +/*------------------- + States +--------------------*/ +/* Focus */ +/* Input Focus */ +/* Text Area Focus */ +/* Disabled */ +/* Errored Input */ +/* AutoFill */ +/* Input Error */ +/* Dropdown Error */ +/* Focused Error */ +/* Placeholder Error */ +/* Loading Dimmer */ +/* Loading Spinner */ +/*------------------- + Types +--------------------*/ +/* Required */ +/* Inverted */ +/*------------------- + Variations +--------------------*/ +/* Grouped Fields */ +/* Inline */ +/*------------------- + Groups +--------------------*/ +/* Site Theme */ +/******************************* + User Variable Overrides +*******************************/ +/******************************* + Mix-ins +*******************************/ +/*------------------ + Fonts +-------------------*/ +/*------------------ + Overrides +-------------------*/ +/* End Config */ +/******************************* + Elements +*******************************/ +/*-------------------- + Form +---------------------*/ +.ui.form, +.play-button.form, +.download-button.form { + position: relative; + max-width: 100%; +} +/*-------------------- + Content +---------------------*/ +.ui.form > p, +.play-button.form > p, +.download-button.form > p { + margin: 1em 0em; +} +/*-------------------- + Field +---------------------*/ +.ui.form .field, +.play-button.form .field, +.download-button.form .field { + clear: both; + margin: 0em 0em 1em; +} +.ui.form .field:last-child, +.ui.form .fields:last-child .field, +.play-button.form .field:last-child, +.play-button.form .fields:last-child .field, +.download-button.form .field:last-child, +.download-button.form .fields:last-child .field { + margin-bottom: 0em; +} +.ui.form .fields .field, +.play-button.form .fields .field, +.download-button.form .fields .field { + clear: both; + margin: 0em; +} +/*-------------------- + Labels +---------------------*/ +.ui.form .field > label, +.play-button.form .field > label, +.download-button.form .field > label { + display: block; + margin: 0em 0em 0.28571429rem 0em; + color: rgba(0, 0, 0, 0.87); + font-size: 0.92857143em; + font-weight: bold; + text-transform: none; +} +/*-------------------- + Standard Inputs +---------------------*/ +.ui.form textarea, +.ui.form input:not([type]), +.ui.form input[type="date"], +.ui.form input[type="datetime-local"], +.ui.form input[type="email"], +.ui.form input[type="number"], +.ui.form input[type="password"], +.ui.form input[type="search"], +.ui.form input[type="tel"], +.ui.form input[type="time"], +.ui.form input[type="text"], +.ui.form input[type="file"], +.ui.form input[type="url"], +.play-button.form textarea, +.play-button.form input:not([type]), +.play-button.form input[type="date"], +.play-button.form input[type="datetime-local"], +.play-button.form input[type="email"], +.play-button.form input[type="number"], +.play-button.form input[type="password"], +.play-button.form input[type="search"], +.play-button.form input[type="tel"], +.play-button.form input[type="time"], +.play-button.form input[type="text"], +.play-button.form input[type="file"], +.play-button.form input[type="url"], +.download-button.form textarea, +.download-button.form input:not([type]), +.download-button.form input[type="date"], +.download-button.form input[type="datetime-local"], +.download-button.form input[type="email"], +.download-button.form input[type="number"], +.download-button.form input[type="password"], +.download-button.form input[type="search"], +.download-button.form input[type="tel"], +.download-button.form input[type="time"], +.download-button.form input[type="text"], +.download-button.form input[type="file"], +.download-button.form input[type="url"] { + width: 100%; + vertical-align: top; +} +/* Set max height on unusual input */ +.ui.form ::-webkit-datetime-edit, +.ui.form ::-webkit-inner-spin-button, +.play-button.form ::-webkit-datetime-edit, +.play-button.form ::-webkit-inner-spin-button, +.download-button.form ::-webkit-datetime-edit, +.download-button.form ::-webkit-inner-spin-button { + height: 1.21428571em; +} +.ui.form input:not([type]), +.ui.form input[type="date"], +.ui.form input[type="datetime-local"], +.ui.form input[type="email"], +.ui.form input[type="number"], +.ui.form input[type="password"], +.ui.form input[type="search"], +.ui.form input[type="tel"], +.ui.form input[type="time"], +.ui.form input[type="text"], +.ui.form input[type="file"], +.ui.form input[type="url"], +.play-button.form input:not([type]), +.play-button.form input[type="date"], +.play-button.form input[type="datetime-local"], +.play-button.form input[type="email"], +.play-button.form input[type="number"], +.play-button.form input[type="password"], +.play-button.form input[type="search"], +.play-button.form input[type="tel"], +.play-button.form input[type="time"], +.play-button.form input[type="text"], +.play-button.form input[type="file"], +.play-button.form input[type="url"], +.download-button.form input:not([type]), +.download-button.form input[type="date"], +.download-button.form input[type="datetime-local"], +.download-button.form input[type="email"], +.download-button.form input[type="number"], +.download-button.form input[type="password"], +.download-button.form input[type="search"], +.download-button.form input[type="tel"], +.download-button.form input[type="time"], +.download-button.form input[type="text"], +.download-button.form input[type="file"], +.download-button.form input[type="url"] { + font-family: 'Roboto Mono', 'Helvetica Neue', Arial, Helvetica, sans-serif; + margin: 0em; + outline: none; + -webkit-appearance: none; + tap-highlight-color: rgba(255, 255, 255, 0); + line-height: 1.21428571em; + padding: 0.67857143em 1em; + font-size: 1em; + background: #FFFFFF; + border: 1px solid rgba(34, 36, 38, 0.15); + color: rgba(0, 0, 0, 0.87); + border-radius: 0.28571429rem; + box-shadow: 0em 0em 0em 0em transparent inset; + transition: color 0.1s ease, border-color 0.1s ease; +} +/* Text Area */ +.ui.form textarea, +.play-button.form textarea, +.download-button.form textarea { + margin: 0em; + -webkit-appearance: none; + tap-highlight-color: rgba(255, 255, 255, 0); + padding: 0.78571429em 1em; + background: #FFFFFF; + border: 1px solid rgba(34, 36, 38, 0.15); + outline: none; + color: rgba(0, 0, 0, 0.87); + border-radius: 0.28571429rem; + box-shadow: 0em 0em 0em 0em transparent inset; + transition: color 0.1s ease, border-color 0.1s ease; + font-size: 1em; + line-height: 1.2857; + resize: vertical; +} +.ui.form textarea:not([rows]), +.play-button.form textarea:not([rows]), +.download-button.form textarea:not([rows]) { + height: 12em; + min-height: 8em; + max-height: 24em; +} +.ui.form textarea, +.ui.form input[type="checkbox"], +.play-button.form textarea, +.play-button.form input[type="checkbox"], +.download-button.form textarea, +.download-button.form input[type="checkbox"] { + vertical-align: top; +} +/*-------------------------- + Input w/ attached Button +---------------------------*/ +.ui.form input.attached, +.play-button.form input.attached, +.download-button.form input.attached { + width: auto; +} +/*-------------------- + Basic Select +---------------------*/ +.ui.form select, +.play-button.form select, +.download-button.form select { + display: block; + height: auto; + width: 100%; + background: #FFFFFF; + border: 1px solid rgba(34, 36, 38, 0.15); + border-radius: 0.28571429rem; + box-shadow: 0em 0em 0em 0em transparent inset; + padding: 0.62em 1em; + color: rgba(0, 0, 0, 0.87); + transition: color 0.1s ease, border-color 0.1s ease; +} +/*-------------------- + Dropdown +---------------------*/ +/* Block */ +.ui.form .field > .selection.dropdown, +.play-button.form .field > .selection.dropdown, +.download-button.form .field > .selection.dropdown { + width: 100%; +} +.ui.form .field > .selection.dropdown > .dropdown.icon, +.play-button.form .field > .selection.dropdown > .dropdown.icon, +.download-button.form .field > .selection.dropdown > .dropdown.icon { + float: right; +} +/* Inline */ +.ui.form .inline.fields .field > .selection.dropdown, +.ui.form .inline.field > .selection.dropdown, +.play-button.form .inline.fields .field > .selection.dropdown, +.play-button.form .inline.field > .selection.dropdown, +.download-button.form .inline.fields .field > .selection.dropdown, +.download-button.form .inline.field > .selection.dropdown { + width: auto; +} +.ui.form .inline.fields .field > .selection.dropdown > .dropdown.icon, +.ui.form .inline.field > .selection.dropdown > .dropdown.icon, +.play-button.form .inline.fields .field > .selection.dropdown > .dropdown.icon, +.play-button.form .inline.field > .selection.dropdown > .dropdown.icon, +.download-button.form .inline.fields .field > .selection.dropdown > .dropdown.icon, +.download-button.form .inline.field > .selection.dropdown > .dropdown.icon { + float: none; +} +/*-------------------- + UI Input +---------------------*/ +/* Block */ +.ui.form .field .ui.input, +.ui.form .fields .field .ui.input, +.ui.form .wide.field .ui.input, +.play-button.form .field .play-button.input, +.play-button.form .fields .field .play-button.input, +.play-button.form .wide.field .play-button.input, +.download-button.form .field .download-button.input, +.download-button.form .fields .field .download-button.input, +.download-button.form .wide.field .download-button.input { + width: 100%; +} +/* Inline */ +.ui.form .inline.fields .field:not(.wide) .ui.input, +.ui.form .inline.field:not(.wide) .ui.input, +.play-button.form .inline.fields .field:not(.wide) .play-button.input, +.play-button.form .inline.field:not(.wide) .play-button.input, +.download-button.form .inline.fields .field:not(.wide) .download-button.input, +.download-button.form .inline.field:not(.wide) .download-button.input { + width: auto; + vertical-align: middle; +} +/* Auto Input */ +.ui.form .fields .field .ui.input input, +.ui.form .field .ui.input input, +.play-button.form .fields .field .play-button.input input, +.play-button.form .field .play-button.input input, +.download-button.form .fields .field .download-button.input input, +.download-button.form .field .download-button.input input { + width: auto; +} +/* Full Width Input */ +.ui.form .ten.fields .ui.input input, +.ui.form .nine.fields .ui.input input, +.ui.form .eight.fields .ui.input input, +.ui.form .seven.fields .ui.input input, +.ui.form .six.fields .ui.input input, +.ui.form .five.fields .ui.input input, +.ui.form .four.fields .ui.input input, +.ui.form .three.fields .ui.input input, +.ui.form .two.fields .ui.input input, +.ui.form .wide.field .ui.input input, +.play-button.form .ten.fields .play-button.input input, +.play-button.form .nine.fields .play-button.input input, +.play-button.form .eight.fields .play-button.input input, +.play-button.form .seven.fields .play-button.input input, +.play-button.form .six.fields .play-button.input input, +.play-button.form .five.fields .play-button.input input, +.play-button.form .four.fields .play-button.input input, +.play-button.form .three.fields .play-button.input input, +.play-button.form .two.fields .play-button.input input, +.play-button.form .wide.field .play-button.input input, +.download-button.form .ten.fields .download-button.input input, +.download-button.form .nine.fields .download-button.input input, +.download-button.form .eight.fields .download-button.input input, +.download-button.form .seven.fields .download-button.input input, +.download-button.form .six.fields .download-button.input input, +.download-button.form .five.fields .download-button.input input, +.download-button.form .four.fields .download-button.input input, +.download-button.form .three.fields .download-button.input input, +.download-button.form .two.fields .download-button.input input, +.download-button.form .wide.field .download-button.input input { + flex: 1 0 auto; + width: 0px; +} +/*-------------------- + Types of Messages +---------------------*/ +.ui.form .success.message, +.ui.form .warning.message, +.ui.form .error.message, +.play-button.form .success.message, +.play-button.form .warning.message, +.play-button.form .error.message, +.download-button.form .success.message, +.download-button.form .warning.message, +.download-button.form .error.message { + display: none; +} +/* Assumptions */ +.ui.form .message:first-child, +.play-button.form .message:first-child, +.download-button.form .message:first-child { + margin-top: 0px; +} +/*-------------------- + Validation Prompt +---------------------*/ +.ui.form .field .prompt.label, +.play-button.form .field .prompt.label, +.download-button.form .field .prompt.label { + white-space: normal; + background: #FFFFFF !important; + border: 1px solid #E0B4B4 !important; + color: #9F3A38 !important; +} +.ui.form .inline.fields .field .prompt, +.ui.form .inline.field .prompt, +.play-button.form .inline.fields .field .prompt, +.play-button.form .inline.field .prompt, +.download-button.form .inline.fields .field .prompt, +.download-button.form .inline.field .prompt { + vertical-align: top; + margin: -0.25em 0em -0.5em 0.5em; +} +.ui.form .inline.fields .field .prompt:before, +.ui.form .inline.field .prompt:before, +.play-button.form .inline.fields .field .prompt:before, +.play-button.form .inline.field .prompt:before, +.download-button.form .inline.fields .field .prompt:before, +.download-button.form .inline.field .prompt:before { + border-width: 0px 0px 1px 1px; + bottom: auto; + right: auto; + top: 50%; + left: 0em; +} +/******************************* + States +*******************************/ +/*-------------------- + Autofilled +---------------------*/ +.ui.form .field.field input:-webkit-autofill, +.play-button.form .field.field input:-webkit-autofill, +.download-button.form .field.field input:-webkit-autofill { + box-shadow: 0px 0px 0px 100px #FFFFF0 inset !important; + border-color: #E5DFA1 !important; +} +/* Focus */ +.ui.form .field.field input:-webkit-autofill:focus, +.play-button.form .field.field input:-webkit-autofill:focus, +.download-button.form .field.field input:-webkit-autofill:focus { + box-shadow: 0px 0px 0px 100px #FFFFF0 inset !important; + border-color: #D5C315 !important; +} +/* Error */ +.ui.form .error.error input:-webkit-autofill, +.play-button.form .error.error input:-webkit-autofill, +.download-button.form .error.error input:-webkit-autofill { + box-shadow: 0px 0px 0px 100px #FFFAF0 inset !important; + border-color: #E0B4B4 !important; +} +/*-------------------- + Placeholder +---------------------*/ +/* browsers require these rules separate */ +.ui.form ::-webkit-input-placeholder, +.play-button.form ::-webkit-input-placeholder, +.download-button.form ::-webkit-input-placeholder { + color: rgba(191, 191, 191, 0.87); +} +.ui.form :-ms-input-placeholder, +.play-button.form :-ms-input-placeholder, +.download-button.form :-ms-input-placeholder { + color: rgba(191, 191, 191, 0.87); +} +.ui.form ::-moz-placeholder, +.play-button.form ::-moz-placeholder, +.download-button.form ::-moz-placeholder { + color: rgba(191, 191, 191, 0.87); +} +.ui.form :focus::-webkit-input-placeholder, +.play-button.form :focus::-webkit-input-placeholder, +.download-button.form :focus::-webkit-input-placeholder { + color: rgba(115, 115, 115, 0.87); +} +.ui.form :focus:-ms-input-placeholder, +.play-button.form :focus:-ms-input-placeholder, +.download-button.form :focus:-ms-input-placeholder { + color: rgba(115, 115, 115, 0.87); +} +.ui.form :focus::-moz-placeholder, +.play-button.form :focus::-moz-placeholder, +.download-button.form :focus::-moz-placeholder { + color: rgba(115, 115, 115, 0.87); +} +/* Error Placeholder */ +.ui.form .error ::-webkit-input-placeholder, +.play-button.form .error ::-webkit-input-placeholder, +.download-button.form .error ::-webkit-input-placeholder { + color: #e7bdbc; +} +.ui.form .error :-ms-input-placeholder, +.play-button.form .error :-ms-input-placeholder, +.download-button.form .error :-ms-input-placeholder { + color: #e7bdbc !important; +} +.ui.form .error ::-moz-placeholder, +.play-button.form .error ::-moz-placeholder, +.download-button.form .error ::-moz-placeholder { + color: #e7bdbc; +} +.ui.form .error :focus::-webkit-input-placeholder, +.play-button.form .error :focus::-webkit-input-placeholder, +.download-button.form .error :focus::-webkit-input-placeholder { + color: #da9796; +} +.ui.form .error :focus:-ms-input-placeholder, +.play-button.form .error :focus:-ms-input-placeholder, +.download-button.form .error :focus:-ms-input-placeholder { + color: #da9796 !important; +} +.ui.form .error :focus::-moz-placeholder, +.play-button.form .error :focus::-moz-placeholder, +.download-button.form .error :focus::-moz-placeholder { + color: #da9796; +} +/*-------------------- + Focus +---------------------*/ +.ui.form input:not([type]):focus, +.ui.form input[type="date"]:focus, +.ui.form input[type="datetime-local"]:focus, +.ui.form input[type="email"]:focus, +.ui.form input[type="number"]:focus, +.ui.form input[type="password"]:focus, +.ui.form input[type="search"]:focus, +.ui.form input[type="tel"]:focus, +.ui.form input[type="time"]:focus, +.ui.form input[type="text"]:focus, +.ui.form input[type="file"]:focus, +.ui.form input[type="url"]:focus, +.play-button.form input:not([type]):focus, +.play-button.form input[type="date"]:focus, +.play-button.form input[type="datetime-local"]:focus, +.play-button.form input[type="email"]:focus, +.play-button.form input[type="number"]:focus, +.play-button.form input[type="password"]:focus, +.play-button.form input[type="search"]:focus, +.play-button.form input[type="tel"]:focus, +.play-button.form input[type="time"]:focus, +.play-button.form input[type="text"]:focus, +.play-button.form input[type="file"]:focus, +.play-button.form input[type="url"]:focus, +.download-button.form input:not([type]):focus, +.download-button.form input[type="date"]:focus, +.download-button.form input[type="datetime-local"]:focus, +.download-button.form input[type="email"]:focus, +.download-button.form input[type="number"]:focus, +.download-button.form input[type="password"]:focus, +.download-button.form input[type="search"]:focus, +.download-button.form input[type="tel"]:focus, +.download-button.form input[type="time"]:focus, +.download-button.form input[type="text"]:focus, +.download-button.form input[type="file"]:focus, +.download-button.form input[type="url"]:focus { + color: rgba(0, 0, 0, 0.95); + border-color: #85B7D9; + border-radius: 0.28571429rem; + background: #FFFFFF; + box-shadow: 0px 0em 0em 0em rgba(34, 36, 38, 0.35) inset; +} +.ui.form textarea:focus, +.play-button.form textarea:focus, +.download-button.form textarea:focus { + color: rgba(0, 0, 0, 0.95); + border-color: #85B7D9; + border-radius: 0.28571429rem; + background: #FFFFFF; + box-shadow: 0px 0em 0em 0em rgba(34, 36, 38, 0.35) inset; + -webkit-appearance: none; +} +/*-------------------- + Success +---------------------*/ +/* On Form */ +.ui.form.success .success.message:not(:empty), +.play-button.form.success .success.message:not(:empty), +.download-button.form.success .success.message:not(:empty) { + display: block; +} +.ui.form.success .compact.success.message:not(:empty), +.play-button.form.success .compact.success.message:not(:empty), +.download-button.form.success .compact.success.message:not(:empty) { + display: inline-block; +} +.ui.form.success .icon.success.message:not(:empty), +.play-button.form.success .icon.success.message:not(:empty), +.download-button.form.success .icon.success.message:not(:empty) { + display: flex; +} +/*-------------------- + Warning +---------------------*/ +/* On Form */ +.ui.form.warning .warning.message:not(:empty), +.play-button.form.warning .warning.message:not(:empty), +.download-button.form.warning .warning.message:not(:empty) { + display: block; +} +.ui.form.warning .compact.warning.message:not(:empty), +.play-button.form.warning .compact.warning.message:not(:empty), +.download-button.form.warning .compact.warning.message:not(:empty) { + display: inline-block; +} +.ui.form.warning .icon.warning.message:not(:empty), +.play-button.form.warning .icon.warning.message:not(:empty), +.download-button.form.warning .icon.warning.message:not(:empty) { + display: flex; +} +/*-------------------- + Error +---------------------*/ +/* On Form */ +.ui.form.error .error.message:not(:empty), +.play-button.form.error .error.message:not(:empty), +.download-button.form.error .error.message:not(:empty) { + display: block; +} +.ui.form.error .compact.error.message:not(:empty), +.play-button.form.error .compact.error.message:not(:empty), +.download-button.form.error .compact.error.message:not(:empty) { + display: inline-block; +} +.ui.form.error .icon.error.message:not(:empty), +.play-button.form.error .icon.error.message:not(:empty), +.download-button.form.error .icon.error.message:not(:empty) { + display: flex; +} +/* On Field(s) */ +.ui.form .fields.error .field label, +.ui.form .field.error label, +.ui.form .fields.error .field .input, +.ui.form .field.error .input, +.play-button.form .fields.error .field label, +.play-button.form .field.error label, +.play-button.form .fields.error .field .input, +.play-button.form .field.error .input, +.download-button.form .fields.error .field label, +.download-button.form .field.error label, +.download-button.form .fields.error .field .input, +.download-button.form .field.error .input { + color: #9F3A38; +} +.ui.form .fields.error .field .corner.label, +.ui.form .field.error .corner.label, +.play-button.form .fields.error .field .corner.label, +.play-button.form .field.error .corner.label, +.download-button.form .fields.error .field .corner.label, +.download-button.form .field.error .corner.label { + border-color: #9F3A38; + color: #FFFFFF; +} +.ui.form .fields.error .field textarea, +.ui.form .fields.error .field select, +.ui.form .fields.error .field input:not([type]), +.ui.form .fields.error .field input[type="date"], +.ui.form .fields.error .field input[type="datetime-local"], +.ui.form .fields.error .field input[type="email"], +.ui.form .fields.error .field input[type="number"], +.ui.form .fields.error .field input[type="password"], +.ui.form .fields.error .field input[type="search"], +.ui.form .fields.error .field input[type="tel"], +.ui.form .fields.error .field input[type="time"], +.ui.form .fields.error .field input[type="text"], +.ui.form .fields.error .field input[type="file"], +.ui.form .fields.error .field input[type="url"], +.ui.form .field.error textarea, +.ui.form .field.error select, +.ui.form .field.error input:not([type]), +.ui.form .field.error input[type="date"], +.ui.form .field.error input[type="datetime-local"], +.ui.form .field.error input[type="email"], +.ui.form .field.error input[type="number"], +.ui.form .field.error input[type="password"], +.ui.form .field.error input[type="search"], +.ui.form .field.error input[type="tel"], +.ui.form .field.error input[type="time"], +.ui.form .field.error input[type="text"], +.ui.form .field.error input[type="file"], +.ui.form .field.error input[type="url"], +.play-button.form .fields.error .field textarea, +.play-button.form .fields.error .field select, +.play-button.form .fields.error .field input:not([type]), +.play-button.form .fields.error .field input[type="date"], +.play-button.form .fields.error .field input[type="datetime-local"], +.play-button.form .fields.error .field input[type="email"], +.play-button.form .fields.error .field input[type="number"], +.play-button.form .fields.error .field input[type="password"], +.play-button.form .fields.error .field input[type="search"], +.play-button.form .fields.error .field input[type="tel"], +.play-button.form .fields.error .field input[type="time"], +.play-button.form .fields.error .field input[type="text"], +.play-button.form .fields.error .field input[type="file"], +.play-button.form .fields.error .field input[type="url"], +.play-button.form .field.error textarea, +.play-button.form .field.error select, +.play-button.form .field.error input:not([type]), +.play-button.form .field.error input[type="date"], +.play-button.form .field.error input[type="datetime-local"], +.play-button.form .field.error input[type="email"], +.play-button.form .field.error input[type="number"], +.play-button.form .field.error input[type="password"], +.play-button.form .field.error input[type="search"], +.play-button.form .field.error input[type="tel"], +.play-button.form .field.error input[type="time"], +.play-button.form .field.error input[type="text"], +.play-button.form .field.error input[type="file"], +.play-button.form .field.error input[type="url"], +.download-button.form .fields.error .field textarea, +.download-button.form .fields.error .field select, +.download-button.form .fields.error .field input:not([type]), +.download-button.form .fields.error .field input[type="date"], +.download-button.form .fields.error .field input[type="datetime-local"], +.download-button.form .fields.error .field input[type="email"], +.download-button.form .fields.error .field input[type="number"], +.download-button.form .fields.error .field input[type="password"], +.download-button.form .fields.error .field input[type="search"], +.download-button.form .fields.error .field input[type="tel"], +.download-button.form .fields.error .field input[type="time"], +.download-button.form .fields.error .field input[type="text"], +.download-button.form .fields.error .field input[type="file"], +.download-button.form .fields.error .field input[type="url"], +.download-button.form .field.error textarea, +.download-button.form .field.error select, +.download-button.form .field.error input:not([type]), +.download-button.form .field.error input[type="date"], +.download-button.form .field.error input[type="datetime-local"], +.download-button.form .field.error input[type="email"], +.download-button.form .field.error input[type="number"], +.download-button.form .field.error input[type="password"], +.download-button.form .field.error input[type="search"], +.download-button.form .field.error input[type="tel"], +.download-button.form .field.error input[type="time"], +.download-button.form .field.error input[type="text"], +.download-button.form .field.error input[type="file"], +.download-button.form .field.error input[type="url"] { + background: #FFF6F6; + border-color: #E0B4B4; + color: #9F3A38; + border-radius: ''; + box-shadow: none; +} +.ui.form .field.error textarea:focus, +.ui.form .field.error select:focus, +.ui.form .field.error input:not([type]):focus, +.ui.form .field.error input[type="date"]:focus, +.ui.form .field.error input[type="datetime-local"]:focus, +.ui.form .field.error input[type="email"]:focus, +.ui.form .field.error input[type="number"]:focus, +.ui.form .field.error input[type="password"]:focus, +.ui.form .field.error input[type="search"]:focus, +.ui.form .field.error input[type="tel"]:focus, +.ui.form .field.error input[type="time"]:focus, +.ui.form .field.error input[type="text"]:focus, +.ui.form .field.error input[type="file"]:focus, +.ui.form .field.error input[type="url"]:focus, +.play-button.form .field.error textarea:focus, +.play-button.form .field.error select:focus, +.play-button.form .field.error input:not([type]):focus, +.play-button.form .field.error input[type="date"]:focus, +.play-button.form .field.error input[type="datetime-local"]:focus, +.play-button.form .field.error input[type="email"]:focus, +.play-button.form .field.error input[type="number"]:focus, +.play-button.form .field.error input[type="password"]:focus, +.play-button.form .field.error input[type="search"]:focus, +.play-button.form .field.error input[type="tel"]:focus, +.play-button.form .field.error input[type="time"]:focus, +.play-button.form .field.error input[type="text"]:focus, +.play-button.form .field.error input[type="file"]:focus, +.play-button.form .field.error input[type="url"]:focus, +.download-button.form .field.error textarea:focus, +.download-button.form .field.error select:focus, +.download-button.form .field.error input:not([type]):focus, +.download-button.form .field.error input[type="date"]:focus, +.download-button.form .field.error input[type="datetime-local"]:focus, +.download-button.form .field.error input[type="email"]:focus, +.download-button.form .field.error input[type="number"]:focus, +.download-button.form .field.error input[type="password"]:focus, +.download-button.form .field.error input[type="search"]:focus, +.download-button.form .field.error input[type="tel"]:focus, +.download-button.form .field.error input[type="time"]:focus, +.download-button.form .field.error input[type="text"]:focus, +.download-button.form .field.error input[type="file"]:focus, +.download-button.form .field.error input[type="url"]:focus { + background: #FFF6F6; + border-color: #E0B4B4; + color: #9F3A38; + -webkit-appearance: none; + box-shadow: none; +} +/* Preserve Native Select Stylings */ +.ui.form .field.error select, +.play-button.form .field.error select, +.download-button.form .field.error select { + -webkit-appearance: menulist-button; +} +/*------------------ + Dropdown Error +--------------------*/ +.ui.form .fields.error .field .ui.dropdown, +.ui.form .fields.error .field .ui.dropdown .item, +.ui.form .field.error .ui.dropdown, +.ui.form .field.error .ui.dropdown .text, +.ui.form .field.error .ui.dropdown .item, +.play-button.form .fields.error .field .play-button.dropdown, +.play-button.form .fields.error .field .play-button.dropdown .item, +.play-button.form .field.error .play-button.dropdown, +.play-button.form .field.error .play-button.dropdown .text, +.play-button.form .field.error .play-button.dropdown .item, +.download-button.form .fields.error .field .download-button.dropdown, +.download-button.form .fields.error .field .download-button.dropdown .item, +.download-button.form .field.error .download-button.dropdown, +.download-button.form .field.error .download-button.dropdown .text, +.download-button.form .field.error .download-button.dropdown .item { + background: #FFF6F6; + color: #9F3A38; +} +.ui.form .fields.error .field .ui.dropdown, +.ui.form .field.error .ui.dropdown, +.play-button.form .fields.error .field .play-button.dropdown, +.play-button.form .field.error .play-button.dropdown, +.download-button.form .fields.error .field .download-button.dropdown, +.download-button.form .field.error .download-button.dropdown { + border-color: #E0B4B4 !important; +} +.ui.form .fields.error .field .ui.dropdown:hover, +.ui.form .field.error .ui.dropdown:hover, +.play-button.form .fields.error .field .play-button.dropdown:hover, +.play-button.form .field.error .play-button.dropdown:hover, +.download-button.form .fields.error .field .download-button.dropdown:hover, +.download-button.form .field.error .download-button.dropdown:hover { + border-color: #E0B4B4 !important; +} +.ui.form .fields.error .field .ui.dropdown:hover .menu, +.ui.form .field.error .ui.dropdown:hover .menu, +.play-button.form .fields.error .field .play-button.dropdown:hover .menu, +.play-button.form .field.error .play-button.dropdown:hover .menu, +.download-button.form .fields.error .field .download-button.dropdown:hover .menu, +.download-button.form .field.error .download-button.dropdown:hover .menu { + border-color: #E0B4B4; +} +.ui.form .fields.error .field .ui.multiple.selection.dropdown > .label, +.ui.form .field.error .ui.multiple.selection.dropdown > .label, +.play-button.form .fields.error .field .play-button.multiple.selection.dropdown > .label, +.play-button.form .field.error .play-button.multiple.selection.dropdown > .label, +.download-button.form .fields.error .field .download-button.multiple.selection.dropdown > .label, +.download-button.form .field.error .download-button.multiple.selection.dropdown > .label { + background-color: #EACBCB; + color: #9F3A38; +} +/* Hover */ +.ui.form .fields.error .field .ui.dropdown .menu .item:hover, +.ui.form .field.error .ui.dropdown .menu .item:hover, +.play-button.form .fields.error .field .play-button.dropdown .menu .item:hover, +.play-button.form .field.error .play-button.dropdown .menu .item:hover, +.download-button.form .fields.error .field .download-button.dropdown .menu .item:hover, +.download-button.form .field.error .download-button.dropdown .menu .item:hover { + background-color: #FBE7E7; +} +/* Selected */ +.ui.form .fields.error .field .ui.dropdown .menu .selected.item, +.ui.form .field.error .ui.dropdown .menu .selected.item, +.play-button.form .fields.error .field .play-button.dropdown .menu .selected.item, +.play-button.form .field.error .play-button.dropdown .menu .selected.item, +.download-button.form .fields.error .field .download-button.dropdown .menu .selected.item, +.download-button.form .field.error .download-button.dropdown .menu .selected.item { + background-color: #FBE7E7; +} +/* Active */ +.ui.form .fields.error .field .ui.dropdown .menu .active.item, +.ui.form .field.error .ui.dropdown .menu .active.item, +.play-button.form .fields.error .field .play-button.dropdown .menu .active.item, +.play-button.form .field.error .play-button.dropdown .menu .active.item, +.download-button.form .fields.error .field .download-button.dropdown .menu .active.item, +.download-button.form .field.error .download-button.dropdown .menu .active.item { + background-color: #FDCFCF !important; +} +/*-------------------- + Checkbox Error +---------------------*/ +.ui.form .fields.error .field .checkbox:not(.toggle):not(.slider) label, +.ui.form .field.error .checkbox:not(.toggle):not(.slider) label, +.ui.form .fields.error .field .checkbox:not(.toggle):not(.slider) .box, +.ui.form .field.error .checkbox:not(.toggle):not(.slider) .box, +.play-button.form .fields.error .field .checkbox:not(.toggle):not(.slider) label, +.play-button.form .field.error .checkbox:not(.toggle):not(.slider) label, +.play-button.form .fields.error .field .checkbox:not(.toggle):not(.slider) .box, +.play-button.form .field.error .checkbox:not(.toggle):not(.slider) .box, +.download-button.form .fields.error .field .checkbox:not(.toggle):not(.slider) label, +.download-button.form .field.error .checkbox:not(.toggle):not(.slider) label, +.download-button.form .fields.error .field .checkbox:not(.toggle):not(.slider) .box, +.download-button.form .field.error .checkbox:not(.toggle):not(.slider) .box { + color: #9F3A38; +} +.ui.form .fields.error .field .checkbox:not(.toggle):not(.slider) label:before, +.ui.form .field.error .checkbox:not(.toggle):not(.slider) label:before, +.ui.form .fields.error .field .checkbox:not(.toggle):not(.slider) .box:before, +.ui.form .field.error .checkbox:not(.toggle):not(.slider) .box:before, +.play-button.form .fields.error .field .checkbox:not(.toggle):not(.slider) label:before, +.play-button.form .field.error .checkbox:not(.toggle):not(.slider) label:before, +.play-button.form .fields.error .field .checkbox:not(.toggle):not(.slider) .box:before, +.play-button.form .field.error .checkbox:not(.toggle):not(.slider) .box:before, +.download-button.form .fields.error .field .checkbox:not(.toggle):not(.slider) label:before, +.download-button.form .field.error .checkbox:not(.toggle):not(.slider) label:before, +.download-button.form .fields.error .field .checkbox:not(.toggle):not(.slider) .box:before, +.download-button.form .field.error .checkbox:not(.toggle):not(.slider) .box:before { + background: #FFF6F6; + border-color: #E0B4B4; +} +.ui.form .fields.error .field .checkbox label:after, +.ui.form .field.error .checkbox label:after, +.ui.form .fields.error .field .checkbox .box:after, +.ui.form .field.error .checkbox .box:after, +.play-button.form .fields.error .field .checkbox label:after, +.play-button.form .field.error .checkbox label:after, +.play-button.form .fields.error .field .checkbox .box:after, +.play-button.form .field.error .checkbox .box:after, +.download-button.form .fields.error .field .checkbox label:after, +.download-button.form .field.error .checkbox label:after, +.download-button.form .fields.error .field .checkbox .box:after, +.download-button.form .field.error .checkbox .box:after { + color: #9F3A38; +} +/*-------------------- + Disabled +---------------------*/ +.ui.form .disabled.fields .field, +.ui.form .disabled.field, +.ui.form .field :disabled, +.play-button.form .disabled.fields .field, +.play-button.form .disabled.field, +.play-button.form .field :disabled, +.download-button.form .disabled.fields .field, +.download-button.form .disabled.field, +.download-button.form .field :disabled { + pointer-events: none; + opacity: 0.45; +} +.ui.form .field.disabled > label, +.ui.form .fields.disabled > label, +.play-button.form .field.disabled > label, +.play-button.form .fields.disabled > label, +.download-button.form .field.disabled > label, +.download-button.form .fields.disabled > label { + opacity: 0.45; +} +.ui.form .field.disabled :disabled, +.play-button.form .field.disabled :disabled, +.download-button.form .field.disabled :disabled { + opacity: 1; +} +/*-------------- + Loading +---------------*/ +.ui.loading.form, +.play-button.loading.form, +.download-button.loading.form { + position: relative; + cursor: default; + pointer-events: none; +} +.ui.loading.form:before, +.play-button.loading.form:before, +.download-button.loading.form:before { + position: absolute; + content: ''; + top: 0%; + left: 0%; + background: rgba(255, 255, 255, 0.8); + width: 100%; + height: 100%; + z-index: 100; +} +.ui.loading.form:after, +.play-button.loading.form:after, +.download-button.loading.form:after { + position: absolute; + content: ''; + top: 50%; + left: 50%; + margin: -1.5em 0em 0em -1.5em; + width: 3em; + height: 3em; + animation: form-spin 0.6s linear; + animation-iteration-count: infinite; + border-radius: 500rem; + border-color: #42495F rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1); + border-style: solid; + border-width: 0.2em; + box-shadow: 0px 0px 0px 1px transparent; + visibility: visible; + z-index: 101; +} +@keyframes form-spin { + from { + transform: rotate(0deg); + } + to { + transform: rotate(360deg); + } +} +/******************************* + Element Types +*******************************/ +/*-------------------- + Required Field +---------------------*/ +.ui.form .required.fields:not(.grouped) > .field > label:after, +.ui.form .required.fields.grouped > label:after, +.ui.form .required.field > label:after, +.ui.form .required.fields:not(.grouped) > .field > .checkbox:after, +.ui.form .required.field > .checkbox:after, +.play-button.form .required.fields:not(.grouped) > .field > label:after, +.play-button.form .required.fields.grouped > label:after, +.play-button.form .required.field > label:after, +.play-button.form .required.fields:not(.grouped) > .field > .checkbox:after, +.play-button.form .required.field > .checkbox:after, +.download-button.form .required.fields:not(.grouped) > .field > label:after, +.download-button.form .required.fields.grouped > label:after, +.download-button.form .required.field > label:after, +.download-button.form .required.fields:not(.grouped) > .field > .checkbox:after, +.download-button.form .required.field > .checkbox:after { + margin: -0.2em 0em 0em 0.2em; + content: '*'; + color: #E81123; +} +.ui.form .required.fields:not(.grouped) > .field > label:after, +.ui.form .required.fields.grouped > label:after, +.ui.form .required.field > label:after, +.play-button.form .required.fields:not(.grouped) > .field > label:after, +.play-button.form .required.fields.grouped > label:after, +.play-button.form .required.field > label:after, +.download-button.form .required.fields:not(.grouped) > .field > label:after, +.download-button.form .required.fields.grouped > label:after, +.download-button.form .required.field > label:after { + display: inline-block; + vertical-align: top; +} +.ui.form .required.fields:not(.grouped) > .field > .checkbox:after, +.ui.form .required.field > .checkbox:after, +.play-button.form .required.fields:not(.grouped) > .field > .checkbox:after, +.play-button.form .required.field > .checkbox:after, +.download-button.form .required.fields:not(.grouped) > .field > .checkbox:after, +.download-button.form .required.field > .checkbox:after { + position: absolute; + top: 0%; + left: 100%; +} +/******************************* + Variations +*******************************/ +/*-------------------- + Inverted Colors +---------------------*/ +.ui.inverted.form label, +.ui.form .inverted.segment label, +.ui.form .inverted.segment .ui.checkbox label, +.ui.form .inverted.segment .ui.checkbox .box, +.ui.inverted.form .ui.checkbox label, +.ui.inverted.form .ui.checkbox .box, +.ui.inverted.form .inline.fields > label, +.ui.inverted.form .inline.fields .field > label, +.ui.inverted.form .inline.fields .field > p, +.ui.inverted.form .inline.field > label, +.ui.inverted.form .inline.field > p, +.play-button.inverted.form label, +.play-button.form .inverted.segment label, +.play-button.form .inverted.segment .play-button.checkbox label, +.play-button.form .inverted.segment .play-button.checkbox .box, +.play-button.inverted.form .play-button.checkbox label, +.play-button.inverted.form .play-button.checkbox .box, +.play-button.inverted.form .inline.fields > label, +.play-button.inverted.form .inline.fields .field > label, +.play-button.inverted.form .inline.fields .field > p, +.play-button.inverted.form .inline.field > label, +.play-button.inverted.form .inline.field > p, +.download-button.inverted.form label, +.download-button.form .inverted.segment label, +.download-button.form .inverted.segment .download-button.checkbox label, +.download-button.form .inverted.segment .download-button.checkbox .box, +.download-button.inverted.form .download-button.checkbox label, +.download-button.inverted.form .download-button.checkbox .box, +.download-button.inverted.form .inline.fields > label, +.download-button.inverted.form .inline.fields .field > label, +.download-button.inverted.form .inline.fields .field > p, +.download-button.inverted.form .inline.field > label, +.download-button.inverted.form .inline.field > p { + color: rgba(255, 255, 255, 0.9); +} +/* Inverted Field */ +.ui.inverted.form input:not([type]), +.ui.inverted.form input[type="date"], +.ui.inverted.form input[type="datetime-local"], +.ui.inverted.form input[type="email"], +.ui.inverted.form input[type="number"], +.ui.inverted.form input[type="password"], +.ui.inverted.form input[type="search"], +.ui.inverted.form input[type="tel"], +.ui.inverted.form input[type="time"], +.ui.inverted.form input[type="text"], +.ui.inverted.form input[type="file"], +.ui.inverted.form input[type="url"], +.play-button.inverted.form input:not([type]), +.play-button.inverted.form input[type="date"], +.play-button.inverted.form input[type="datetime-local"], +.play-button.inverted.form input[type="email"], +.play-button.inverted.form input[type="number"], +.play-button.inverted.form input[type="password"], +.play-button.inverted.form input[type="search"], +.play-button.inverted.form input[type="tel"], +.play-button.inverted.form input[type="time"], +.play-button.inverted.form input[type="text"], +.play-button.inverted.form input[type="file"], +.play-button.inverted.form input[type="url"], +.download-button.inverted.form input:not([type]), +.download-button.inverted.form input[type="date"], +.download-button.inverted.form input[type="datetime-local"], +.download-button.inverted.form input[type="email"], +.download-button.inverted.form input[type="number"], +.download-button.inverted.form input[type="password"], +.download-button.inverted.form input[type="search"], +.download-button.inverted.form input[type="tel"], +.download-button.inverted.form input[type="time"], +.download-button.inverted.form input[type="text"], +.download-button.inverted.form input[type="file"], +.download-button.inverted.form input[type="url"] { + background: #FFFFFF; + border-color: rgba(255, 255, 255, 0.1); + color: rgba(0, 0, 0, 0.87); + box-shadow: none; +} +/*-------------------- + Field Groups +---------------------*/ +/* Grouped Vertically */ +.ui.form .grouped.fields, +.play-button.form .grouped.fields, +.download-button.form .grouped.fields { + display: block; + margin: 0em 0em 1em; +} +.ui.form .grouped.fields:last-child, +.play-button.form .grouped.fields:last-child, +.download-button.form .grouped.fields:last-child { + margin-bottom: 0em; +} +.ui.form .grouped.fields > label, +.play-button.form .grouped.fields > label, +.download-button.form .grouped.fields > label { + margin: 0em 0em 0.28571429rem 0em; + color: rgba(0, 0, 0, 0.87); + font-size: 0.92857143em; + font-weight: bold; + text-transform: none; +} +.ui.form .grouped.fields .field, +.ui.form .grouped.inline.fields .field, +.play-button.form .grouped.fields .field, +.play-button.form .grouped.inline.fields .field, +.download-button.form .grouped.fields .field, +.download-button.form .grouped.inline.fields .field { + display: block; + margin: 0.5em 0em; + padding: 0em; +} +/*-------------------- + Fields +---------------------*/ +/* Split fields */ +.ui.form .fields, +.play-button.form .fields, +.download-button.form .fields { + display: flex; + flex-direction: row; + margin: 0em -0.5em 1em; +} +.ui.form .fields > .field, +.play-button.form .fields > .field, +.download-button.form .fields > .field { + flex: 0 1 auto; + padding-left: 0.5em; + padding-right: 0.5em; +} +.ui.form .fields > .field:first-child, +.play-button.form .fields > .field:first-child, +.download-button.form .fields > .field:first-child { + border-left: none; + box-shadow: none; +} +/* Other Combinations */ +.ui.form .two.fields > .fields, +.ui.form .two.fields > .field, +.play-button.form .two.fields > .fields, +.play-button.form .two.fields > .field, +.download-button.form .two.fields > .fields, +.download-button.form .two.fields > .field { + width: 50%; +} +.ui.form .three.fields > .fields, +.ui.form .three.fields > .field, +.play-button.form .three.fields > .fields, +.play-button.form .three.fields > .field, +.download-button.form .three.fields > .fields, +.download-button.form .three.fields > .field { + width: 33.33333333%; +} +.ui.form .four.fields > .fields, +.ui.form .four.fields > .field, +.play-button.form .four.fields > .fields, +.play-button.form .four.fields > .field, +.download-button.form .four.fields > .fields, +.download-button.form .four.fields > .field { + width: 25%; +} +.ui.form .five.fields > .fields, +.ui.form .five.fields > .field, +.play-button.form .five.fields > .fields, +.play-button.form .five.fields > .field, +.download-button.form .five.fields > .fields, +.download-button.form .five.fields > .field { + width: 20%; +} +.ui.form .six.fields > .fields, +.ui.form .six.fields > .field, +.play-button.form .six.fields > .fields, +.play-button.form .six.fields > .field, +.download-button.form .six.fields > .fields, +.download-button.form .six.fields > .field { + width: 16.66666667%; +} +.ui.form .seven.fields > .fields, +.ui.form .seven.fields > .field, +.play-button.form .seven.fields > .fields, +.play-button.form .seven.fields > .field, +.download-button.form .seven.fields > .fields, +.download-button.form .seven.fields > .field { + width: 14.28571429%; +} +.ui.form .eight.fields > .fields, +.ui.form .eight.fields > .field, +.play-button.form .eight.fields > .fields, +.play-button.form .eight.fields > .field, +.download-button.form .eight.fields > .fields, +.download-button.form .eight.fields > .field { + width: 12.5%; +} +.ui.form .nine.fields > .fields, +.ui.form .nine.fields > .field, +.play-button.form .nine.fields > .fields, +.play-button.form .nine.fields > .field, +.download-button.form .nine.fields > .fields, +.download-button.form .nine.fields > .field { + width: 11.11111111%; +} +.ui.form .ten.fields > .fields, +.ui.form .ten.fields > .field, +.play-button.form .ten.fields > .fields, +.play-button.form .ten.fields > .field, +.download-button.form .ten.fields > .fields, +.download-button.form .ten.fields > .field { + width: 10%; +} +/* Swap to full width on mobile */ +@media only screen and (max-width: 767px) { + .ui.form .fields, + .play-button.form .fields, + .download-button.form .fields { + flex-wrap: wrap; + } + .ui[class*="equal width"].form:not(.unstackable) .fields > .field, + .ui.form:not(.unstackable) [class*="equal width"].fields:not(.unstackable) > .field, + .ui.form:not(.unstackable) .two.fields:not(.unstackable) > .fields, + .ui.form:not(.unstackable) .two.fields:not(.unstackable) > .field, + .ui.form:not(.unstackable) .three.fields:not(.unstackable) > .fields, + .ui.form:not(.unstackable) .three.fields:not(.unstackable) > .field, + .ui.form:not(.unstackable) .four.fields:not(.unstackable) > .fields, + .ui.form:not(.unstackable) .four.fields:not(.unstackable) > .field, + .ui.form:not(.unstackable) .five.fields:not(.unstackable) > .fields, + .ui.form:not(.unstackable) .five.fields:not(.unstackable) > .field, + .ui.form:not(.unstackable) .six.fields:not(.unstackable) > .fields, + .ui.form:not(.unstackable) .six.fields:not(.unstackable) > .field, + .ui.form:not(.unstackable) .seven.fields:not(.unstackable) > .fields, + .ui.form:not(.unstackable) .seven.fields:not(.unstackable) > .field, + .ui.form:not(.unstackable) .eight.fields:not(.unstackable) > .fields, + .ui.form:not(.unstackable) .eight.fields:not(.unstackable) > .field, + .ui.form:not(.unstackable) .nine.fields:not(.unstackable) > .fields, + .ui.form:not(.unstackable) .nine.fields:not(.unstackable) > .field, + .ui.form:not(.unstackable) .ten.fields:not(.unstackable) > .fields, + .ui.form:not(.unstackable) .ten.fields:not(.unstackable) > .field, + .play-button[class*="equal width"].form:not(.unstackable) .fields > .field, + .play-button.form:not(.unstackable) [class*="equal width"].fields:not(.unstackable) > .field, + .play-button.form:not(.unstackable) .two.fields:not(.unstackable) > .fields, + .play-button.form:not(.unstackable) .two.fields:not(.unstackable) > .field, + .play-button.form:not(.unstackable) .three.fields:not(.unstackable) > .fields, + .play-button.form:not(.unstackable) .three.fields:not(.unstackable) > .field, + .play-button.form:not(.unstackable) .four.fields:not(.unstackable) > .fields, + .play-button.form:not(.unstackable) .four.fields:not(.unstackable) > .field, + .play-button.form:not(.unstackable) .five.fields:not(.unstackable) > .fields, + .play-button.form:not(.unstackable) .five.fields:not(.unstackable) > .field, + .play-button.form:not(.unstackable) .six.fields:not(.unstackable) > .fields, + .play-button.form:not(.unstackable) .six.fields:not(.unstackable) > .field, + .play-button.form:not(.unstackable) .seven.fields:not(.unstackable) > .fields, + .play-button.form:not(.unstackable) .seven.fields:not(.unstackable) > .field, + .play-button.form:not(.unstackable) .eight.fields:not(.unstackable) > .fields, + .play-button.form:not(.unstackable) .eight.fields:not(.unstackable) > .field, + .play-button.form:not(.unstackable) .nine.fields:not(.unstackable) > .fields, + .play-button.form:not(.unstackable) .nine.fields:not(.unstackable) > .field, + .play-button.form:not(.unstackable) .ten.fields:not(.unstackable) > .fields, + .play-button.form:not(.unstackable) .ten.fields:not(.unstackable) > .field, + .download-button[class*="equal width"].form:not(.unstackable) .fields > .field, + .download-button.form:not(.unstackable) [class*="equal width"].fields:not(.unstackable) > .field, + .download-button.form:not(.unstackable) .two.fields:not(.unstackable) > .fields, + .download-button.form:not(.unstackable) .two.fields:not(.unstackable) > .field, + .download-button.form:not(.unstackable) .three.fields:not(.unstackable) > .fields, + .download-button.form:not(.unstackable) .three.fields:not(.unstackable) > .field, + .download-button.form:not(.unstackable) .four.fields:not(.unstackable) > .fields, + .download-button.form:not(.unstackable) .four.fields:not(.unstackable) > .field, + .download-button.form:not(.unstackable) .five.fields:not(.unstackable) > .fields, + .download-button.form:not(.unstackable) .five.fields:not(.unstackable) > .field, + .download-button.form:not(.unstackable) .six.fields:not(.unstackable) > .fields, + .download-button.form:not(.unstackable) .six.fields:not(.unstackable) > .field, + .download-button.form:not(.unstackable) .seven.fields:not(.unstackable) > .fields, + .download-button.form:not(.unstackable) .seven.fields:not(.unstackable) > .field, + .download-button.form:not(.unstackable) .eight.fields:not(.unstackable) > .fields, + .download-button.form:not(.unstackable) .eight.fields:not(.unstackable) > .field, + .download-button.form:not(.unstackable) .nine.fields:not(.unstackable) > .fields, + .download-button.form:not(.unstackable) .nine.fields:not(.unstackable) > .field, + .download-button.form:not(.unstackable) .ten.fields:not(.unstackable) > .fields, + .download-button.form:not(.unstackable) .ten.fields:not(.unstackable) > .field { + width: 100% !important; + margin: 0em 0em 1em; + } +} +/* Sizing Combinations */ +.ui.form .fields .wide.field, +.play-button.form .fields .wide.field, +.download-button.form .fields .wide.field { + width: 6.25%; + padding-left: 0.5em; + padding-right: 0.5em; +} +.ui.form .one.wide.field, +.play-button.form .one.wide.field, +.download-button.form .one.wide.field { + width: 6.25% !important; +} +.ui.form .two.wide.field, +.play-button.form .two.wide.field, +.download-button.form .two.wide.field { + width: 12.5% !important; +} +.ui.form .three.wide.field, +.play-button.form .three.wide.field, +.download-button.form .three.wide.field { + width: 18.75% !important; +} +.ui.form .four.wide.field, +.play-button.form .four.wide.field, +.download-button.form .four.wide.field { + width: 25% !important; +} +.ui.form .five.wide.field, +.play-button.form .five.wide.field, +.download-button.form .five.wide.field { + width: 31.25% !important; +} +.ui.form .six.wide.field, +.play-button.form .six.wide.field, +.download-button.form .six.wide.field { + width: 37.5% !important; +} +.ui.form .seven.wide.field, +.play-button.form .seven.wide.field, +.download-button.form .seven.wide.field { + width: 43.75% !important; +} +.ui.form .eight.wide.field, +.play-button.form .eight.wide.field, +.download-button.form .eight.wide.field { + width: 50% !important; +} +.ui.form .nine.wide.field, +.play-button.form .nine.wide.field, +.download-button.form .nine.wide.field { + width: 56.25% !important; +} +.ui.form .ten.wide.field, +.play-button.form .ten.wide.field, +.download-button.form .ten.wide.field { + width: 62.5% !important; +} +.ui.form .eleven.wide.field, +.play-button.form .eleven.wide.field, +.download-button.form .eleven.wide.field { + width: 68.75% !important; +} +.ui.form .twelve.wide.field, +.play-button.form .twelve.wide.field, +.download-button.form .twelve.wide.field { + width: 75% !important; +} +.ui.form .thirteen.wide.field, +.play-button.form .thirteen.wide.field, +.download-button.form .thirteen.wide.field { + width: 81.25% !important; +} +.ui.form .fourteen.wide.field, +.play-button.form .fourteen.wide.field, +.download-button.form .fourteen.wide.field { + width: 87.5% !important; +} +.ui.form .fifteen.wide.field, +.play-button.form .fifteen.wide.field, +.download-button.form .fifteen.wide.field { + width: 93.75% !important; +} +.ui.form .sixteen.wide.field, +.play-button.form .sixteen.wide.field, +.download-button.form .sixteen.wide.field { + width: 100% !important; +} +/* Swap to full width on mobile */ +@media only screen and (max-width: 767px) { + .ui.form:not(.unstackable) .two.fields:not(.unstackable) > .fields, + .ui.form:not(.unstackable) .two.fields:not(.unstackable) > .field, + .ui.form:not(.unstackable) .three.fields:not(.unstackable) > .fields, + .ui.form:not(.unstackable) .three.fields:not(.unstackable) > .field, + .ui.form:not(.unstackable) .four.fields:not(.unstackable) > .fields, + .ui.form:not(.unstackable) .four.fields:not(.unstackable) > .field, + .ui.form:not(.unstackable) .five.fields:not(.unstackable) > .fields, + .ui.form:not(.unstackable) .five.fields:not(.unstackable) > .field, + .ui.form:not(.unstackable) .fields:not(.unstackable) > .two.wide.field, + .ui.form:not(.unstackable) .fields:not(.unstackable) > .three.wide.field, + .ui.form:not(.unstackable) .fields:not(.unstackable) > .four.wide.field, + .ui.form:not(.unstackable) .fields:not(.unstackable) > .five.wide.field, + .ui.form:not(.unstackable) .fields:not(.unstackable) > .six.wide.field, + .ui.form:not(.unstackable) .fields:not(.unstackable) > .seven.wide.field, + .ui.form:not(.unstackable) .fields:not(.unstackable) > .eight.wide.field, + .ui.form:not(.unstackable) .fields:not(.unstackable) > .nine.wide.field, + .ui.form:not(.unstackable) .fields:not(.unstackable) > .ten.wide.field, + .ui.form:not(.unstackable) .fields:not(.unstackable) > .eleven.wide.field, + .ui.form:not(.unstackable) .fields:not(.unstackable) > .twelve.wide.field, + .ui.form:not(.unstackable) .fields:not(.unstackable) > .thirteen.wide.field, + .ui.form:not(.unstackable) .fields:not(.unstackable) > .fourteen.wide.field, + .ui.form:not(.unstackable) .fields:not(.unstackable) > .fifteen.wide.field, + .ui.form:not(.unstackable) .fields:not(.unstackable) > .sixteen.wide.field, + .play-button.form:not(.unstackable) .two.fields:not(.unstackable) > .fields, + .play-button.form:not(.unstackable) .two.fields:not(.unstackable) > .field, + .play-button.form:not(.unstackable) .three.fields:not(.unstackable) > .fields, + .play-button.form:not(.unstackable) .three.fields:not(.unstackable) > .field, + .play-button.form:not(.unstackable) .four.fields:not(.unstackable) > .fields, + .play-button.form:not(.unstackable) .four.fields:not(.unstackable) > .field, + .play-button.form:not(.unstackable) .five.fields:not(.unstackable) > .fields, + .play-button.form:not(.unstackable) .five.fields:not(.unstackable) > .field, + .play-button.form:not(.unstackable) .fields:not(.unstackable) > .two.wide.field, + .play-button.form:not(.unstackable) .fields:not(.unstackable) > .three.wide.field, + .play-button.form:not(.unstackable) .fields:not(.unstackable) > .four.wide.field, + .play-button.form:not(.unstackable) .fields:not(.unstackable) > .five.wide.field, + .play-button.form:not(.unstackable) .fields:not(.unstackable) > .six.wide.field, + .play-button.form:not(.unstackable) .fields:not(.unstackable) > .seven.wide.field, + .play-button.form:not(.unstackable) .fields:not(.unstackable) > .eight.wide.field, + .play-button.form:not(.unstackable) .fields:not(.unstackable) > .nine.wide.field, + .play-button.form:not(.unstackable) .fields:not(.unstackable) > .ten.wide.field, + .play-button.form:not(.unstackable) .fields:not(.unstackable) > .eleven.wide.field, + .play-button.form:not(.unstackable) .fields:not(.unstackable) > .twelve.wide.field, + .play-button.form:not(.unstackable) .fields:not(.unstackable) > .thirteen.wide.field, + .play-button.form:not(.unstackable) .fields:not(.unstackable) > .fourteen.wide.field, + .play-button.form:not(.unstackable) .fields:not(.unstackable) > .fifteen.wide.field, + .play-button.form:not(.unstackable) .fields:not(.unstackable) > .sixteen.wide.field, + .download-button.form:not(.unstackable) .two.fields:not(.unstackable) > .fields, + .download-button.form:not(.unstackable) .two.fields:not(.unstackable) > .field, + .download-button.form:not(.unstackable) .three.fields:not(.unstackable) > .fields, + .download-button.form:not(.unstackable) .three.fields:not(.unstackable) > .field, + .download-button.form:not(.unstackable) .four.fields:not(.unstackable) > .fields, + .download-button.form:not(.unstackable) .four.fields:not(.unstackable) > .field, + .download-button.form:not(.unstackable) .five.fields:not(.unstackable) > .fields, + .download-button.form:not(.unstackable) .five.fields:not(.unstackable) > .field, + .download-button.form:not(.unstackable) .fields:not(.unstackable) > .two.wide.field, + .download-button.form:not(.unstackable) .fields:not(.unstackable) > .three.wide.field, + .download-button.form:not(.unstackable) .fields:not(.unstackable) > .four.wide.field, + .download-button.form:not(.unstackable) .fields:not(.unstackable) > .five.wide.field, + .download-button.form:not(.unstackable) .fields:not(.unstackable) > .six.wide.field, + .download-button.form:not(.unstackable) .fields:not(.unstackable) > .seven.wide.field, + .download-button.form:not(.unstackable) .fields:not(.unstackable) > .eight.wide.field, + .download-button.form:not(.unstackable) .fields:not(.unstackable) > .nine.wide.field, + .download-button.form:not(.unstackable) .fields:not(.unstackable) > .ten.wide.field, + .download-button.form:not(.unstackable) .fields:not(.unstackable) > .eleven.wide.field, + .download-button.form:not(.unstackable) .fields:not(.unstackable) > .twelve.wide.field, + .download-button.form:not(.unstackable) .fields:not(.unstackable) > .thirteen.wide.field, + .download-button.form:not(.unstackable) .fields:not(.unstackable) > .fourteen.wide.field, + .download-button.form:not(.unstackable) .fields:not(.unstackable) > .fifteen.wide.field, + .download-button.form:not(.unstackable) .fields:not(.unstackable) > .sixteen.wide.field { + width: 100% !important; + } + .ui.form .fields, + .play-button.form .fields, + .download-button.form .fields { + margin-bottom: 0em; + } +} +/*-------------------- + Equal Width +---------------------*/ +.ui[class*="equal width"].form .fields > .field, +.ui.form [class*="equal width"].fields > .field, +.play-button[class*="equal width"].form .fields > .field, +.play-button.form [class*="equal width"].fields > .field, +.download-button[class*="equal width"].form .fields > .field, +.download-button.form [class*="equal width"].fields > .field { + width: 100%; + flex: 1 1 auto; +} +/*-------------------- + Inline Fields +---------------------*/ +.ui.form .inline.fields, +.play-button.form .inline.fields, +.download-button.form .inline.fields { + margin: 0em 0em 1em; + align-items: center; +} +.ui.form .inline.fields .field, +.play-button.form .inline.fields .field, +.download-button.form .inline.fields .field { + margin: 0em; + padding: 0em 1em 0em 0em; +} +/* Inline Label */ +.ui.form .inline.fields > label, +.ui.form .inline.fields .field > label, +.ui.form .inline.fields .field > p, +.ui.form .inline.field > label, +.ui.form .inline.field > p, +.play-button.form .inline.fields > label, +.play-button.form .inline.fields .field > label, +.play-button.form .inline.fields .field > p, +.play-button.form .inline.field > label, +.play-button.form .inline.field > p, +.download-button.form .inline.fields > label, +.download-button.form .inline.fields .field > label, +.download-button.form .inline.fields .field > p, +.download-button.form .inline.field > label, +.download-button.form .inline.field > p { + display: inline-block; + width: auto; + margin-top: 0em; + margin-bottom: 0em; + vertical-align: baseline; + font-size: 0.92857143em; + font-weight: bold; + color: rgba(0, 0, 0, 0.87); + text-transform: none; +} +/* Grouped Inline Label */ +.ui.form .inline.fields > label, +.play-button.form .inline.fields > label, +.download-button.form .inline.fields > label { + margin: 0.035714em 1em 0em 0em; +} +/* Inline Input */ +.ui.form .inline.fields .field > input, +.ui.form .inline.fields .field > select, +.ui.form .inline.field > input, +.ui.form .inline.field > select, +.play-button.form .inline.fields .field > input, +.play-button.form .inline.fields .field > select, +.play-button.form .inline.field > input, +.play-button.form .inline.field > select, +.download-button.form .inline.fields .field > input, +.download-button.form .inline.fields .field > select, +.download-button.form .inline.field > input, +.download-button.form .inline.field > select { + display: inline-block; + width: auto; + margin-top: 0em; + margin-bottom: 0em; + vertical-align: middle; + font-size: 1em; +} +/* Label */ +.ui.form .inline.fields .field > :first-child, +.ui.form .inline.field > :first-child, +.play-button.form .inline.fields .field > :first-child, +.play-button.form .inline.field > :first-child, +.download-button.form .inline.fields .field > :first-child, +.download-button.form .inline.field > :first-child { + margin: 0em 0.85714286em 0em 0em; +} +.ui.form .inline.fields .field > :only-child, +.ui.form .inline.field > :only-child, +.play-button.form .inline.fields .field > :only-child, +.play-button.form .inline.field > :only-child, +.download-button.form .inline.fields .field > :only-child, +.download-button.form .inline.field > :only-child { + margin: 0em; +} +/* Wide */ +.ui.form .inline.fields .wide.field, +.play-button.form .inline.fields .wide.field, +.download-button.form .inline.fields .wide.field { + display: flex; + align-items: center; +} +.ui.form .inline.fields .wide.field > input, +.ui.form .inline.fields .wide.field > select, +.play-button.form .inline.fields .wide.field > input, +.play-button.form .inline.fields .wide.field > select, +.download-button.form .inline.fields .wide.field > input, +.download-button.form .inline.fields .wide.field > select { + width: 100%; +} +/*-------------------- + Sizes +---------------------*/ +.ui.mini.form, +.play-button.mini.form, +.download-button.mini.form { + font-size: 0.78571429rem; +} +.ui.tiny.form, +.play-button.tiny.form, +.download-button.tiny.form { + font-size: 0.85714286rem; +} +.ui.small.form, +.play-button.small.form, +.download-button.small.form { + font-size: 0.92857143rem; +} +.ui.form, +.play-button.form, +.download-button.form { + font-size: 1rem; +} +.ui.large.form, +.play-button.large.form, +.download-button.large.form { + font-size: 1.14285714rem; +} +.ui.big.form, +.play-button.big.form, +.download-button.big.form { + font-size: 1.28571429rem; +} +.ui.huge.form, +.play-button.huge.form, +.download-button.huge.form { + font-size: 1.42857143rem; +} +.ui.massive.form, +.play-button.massive.form, +.download-button.massive.form { + font-size: 1.71428571rem; +} +/******************************* + Theme Overrides +*******************************/ +/******************************* + Site Overrides +*******************************/ +/*! + * # Semantic UI - Grid + * http://github.com/semantic-org/semantic-ui/ + * + * + * Released under the MIT license + * http://opensource.org/licenses/MIT + * + */ +/******************************* + Theme +*******************************/ +/* + +████████╗██╗ ██╗███████╗███╗ ███╗███████╗███████╗ +╚══██╔══╝██║ ██║██╔════╝████╗ ████║██╔════╝██╔════╝ + ██║ ███████║█████╗ ██╔████╔██║█████╗ ███████╗ + ██║ ██╔══██║██╔══╝ ██║╚██╔╝██║██╔══╝ ╚════██║ + ██║ ██║ ██║███████╗██║ ╚═╝ ██║███████╗███████║ + ╚═╝ ╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝╚══════╝╚══════╝ + +*/ +/******************************* + Theme Selection +*******************************/ +/* To override a theme for an individual element + specify theme name below +*/ +/* Global */ +/* Elements */ +/* Collections */ +/* Modules */ +/* Views */ +/******************************* + Folders +*******************************/ +/* Path to theme packages */ +/* Path to site override folder */ +/******************************* + Import Theme +*******************************/ +/******************************* + Import Directives +*******************************/ +/*------------------ + Theme +-------------------*/ +/*-------------------- + Site Variables +---------------------*/ +/* Default site.variables */ +/******************************* + Site Settings +*******************************/ +/*------------------- + Fonts +--------------------*/ +/*------------------- + Base Sizes +--------------------*/ +/* This is the single variable that controls them all */ +/* The size of page text */ +/*------------------- + Border Radius +--------------------*/ +/* See Power-user section below + for explanation of @px variables +*/ +/*------------------- + Brand Colors +--------------------*/ +/*-------------- + Page Heading +---------------*/ +/*-------------- + Form Input +---------------*/ +/* This adjusts the default form input across all elements */ +/* Input Text Color */ +/* Line Height Default For Inputs in Browser (Descendors are 17px at 14px base em) */ +/*------------------- + Focused Input +--------------------*/ +/* Used on inputs, textarea etc */ +/* Used on dropdowns, other larger blocks */ +/*------------------- + Sizes +--------------------*/ +/* + Sizes are all expressed in terms of 14px/em (default em) + This ensures these "ratios" remain constant despite changes in EM +*/ +/*------------------- + Page +--------------------*/ +/*------------------- + Paragraph +--------------------*/ +/*------------------- + Links +--------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ +/*------------------- + Highlighted Text +--------------------*/ +/*------------------- + Loader +--------------------*/ +/*------------------- + Grid +--------------------*/ +/*------------------- + Transitions +--------------------*/ +/*------------------- + Breakpoints +--------------------*/ +/*------------------- + Site Colors +--------------------*/ +/*--- Colors ---*/ +/*--- Light Colors ---*/ +/*--- Neutrals ---*/ +/*--- Colored Backgrounds ---*/ +/*--- Colored Headers ---*/ +/*--- Colored Text ---*/ +/*--- Colored Border ---*/ +/*------------------- + Alpha Colors +--------------------*/ +/*------------------- + Accents +--------------------*/ +/* Differentiating Neutrals */ +/* Differentiating Layers */ +/******************************* + Power-User +*******************************/ +/*------------------- + Emotive Colors +--------------------*/ +/* Positive */ +/* Negative */ +/* Info */ +/* Warning */ +/*------------------- + Paths +--------------------*/ +/* For source only. Modified in gulp for dist */ +/*------------------- + Em Sizes +--------------------*/ +/* + This rounds @size values to the closest pixel then expresses that value in (r)em. + This ensures all size values round to exact pixels +*/ +/* em */ +/* rem */ +/*------------------- + Icons +--------------------*/ +/* Maximum Glyph Width of Icon */ +/*------------------- + Neutral Text +--------------------*/ +/*------------------- + Brand Colors +--------------------*/ +/*------------------- + Borders +--------------------*/ +/*------------------- + Derived Values +--------------------*/ +/* Loaders Position Offset */ +/* Rendered Scrollbar Width */ +/* Maximum Single Character Glyph Width, aka Capital "W" */ +/* Used to match floats with text */ +/* Header Spacing */ +/* Minimum Mobile Width */ +/* Positive / Negative Dupes */ +/* Responsive */ +/*------------------- + Exact Pixel Values +--------------------*/ +/* + These are used to specify exact pixel values in em + for things like borders that remain constantly + sized as emSize adjusts + + Since there are many more sizes than names for sizes, + these are named by their original pixel values. + +*/ +/* Columns */ +/******************************* + States +*******************************/ +/*------------------- + Disabled +--------------------*/ +/*------------------- + Hover +--------------------*/ +/*--- Shadows ---*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Focus +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Down (:active) +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Active +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/* Packaged site.variables */ +/******************************* + User Global Variables +*******************************/ +/*------------------- + Fonts +--------------------*/ +/*------------------- + Breakpoints +--------------------*/ +/* +@mobileBreakpoint : unit( (63 * @emSize), px); +@tabletBreakpoint : unit( (79 * @emSize), px); +@computerBreakpoint : unit( (91 * @emSize), px); +@largeMonitorBreakpoint : unit( (99 * @emSize), px); +@widescreenMonitorBreakpoint : unit( (119 * @emSize), px); +*/ +/******************************* + PXT Variables +*******************************/ +/*------------------- + Menu +--------------------*/ +/*------------------- + Layout +--------------------*/ +/*------------------- + Background +--------------------*/ +/*------------------- + Full screen +--------------------*/ +/*------------------- + Side Docs +--------------------*/ +/*------------------- + Editor +--------------------*/ +/* Component's site.variables */ +/******************************* + User Global Variables +*******************************/ +/*------------------- + Fonts +--------------------*/ +/*------------------- + Breakpoints +--------------------*/ +/* +@mobileBreakpoint : unit( (63 * @emSize), px); +@tabletBreakpoint : unit( (79 * @emSize), px); +@computerBreakpoint : unit( (91 * @emSize), px); +@largeMonitorBreakpoint : unit( (99 * @emSize), px); +@widescreenMonitorBreakpoint : unit( (119 * @emSize), px); +*/ +/******************************* + PXT Variables +*******************************/ +/*------------------- + Menu +--------------------*/ +/*------------------- + Layout +--------------------*/ +/*------------------- + Background +--------------------*/ +/*------------------- + Full screen +--------------------*/ +/*------------------- + Side Docs +--------------------*/ +/*------------------- + Editor +--------------------*/ +/* Site theme site.variables */ +/******************************* + User Global Variables +*******************************/ +/*------------------- + Site Colors +--------------------*/ +/******************************* + PXT Overrides +*******************************/ +/*------------------- + Component Variables +---------------------*/ +/* Default */ +/******************************* + Grid +*******************************/ +/* Inherited From Site */ +/******************************* + Grid +*******************************/ +/******************************* + Variations +*******************************/ +/*-------------- + Relaxed +---------------*/ +/*-------------- + Divided +---------------*/ +/*-------------- + Celled +---------------*/ +/*-------------- + Stackable +---------------*/ +/******************************* + Legacy +*******************************/ +/*-------------- + Page +---------------*/ +/* Legacy (DO NOT USE) + */ +/* Packaged Theme */ +/******************************* + User Variable Overrides +*******************************/ +/* Site Theme */ +/******************************* + User Variable Overrides +*******************************/ +/******************************* + Mix-ins +*******************************/ +/*------------------ + Fonts +-------------------*/ +/*------------------ + Overrides +-------------------*/ +/* End Config */ +/******************************* + Standard +*******************************/ +.ui.grid, +.play-button.grid, +.download-button.grid { + display: flex; + flex-direction: row; + flex-wrap: wrap; + align-items: stretch; + padding: 0em; +} +/*---------------------- + Remove Gutters +-----------------------*/ +.ui.grid, +.play-button.grid, +.download-button.grid { + margin-top: -1rem; + margin-bottom: -1rem; + margin-left: -1rem; + margin-right: -1rem; +} +.ui.relaxed.grid, +.play-button.relaxed.grid, +.download-button.relaxed.grid { + margin-left: -1.5rem; + margin-right: -1.5rem; +} +.ui[class*="very relaxed"].grid, +.play-button[class*="very relaxed"].grid, +.download-button[class*="very relaxed"].grid { + margin-left: -2.5rem; + margin-right: -2.5rem; +} +/* Preserve Rows Spacing on Consecutive Grids */ +.ui.grid + .grid, +.play-button.grid + .grid, +.download-button.grid + .grid { + margin-top: 1rem; +} +/*------------------- + Columns +--------------------*/ +/* Standard 16 column */ +.ui.grid > .column:not(.row), +.ui.grid > .row > .column, +.play-button.grid > .column:not(.row), +.play-button.grid > .row > .column, +.download-button.grid > .column:not(.row), +.download-button.grid > .row > .column { + position: relative; + display: inline-block; + width: 6.25%; + padding-left: 1rem; + padding-right: 1rem; + vertical-align: top; +} +.ui.grid > *, +.play-button.grid > *, +.download-button.grid > * { + padding-left: 1rem; + padding-right: 1rem; +} +/*------------------- + Rows +--------------------*/ +.ui.grid > .row, +.play-button.grid > .row, +.download-button.grid > .row { + position: relative; + display: flex; + flex-direction: row; + flex-wrap: wrap; + justify-content: inherit; + align-items: stretch; + width: 100% !important; + padding: 0rem; + padding-top: 1rem; + padding-bottom: 1rem; +} +/*------------------- + Columns +--------------------*/ +/* Vertical padding when no rows */ +.ui.grid > .column:not(.row), +.play-button.grid > .column:not(.row), +.download-button.grid > .column:not(.row) { + padding-top: 1rem; + padding-bottom: 1rem; +} +.ui.grid > .row > .column, +.play-button.grid > .row > .column, +.download-button.grid > .row > .column { + margin-top: 0em; + margin-bottom: 0em; +} +/*------------------- + Content +--------------------*/ +.ui.grid > .row > img, +.ui.grid > .row > .column > img, +.play-button.grid > .row > img, +.play-button.grid > .row > .column > img, +.download-button.grid > .row > img, +.download-button.grid > .row > .column > img { + max-width: 100%; +} +/*------------------- + Loose Coupling +--------------------*/ +/* Collapse Margin on Consecutive Grid */ +.ui.grid > .ui.grid:first-child, +.play-button.grid > .play-button.grid:first-child, +.download-button.grid > .download-button.grid:first-child { + margin-top: 0em; +} +.ui.grid > .ui.grid:last-child, +.play-button.grid > .play-button.grid:last-child, +.download-button.grid > .download-button.grid:last-child { + margin-bottom: 0em; +} +/* Segment inside Aligned Grid */ +.ui.grid .aligned.row > .column > .segment:not(.compact):not(.attached), +.ui.aligned.grid .column > .segment:not(.compact):not(.attached), +.play-button.grid .aligned.row > .column > .segment:not(.compact):not(.attached), +.play-button.aligned.grid .column > .segment:not(.compact):not(.attached), +.download-button.grid .aligned.row > .column > .segment:not(.compact):not(.attached), +.download-button.aligned.grid .column > .segment:not(.compact):not(.attached) { + width: 100%; +} +/* Align Dividers with Gutter */ +.ui.grid .row + .ui.divider, +.play-button.grid .row + .play-button.divider, +.download-button.grid .row + .download-button.divider { + flex-grow: 1; + margin: 1rem 1rem; +} +.ui.grid .column + .ui.vertical.divider, +.play-button.grid .column + .play-button.vertical.divider, +.download-button.grid .column + .download-button.vertical.divider { + height: calc(50% - 1rem ); +} +/* Remove Border on Last Horizontal Segment */ +.ui.grid > .row > .column:last-child > .horizontal.segment, +.ui.grid > .column:last-child > .horizontal.segment, +.play-button.grid > .row > .column:last-child > .horizontal.segment, +.play-button.grid > .column:last-child > .horizontal.segment, +.download-button.grid > .row > .column:last-child > .horizontal.segment, +.download-button.grid > .column:last-child > .horizontal.segment { + box-shadow: none; +} +/******************************* + Variations +*******************************/ +/*----------------------- + Page Grid +-------------------------*/ +@media only screen and (max-width: 767px) { + .ui.page.grid, + .play-button.page.grid, + .download-button.page.grid { + width: auto; + padding-left: 0em; + padding-right: 0em; + margin-left: 0em; + margin-right: 0em; + } +} +@media only screen and (min-width: 768px) and (max-width: 991px) { + .ui.page.grid, + .play-button.page.grid, + .download-button.page.grid { + width: auto; + margin-left: 0em; + margin-right: 0em; + padding-left: 2em; + padding-right: 2em; + } +} +@media only screen and (min-width: 992px) and (max-width: 1199px) { + .ui.page.grid, + .play-button.page.grid, + .download-button.page.grid { + width: auto; + margin-left: 0em; + margin-right: 0em; + padding-left: 3%; + padding-right: 3%; + } +} +@media only screen and (min-width: 1200px) and (max-width: 1919px) { + .ui.page.grid, + .play-button.page.grid, + .download-button.page.grid { + width: auto; + margin-left: 0em; + margin-right: 0em; + padding-left: 15%; + padding-right: 15%; + } +} +@media only screen and (min-width: 1920px) { + .ui.page.grid, + .play-button.page.grid, + .download-button.page.grid { + width: auto; + margin-left: 0em; + margin-right: 0em; + padding-left: 23%; + padding-right: 23%; + } +} +/*------------------- + Column Count +--------------------*/ +/* Assume full width with one column */ +.ui.grid > .column:only-child, +.ui.grid > .row > .column:only-child, +.play-button.grid > .column:only-child, +.play-button.grid > .row > .column:only-child, +.download-button.grid > .column:only-child, +.download-button.grid > .row > .column:only-child { + width: 100%; +} +/* Grid Based */ +.ui[class*="one column"].grid > .row > .column, +.ui[class*="one column"].grid > .column:not(.row), +.play-button[class*="one column"].grid > .row > .column, +.play-button[class*="one column"].grid > .column:not(.row), +.download-button[class*="one column"].grid > .row > .column, +.download-button[class*="one column"].grid > .column:not(.row) { + width: 100%; +} +.ui[class*="two column"].grid > .row > .column, +.ui[class*="two column"].grid > .column:not(.row), +.play-button[class*="two column"].grid > .row > .column, +.play-button[class*="two column"].grid > .column:not(.row), +.download-button[class*="two column"].grid > .row > .column, +.download-button[class*="two column"].grid > .column:not(.row) { + width: 50%; +} +.ui[class*="three column"].grid > .row > .column, +.ui[class*="three column"].grid > .column:not(.row), +.play-button[class*="three column"].grid > .row > .column, +.play-button[class*="three column"].grid > .column:not(.row), +.download-button[class*="three column"].grid > .row > .column, +.download-button[class*="three column"].grid > .column:not(.row) { + width: 33.33333333%; +} +.ui[class*="four column"].grid > .row > .column, +.ui[class*="four column"].grid > .column:not(.row), +.play-button[class*="four column"].grid > .row > .column, +.play-button[class*="four column"].grid > .column:not(.row), +.download-button[class*="four column"].grid > .row > .column, +.download-button[class*="four column"].grid > .column:not(.row) { + width: 25%; +} +.ui[class*="five column"].grid > .row > .column, +.ui[class*="five column"].grid > .column:not(.row), +.play-button[class*="five column"].grid > .row > .column, +.play-button[class*="five column"].grid > .column:not(.row), +.download-button[class*="five column"].grid > .row > .column, +.download-button[class*="five column"].grid > .column:not(.row) { + width: 20%; +} +.ui[class*="six column"].grid > .row > .column, +.ui[class*="six column"].grid > .column:not(.row), +.play-button[class*="six column"].grid > .row > .column, +.play-button[class*="six column"].grid > .column:not(.row), +.download-button[class*="six column"].grid > .row > .column, +.download-button[class*="six column"].grid > .column:not(.row) { + width: 16.66666667%; +} +.ui[class*="seven column"].grid > .row > .column, +.ui[class*="seven column"].grid > .column:not(.row), +.play-button[class*="seven column"].grid > .row > .column, +.play-button[class*="seven column"].grid > .column:not(.row), +.download-button[class*="seven column"].grid > .row > .column, +.download-button[class*="seven column"].grid > .column:not(.row) { + width: 14.28571429%; +} +.ui[class*="eight column"].grid > .row > .column, +.ui[class*="eight column"].grid > .column:not(.row), +.play-button[class*="eight column"].grid > .row > .column, +.play-button[class*="eight column"].grid > .column:not(.row), +.download-button[class*="eight column"].grid > .row > .column, +.download-button[class*="eight column"].grid > .column:not(.row) { + width: 12.5%; +} +.ui[class*="nine column"].grid > .row > .column, +.ui[class*="nine column"].grid > .column:not(.row), +.play-button[class*="nine column"].grid > .row > .column, +.play-button[class*="nine column"].grid > .column:not(.row), +.download-button[class*="nine column"].grid > .row > .column, +.download-button[class*="nine column"].grid > .column:not(.row) { + width: 11.11111111%; +} +.ui[class*="ten column"].grid > .row > .column, +.ui[class*="ten column"].grid > .column:not(.row), +.play-button[class*="ten column"].grid > .row > .column, +.play-button[class*="ten column"].grid > .column:not(.row), +.download-button[class*="ten column"].grid > .row > .column, +.download-button[class*="ten column"].grid > .column:not(.row) { + width: 10%; +} +.ui[class*="eleven column"].grid > .row > .column, +.ui[class*="eleven column"].grid > .column:not(.row), +.play-button[class*="eleven column"].grid > .row > .column, +.play-button[class*="eleven column"].grid > .column:not(.row), +.download-button[class*="eleven column"].grid > .row > .column, +.download-button[class*="eleven column"].grid > .column:not(.row) { + width: 9.09090909%; +} +.ui[class*="twelve column"].grid > .row > .column, +.ui[class*="twelve column"].grid > .column:not(.row), +.play-button[class*="twelve column"].grid > .row > .column, +.play-button[class*="twelve column"].grid > .column:not(.row), +.download-button[class*="twelve column"].grid > .row > .column, +.download-button[class*="twelve column"].grid > .column:not(.row) { + width: 8.33333333%; +} +.ui[class*="thirteen column"].grid > .row > .column, +.ui[class*="thirteen column"].grid > .column:not(.row), +.play-button[class*="thirteen column"].grid > .row > .column, +.play-button[class*="thirteen column"].grid > .column:not(.row), +.download-button[class*="thirteen column"].grid > .row > .column, +.download-button[class*="thirteen column"].grid > .column:not(.row) { + width: 7.69230769%; +} +.ui[class*="fourteen column"].grid > .row > .column, +.ui[class*="fourteen column"].grid > .column:not(.row), +.play-button[class*="fourteen column"].grid > .row > .column, +.play-button[class*="fourteen column"].grid > .column:not(.row), +.download-button[class*="fourteen column"].grid > .row > .column, +.download-button[class*="fourteen column"].grid > .column:not(.row) { + width: 7.14285714%; +} +.ui[class*="fifteen column"].grid > .row > .column, +.ui[class*="fifteen column"].grid > .column:not(.row), +.play-button[class*="fifteen column"].grid > .row > .column, +.play-button[class*="fifteen column"].grid > .column:not(.row), +.download-button[class*="fifteen column"].grid > .row > .column, +.download-button[class*="fifteen column"].grid > .column:not(.row) { + width: 6.66666667%; +} +.ui[class*="sixteen column"].grid > .row > .column, +.ui[class*="sixteen column"].grid > .column:not(.row), +.play-button[class*="sixteen column"].grid > .row > .column, +.play-button[class*="sixteen column"].grid > .column:not(.row), +.download-button[class*="sixteen column"].grid > .row > .column, +.download-button[class*="sixteen column"].grid > .column:not(.row) { + width: 6.25%; +} +/* Row Based Overrides */ +.ui.grid > [class*="one column"].row > .column, +.play-button.grid > [class*="one column"].row > .column, +.download-button.grid > [class*="one column"].row > .column { + width: 100% !important; +} +.ui.grid > [class*="two column"].row > .column, +.play-button.grid > [class*="two column"].row > .column, +.download-button.grid > [class*="two column"].row > .column { + width: 50% !important; +} +.ui.grid > [class*="three column"].row > .column, +.play-button.grid > [class*="three column"].row > .column, +.download-button.grid > [class*="three column"].row > .column { + width: 33.33333333% !important; +} +.ui.grid > [class*="four column"].row > .column, +.play-button.grid > [class*="four column"].row > .column, +.download-button.grid > [class*="four column"].row > .column { + width: 25% !important; +} +.ui.grid > [class*="five column"].row > .column, +.play-button.grid > [class*="five column"].row > .column, +.download-button.grid > [class*="five column"].row > .column { + width: 20% !important; +} +.ui.grid > [class*="six column"].row > .column, +.play-button.grid > [class*="six column"].row > .column, +.download-button.grid > [class*="six column"].row > .column { + width: 16.66666667% !important; +} +.ui.grid > [class*="seven column"].row > .column, +.play-button.grid > [class*="seven column"].row > .column, +.download-button.grid > [class*="seven column"].row > .column { + width: 14.28571429% !important; +} +.ui.grid > [class*="eight column"].row > .column, +.play-button.grid > [class*="eight column"].row > .column, +.download-button.grid > [class*="eight column"].row > .column { + width: 12.5% !important; +} +.ui.grid > [class*="nine column"].row > .column, +.play-button.grid > [class*="nine column"].row > .column, +.download-button.grid > [class*="nine column"].row > .column { + width: 11.11111111% !important; +} +.ui.grid > [class*="ten column"].row > .column, +.play-button.grid > [class*="ten column"].row > .column, +.download-button.grid > [class*="ten column"].row > .column { + width: 10% !important; +} +.ui.grid > [class*="eleven column"].row > .column, +.play-button.grid > [class*="eleven column"].row > .column, +.download-button.grid > [class*="eleven column"].row > .column { + width: 9.09090909% !important; +} +.ui.grid > [class*="twelve column"].row > .column, +.play-button.grid > [class*="twelve column"].row > .column, +.download-button.grid > [class*="twelve column"].row > .column { + width: 8.33333333% !important; +} +.ui.grid > [class*="thirteen column"].row > .column, +.play-button.grid > [class*="thirteen column"].row > .column, +.download-button.grid > [class*="thirteen column"].row > .column { + width: 7.69230769% !important; +} +.ui.grid > [class*="fourteen column"].row > .column, +.play-button.grid > [class*="fourteen column"].row > .column, +.download-button.grid > [class*="fourteen column"].row > .column { + width: 7.14285714% !important; +} +.ui.grid > [class*="fifteen column"].row > .column, +.play-button.grid > [class*="fifteen column"].row > .column, +.download-button.grid > [class*="fifteen column"].row > .column { + width: 6.66666667% !important; +} +.ui.grid > [class*="sixteen column"].row > .column, +.play-button.grid > [class*="sixteen column"].row > .column, +.download-button.grid > [class*="sixteen column"].row > .column { + width: 6.25% !important; +} +/* Celled Page */ +.ui.celled.page.grid, +.play-button.celled.page.grid, +.download-button.celled.page.grid { + box-shadow: none; +} +/*------------------- + Column Width +--------------------*/ +/* Sizing Combinations */ +.ui.grid > .row > [class*="one wide"].column, +.ui.grid > .column.row > [class*="one wide"].column, +.ui.grid > [class*="one wide"].column, +.ui.column.grid > [class*="one wide"].column, +.play-button.grid > .row > [class*="one wide"].column, +.play-button.grid > .column.row > [class*="one wide"].column, +.play-button.grid > [class*="one wide"].column, +.play-button.column.grid > [class*="one wide"].column, +.download-button.grid > .row > [class*="one wide"].column, +.download-button.grid > .column.row > [class*="one wide"].column, +.download-button.grid > [class*="one wide"].column, +.download-button.column.grid > [class*="one wide"].column { + width: 6.25% !important; +} +.ui.grid > .row > [class*="two wide"].column, +.ui.grid > .column.row > [class*="two wide"].column, +.ui.grid > [class*="two wide"].column, +.ui.column.grid > [class*="two wide"].column, +.play-button.grid > .row > [class*="two wide"].column, +.play-button.grid > .column.row > [class*="two wide"].column, +.play-button.grid > [class*="two wide"].column, +.play-button.column.grid > [class*="two wide"].column, +.download-button.grid > .row > [class*="two wide"].column, +.download-button.grid > .column.row > [class*="two wide"].column, +.download-button.grid > [class*="two wide"].column, +.download-button.column.grid > [class*="two wide"].column { + width: 12.5% !important; +} +.ui.grid > .row > [class*="three wide"].column, +.ui.grid > .column.row > [class*="three wide"].column, +.ui.grid > [class*="three wide"].column, +.ui.column.grid > [class*="three wide"].column, +.play-button.grid > .row > [class*="three wide"].column, +.play-button.grid > .column.row > [class*="three wide"].column, +.play-button.grid > [class*="three wide"].column, +.play-button.column.grid > [class*="three wide"].column, +.download-button.grid > .row > [class*="three wide"].column, +.download-button.grid > .column.row > [class*="three wide"].column, +.download-button.grid > [class*="three wide"].column, +.download-button.column.grid > [class*="three wide"].column { + width: 18.75% !important; +} +.ui.grid > .row > [class*="four wide"].column, +.ui.grid > .column.row > [class*="four wide"].column, +.ui.grid > [class*="four wide"].column, +.ui.column.grid > [class*="four wide"].column, +.play-button.grid > .row > [class*="four wide"].column, +.play-button.grid > .column.row > [class*="four wide"].column, +.play-button.grid > [class*="four wide"].column, +.play-button.column.grid > [class*="four wide"].column, +.download-button.grid > .row > [class*="four wide"].column, +.download-button.grid > .column.row > [class*="four wide"].column, +.download-button.grid > [class*="four wide"].column, +.download-button.column.grid > [class*="four wide"].column { + width: 25% !important; +} +.ui.grid > .row > [class*="five wide"].column, +.ui.grid > .column.row > [class*="five wide"].column, +.ui.grid > [class*="five wide"].column, +.ui.column.grid > [class*="five wide"].column, +.play-button.grid > .row > [class*="five wide"].column, +.play-button.grid > .column.row > [class*="five wide"].column, +.play-button.grid > [class*="five wide"].column, +.play-button.column.grid > [class*="five wide"].column, +.download-button.grid > .row > [class*="five wide"].column, +.download-button.grid > .column.row > [class*="five wide"].column, +.download-button.grid > [class*="five wide"].column, +.download-button.column.grid > [class*="five wide"].column { + width: 31.25% !important; +} +.ui.grid > .row > [class*="six wide"].column, +.ui.grid > .column.row > [class*="six wide"].column, +.ui.grid > [class*="six wide"].column, +.ui.column.grid > [class*="six wide"].column, +.play-button.grid > .row > [class*="six wide"].column, +.play-button.grid > .column.row > [class*="six wide"].column, +.play-button.grid > [class*="six wide"].column, +.play-button.column.grid > [class*="six wide"].column, +.download-button.grid > .row > [class*="six wide"].column, +.download-button.grid > .column.row > [class*="six wide"].column, +.download-button.grid > [class*="six wide"].column, +.download-button.column.grid > [class*="six wide"].column { + width: 37.5% !important; +} +.ui.grid > .row > [class*="seven wide"].column, +.ui.grid > .column.row > [class*="seven wide"].column, +.ui.grid > [class*="seven wide"].column, +.ui.column.grid > [class*="seven wide"].column, +.play-button.grid > .row > [class*="seven wide"].column, +.play-button.grid > .column.row > [class*="seven wide"].column, +.play-button.grid > [class*="seven wide"].column, +.play-button.column.grid > [class*="seven wide"].column, +.download-button.grid > .row > [class*="seven wide"].column, +.download-button.grid > .column.row > [class*="seven wide"].column, +.download-button.grid > [class*="seven wide"].column, +.download-button.column.grid > [class*="seven wide"].column { + width: 43.75% !important; +} +.ui.grid > .row > [class*="eight wide"].column, +.ui.grid > .column.row > [class*="eight wide"].column, +.ui.grid > [class*="eight wide"].column, +.ui.column.grid > [class*="eight wide"].column, +.play-button.grid > .row > [class*="eight wide"].column, +.play-button.grid > .column.row > [class*="eight wide"].column, +.play-button.grid > [class*="eight wide"].column, +.play-button.column.grid > [class*="eight wide"].column, +.download-button.grid > .row > [class*="eight wide"].column, +.download-button.grid > .column.row > [class*="eight wide"].column, +.download-button.grid > [class*="eight wide"].column, +.download-button.column.grid > [class*="eight wide"].column { + width: 50% !important; +} +.ui.grid > .row > [class*="nine wide"].column, +.ui.grid > .column.row > [class*="nine wide"].column, +.ui.grid > [class*="nine wide"].column, +.ui.column.grid > [class*="nine wide"].column, +.play-button.grid > .row > [class*="nine wide"].column, +.play-button.grid > .column.row > [class*="nine wide"].column, +.play-button.grid > [class*="nine wide"].column, +.play-button.column.grid > [class*="nine wide"].column, +.download-button.grid > .row > [class*="nine wide"].column, +.download-button.grid > .column.row > [class*="nine wide"].column, +.download-button.grid > [class*="nine wide"].column, +.download-button.column.grid > [class*="nine wide"].column { + width: 56.25% !important; +} +.ui.grid > .row > [class*="ten wide"].column, +.ui.grid > .column.row > [class*="ten wide"].column, +.ui.grid > [class*="ten wide"].column, +.ui.column.grid > [class*="ten wide"].column, +.play-button.grid > .row > [class*="ten wide"].column, +.play-button.grid > .column.row > [class*="ten wide"].column, +.play-button.grid > [class*="ten wide"].column, +.play-button.column.grid > [class*="ten wide"].column, +.download-button.grid > .row > [class*="ten wide"].column, +.download-button.grid > .column.row > [class*="ten wide"].column, +.download-button.grid > [class*="ten wide"].column, +.download-button.column.grid > [class*="ten wide"].column { + width: 62.5% !important; +} +.ui.grid > .row > [class*="eleven wide"].column, +.ui.grid > .column.row > [class*="eleven wide"].column, +.ui.grid > [class*="eleven wide"].column, +.ui.column.grid > [class*="eleven wide"].column, +.play-button.grid > .row > [class*="eleven wide"].column, +.play-button.grid > .column.row > [class*="eleven wide"].column, +.play-button.grid > [class*="eleven wide"].column, +.play-button.column.grid > [class*="eleven wide"].column, +.download-button.grid > .row > [class*="eleven wide"].column, +.download-button.grid > .column.row > [class*="eleven wide"].column, +.download-button.grid > [class*="eleven wide"].column, +.download-button.column.grid > [class*="eleven wide"].column { + width: 68.75% !important; +} +.ui.grid > .row > [class*="twelve wide"].column, +.ui.grid > .column.row > [class*="twelve wide"].column, +.ui.grid > [class*="twelve wide"].column, +.ui.column.grid > [class*="twelve wide"].column, +.play-button.grid > .row > [class*="twelve wide"].column, +.play-button.grid > .column.row > [class*="twelve wide"].column, +.play-button.grid > [class*="twelve wide"].column, +.play-button.column.grid > [class*="twelve wide"].column, +.download-button.grid > .row > [class*="twelve wide"].column, +.download-button.grid > .column.row > [class*="twelve wide"].column, +.download-button.grid > [class*="twelve wide"].column, +.download-button.column.grid > [class*="twelve wide"].column { + width: 75% !important; +} +.ui.grid > .row > [class*="thirteen wide"].column, +.ui.grid > .column.row > [class*="thirteen wide"].column, +.ui.grid > [class*="thirteen wide"].column, +.ui.column.grid > [class*="thirteen wide"].column, +.play-button.grid > .row > [class*="thirteen wide"].column, +.play-button.grid > .column.row > [class*="thirteen wide"].column, +.play-button.grid > [class*="thirteen wide"].column, +.play-button.column.grid > [class*="thirteen wide"].column, +.download-button.grid > .row > [class*="thirteen wide"].column, +.download-button.grid > .column.row > [class*="thirteen wide"].column, +.download-button.grid > [class*="thirteen wide"].column, +.download-button.column.grid > [class*="thirteen wide"].column { + width: 81.25% !important; +} +.ui.grid > .row > [class*="fourteen wide"].column, +.ui.grid > .column.row > [class*="fourteen wide"].column, +.ui.grid > [class*="fourteen wide"].column, +.ui.column.grid > [class*="fourteen wide"].column, +.play-button.grid > .row > [class*="fourteen wide"].column, +.play-button.grid > .column.row > [class*="fourteen wide"].column, +.play-button.grid > [class*="fourteen wide"].column, +.play-button.column.grid > [class*="fourteen wide"].column, +.download-button.grid > .row > [class*="fourteen wide"].column, +.download-button.grid > .column.row > [class*="fourteen wide"].column, +.download-button.grid > [class*="fourteen wide"].column, +.download-button.column.grid > [class*="fourteen wide"].column { + width: 87.5% !important; +} +.ui.grid > .row > [class*="fifteen wide"].column, +.ui.grid > .column.row > [class*="fifteen wide"].column, +.ui.grid > [class*="fifteen wide"].column, +.ui.column.grid > [class*="fifteen wide"].column, +.play-button.grid > .row > [class*="fifteen wide"].column, +.play-button.grid > .column.row > [class*="fifteen wide"].column, +.play-button.grid > [class*="fifteen wide"].column, +.play-button.column.grid > [class*="fifteen wide"].column, +.download-button.grid > .row > [class*="fifteen wide"].column, +.download-button.grid > .column.row > [class*="fifteen wide"].column, +.download-button.grid > [class*="fifteen wide"].column, +.download-button.column.grid > [class*="fifteen wide"].column { + width: 93.75% !important; +} +.ui.grid > .row > [class*="sixteen wide"].column, +.ui.grid > .column.row > [class*="sixteen wide"].column, +.ui.grid > [class*="sixteen wide"].column, +.ui.column.grid > [class*="sixteen wide"].column, +.play-button.grid > .row > [class*="sixteen wide"].column, +.play-button.grid > .column.row > [class*="sixteen wide"].column, +.play-button.grid > [class*="sixteen wide"].column, +.play-button.column.grid > [class*="sixteen wide"].column, +.download-button.grid > .row > [class*="sixteen wide"].column, +.download-button.grid > .column.row > [class*="sixteen wide"].column, +.download-button.grid > [class*="sixteen wide"].column, +.download-button.column.grid > [class*="sixteen wide"].column { + width: 100% !important; +} +/*---------------------- + Width per Device +-----------------------*/ +/* Mobile Sizing Combinations */ +@media only screen and (min-width: 320px) and (max-width: 767px) { + .ui.grid > .row > [class*="one wide mobile"].column, + .ui.grid > .column.row > [class*="one wide mobile"].column, + .ui.grid > [class*="one wide mobile"].column, + .ui.column.grid > [class*="one wide mobile"].column, + .play-button.grid > .row > [class*="one wide mobile"].column, + .play-button.grid > .column.row > [class*="one wide mobile"].column, + .play-button.grid > [class*="one wide mobile"].column, + .play-button.column.grid > [class*="one wide mobile"].column, + .download-button.grid > .row > [class*="one wide mobile"].column, + .download-button.grid > .column.row > [class*="one wide mobile"].column, + .download-button.grid > [class*="one wide mobile"].column, + .download-button.column.grid > [class*="one wide mobile"].column { + width: 6.25% !important; + } + .ui.grid > .row > [class*="two wide mobile"].column, + .ui.grid > .column.row > [class*="two wide mobile"].column, + .ui.grid > [class*="two wide mobile"].column, + .ui.column.grid > [class*="two wide mobile"].column, + .play-button.grid > .row > [class*="two wide mobile"].column, + .play-button.grid > .column.row > [class*="two wide mobile"].column, + .play-button.grid > [class*="two wide mobile"].column, + .play-button.column.grid > [class*="two wide mobile"].column, + .download-button.grid > .row > [class*="two wide mobile"].column, + .download-button.grid > .column.row > [class*="two wide mobile"].column, + .download-button.grid > [class*="two wide mobile"].column, + .download-button.column.grid > [class*="two wide mobile"].column { + width: 12.5% !important; + } + .ui.grid > .row > [class*="three wide mobile"].column, + .ui.grid > .column.row > [class*="three wide mobile"].column, + .ui.grid > [class*="three wide mobile"].column, + .ui.column.grid > [class*="three wide mobile"].column, + .play-button.grid > .row > [class*="three wide mobile"].column, + .play-button.grid > .column.row > [class*="three wide mobile"].column, + .play-button.grid > [class*="three wide mobile"].column, + .play-button.column.grid > [class*="three wide mobile"].column, + .download-button.grid > .row > [class*="three wide mobile"].column, + .download-button.grid > .column.row > [class*="three wide mobile"].column, + .download-button.grid > [class*="three wide mobile"].column, + .download-button.column.grid > [class*="three wide mobile"].column { + width: 18.75% !important; + } + .ui.grid > .row > [class*="four wide mobile"].column, + .ui.grid > .column.row > [class*="four wide mobile"].column, + .ui.grid > [class*="four wide mobile"].column, + .ui.column.grid > [class*="four wide mobile"].column, + .play-button.grid > .row > [class*="four wide mobile"].column, + .play-button.grid > .column.row > [class*="four wide mobile"].column, + .play-button.grid > [class*="four wide mobile"].column, + .play-button.column.grid > [class*="four wide mobile"].column, + .download-button.grid > .row > [class*="four wide mobile"].column, + .download-button.grid > .column.row > [class*="four wide mobile"].column, + .download-button.grid > [class*="four wide mobile"].column, + .download-button.column.grid > [class*="four wide mobile"].column { + width: 25% !important; + } + .ui.grid > .row > [class*="five wide mobile"].column, + .ui.grid > .column.row > [class*="five wide mobile"].column, + .ui.grid > [class*="five wide mobile"].column, + .ui.column.grid > [class*="five wide mobile"].column, + .play-button.grid > .row > [class*="five wide mobile"].column, + .play-button.grid > .column.row > [class*="five wide mobile"].column, + .play-button.grid > [class*="five wide mobile"].column, + .play-button.column.grid > [class*="five wide mobile"].column, + .download-button.grid > .row > [class*="five wide mobile"].column, + .download-button.grid > .column.row > [class*="five wide mobile"].column, + .download-button.grid > [class*="five wide mobile"].column, + .download-button.column.grid > [class*="five wide mobile"].column { + width: 31.25% !important; + } + .ui.grid > .row > [class*="six wide mobile"].column, + .ui.grid > .column.row > [class*="six wide mobile"].column, + .ui.grid > [class*="six wide mobile"].column, + .ui.column.grid > [class*="six wide mobile"].column, + .play-button.grid > .row > [class*="six wide mobile"].column, + .play-button.grid > .column.row > [class*="six wide mobile"].column, + .play-button.grid > [class*="six wide mobile"].column, + .play-button.column.grid > [class*="six wide mobile"].column, + .download-button.grid > .row > [class*="six wide mobile"].column, + .download-button.grid > .column.row > [class*="six wide mobile"].column, + .download-button.grid > [class*="six wide mobile"].column, + .download-button.column.grid > [class*="six wide mobile"].column { + width: 37.5% !important; + } + .ui.grid > .row > [class*="seven wide mobile"].column, + .ui.grid > .column.row > [class*="seven wide mobile"].column, + .ui.grid > [class*="seven wide mobile"].column, + .ui.column.grid > [class*="seven wide mobile"].column, + .play-button.grid > .row > [class*="seven wide mobile"].column, + .play-button.grid > .column.row > [class*="seven wide mobile"].column, + .play-button.grid > [class*="seven wide mobile"].column, + .play-button.column.grid > [class*="seven wide mobile"].column, + .download-button.grid > .row > [class*="seven wide mobile"].column, + .download-button.grid > .column.row > [class*="seven wide mobile"].column, + .download-button.grid > [class*="seven wide mobile"].column, + .download-button.column.grid > [class*="seven wide mobile"].column { + width: 43.75% !important; + } + .ui.grid > .row > [class*="eight wide mobile"].column, + .ui.grid > .column.row > [class*="eight wide mobile"].column, + .ui.grid > [class*="eight wide mobile"].column, + .ui.column.grid > [class*="eight wide mobile"].column, + .play-button.grid > .row > [class*="eight wide mobile"].column, + .play-button.grid > .column.row > [class*="eight wide mobile"].column, + .play-button.grid > [class*="eight wide mobile"].column, + .play-button.column.grid > [class*="eight wide mobile"].column, + .download-button.grid > .row > [class*="eight wide mobile"].column, + .download-button.grid > .column.row > [class*="eight wide mobile"].column, + .download-button.grid > [class*="eight wide mobile"].column, + .download-button.column.grid > [class*="eight wide mobile"].column { + width: 50% !important; + } + .ui.grid > .row > [class*="nine wide mobile"].column, + .ui.grid > .column.row > [class*="nine wide mobile"].column, + .ui.grid > [class*="nine wide mobile"].column, + .ui.column.grid > [class*="nine wide mobile"].column, + .play-button.grid > .row > [class*="nine wide mobile"].column, + .play-button.grid > .column.row > [class*="nine wide mobile"].column, + .play-button.grid > [class*="nine wide mobile"].column, + .play-button.column.grid > [class*="nine wide mobile"].column, + .download-button.grid > .row > [class*="nine wide mobile"].column, + .download-button.grid > .column.row > [class*="nine wide mobile"].column, + .download-button.grid > [class*="nine wide mobile"].column, + .download-button.column.grid > [class*="nine wide mobile"].column { + width: 56.25% !important; + } + .ui.grid > .row > [class*="ten wide mobile"].column, + .ui.grid > .column.row > [class*="ten wide mobile"].column, + .ui.grid > [class*="ten wide mobile"].column, + .ui.column.grid > [class*="ten wide mobile"].column, + .play-button.grid > .row > [class*="ten wide mobile"].column, + .play-button.grid > .column.row > [class*="ten wide mobile"].column, + .play-button.grid > [class*="ten wide mobile"].column, + .play-button.column.grid > [class*="ten wide mobile"].column, + .download-button.grid > .row > [class*="ten wide mobile"].column, + .download-button.grid > .column.row > [class*="ten wide mobile"].column, + .download-button.grid > [class*="ten wide mobile"].column, + .download-button.column.grid > [class*="ten wide mobile"].column { + width: 62.5% !important; + } + .ui.grid > .row > [class*="eleven wide mobile"].column, + .ui.grid > .column.row > [class*="eleven wide mobile"].column, + .ui.grid > [class*="eleven wide mobile"].column, + .ui.column.grid > [class*="eleven wide mobile"].column, + .play-button.grid > .row > [class*="eleven wide mobile"].column, + .play-button.grid > .column.row > [class*="eleven wide mobile"].column, + .play-button.grid > [class*="eleven wide mobile"].column, + .play-button.column.grid > [class*="eleven wide mobile"].column, + .download-button.grid > .row > [class*="eleven wide mobile"].column, + .download-button.grid > .column.row > [class*="eleven wide mobile"].column, + .download-button.grid > [class*="eleven wide mobile"].column, + .download-button.column.grid > [class*="eleven wide mobile"].column { + width: 68.75% !important; + } + .ui.grid > .row > [class*="twelve wide mobile"].column, + .ui.grid > .column.row > [class*="twelve wide mobile"].column, + .ui.grid > [class*="twelve wide mobile"].column, + .ui.column.grid > [class*="twelve wide mobile"].column, + .play-button.grid > .row > [class*="twelve wide mobile"].column, + .play-button.grid > .column.row > [class*="twelve wide mobile"].column, + .play-button.grid > [class*="twelve wide mobile"].column, + .play-button.column.grid > [class*="twelve wide mobile"].column, + .download-button.grid > .row > [class*="twelve wide mobile"].column, + .download-button.grid > .column.row > [class*="twelve wide mobile"].column, + .download-button.grid > [class*="twelve wide mobile"].column, + .download-button.column.grid > [class*="twelve wide mobile"].column { + width: 75% !important; + } + .ui.grid > .row > [class*="thirteen wide mobile"].column, + .ui.grid > .column.row > [class*="thirteen wide mobile"].column, + .ui.grid > [class*="thirteen wide mobile"].column, + .ui.column.grid > [class*="thirteen wide mobile"].column, + .play-button.grid > .row > [class*="thirteen wide mobile"].column, + .play-button.grid > .column.row > [class*="thirteen wide mobile"].column, + .play-button.grid > [class*="thirteen wide mobile"].column, + .play-button.column.grid > [class*="thirteen wide mobile"].column, + .download-button.grid > .row > [class*="thirteen wide mobile"].column, + .download-button.grid > .column.row > [class*="thirteen wide mobile"].column, + .download-button.grid > [class*="thirteen wide mobile"].column, + .download-button.column.grid > [class*="thirteen wide mobile"].column { + width: 81.25% !important; + } + .ui.grid > .row > [class*="fourteen wide mobile"].column, + .ui.grid > .column.row > [class*="fourteen wide mobile"].column, + .ui.grid > [class*="fourteen wide mobile"].column, + .ui.column.grid > [class*="fourteen wide mobile"].column, + .play-button.grid > .row > [class*="fourteen wide mobile"].column, + .play-button.grid > .column.row > [class*="fourteen wide mobile"].column, + .play-button.grid > [class*="fourteen wide mobile"].column, + .play-button.column.grid > [class*="fourteen wide mobile"].column, + .download-button.grid > .row > [class*="fourteen wide mobile"].column, + .download-button.grid > .column.row > [class*="fourteen wide mobile"].column, + .download-button.grid > [class*="fourteen wide mobile"].column, + .download-button.column.grid > [class*="fourteen wide mobile"].column { + width: 87.5% !important; + } + .ui.grid > .row > [class*="fifteen wide mobile"].column, + .ui.grid > .column.row > [class*="fifteen wide mobile"].column, + .ui.grid > [class*="fifteen wide mobile"].column, + .ui.column.grid > [class*="fifteen wide mobile"].column, + .play-button.grid > .row > [class*="fifteen wide mobile"].column, + .play-button.grid > .column.row > [class*="fifteen wide mobile"].column, + .play-button.grid > [class*="fifteen wide mobile"].column, + .play-button.column.grid > [class*="fifteen wide mobile"].column, + .download-button.grid > .row > [class*="fifteen wide mobile"].column, + .download-button.grid > .column.row > [class*="fifteen wide mobile"].column, + .download-button.grid > [class*="fifteen wide mobile"].column, + .download-button.column.grid > [class*="fifteen wide mobile"].column { + width: 93.75% !important; + } + .ui.grid > .row > [class*="sixteen wide mobile"].column, + .ui.grid > .column.row > [class*="sixteen wide mobile"].column, + .ui.grid > [class*="sixteen wide mobile"].column, + .ui.column.grid > [class*="sixteen wide mobile"].column, + .play-button.grid > .row > [class*="sixteen wide mobile"].column, + .play-button.grid > .column.row > [class*="sixteen wide mobile"].column, + .play-button.grid > [class*="sixteen wide mobile"].column, + .play-button.column.grid > [class*="sixteen wide mobile"].column, + .download-button.grid > .row > [class*="sixteen wide mobile"].column, + .download-button.grid > .column.row > [class*="sixteen wide mobile"].column, + .download-button.grid > [class*="sixteen wide mobile"].column, + .download-button.column.grid > [class*="sixteen wide mobile"].column { + width: 100% !important; + } +} +/* Tablet Sizing Combinations */ +@media only screen and (min-width: 768px) and (max-width: 991px) { + .ui.grid > .row > [class*="one wide tablet"].column, + .ui.grid > .column.row > [class*="one wide tablet"].column, + .ui.grid > [class*="one wide tablet"].column, + .ui.column.grid > [class*="one wide tablet"].column, + .play-button.grid > .row > [class*="one wide tablet"].column, + .play-button.grid > .column.row > [class*="one wide tablet"].column, + .play-button.grid > [class*="one wide tablet"].column, + .play-button.column.grid > [class*="one wide tablet"].column, + .download-button.grid > .row > [class*="one wide tablet"].column, + .download-button.grid > .column.row > [class*="one wide tablet"].column, + .download-button.grid > [class*="one wide tablet"].column, + .download-button.column.grid > [class*="one wide tablet"].column { + width: 6.25% !important; + } + .ui.grid > .row > [class*="two wide tablet"].column, + .ui.grid > .column.row > [class*="two wide tablet"].column, + .ui.grid > [class*="two wide tablet"].column, + .ui.column.grid > [class*="two wide tablet"].column, + .play-button.grid > .row > [class*="two wide tablet"].column, + .play-button.grid > .column.row > [class*="two wide tablet"].column, + .play-button.grid > [class*="two wide tablet"].column, + .play-button.column.grid > [class*="two wide tablet"].column, + .download-button.grid > .row > [class*="two wide tablet"].column, + .download-button.grid > .column.row > [class*="two wide tablet"].column, + .download-button.grid > [class*="two wide tablet"].column, + .download-button.column.grid > [class*="two wide tablet"].column { + width: 12.5% !important; + } + .ui.grid > .row > [class*="three wide tablet"].column, + .ui.grid > .column.row > [class*="three wide tablet"].column, + .ui.grid > [class*="three wide tablet"].column, + .ui.column.grid > [class*="three wide tablet"].column, + .play-button.grid > .row > [class*="three wide tablet"].column, + .play-button.grid > .column.row > [class*="three wide tablet"].column, + .play-button.grid > [class*="three wide tablet"].column, + .play-button.column.grid > [class*="three wide tablet"].column, + .download-button.grid > .row > [class*="three wide tablet"].column, + .download-button.grid > .column.row > [class*="three wide tablet"].column, + .download-button.grid > [class*="three wide tablet"].column, + .download-button.column.grid > [class*="three wide tablet"].column { + width: 18.75% !important; + } + .ui.grid > .row > [class*="four wide tablet"].column, + .ui.grid > .column.row > [class*="four wide tablet"].column, + .ui.grid > [class*="four wide tablet"].column, + .ui.column.grid > [class*="four wide tablet"].column, + .play-button.grid > .row > [class*="four wide tablet"].column, + .play-button.grid > .column.row > [class*="four wide tablet"].column, + .play-button.grid > [class*="four wide tablet"].column, + .play-button.column.grid > [class*="four wide tablet"].column, + .download-button.grid > .row > [class*="four wide tablet"].column, + .download-button.grid > .column.row > [class*="four wide tablet"].column, + .download-button.grid > [class*="four wide tablet"].column, + .download-button.column.grid > [class*="four wide tablet"].column { + width: 25% !important; + } + .ui.grid > .row > [class*="five wide tablet"].column, + .ui.grid > .column.row > [class*="five wide tablet"].column, + .ui.grid > [class*="five wide tablet"].column, + .ui.column.grid > [class*="five wide tablet"].column, + .play-button.grid > .row > [class*="five wide tablet"].column, + .play-button.grid > .column.row > [class*="five wide tablet"].column, + .play-button.grid > [class*="five wide tablet"].column, + .play-button.column.grid > [class*="five wide tablet"].column, + .download-button.grid > .row > [class*="five wide tablet"].column, + .download-button.grid > .column.row > [class*="five wide tablet"].column, + .download-button.grid > [class*="five wide tablet"].column, + .download-button.column.grid > [class*="five wide tablet"].column { + width: 31.25% !important; + } + .ui.grid > .row > [class*="six wide tablet"].column, + .ui.grid > .column.row > [class*="six wide tablet"].column, + .ui.grid > [class*="six wide tablet"].column, + .ui.column.grid > [class*="six wide tablet"].column, + .play-button.grid > .row > [class*="six wide tablet"].column, + .play-button.grid > .column.row > [class*="six wide tablet"].column, + .play-button.grid > [class*="six wide tablet"].column, + .play-button.column.grid > [class*="six wide tablet"].column, + .download-button.grid > .row > [class*="six wide tablet"].column, + .download-button.grid > .column.row > [class*="six wide tablet"].column, + .download-button.grid > [class*="six wide tablet"].column, + .download-button.column.grid > [class*="six wide tablet"].column { + width: 37.5% !important; + } + .ui.grid > .row > [class*="seven wide tablet"].column, + .ui.grid > .column.row > [class*="seven wide tablet"].column, + .ui.grid > [class*="seven wide tablet"].column, + .ui.column.grid > [class*="seven wide tablet"].column, + .play-button.grid > .row > [class*="seven wide tablet"].column, + .play-button.grid > .column.row > [class*="seven wide tablet"].column, + .play-button.grid > [class*="seven wide tablet"].column, + .play-button.column.grid > [class*="seven wide tablet"].column, + .download-button.grid > .row > [class*="seven wide tablet"].column, + .download-button.grid > .column.row > [class*="seven wide tablet"].column, + .download-button.grid > [class*="seven wide tablet"].column, + .download-button.column.grid > [class*="seven wide tablet"].column { + width: 43.75% !important; + } + .ui.grid > .row > [class*="eight wide tablet"].column, + .ui.grid > .column.row > [class*="eight wide tablet"].column, + .ui.grid > [class*="eight wide tablet"].column, + .ui.column.grid > [class*="eight wide tablet"].column, + .play-button.grid > .row > [class*="eight wide tablet"].column, + .play-button.grid > .column.row > [class*="eight wide tablet"].column, + .play-button.grid > [class*="eight wide tablet"].column, + .play-button.column.grid > [class*="eight wide tablet"].column, + .download-button.grid > .row > [class*="eight wide tablet"].column, + .download-button.grid > .column.row > [class*="eight wide tablet"].column, + .download-button.grid > [class*="eight wide tablet"].column, + .download-button.column.grid > [class*="eight wide tablet"].column { + width: 50% !important; + } + .ui.grid > .row > [class*="nine wide tablet"].column, + .ui.grid > .column.row > [class*="nine wide tablet"].column, + .ui.grid > [class*="nine wide tablet"].column, + .ui.column.grid > [class*="nine wide tablet"].column, + .play-button.grid > .row > [class*="nine wide tablet"].column, + .play-button.grid > .column.row > [class*="nine wide tablet"].column, + .play-button.grid > [class*="nine wide tablet"].column, + .play-button.column.grid > [class*="nine wide tablet"].column, + .download-button.grid > .row > [class*="nine wide tablet"].column, + .download-button.grid > .column.row > [class*="nine wide tablet"].column, + .download-button.grid > [class*="nine wide tablet"].column, + .download-button.column.grid > [class*="nine wide tablet"].column { + width: 56.25% !important; + } + .ui.grid > .row > [class*="ten wide tablet"].column, + .ui.grid > .column.row > [class*="ten wide tablet"].column, + .ui.grid > [class*="ten wide tablet"].column, + .ui.column.grid > [class*="ten wide tablet"].column, + .play-button.grid > .row > [class*="ten wide tablet"].column, + .play-button.grid > .column.row > [class*="ten wide tablet"].column, + .play-button.grid > [class*="ten wide tablet"].column, + .play-button.column.grid > [class*="ten wide tablet"].column, + .download-button.grid > .row > [class*="ten wide tablet"].column, + .download-button.grid > .column.row > [class*="ten wide tablet"].column, + .download-button.grid > [class*="ten wide tablet"].column, + .download-button.column.grid > [class*="ten wide tablet"].column { + width: 62.5% !important; + } + .ui.grid > .row > [class*="eleven wide tablet"].column, + .ui.grid > .column.row > [class*="eleven wide tablet"].column, + .ui.grid > [class*="eleven wide tablet"].column, + .ui.column.grid > [class*="eleven wide tablet"].column, + .play-button.grid > .row > [class*="eleven wide tablet"].column, + .play-button.grid > .column.row > [class*="eleven wide tablet"].column, + .play-button.grid > [class*="eleven wide tablet"].column, + .play-button.column.grid > [class*="eleven wide tablet"].column, + .download-button.grid > .row > [class*="eleven wide tablet"].column, + .download-button.grid > .column.row > [class*="eleven wide tablet"].column, + .download-button.grid > [class*="eleven wide tablet"].column, + .download-button.column.grid > [class*="eleven wide tablet"].column { + width: 68.75% !important; + } + .ui.grid > .row > [class*="twelve wide tablet"].column, + .ui.grid > .column.row > [class*="twelve wide tablet"].column, + .ui.grid > [class*="twelve wide tablet"].column, + .ui.column.grid > [class*="twelve wide tablet"].column, + .play-button.grid > .row > [class*="twelve wide tablet"].column, + .play-button.grid > .column.row > [class*="twelve wide tablet"].column, + .play-button.grid > [class*="twelve wide tablet"].column, + .play-button.column.grid > [class*="twelve wide tablet"].column, + .download-button.grid > .row > [class*="twelve wide tablet"].column, + .download-button.grid > .column.row > [class*="twelve wide tablet"].column, + .download-button.grid > [class*="twelve wide tablet"].column, + .download-button.column.grid > [class*="twelve wide tablet"].column { + width: 75% !important; + } + .ui.grid > .row > [class*="thirteen wide tablet"].column, + .ui.grid > .column.row > [class*="thirteen wide tablet"].column, + .ui.grid > [class*="thirteen wide tablet"].column, + .ui.column.grid > [class*="thirteen wide tablet"].column, + .play-button.grid > .row > [class*="thirteen wide tablet"].column, + .play-button.grid > .column.row > [class*="thirteen wide tablet"].column, + .play-button.grid > [class*="thirteen wide tablet"].column, + .play-button.column.grid > [class*="thirteen wide tablet"].column, + .download-button.grid > .row > [class*="thirteen wide tablet"].column, + .download-button.grid > .column.row > [class*="thirteen wide tablet"].column, + .download-button.grid > [class*="thirteen wide tablet"].column, + .download-button.column.grid > [class*="thirteen wide tablet"].column { + width: 81.25% !important; + } + .ui.grid > .row > [class*="fourteen wide tablet"].column, + .ui.grid > .column.row > [class*="fourteen wide tablet"].column, + .ui.grid > [class*="fourteen wide tablet"].column, + .ui.column.grid > [class*="fourteen wide tablet"].column, + .play-button.grid > .row > [class*="fourteen wide tablet"].column, + .play-button.grid > .column.row > [class*="fourteen wide tablet"].column, + .play-button.grid > [class*="fourteen wide tablet"].column, + .play-button.column.grid > [class*="fourteen wide tablet"].column, + .download-button.grid > .row > [class*="fourteen wide tablet"].column, + .download-button.grid > .column.row > [class*="fourteen wide tablet"].column, + .download-button.grid > [class*="fourteen wide tablet"].column, + .download-button.column.grid > [class*="fourteen wide tablet"].column { + width: 87.5% !important; + } + .ui.grid > .row > [class*="fifteen wide tablet"].column, + .ui.grid > .column.row > [class*="fifteen wide tablet"].column, + .ui.grid > [class*="fifteen wide tablet"].column, + .ui.column.grid > [class*="fifteen wide tablet"].column, + .play-button.grid > .row > [class*="fifteen wide tablet"].column, + .play-button.grid > .column.row > [class*="fifteen wide tablet"].column, + .play-button.grid > [class*="fifteen wide tablet"].column, + .play-button.column.grid > [class*="fifteen wide tablet"].column, + .download-button.grid > .row > [class*="fifteen wide tablet"].column, + .download-button.grid > .column.row > [class*="fifteen wide tablet"].column, + .download-button.grid > [class*="fifteen wide tablet"].column, + .download-button.column.grid > [class*="fifteen wide tablet"].column { + width: 93.75% !important; + } + .ui.grid > .row > [class*="sixteen wide tablet"].column, + .ui.grid > .column.row > [class*="sixteen wide tablet"].column, + .ui.grid > [class*="sixteen wide tablet"].column, + .ui.column.grid > [class*="sixteen wide tablet"].column, + .play-button.grid > .row > [class*="sixteen wide tablet"].column, + .play-button.grid > .column.row > [class*="sixteen wide tablet"].column, + .play-button.grid > [class*="sixteen wide tablet"].column, + .play-button.column.grid > [class*="sixteen wide tablet"].column, + .download-button.grid > .row > [class*="sixteen wide tablet"].column, + .download-button.grid > .column.row > [class*="sixteen wide tablet"].column, + .download-button.grid > [class*="sixteen wide tablet"].column, + .download-button.column.grid > [class*="sixteen wide tablet"].column { + width: 100% !important; + } +} +/* Computer/Desktop Sizing Combinations */ +@media only screen and (min-width: 992px) { + .ui.grid > .row > [class*="one wide computer"].column, + .ui.grid > .column.row > [class*="one wide computer"].column, + .ui.grid > [class*="one wide computer"].column, + .ui.column.grid > [class*="one wide computer"].column, + .play-button.grid > .row > [class*="one wide computer"].column, + .play-button.grid > .column.row > [class*="one wide computer"].column, + .play-button.grid > [class*="one wide computer"].column, + .play-button.column.grid > [class*="one wide computer"].column, + .download-button.grid > .row > [class*="one wide computer"].column, + .download-button.grid > .column.row > [class*="one wide computer"].column, + .download-button.grid > [class*="one wide computer"].column, + .download-button.column.grid > [class*="one wide computer"].column { + width: 6.25% !important; + } + .ui.grid > .row > [class*="two wide computer"].column, + .ui.grid > .column.row > [class*="two wide computer"].column, + .ui.grid > [class*="two wide computer"].column, + .ui.column.grid > [class*="two wide computer"].column, + .play-button.grid > .row > [class*="two wide computer"].column, + .play-button.grid > .column.row > [class*="two wide computer"].column, + .play-button.grid > [class*="two wide computer"].column, + .play-button.column.grid > [class*="two wide computer"].column, + .download-button.grid > .row > [class*="two wide computer"].column, + .download-button.grid > .column.row > [class*="two wide computer"].column, + .download-button.grid > [class*="two wide computer"].column, + .download-button.column.grid > [class*="two wide computer"].column { + width: 12.5% !important; + } + .ui.grid > .row > [class*="three wide computer"].column, + .ui.grid > .column.row > [class*="three wide computer"].column, + .ui.grid > [class*="three wide computer"].column, + .ui.column.grid > [class*="three wide computer"].column, + .play-button.grid > .row > [class*="three wide computer"].column, + .play-button.grid > .column.row > [class*="three wide computer"].column, + .play-button.grid > [class*="three wide computer"].column, + .play-button.column.grid > [class*="three wide computer"].column, + .download-button.grid > .row > [class*="three wide computer"].column, + .download-button.grid > .column.row > [class*="three wide computer"].column, + .download-button.grid > [class*="three wide computer"].column, + .download-button.column.grid > [class*="three wide computer"].column { + width: 18.75% !important; + } + .ui.grid > .row > [class*="four wide computer"].column, + .ui.grid > .column.row > [class*="four wide computer"].column, + .ui.grid > [class*="four wide computer"].column, + .ui.column.grid > [class*="four wide computer"].column, + .play-button.grid > .row > [class*="four wide computer"].column, + .play-button.grid > .column.row > [class*="four wide computer"].column, + .play-button.grid > [class*="four wide computer"].column, + .play-button.column.grid > [class*="four wide computer"].column, + .download-button.grid > .row > [class*="four wide computer"].column, + .download-button.grid > .column.row > [class*="four wide computer"].column, + .download-button.grid > [class*="four wide computer"].column, + .download-button.column.grid > [class*="four wide computer"].column { + width: 25% !important; + } + .ui.grid > .row > [class*="five wide computer"].column, + .ui.grid > .column.row > [class*="five wide computer"].column, + .ui.grid > [class*="five wide computer"].column, + .ui.column.grid > [class*="five wide computer"].column, + .play-button.grid > .row > [class*="five wide computer"].column, + .play-button.grid > .column.row > [class*="five wide computer"].column, + .play-button.grid > [class*="five wide computer"].column, + .play-button.column.grid > [class*="five wide computer"].column, + .download-button.grid > .row > [class*="five wide computer"].column, + .download-button.grid > .column.row > [class*="five wide computer"].column, + .download-button.grid > [class*="five wide computer"].column, + .download-button.column.grid > [class*="five wide computer"].column { + width: 31.25% !important; + } + .ui.grid > .row > [class*="six wide computer"].column, + .ui.grid > .column.row > [class*="six wide computer"].column, + .ui.grid > [class*="six wide computer"].column, + .ui.column.grid > [class*="six wide computer"].column, + .play-button.grid > .row > [class*="six wide computer"].column, + .play-button.grid > .column.row > [class*="six wide computer"].column, + .play-button.grid > [class*="six wide computer"].column, + .play-button.column.grid > [class*="six wide computer"].column, + .download-button.grid > .row > [class*="six wide computer"].column, + .download-button.grid > .column.row > [class*="six wide computer"].column, + .download-button.grid > [class*="six wide computer"].column, + .download-button.column.grid > [class*="six wide computer"].column { + width: 37.5% !important; + } + .ui.grid > .row > [class*="seven wide computer"].column, + .ui.grid > .column.row > [class*="seven wide computer"].column, + .ui.grid > [class*="seven wide computer"].column, + .ui.column.grid > [class*="seven wide computer"].column, + .play-button.grid > .row > [class*="seven wide computer"].column, + .play-button.grid > .column.row > [class*="seven wide computer"].column, + .play-button.grid > [class*="seven wide computer"].column, + .play-button.column.grid > [class*="seven wide computer"].column, + .download-button.grid > .row > [class*="seven wide computer"].column, + .download-button.grid > .column.row > [class*="seven wide computer"].column, + .download-button.grid > [class*="seven wide computer"].column, + .download-button.column.grid > [class*="seven wide computer"].column { + width: 43.75% !important; + } + .ui.grid > .row > [class*="eight wide computer"].column, + .ui.grid > .column.row > [class*="eight wide computer"].column, + .ui.grid > [class*="eight wide computer"].column, + .ui.column.grid > [class*="eight wide computer"].column, + .play-button.grid > .row > [class*="eight wide computer"].column, + .play-button.grid > .column.row > [class*="eight wide computer"].column, + .play-button.grid > [class*="eight wide computer"].column, + .play-button.column.grid > [class*="eight wide computer"].column, + .download-button.grid > .row > [class*="eight wide computer"].column, + .download-button.grid > .column.row > [class*="eight wide computer"].column, + .download-button.grid > [class*="eight wide computer"].column, + .download-button.column.grid > [class*="eight wide computer"].column { + width: 50% !important; + } + .ui.grid > .row > [class*="nine wide computer"].column, + .ui.grid > .column.row > [class*="nine wide computer"].column, + .ui.grid > [class*="nine wide computer"].column, + .ui.column.grid > [class*="nine wide computer"].column, + .play-button.grid > .row > [class*="nine wide computer"].column, + .play-button.grid > .column.row > [class*="nine wide computer"].column, + .play-button.grid > [class*="nine wide computer"].column, + .play-button.column.grid > [class*="nine wide computer"].column, + .download-button.grid > .row > [class*="nine wide computer"].column, + .download-button.grid > .column.row > [class*="nine wide computer"].column, + .download-button.grid > [class*="nine wide computer"].column, + .download-button.column.grid > [class*="nine wide computer"].column { + width: 56.25% !important; + } + .ui.grid > .row > [class*="ten wide computer"].column, + .ui.grid > .column.row > [class*="ten wide computer"].column, + .ui.grid > [class*="ten wide computer"].column, + .ui.column.grid > [class*="ten wide computer"].column, + .play-button.grid > .row > [class*="ten wide computer"].column, + .play-button.grid > .column.row > [class*="ten wide computer"].column, + .play-button.grid > [class*="ten wide computer"].column, + .play-button.column.grid > [class*="ten wide computer"].column, + .download-button.grid > .row > [class*="ten wide computer"].column, + .download-button.grid > .column.row > [class*="ten wide computer"].column, + .download-button.grid > [class*="ten wide computer"].column, + .download-button.column.grid > [class*="ten wide computer"].column { + width: 62.5% !important; + } + .ui.grid > .row > [class*="eleven wide computer"].column, + .ui.grid > .column.row > [class*="eleven wide computer"].column, + .ui.grid > [class*="eleven wide computer"].column, + .ui.column.grid > [class*="eleven wide computer"].column, + .play-button.grid > .row > [class*="eleven wide computer"].column, + .play-button.grid > .column.row > [class*="eleven wide computer"].column, + .play-button.grid > [class*="eleven wide computer"].column, + .play-button.column.grid > [class*="eleven wide computer"].column, + .download-button.grid > .row > [class*="eleven wide computer"].column, + .download-button.grid > .column.row > [class*="eleven wide computer"].column, + .download-button.grid > [class*="eleven wide computer"].column, + .download-button.column.grid > [class*="eleven wide computer"].column { + width: 68.75% !important; + } + .ui.grid > .row > [class*="twelve wide computer"].column, + .ui.grid > .column.row > [class*="twelve wide computer"].column, + .ui.grid > [class*="twelve wide computer"].column, + .ui.column.grid > [class*="twelve wide computer"].column, + .play-button.grid > .row > [class*="twelve wide computer"].column, + .play-button.grid > .column.row > [class*="twelve wide computer"].column, + .play-button.grid > [class*="twelve wide computer"].column, + .play-button.column.grid > [class*="twelve wide computer"].column, + .download-button.grid > .row > [class*="twelve wide computer"].column, + .download-button.grid > .column.row > [class*="twelve wide computer"].column, + .download-button.grid > [class*="twelve wide computer"].column, + .download-button.column.grid > [class*="twelve wide computer"].column { + width: 75% !important; + } + .ui.grid > .row > [class*="thirteen wide computer"].column, + .ui.grid > .column.row > [class*="thirteen wide computer"].column, + .ui.grid > [class*="thirteen wide computer"].column, + .ui.column.grid > [class*="thirteen wide computer"].column, + .play-button.grid > .row > [class*="thirteen wide computer"].column, + .play-button.grid > .column.row > [class*="thirteen wide computer"].column, + .play-button.grid > [class*="thirteen wide computer"].column, + .play-button.column.grid > [class*="thirteen wide computer"].column, + .download-button.grid > .row > [class*="thirteen wide computer"].column, + .download-button.grid > .column.row > [class*="thirteen wide computer"].column, + .download-button.grid > [class*="thirteen wide computer"].column, + .download-button.column.grid > [class*="thirteen wide computer"].column { + width: 81.25% !important; + } + .ui.grid > .row > [class*="fourteen wide computer"].column, + .ui.grid > .column.row > [class*="fourteen wide computer"].column, + .ui.grid > [class*="fourteen wide computer"].column, + .ui.column.grid > [class*="fourteen wide computer"].column, + .play-button.grid > .row > [class*="fourteen wide computer"].column, + .play-button.grid > .column.row > [class*="fourteen wide computer"].column, + .play-button.grid > [class*="fourteen wide computer"].column, + .play-button.column.grid > [class*="fourteen wide computer"].column, + .download-button.grid > .row > [class*="fourteen wide computer"].column, + .download-button.grid > .column.row > [class*="fourteen wide computer"].column, + .download-button.grid > [class*="fourteen wide computer"].column, + .download-button.column.grid > [class*="fourteen wide computer"].column { + width: 87.5% !important; + } + .ui.grid > .row > [class*="fifteen wide computer"].column, + .ui.grid > .column.row > [class*="fifteen wide computer"].column, + .ui.grid > [class*="fifteen wide computer"].column, + .ui.column.grid > [class*="fifteen wide computer"].column, + .play-button.grid > .row > [class*="fifteen wide computer"].column, + .play-button.grid > .column.row > [class*="fifteen wide computer"].column, + .play-button.grid > [class*="fifteen wide computer"].column, + .play-button.column.grid > [class*="fifteen wide computer"].column, + .download-button.grid > .row > [class*="fifteen wide computer"].column, + .download-button.grid > .column.row > [class*="fifteen wide computer"].column, + .download-button.grid > [class*="fifteen wide computer"].column, + .download-button.column.grid > [class*="fifteen wide computer"].column { + width: 93.75% !important; + } + .ui.grid > .row > [class*="sixteen wide computer"].column, + .ui.grid > .column.row > [class*="sixteen wide computer"].column, + .ui.grid > [class*="sixteen wide computer"].column, + .ui.column.grid > [class*="sixteen wide computer"].column, + .play-button.grid > .row > [class*="sixteen wide computer"].column, + .play-button.grid > .column.row > [class*="sixteen wide computer"].column, + .play-button.grid > [class*="sixteen wide computer"].column, + .play-button.column.grid > [class*="sixteen wide computer"].column, + .download-button.grid > .row > [class*="sixteen wide computer"].column, + .download-button.grid > .column.row > [class*="sixteen wide computer"].column, + .download-button.grid > [class*="sixteen wide computer"].column, + .download-button.column.grid > [class*="sixteen wide computer"].column { + width: 100% !important; + } +} +/* Large Monitor Sizing Combinations */ +@media only screen and (min-width: 1200px) and (max-width: 1919px) { + .ui.grid > .row > [class*="one wide large screen"].column, + .ui.grid > .column.row > [class*="one wide large screen"].column, + .ui.grid > [class*="one wide large screen"].column, + .ui.column.grid > [class*="one wide large screen"].column, + .play-button.grid > .row > [class*="one wide large screen"].column, + .play-button.grid > .column.row > [class*="one wide large screen"].column, + .play-button.grid > [class*="one wide large screen"].column, + .play-button.column.grid > [class*="one wide large screen"].column, + .download-button.grid > .row > [class*="one wide large screen"].column, + .download-button.grid > .column.row > [class*="one wide large screen"].column, + .download-button.grid > [class*="one wide large screen"].column, + .download-button.column.grid > [class*="one wide large screen"].column { + width: 6.25% !important; + } + .ui.grid > .row > [class*="two wide large screen"].column, + .ui.grid > .column.row > [class*="two wide large screen"].column, + .ui.grid > [class*="two wide large screen"].column, + .ui.column.grid > [class*="two wide large screen"].column, + .play-button.grid > .row > [class*="two wide large screen"].column, + .play-button.grid > .column.row > [class*="two wide large screen"].column, + .play-button.grid > [class*="two wide large screen"].column, + .play-button.column.grid > [class*="two wide large screen"].column, + .download-button.grid > .row > [class*="two wide large screen"].column, + .download-button.grid > .column.row > [class*="two wide large screen"].column, + .download-button.grid > [class*="two wide large screen"].column, + .download-button.column.grid > [class*="two wide large screen"].column { + width: 12.5% !important; + } + .ui.grid > .row > [class*="three wide large screen"].column, + .ui.grid > .column.row > [class*="three wide large screen"].column, + .ui.grid > [class*="three wide large screen"].column, + .ui.column.grid > [class*="three wide large screen"].column, + .play-button.grid > .row > [class*="three wide large screen"].column, + .play-button.grid > .column.row > [class*="three wide large screen"].column, + .play-button.grid > [class*="three wide large screen"].column, + .play-button.column.grid > [class*="three wide large screen"].column, + .download-button.grid > .row > [class*="three wide large screen"].column, + .download-button.grid > .column.row > [class*="three wide large screen"].column, + .download-button.grid > [class*="three wide large screen"].column, + .download-button.column.grid > [class*="three wide large screen"].column { + width: 18.75% !important; + } + .ui.grid > .row > [class*="four wide large screen"].column, + .ui.grid > .column.row > [class*="four wide large screen"].column, + .ui.grid > [class*="four wide large screen"].column, + .ui.column.grid > [class*="four wide large screen"].column, + .play-button.grid > .row > [class*="four wide large screen"].column, + .play-button.grid > .column.row > [class*="four wide large screen"].column, + .play-button.grid > [class*="four wide large screen"].column, + .play-button.column.grid > [class*="four wide large screen"].column, + .download-button.grid > .row > [class*="four wide large screen"].column, + .download-button.grid > .column.row > [class*="four wide large screen"].column, + .download-button.grid > [class*="four wide large screen"].column, + .download-button.column.grid > [class*="four wide large screen"].column { + width: 25% !important; + } + .ui.grid > .row > [class*="five wide large screen"].column, + .ui.grid > .column.row > [class*="five wide large screen"].column, + .ui.grid > [class*="five wide large screen"].column, + .ui.column.grid > [class*="five wide large screen"].column, + .play-button.grid > .row > [class*="five wide large screen"].column, + .play-button.grid > .column.row > [class*="five wide large screen"].column, + .play-button.grid > [class*="five wide large screen"].column, + .play-button.column.grid > [class*="five wide large screen"].column, + .download-button.grid > .row > [class*="five wide large screen"].column, + .download-button.grid > .column.row > [class*="five wide large screen"].column, + .download-button.grid > [class*="five wide large screen"].column, + .download-button.column.grid > [class*="five wide large screen"].column { + width: 31.25% !important; + } + .ui.grid > .row > [class*="six wide large screen"].column, + .ui.grid > .column.row > [class*="six wide large screen"].column, + .ui.grid > [class*="six wide large screen"].column, + .ui.column.grid > [class*="six wide large screen"].column, + .play-button.grid > .row > [class*="six wide large screen"].column, + .play-button.grid > .column.row > [class*="six wide large screen"].column, + .play-button.grid > [class*="six wide large screen"].column, + .play-button.column.grid > [class*="six wide large screen"].column, + .download-button.grid > .row > [class*="six wide large screen"].column, + .download-button.grid > .column.row > [class*="six wide large screen"].column, + .download-button.grid > [class*="six wide large screen"].column, + .download-button.column.grid > [class*="six wide large screen"].column { + width: 37.5% !important; + } + .ui.grid > .row > [class*="seven wide large screen"].column, + .ui.grid > .column.row > [class*="seven wide large screen"].column, + .ui.grid > [class*="seven wide large screen"].column, + .ui.column.grid > [class*="seven wide large screen"].column, + .play-button.grid > .row > [class*="seven wide large screen"].column, + .play-button.grid > .column.row > [class*="seven wide large screen"].column, + .play-button.grid > [class*="seven wide large screen"].column, + .play-button.column.grid > [class*="seven wide large screen"].column, + .download-button.grid > .row > [class*="seven wide large screen"].column, + .download-button.grid > .column.row > [class*="seven wide large screen"].column, + .download-button.grid > [class*="seven wide large screen"].column, + .download-button.column.grid > [class*="seven wide large screen"].column { + width: 43.75% !important; + } + .ui.grid > .row > [class*="eight wide large screen"].column, + .ui.grid > .column.row > [class*="eight wide large screen"].column, + .ui.grid > [class*="eight wide large screen"].column, + .ui.column.grid > [class*="eight wide large screen"].column, + .play-button.grid > .row > [class*="eight wide large screen"].column, + .play-button.grid > .column.row > [class*="eight wide large screen"].column, + .play-button.grid > [class*="eight wide large screen"].column, + .play-button.column.grid > [class*="eight wide large screen"].column, + .download-button.grid > .row > [class*="eight wide large screen"].column, + .download-button.grid > .column.row > [class*="eight wide large screen"].column, + .download-button.grid > [class*="eight wide large screen"].column, + .download-button.column.grid > [class*="eight wide large screen"].column { + width: 50% !important; + } + .ui.grid > .row > [class*="nine wide large screen"].column, + .ui.grid > .column.row > [class*="nine wide large screen"].column, + .ui.grid > [class*="nine wide large screen"].column, + .ui.column.grid > [class*="nine wide large screen"].column, + .play-button.grid > .row > [class*="nine wide large screen"].column, + .play-button.grid > .column.row > [class*="nine wide large screen"].column, + .play-button.grid > [class*="nine wide large screen"].column, + .play-button.column.grid > [class*="nine wide large screen"].column, + .download-button.grid > .row > [class*="nine wide large screen"].column, + .download-button.grid > .column.row > [class*="nine wide large screen"].column, + .download-button.grid > [class*="nine wide large screen"].column, + .download-button.column.grid > [class*="nine wide large screen"].column { + width: 56.25% !important; + } + .ui.grid > .row > [class*="ten wide large screen"].column, + .ui.grid > .column.row > [class*="ten wide large screen"].column, + .ui.grid > [class*="ten wide large screen"].column, + .ui.column.grid > [class*="ten wide large screen"].column, + .play-button.grid > .row > [class*="ten wide large screen"].column, + .play-button.grid > .column.row > [class*="ten wide large screen"].column, + .play-button.grid > [class*="ten wide large screen"].column, + .play-button.column.grid > [class*="ten wide large screen"].column, + .download-button.grid > .row > [class*="ten wide large screen"].column, + .download-button.grid > .column.row > [class*="ten wide large screen"].column, + .download-button.grid > [class*="ten wide large screen"].column, + .download-button.column.grid > [class*="ten wide large screen"].column { + width: 62.5% !important; + } + .ui.grid > .row > [class*="eleven wide large screen"].column, + .ui.grid > .column.row > [class*="eleven wide large screen"].column, + .ui.grid > [class*="eleven wide large screen"].column, + .ui.column.grid > [class*="eleven wide large screen"].column, + .play-button.grid > .row > [class*="eleven wide large screen"].column, + .play-button.grid > .column.row > [class*="eleven wide large screen"].column, + .play-button.grid > [class*="eleven wide large screen"].column, + .play-button.column.grid > [class*="eleven wide large screen"].column, + .download-button.grid > .row > [class*="eleven wide large screen"].column, + .download-button.grid > .column.row > [class*="eleven wide large screen"].column, + .download-button.grid > [class*="eleven wide large screen"].column, + .download-button.column.grid > [class*="eleven wide large screen"].column { + width: 68.75% !important; + } + .ui.grid > .row > [class*="twelve wide large screen"].column, + .ui.grid > .column.row > [class*="twelve wide large screen"].column, + .ui.grid > [class*="twelve wide large screen"].column, + .ui.column.grid > [class*="twelve wide large screen"].column, + .play-button.grid > .row > [class*="twelve wide large screen"].column, + .play-button.grid > .column.row > [class*="twelve wide large screen"].column, + .play-button.grid > [class*="twelve wide large screen"].column, + .play-button.column.grid > [class*="twelve wide large screen"].column, + .download-button.grid > .row > [class*="twelve wide large screen"].column, + .download-button.grid > .column.row > [class*="twelve wide large screen"].column, + .download-button.grid > [class*="twelve wide large screen"].column, + .download-button.column.grid > [class*="twelve wide large screen"].column { + width: 75% !important; + } + .ui.grid > .row > [class*="thirteen wide large screen"].column, + .ui.grid > .column.row > [class*="thirteen wide large screen"].column, + .ui.grid > [class*="thirteen wide large screen"].column, + .ui.column.grid > [class*="thirteen wide large screen"].column, + .play-button.grid > .row > [class*="thirteen wide large screen"].column, + .play-button.grid > .column.row > [class*="thirteen wide large screen"].column, + .play-button.grid > [class*="thirteen wide large screen"].column, + .play-button.column.grid > [class*="thirteen wide large screen"].column, + .download-button.grid > .row > [class*="thirteen wide large screen"].column, + .download-button.grid > .column.row > [class*="thirteen wide large screen"].column, + .download-button.grid > [class*="thirteen wide large screen"].column, + .download-button.column.grid > [class*="thirteen wide large screen"].column { + width: 81.25% !important; + } + .ui.grid > .row > [class*="fourteen wide large screen"].column, + .ui.grid > .column.row > [class*="fourteen wide large screen"].column, + .ui.grid > [class*="fourteen wide large screen"].column, + .ui.column.grid > [class*="fourteen wide large screen"].column, + .play-button.grid > .row > [class*="fourteen wide large screen"].column, + .play-button.grid > .column.row > [class*="fourteen wide large screen"].column, + .play-button.grid > [class*="fourteen wide large screen"].column, + .play-button.column.grid > [class*="fourteen wide large screen"].column, + .download-button.grid > .row > [class*="fourteen wide large screen"].column, + .download-button.grid > .column.row > [class*="fourteen wide large screen"].column, + .download-button.grid > [class*="fourteen wide large screen"].column, + .download-button.column.grid > [class*="fourteen wide large screen"].column { + width: 87.5% !important; + } + .ui.grid > .row > [class*="fifteen wide large screen"].column, + .ui.grid > .column.row > [class*="fifteen wide large screen"].column, + .ui.grid > [class*="fifteen wide large screen"].column, + .ui.column.grid > [class*="fifteen wide large screen"].column, + .play-button.grid > .row > [class*="fifteen wide large screen"].column, + .play-button.grid > .column.row > [class*="fifteen wide large screen"].column, + .play-button.grid > [class*="fifteen wide large screen"].column, + .play-button.column.grid > [class*="fifteen wide large screen"].column, + .download-button.grid > .row > [class*="fifteen wide large screen"].column, + .download-button.grid > .column.row > [class*="fifteen wide large screen"].column, + .download-button.grid > [class*="fifteen wide large screen"].column, + .download-button.column.grid > [class*="fifteen wide large screen"].column { + width: 93.75% !important; + } + .ui.grid > .row > [class*="sixteen wide large screen"].column, + .ui.grid > .column.row > [class*="sixteen wide large screen"].column, + .ui.grid > [class*="sixteen wide large screen"].column, + .ui.column.grid > [class*="sixteen wide large screen"].column, + .play-button.grid > .row > [class*="sixteen wide large screen"].column, + .play-button.grid > .column.row > [class*="sixteen wide large screen"].column, + .play-button.grid > [class*="sixteen wide large screen"].column, + .play-button.column.grid > [class*="sixteen wide large screen"].column, + .download-button.grid > .row > [class*="sixteen wide large screen"].column, + .download-button.grid > .column.row > [class*="sixteen wide large screen"].column, + .download-button.grid > [class*="sixteen wide large screen"].column, + .download-button.column.grid > [class*="sixteen wide large screen"].column { + width: 100% !important; + } +} +/* Widescreen Sizing Combinations */ +@media only screen and (min-width: 1920px) { + .ui.grid > .row > [class*="one wide widescreen"].column, + .ui.grid > .column.row > [class*="one wide widescreen"].column, + .ui.grid > [class*="one wide widescreen"].column, + .ui.column.grid > [class*="one wide widescreen"].column, + .play-button.grid > .row > [class*="one wide widescreen"].column, + .play-button.grid > .column.row > [class*="one wide widescreen"].column, + .play-button.grid > [class*="one wide widescreen"].column, + .play-button.column.grid > [class*="one wide widescreen"].column, + .download-button.grid > .row > [class*="one wide widescreen"].column, + .download-button.grid > .column.row > [class*="one wide widescreen"].column, + .download-button.grid > [class*="one wide widescreen"].column, + .download-button.column.grid > [class*="one wide widescreen"].column { + width: 6.25% !important; + } + .ui.grid > .row > [class*="two wide widescreen"].column, + .ui.grid > .column.row > [class*="two wide widescreen"].column, + .ui.grid > [class*="two wide widescreen"].column, + .ui.column.grid > [class*="two wide widescreen"].column, + .play-button.grid > .row > [class*="two wide widescreen"].column, + .play-button.grid > .column.row > [class*="two wide widescreen"].column, + .play-button.grid > [class*="two wide widescreen"].column, + .play-button.column.grid > [class*="two wide widescreen"].column, + .download-button.grid > .row > [class*="two wide widescreen"].column, + .download-button.grid > .column.row > [class*="two wide widescreen"].column, + .download-button.grid > [class*="two wide widescreen"].column, + .download-button.column.grid > [class*="two wide widescreen"].column { + width: 12.5% !important; + } + .ui.grid > .row > [class*="three wide widescreen"].column, + .ui.grid > .column.row > [class*="three wide widescreen"].column, + .ui.grid > [class*="three wide widescreen"].column, + .ui.column.grid > [class*="three wide widescreen"].column, + .play-button.grid > .row > [class*="three wide widescreen"].column, + .play-button.grid > .column.row > [class*="three wide widescreen"].column, + .play-button.grid > [class*="three wide widescreen"].column, + .play-button.column.grid > [class*="three wide widescreen"].column, + .download-button.grid > .row > [class*="three wide widescreen"].column, + .download-button.grid > .column.row > [class*="three wide widescreen"].column, + .download-button.grid > [class*="three wide widescreen"].column, + .download-button.column.grid > [class*="three wide widescreen"].column { + width: 18.75% !important; + } + .ui.grid > .row > [class*="four wide widescreen"].column, + .ui.grid > .column.row > [class*="four wide widescreen"].column, + .ui.grid > [class*="four wide widescreen"].column, + .ui.column.grid > [class*="four wide widescreen"].column, + .play-button.grid > .row > [class*="four wide widescreen"].column, + .play-button.grid > .column.row > [class*="four wide widescreen"].column, + .play-button.grid > [class*="four wide widescreen"].column, + .play-button.column.grid > [class*="four wide widescreen"].column, + .download-button.grid > .row > [class*="four wide widescreen"].column, + .download-button.grid > .column.row > [class*="four wide widescreen"].column, + .download-button.grid > [class*="four wide widescreen"].column, + .download-button.column.grid > [class*="four wide widescreen"].column { + width: 25% !important; + } + .ui.grid > .row > [class*="five wide widescreen"].column, + .ui.grid > .column.row > [class*="five wide widescreen"].column, + .ui.grid > [class*="five wide widescreen"].column, + .ui.column.grid > [class*="five wide widescreen"].column, + .play-button.grid > .row > [class*="five wide widescreen"].column, + .play-button.grid > .column.row > [class*="five wide widescreen"].column, + .play-button.grid > [class*="five wide widescreen"].column, + .play-button.column.grid > [class*="five wide widescreen"].column, + .download-button.grid > .row > [class*="five wide widescreen"].column, + .download-button.grid > .column.row > [class*="five wide widescreen"].column, + .download-button.grid > [class*="five wide widescreen"].column, + .download-button.column.grid > [class*="five wide widescreen"].column { + width: 31.25% !important; + } + .ui.grid > .row > [class*="six wide widescreen"].column, + .ui.grid > .column.row > [class*="six wide widescreen"].column, + .ui.grid > [class*="six wide widescreen"].column, + .ui.column.grid > [class*="six wide widescreen"].column, + .play-button.grid > .row > [class*="six wide widescreen"].column, + .play-button.grid > .column.row > [class*="six wide widescreen"].column, + .play-button.grid > [class*="six wide widescreen"].column, + .play-button.column.grid > [class*="six wide widescreen"].column, + .download-button.grid > .row > [class*="six wide widescreen"].column, + .download-button.grid > .column.row > [class*="six wide widescreen"].column, + .download-button.grid > [class*="six wide widescreen"].column, + .download-button.column.grid > [class*="six wide widescreen"].column { + width: 37.5% !important; + } + .ui.grid > .row > [class*="seven wide widescreen"].column, + .ui.grid > .column.row > [class*="seven wide widescreen"].column, + .ui.grid > [class*="seven wide widescreen"].column, + .ui.column.grid > [class*="seven wide widescreen"].column, + .play-button.grid > .row > [class*="seven wide widescreen"].column, + .play-button.grid > .column.row > [class*="seven wide widescreen"].column, + .play-button.grid > [class*="seven wide widescreen"].column, + .play-button.column.grid > [class*="seven wide widescreen"].column, + .download-button.grid > .row > [class*="seven wide widescreen"].column, + .download-button.grid > .column.row > [class*="seven wide widescreen"].column, + .download-button.grid > [class*="seven wide widescreen"].column, + .download-button.column.grid > [class*="seven wide widescreen"].column { + width: 43.75% !important; + } + .ui.grid > .row > [class*="eight wide widescreen"].column, + .ui.grid > .column.row > [class*="eight wide widescreen"].column, + .ui.grid > [class*="eight wide widescreen"].column, + .ui.column.grid > [class*="eight wide widescreen"].column, + .play-button.grid > .row > [class*="eight wide widescreen"].column, + .play-button.grid > .column.row > [class*="eight wide widescreen"].column, + .play-button.grid > [class*="eight wide widescreen"].column, + .play-button.column.grid > [class*="eight wide widescreen"].column, + .download-button.grid > .row > [class*="eight wide widescreen"].column, + .download-button.grid > .column.row > [class*="eight wide widescreen"].column, + .download-button.grid > [class*="eight wide widescreen"].column, + .download-button.column.grid > [class*="eight wide widescreen"].column { + width: 50% !important; + } + .ui.grid > .row > [class*="nine wide widescreen"].column, + .ui.grid > .column.row > [class*="nine wide widescreen"].column, + .ui.grid > [class*="nine wide widescreen"].column, + .ui.column.grid > [class*="nine wide widescreen"].column, + .play-button.grid > .row > [class*="nine wide widescreen"].column, + .play-button.grid > .column.row > [class*="nine wide widescreen"].column, + .play-button.grid > [class*="nine wide widescreen"].column, + .play-button.column.grid > [class*="nine wide widescreen"].column, + .download-button.grid > .row > [class*="nine wide widescreen"].column, + .download-button.grid > .column.row > [class*="nine wide widescreen"].column, + .download-button.grid > [class*="nine wide widescreen"].column, + .download-button.column.grid > [class*="nine wide widescreen"].column { + width: 56.25% !important; + } + .ui.grid > .row > [class*="ten wide widescreen"].column, + .ui.grid > .column.row > [class*="ten wide widescreen"].column, + .ui.grid > [class*="ten wide widescreen"].column, + .ui.column.grid > [class*="ten wide widescreen"].column, + .play-button.grid > .row > [class*="ten wide widescreen"].column, + .play-button.grid > .column.row > [class*="ten wide widescreen"].column, + .play-button.grid > [class*="ten wide widescreen"].column, + .play-button.column.grid > [class*="ten wide widescreen"].column, + .download-button.grid > .row > [class*="ten wide widescreen"].column, + .download-button.grid > .column.row > [class*="ten wide widescreen"].column, + .download-button.grid > [class*="ten wide widescreen"].column, + .download-button.column.grid > [class*="ten wide widescreen"].column { + width: 62.5% !important; + } + .ui.grid > .row > [class*="eleven wide widescreen"].column, + .ui.grid > .column.row > [class*="eleven wide widescreen"].column, + .ui.grid > [class*="eleven wide widescreen"].column, + .ui.column.grid > [class*="eleven wide widescreen"].column, + .play-button.grid > .row > [class*="eleven wide widescreen"].column, + .play-button.grid > .column.row > [class*="eleven wide widescreen"].column, + .play-button.grid > [class*="eleven wide widescreen"].column, + .play-button.column.grid > [class*="eleven wide widescreen"].column, + .download-button.grid > .row > [class*="eleven wide widescreen"].column, + .download-button.grid > .column.row > [class*="eleven wide widescreen"].column, + .download-button.grid > [class*="eleven wide widescreen"].column, + .download-button.column.grid > [class*="eleven wide widescreen"].column { + width: 68.75% !important; + } + .ui.grid > .row > [class*="twelve wide widescreen"].column, + .ui.grid > .column.row > [class*="twelve wide widescreen"].column, + .ui.grid > [class*="twelve wide widescreen"].column, + .ui.column.grid > [class*="twelve wide widescreen"].column, + .play-button.grid > .row > [class*="twelve wide widescreen"].column, + .play-button.grid > .column.row > [class*="twelve wide widescreen"].column, + .play-button.grid > [class*="twelve wide widescreen"].column, + .play-button.column.grid > [class*="twelve wide widescreen"].column, + .download-button.grid > .row > [class*="twelve wide widescreen"].column, + .download-button.grid > .column.row > [class*="twelve wide widescreen"].column, + .download-button.grid > [class*="twelve wide widescreen"].column, + .download-button.column.grid > [class*="twelve wide widescreen"].column { + width: 75% !important; + } + .ui.grid > .row > [class*="thirteen wide widescreen"].column, + .ui.grid > .column.row > [class*="thirteen wide widescreen"].column, + .ui.grid > [class*="thirteen wide widescreen"].column, + .ui.column.grid > [class*="thirteen wide widescreen"].column, + .play-button.grid > .row > [class*="thirteen wide widescreen"].column, + .play-button.grid > .column.row > [class*="thirteen wide widescreen"].column, + .play-button.grid > [class*="thirteen wide widescreen"].column, + .play-button.column.grid > [class*="thirteen wide widescreen"].column, + .download-button.grid > .row > [class*="thirteen wide widescreen"].column, + .download-button.grid > .column.row > [class*="thirteen wide widescreen"].column, + .download-button.grid > [class*="thirteen wide widescreen"].column, + .download-button.column.grid > [class*="thirteen wide widescreen"].column { + width: 81.25% !important; + } + .ui.grid > .row > [class*="fourteen wide widescreen"].column, + .ui.grid > .column.row > [class*="fourteen wide widescreen"].column, + .ui.grid > [class*="fourteen wide widescreen"].column, + .ui.column.grid > [class*="fourteen wide widescreen"].column, + .play-button.grid > .row > [class*="fourteen wide widescreen"].column, + .play-button.grid > .column.row > [class*="fourteen wide widescreen"].column, + .play-button.grid > [class*="fourteen wide widescreen"].column, + .play-button.column.grid > [class*="fourteen wide widescreen"].column, + .download-button.grid > .row > [class*="fourteen wide widescreen"].column, + .download-button.grid > .column.row > [class*="fourteen wide widescreen"].column, + .download-button.grid > [class*="fourteen wide widescreen"].column, + .download-button.column.grid > [class*="fourteen wide widescreen"].column { + width: 87.5% !important; + } + .ui.grid > .row > [class*="fifteen wide widescreen"].column, + .ui.grid > .column.row > [class*="fifteen wide widescreen"].column, + .ui.grid > [class*="fifteen wide widescreen"].column, + .ui.column.grid > [class*="fifteen wide widescreen"].column, + .play-button.grid > .row > [class*="fifteen wide widescreen"].column, + .play-button.grid > .column.row > [class*="fifteen wide widescreen"].column, + .play-button.grid > [class*="fifteen wide widescreen"].column, + .play-button.column.grid > [class*="fifteen wide widescreen"].column, + .download-button.grid > .row > [class*="fifteen wide widescreen"].column, + .download-button.grid > .column.row > [class*="fifteen wide widescreen"].column, + .download-button.grid > [class*="fifteen wide widescreen"].column, + .download-button.column.grid > [class*="fifteen wide widescreen"].column { + width: 93.75% !important; + } + .ui.grid > .row > [class*="sixteen wide widescreen"].column, + .ui.grid > .column.row > [class*="sixteen wide widescreen"].column, + .ui.grid > [class*="sixteen wide widescreen"].column, + .ui.column.grid > [class*="sixteen wide widescreen"].column, + .play-button.grid > .row > [class*="sixteen wide widescreen"].column, + .play-button.grid > .column.row > [class*="sixteen wide widescreen"].column, + .play-button.grid > [class*="sixteen wide widescreen"].column, + .play-button.column.grid > [class*="sixteen wide widescreen"].column, + .download-button.grid > .row > [class*="sixteen wide widescreen"].column, + .download-button.grid > .column.row > [class*="sixteen wide widescreen"].column, + .download-button.grid > [class*="sixteen wide widescreen"].column, + .download-button.column.grid > [class*="sixteen wide widescreen"].column { + width: 100% !important; + } +} +/*---------------------- + Centered +-----------------------*/ +.ui.centered.grid, +.ui.centered.grid > .row, +.ui.grid > .centered.row, +.play-button.centered.grid, +.play-button.centered.grid > .row, +.play-button.grid > .centered.row, +.download-button.centered.grid, +.download-button.centered.grid > .row, +.download-button.grid > .centered.row { + text-align: center; + justify-content: center; +} +.ui.centered.grid > .column:not(.aligned):not(.justified):not(.row), +.ui.centered.grid > .row > .column:not(.aligned):not(.justified), +.ui.grid .centered.row > .column:not(.aligned):not(.justified), +.play-button.centered.grid > .column:not(.aligned):not(.justified):not(.row), +.play-button.centered.grid > .row > .column:not(.aligned):not(.justified), +.play-button.grid .centered.row > .column:not(.aligned):not(.justified), +.download-button.centered.grid > .column:not(.aligned):not(.justified):not(.row), +.download-button.centered.grid > .row > .column:not(.aligned):not(.justified), +.download-button.grid .centered.row > .column:not(.aligned):not(.justified) { + text-align: left; +} +.ui.grid > .centered.column, +.ui.grid > .row > .centered.column, +.play-button.grid > .centered.column, +.play-button.grid > .row > .centered.column, +.download-button.grid > .centered.column, +.download-button.grid > .row > .centered.column { + display: block; + margin-left: auto; + margin-right: auto; +} +/*---------------------- + Relaxed +-----------------------*/ +.ui.relaxed.grid > .column:not(.row), +.ui.relaxed.grid > .row > .column, +.ui.grid > .relaxed.row > .column, +.play-button.relaxed.grid > .column:not(.row), +.play-button.relaxed.grid > .row > .column, +.play-button.grid > .relaxed.row > .column, +.download-button.relaxed.grid > .column:not(.row), +.download-button.relaxed.grid > .row > .column, +.download-button.grid > .relaxed.row > .column { + padding-left: 1.5rem; + padding-right: 1.5rem; +} +.ui[class*="very relaxed"].grid > .column:not(.row), +.ui[class*="very relaxed"].grid > .row > .column, +.ui.grid > [class*="very relaxed"].row > .column, +.play-button[class*="very relaxed"].grid > .column:not(.row), +.play-button[class*="very relaxed"].grid > .row > .column, +.play-button.grid > [class*="very relaxed"].row > .column, +.download-button[class*="very relaxed"].grid > .column:not(.row), +.download-button[class*="very relaxed"].grid > .row > .column, +.download-button.grid > [class*="very relaxed"].row > .column { + padding-left: 2.5rem; + padding-right: 2.5rem; +} +/* Coupling with UI Divider */ +.ui.relaxed.grid .row + .ui.divider, +.ui.grid .relaxed.row + .ui.divider, +.play-button.relaxed.grid .row + .play-button.divider, +.play-button.grid .relaxed.row + .play-button.divider, +.download-button.relaxed.grid .row + .download-button.divider, +.download-button.grid .relaxed.row + .download-button.divider { + margin-left: 1.5rem; + margin-right: 1.5rem; +} +.ui[class*="very relaxed"].grid .row + .ui.divider, +.ui.grid [class*="very relaxed"].row + .ui.divider, +.play-button[class*="very relaxed"].grid .row + .play-button.divider, +.play-button.grid [class*="very relaxed"].row + .play-button.divider, +.download-button[class*="very relaxed"].grid .row + .download-button.divider, +.download-button.grid [class*="very relaxed"].row + .download-button.divider { + margin-left: 2.5rem; + margin-right: 2.5rem; +} +/*---------------------- + Padded +-----------------------*/ +.ui.padded.grid:not(.vertically):not(.horizontally), +.play-button.padded.grid:not(.vertically):not(.horizontally), +.download-button.padded.grid:not(.vertically):not(.horizontally) { + margin: 0em !important; +} +[class*="horizontally padded"].ui.grid, +[class*="horizontally padded"].play-button.grid, +[class*="horizontally padded"].download-button.grid { + margin-left: 0em !important; + margin-right: 0em !important; +} +[class*="vertically padded"].ui.grid, +[class*="vertically padded"].play-button.grid, +[class*="vertically padded"].download-button.grid { + margin-top: 0em !important; + margin-bottom: 0em !important; +} +/*---------------------- + "Floated" +-----------------------*/ +.ui.grid [class*="left floated"].column, +.play-button.grid [class*="left floated"].column, +.download-button.grid [class*="left floated"].column { + margin-right: auto; +} +.ui.grid [class*="right floated"].column, +.play-button.grid [class*="right floated"].column, +.download-button.grid [class*="right floated"].column { + margin-left: auto; +} +/*---------------------- + Divided +-----------------------*/ +.ui.divided.grid:not([class*="vertically divided"]) > .column:not(.row), +.ui.divided.grid:not([class*="vertically divided"]) > .row > .column, +.play-button.divided.grid:not([class*="vertically divided"]) > .column:not(.row), +.play-button.divided.grid:not([class*="vertically divided"]) > .row > .column, +.download-button.divided.grid:not([class*="vertically divided"]) > .column:not(.row), +.download-button.divided.grid:not([class*="vertically divided"]) > .row > .column { + box-shadow: -1px 0px 0px 0px rgba(34, 36, 38, 0.15); +} +/* Swap from padding to margin on columns to have dividers align */ +.ui[class*="vertically divided"].grid > .column:not(.row), +.ui[class*="vertically divided"].grid > .row > .column, +.play-button[class*="vertically divided"].grid > .column:not(.row), +.play-button[class*="vertically divided"].grid > .row > .column, +.download-button[class*="vertically divided"].grid > .column:not(.row), +.download-button[class*="vertically divided"].grid > .row > .column { + margin-top: 1rem; + margin-bottom: 1rem; + padding-top: 0rem; + padding-bottom: 0rem; +} +.ui[class*="vertically divided"].grid > .row, +.play-button[class*="vertically divided"].grid > .row, +.download-button[class*="vertically divided"].grid > .row { + margin-top: 0em; + margin-bottom: 0em; +} +/* No divider on first column on row */ +.ui.divided.grid:not([class*="vertically divided"]) > .column:first-child, +.ui.divided.grid:not([class*="vertically divided"]) > .row > .column:first-child, +.play-button.divided.grid:not([class*="vertically divided"]) > .column:first-child, +.play-button.divided.grid:not([class*="vertically divided"]) > .row > .column:first-child, +.download-button.divided.grid:not([class*="vertically divided"]) > .column:first-child, +.download-button.divided.grid:not([class*="vertically divided"]) > .row > .column:first-child { + box-shadow: none; +} +/* No space on top of first row */ +.ui[class*="vertically divided"].grid > .row:first-child > .column, +.play-button[class*="vertically divided"].grid > .row:first-child > .column, +.download-button[class*="vertically divided"].grid > .row:first-child > .column { + margin-top: 0em; +} +/* Divided Row */ +.ui.grid > .divided.row > .column, +.play-button.grid > .divided.row > .column, +.download-button.grid > .divided.row > .column { + box-shadow: -1px 0px 0px 0px rgba(34, 36, 38, 0.15); +} +.ui.grid > .divided.row > .column:first-child, +.play-button.grid > .divided.row > .column:first-child, +.download-button.grid > .divided.row > .column:first-child { + box-shadow: none; +} +/* Vertically Divided */ +.ui[class*="vertically divided"].grid > .row, +.play-button[class*="vertically divided"].grid > .row, +.download-button[class*="vertically divided"].grid > .row { + position: relative; +} +.ui[class*="vertically divided"].grid > .row:before, +.play-button[class*="vertically divided"].grid > .row:before, +.download-button[class*="vertically divided"].grid > .row:before { + position: absolute; + content: ""; + top: 0em; + left: 0px; + width: calc(100% - 2rem ); + height: 1px; + margin: 0% 1rem; + box-shadow: 0px -1px 0px 0px rgba(34, 36, 38, 0.15); +} +/* Padded Horizontally Divided */ +[class*="horizontally padded"].ui.divided.grid, +.ui.padded.divided.grid:not(.vertically):not(.horizontally), +[class*="horizontally padded"].play-button.divided.grid, +.play-button.padded.divided.grid:not(.vertically):not(.horizontally), +[class*="horizontally padded"].download-button.divided.grid, +.download-button.padded.divided.grid:not(.vertically):not(.horizontally) { + width: 100%; +} +/* First Row Vertically Divided */ +.ui[class*="vertically divided"].grid > .row:first-child:before, +.play-button[class*="vertically divided"].grid > .row:first-child:before, +.download-button[class*="vertically divided"].grid > .row:first-child:before { + box-shadow: none; +} +/* Inverted Divided */ +.ui.inverted.divided.grid:not([class*="vertically divided"]) > .column:not(.row), +.ui.inverted.divided.grid:not([class*="vertically divided"]) > .row > .column, +.play-button.inverted.divided.grid:not([class*="vertically divided"]) > .column:not(.row), +.play-button.inverted.divided.grid:not([class*="vertically divided"]) > .row > .column, +.download-button.inverted.divided.grid:not([class*="vertically divided"]) > .column:not(.row), +.download-button.inverted.divided.grid:not([class*="vertically divided"]) > .row > .column { + box-shadow: -1px 0px 0px 0px rgba(255, 255, 255, 0.1); +} +.ui.inverted.divided.grid:not([class*="vertically divided"]) > .column:not(.row):first-child, +.ui.inverted.divided.grid:not([class*="vertically divided"]) > .row > .column:first-child, +.play-button.inverted.divided.grid:not([class*="vertically divided"]) > .column:not(.row):first-child, +.play-button.inverted.divided.grid:not([class*="vertically divided"]) > .row > .column:first-child, +.download-button.inverted.divided.grid:not([class*="vertically divided"]) > .column:not(.row):first-child, +.download-button.inverted.divided.grid:not([class*="vertically divided"]) > .row > .column:first-child { + box-shadow: none; +} +.ui.inverted[class*="vertically divided"].grid > .row:before, +.play-button.inverted[class*="vertically divided"].grid > .row:before, +.download-button.inverted[class*="vertically divided"].grid > .row:before { + box-shadow: 0px -1px 0px 0px rgba(255, 255, 255, 0.1); +} +/* Relaxed */ +.ui.relaxed[class*="vertically divided"].grid > .row:before, +.play-button.relaxed[class*="vertically divided"].grid > .row:before, +.download-button.relaxed[class*="vertically divided"].grid > .row:before { + margin-left: 1.5rem; + margin-right: 1.5rem; + width: calc(100% - 3rem ); +} +.ui[class*="very relaxed"][class*="vertically divided"].grid > .row:before, +.play-button[class*="very relaxed"][class*="vertically divided"].grid > .row:before, +.download-button[class*="very relaxed"][class*="vertically divided"].grid > .row:before { + margin-left: 5rem; + margin-right: 5rem; + width: calc(100% - 5rem ); +} +/*---------------------- + Celled +-----------------------*/ +.ui.celled.grid, +.play-button.celled.grid, +.download-button.celled.grid { + width: 100%; + margin: 1em 0em; + box-shadow: 0px 0px 0px 1px #D4D4D5; +} +.ui.celled.grid > .row, +.play-button.celled.grid > .row, +.download-button.celled.grid > .row { + width: 100% !important; + margin: 0em; + padding: 0em; + box-shadow: 0px -1px 0px 0px #D4D4D5; +} +.ui.celled.grid > .column:not(.row), +.ui.celled.grid > .row > .column, +.play-button.celled.grid > .column:not(.row), +.play-button.celled.grid > .row > .column, +.download-button.celled.grid > .column:not(.row), +.download-button.celled.grid > .row > .column { + box-shadow: -1px 0px 0px 0px #D4D4D5; +} +.ui.celled.grid > .column:first-child, +.ui.celled.grid > .row > .column:first-child, +.play-button.celled.grid > .column:first-child, +.play-button.celled.grid > .row > .column:first-child, +.download-button.celled.grid > .column:first-child, +.download-button.celled.grid > .row > .column:first-child { + box-shadow: none; +} +.ui.celled.grid > .column:not(.row), +.ui.celled.grid > .row > .column, +.play-button.celled.grid > .column:not(.row), +.play-button.celled.grid > .row > .column, +.download-button.celled.grid > .column:not(.row), +.download-button.celled.grid > .row > .column { + padding: 1em; +} +.ui.relaxed.celled.grid > .column:not(.row), +.ui.relaxed.celled.grid > .row > .column, +.play-button.relaxed.celled.grid > .column:not(.row), +.play-button.relaxed.celled.grid > .row > .column, +.download-button.relaxed.celled.grid > .column:not(.row), +.download-button.relaxed.celled.grid > .row > .column { + padding: 1.5em; +} +.ui[class*="very relaxed"].celled.grid > .column:not(.row), +.ui[class*="very relaxed"].celled.grid > .row > .column, +.play-button[class*="very relaxed"].celled.grid > .column:not(.row), +.play-button[class*="very relaxed"].celled.grid > .row > .column, +.download-button[class*="very relaxed"].celled.grid > .column:not(.row), +.download-button[class*="very relaxed"].celled.grid > .row > .column { + padding: 2em; +} +/* Internally Celled */ +.ui[class*="internally celled"].grid, +.play-button[class*="internally celled"].grid, +.download-button[class*="internally celled"].grid { + box-shadow: none; + margin: 0em; +} +.ui[class*="internally celled"].grid > .row:first-child, +.play-button[class*="internally celled"].grid > .row:first-child, +.download-button[class*="internally celled"].grid > .row:first-child { + box-shadow: none; +} +.ui[class*="internally celled"].grid > .row > .column:first-child, +.play-button[class*="internally celled"].grid > .row > .column:first-child, +.download-button[class*="internally celled"].grid > .row > .column:first-child { + box-shadow: none; +} +/*---------------------- + Vertically Aligned +-----------------------*/ +/* Top Aligned */ +.ui[class*="top aligned"].grid > .column:not(.row), +.ui[class*="top aligned"].grid > .row > .column, +.ui.grid > [class*="top aligned"].row > .column, +.ui.grid > [class*="top aligned"].column:not(.row), +.ui.grid > .row > [class*="top aligned"].column, +.play-button[class*="top aligned"].grid > .column:not(.row), +.play-button[class*="top aligned"].grid > .row > .column, +.play-button.grid > [class*="top aligned"].row > .column, +.play-button.grid > [class*="top aligned"].column:not(.row), +.play-button.grid > .row > [class*="top aligned"].column, +.download-button[class*="top aligned"].grid > .column:not(.row), +.download-button[class*="top aligned"].grid > .row > .column, +.download-button.grid > [class*="top aligned"].row > .column, +.download-button.grid > [class*="top aligned"].column:not(.row), +.download-button.grid > .row > [class*="top aligned"].column { + flex-direction: column; + vertical-align: top; + align-self: flex-start !important; +} +/* Middle Aligned */ +.ui[class*="middle aligned"].grid > .column:not(.row), +.ui[class*="middle aligned"].grid > .row > .column, +.ui.grid > [class*="middle aligned"].row > .column, +.ui.grid > [class*="middle aligned"].column:not(.row), +.ui.grid > .row > [class*="middle aligned"].column, +.play-button[class*="middle aligned"].grid > .column:not(.row), +.play-button[class*="middle aligned"].grid > .row > .column, +.play-button.grid > [class*="middle aligned"].row > .column, +.play-button.grid > [class*="middle aligned"].column:not(.row), +.play-button.grid > .row > [class*="middle aligned"].column, +.download-button[class*="middle aligned"].grid > .column:not(.row), +.download-button[class*="middle aligned"].grid > .row > .column, +.download-button.grid > [class*="middle aligned"].row > .column, +.download-button.grid > [class*="middle aligned"].column:not(.row), +.download-button.grid > .row > [class*="middle aligned"].column { + flex-direction: column; + vertical-align: middle; + align-self: center !important; +} +/* Bottom Aligned */ +.ui[class*="bottom aligned"].grid > .column:not(.row), +.ui[class*="bottom aligned"].grid > .row > .column, +.ui.grid > [class*="bottom aligned"].row > .column, +.ui.grid > [class*="bottom aligned"].column:not(.row), +.ui.grid > .row > [class*="bottom aligned"].column, +.play-button[class*="bottom aligned"].grid > .column:not(.row), +.play-button[class*="bottom aligned"].grid > .row > .column, +.play-button.grid > [class*="bottom aligned"].row > .column, +.play-button.grid > [class*="bottom aligned"].column:not(.row), +.play-button.grid > .row > [class*="bottom aligned"].column, +.download-button[class*="bottom aligned"].grid > .column:not(.row), +.download-button[class*="bottom aligned"].grid > .row > .column, +.download-button.grid > [class*="bottom aligned"].row > .column, +.download-button.grid > [class*="bottom aligned"].column:not(.row), +.download-button.grid > .row > [class*="bottom aligned"].column { + flex-direction: column; + vertical-align: bottom; + align-self: flex-end !important; +} +/* Stretched */ +.ui.stretched.grid > .row > .column, +.ui.stretched.grid > .column, +.ui.grid > .stretched.row > .column, +.ui.grid > .stretched.column:not(.row), +.ui.grid > .row > .stretched.column, +.play-button.stretched.grid > .row > .column, +.play-button.stretched.grid > .column, +.play-button.grid > .stretched.row > .column, +.play-button.grid > .stretched.column:not(.row), +.play-button.grid > .row > .stretched.column, +.download-button.stretched.grid > .row > .column, +.download-button.stretched.grid > .column, +.download-button.grid > .stretched.row > .column, +.download-button.grid > .stretched.column:not(.row), +.download-button.grid > .row > .stretched.column { + display: inline-flex !important; + align-self: stretch; + flex-direction: column; +} +.ui.stretched.grid > .row > .column > *, +.ui.stretched.grid > .column > *, +.ui.grid > .stretched.row > .column > *, +.ui.grid > .stretched.column:not(.row) > *, +.ui.grid > .row > .stretched.column > *, +.play-button.stretched.grid > .row > .column > *, +.play-button.stretched.grid > .column > *, +.play-button.grid > .stretched.row > .column > *, +.play-button.grid > .stretched.column:not(.row) > *, +.play-button.grid > .row > .stretched.column > *, +.download-button.stretched.grid > .row > .column > *, +.download-button.stretched.grid > .column > *, +.download-button.grid > .stretched.row > .column > *, +.download-button.grid > .stretched.column:not(.row) > *, +.download-button.grid > .row > .stretched.column > * { + flex-grow: 1; +} +/*---------------------- + Horizontally Centered +-----------------------*/ +/* Left Aligned */ +.ui[class*="left aligned"].grid > .column, +.ui[class*="left aligned"].grid > .row > .column, +.ui.grid > [class*="left aligned"].row > .column, +.ui.grid > [class*="left aligned"].column.column, +.ui.grid > .row > [class*="left aligned"].column.column, +.play-button[class*="left aligned"].grid > .column, +.play-button[class*="left aligned"].grid > .row > .column, +.play-button.grid > [class*="left aligned"].row > .column, +.play-button.grid > [class*="left aligned"].column.column, +.play-button.grid > .row > [class*="left aligned"].column.column, +.download-button[class*="left aligned"].grid > .column, +.download-button[class*="left aligned"].grid > .row > .column, +.download-button.grid > [class*="left aligned"].row > .column, +.download-button.grid > [class*="left aligned"].column.column, +.download-button.grid > .row > [class*="left aligned"].column.column { + text-align: left; + align-self: inherit; +} +/* Center Aligned */ +.ui[class*="center aligned"].grid > .column, +.ui[class*="center aligned"].grid > .row > .column, +.ui.grid > [class*="center aligned"].row > .column, +.ui.grid > [class*="center aligned"].column.column, +.ui.grid > .row > [class*="center aligned"].column.column, +.play-button[class*="center aligned"].grid > .column, +.play-button[class*="center aligned"].grid > .row > .column, +.play-button.grid > [class*="center aligned"].row > .column, +.play-button.grid > [class*="center aligned"].column.column, +.play-button.grid > .row > [class*="center aligned"].column.column, +.download-button[class*="center aligned"].grid > .column, +.download-button[class*="center aligned"].grid > .row > .column, +.download-button.grid > [class*="center aligned"].row > .column, +.download-button.grid > [class*="center aligned"].column.column, +.download-button.grid > .row > [class*="center aligned"].column.column { + text-align: center; + align-self: inherit; +} +.ui[class*="center aligned"].grid, +.play-button[class*="center aligned"].grid, +.download-button[class*="center aligned"].grid { + justify-content: center; +} +/* Right Aligned */ +.ui[class*="right aligned"].grid > .column, +.ui[class*="right aligned"].grid > .row > .column, +.ui.grid > [class*="right aligned"].row > .column, +.ui.grid > [class*="right aligned"].column.column, +.ui.grid > .row > [class*="right aligned"].column.column, +.play-button[class*="right aligned"].grid > .column, +.play-button[class*="right aligned"].grid > .row > .column, +.play-button.grid > [class*="right aligned"].row > .column, +.play-button.grid > [class*="right aligned"].column.column, +.play-button.grid > .row > [class*="right aligned"].column.column, +.download-button[class*="right aligned"].grid > .column, +.download-button[class*="right aligned"].grid > .row > .column, +.download-button.grid > [class*="right aligned"].row > .column, +.download-button.grid > [class*="right aligned"].column.column, +.download-button.grid > .row > [class*="right aligned"].column.column { + text-align: right; + align-self: inherit; +} +/* Justified */ +.ui.justified.grid > .column, +.ui.justified.grid > .row > .column, +.ui.grid > .justified.row > .column, +.ui.grid > .justified.column.column, +.ui.grid > .row > .justified.column.column, +.play-button.justified.grid > .column, +.play-button.justified.grid > .row > .column, +.play-button.grid > .justified.row > .column, +.play-button.grid > .justified.column.column, +.play-button.grid > .row > .justified.column.column, +.download-button.justified.grid > .column, +.download-button.justified.grid > .row > .column, +.download-button.grid > .justified.row > .column, +.download-button.grid > .justified.column.column, +.download-button.grid > .row > .justified.column.column { + text-align: justify; + hyphens: auto; +} +/*---------------------- + Colored +-----------------------*/ +.ui.grid > .row > .red.column, +.ui.grid > .row > .orange.column, +.ui.grid > .row > .yellow.column, +.ui.grid > .row > .olive.column, +.ui.grid > .row > .green.column, +.ui.grid > .row > .teal.column, +.ui.grid > .row > .blue.column, +.ui.grid > .row > .violet.column, +.ui.grid > .row > .purple.column, +.ui.grid > .row > .pink.column, +.ui.grid > .row > .brown.column, +.ui.grid > .row > .grey.column, +.ui.grid > .row > .black.column, +.ui.grid > .row > .ui.button.editortools-btn.column, +.ui.grid > .row > .ui.button.getting-started-btn.column, +.play-button.grid > .row > .red.column, +.play-button.grid > .row > .orange.column, +.play-button.grid > .row > .yellow.column, +.play-button.grid > .row > .olive.column, +.play-button.grid > .row > .green.column, +.play-button.grid > .row > .teal.column, +.play-button.grid > .row > .blue.column, +.play-button.grid > .row > .violet.column, +.play-button.grid > .row > .purple.column, +.play-button.grid > .row > .pink.column, +.play-button.grid > .row > .brown.column, +.play-button.grid > .row > .grey.column, +.play-button.grid > .row > .black.column, +.ui.grid > .row > .play-button.column, +.download-button.grid > .row > .red.column, +.download-button.grid > .row > .orange.column, +.download-button.grid > .row > .yellow.column, +.download-button.grid > .row > .olive.column, +.download-button.grid > .row > .green.column, +.download-button.grid > .row > .teal.column, +.download-button.grid > .row > .blue.column, +.download-button.grid > .row > .violet.column, +.download-button.grid > .row > .purple.column, +.download-button.grid > .row > .pink.column, +.download-button.grid > .row > .brown.column, +.download-button.grid > .row > .grey.column, +.download-button.grid > .row > .black.column, +.ui.grid > .row > .download-button.column, +.ui.grid > .row > .play-button.button.editortools-btn.column, +.ui.grid > .row > .play-button.button.getting-started-btn.column, +.ui.grid > .row > .ui.play-button.editortools-btn.column, +.ui.grid > .row > .ui.play-button.getting-started-btn.column, +.ui.grid > .row > .download-button.button.editortools-btn.column, +.ui.grid > .row > .download-button.button.getting-started-btn.column, +.ui.grid > .row > .ui.download-button.editortools-btn.column, +.ui.grid > .row > .ui.download-button.getting-started-btn.column { + margin-top: -1rem; + margin-bottom: -1rem; + padding-top: 1rem; + padding-bottom: 1rem; +} +/* Red */ +.ui.grid > .red.row, +.ui.grid > .red.column, +.ui.grid > .row > .red.column, +.play-button.grid > .red.row, +.play-button.grid > .red.column, +.play-button.grid > .row > .red.column, +.download-button.grid > .red.row, +.download-button.grid > .red.column, +.download-button.grid > .row > .red.column { + background-color: #E81123 !important; + color: #FFFFFF; +} +/* Orange */ +.ui.grid > .orange.row, +.ui.grid > .orange.column, +.ui.grid > .row > .orange.column, +.play-button.grid > .orange.row, +.play-button.grid > .orange.column, +.play-button.grid > .row > .orange.column, +.download-button.grid > .orange.row, +.download-button.grid > .orange.column, +.download-button.grid > .row > .orange.column { + background-color: #DF4600 !important; + color: #FFFFFF; +} +/* Yellow */ +.ui.grid > .yellow.row, +.ui.grid > .yellow.column, +.ui.grid > .row > .yellow.column, +.play-button.grid > .yellow.row, +.play-button.grid > .yellow.column, +.play-button.grid > .row > .yellow.column, +.download-button.grid > .yellow.row, +.download-button.grid > .yellow.column, +.download-button.grid > .row > .yellow.column, +.ui.grid > .download-button.row, +.ui.grid > .download-button.column, +.ui.grid > .row > .download-button.column { + background-color: #F4C918 !important; + color: #FFFFFF; +} +/* Olive */ +.ui.grid > .olive.row, +.ui.grid > .olive.column, +.ui.grid > .row > .olive.column, +.play-button.grid > .olive.row, +.play-button.grid > .olive.column, +.play-button.grid > .row > .olive.column, +.download-button.grid > .olive.row, +.download-button.grid > .olive.column, +.download-button.grid > .row > .olive.column { + background-color: #B5CC18 !important; + color: #FFFFFF; +} +/* Green */ +.ui.grid > .green.row, +.ui.grid > .green.column, +.ui.grid > .row > .green.column, +.ui.grid > .ui.button.getting-started-btn.row, +.ui.grid > .ui.button.getting-started-btn.column, +.ui.grid > .row > .ui.button.getting-started-btn.column, +.play-button.grid > .green.row, +.play-button.grid > .green.column, +.play-button.grid > .row > .green.column, +.download-button.grid > .green.row, +.download-button.grid > .green.column, +.download-button.grid > .row > .green.column, +.ui.grid > .play-button.button.getting-started-btn.row, +.ui.grid > .play-button.button.getting-started-btn.column, +.ui.grid > .row > .play-button.button.getting-started-btn.column, +.ui.grid > .ui.play-button.getting-started-btn.row, +.ui.grid > .ui.play-button.getting-started-btn.column, +.ui.grid > .row > .ui.play-button.getting-started-btn.column, +.ui.grid > .download-button.button.getting-started-btn.row, +.ui.grid > .download-button.button.getting-started-btn.column, +.ui.grid > .row > .download-button.button.getting-started-btn.column, +.ui.grid > .ui.download-button.getting-started-btn.row, +.ui.grid > .ui.download-button.getting-started-btn.column, +.ui.grid > .row > .ui.download-button.getting-started-btn.column { + background-color: #3FC863 !important; + color: #FFFFFF; +} +/* Teal */ +.ui.grid > .teal.row, +.ui.grid > .teal.column, +.ui.grid > .row > .teal.column, +.play-button.grid > .teal.row, +.play-button.grid > .teal.column, +.play-button.grid > .row > .teal.column, +.download-button.grid > .teal.row, +.download-button.grid > .teal.column, +.download-button.grid > .row > .teal.column { + background-color: #008272 !important; + color: #FFFFFF; +} +/* Blue */ +.ui.grid > .blue.row, +.ui.grid > .blue.column, +.ui.grid > .row > .blue.column, +.play-button.grid > .blue.row, +.play-button.grid > .blue.column, +.play-button.grid > .row > .blue.column, +.ui.grid > .play-button.row, +.ui.grid > .play-button.column, +.ui.grid > .row > .play-button.column, +.download-button.grid > .blue.row, +.download-button.grid > .blue.column, +.download-button.grid > .row > .blue.column { + background-color: #54C9C9 !important; + color: #FFFFFF; +} +/* Violet */ +.ui.grid > .violet.row, +.ui.grid > .violet.column, +.ui.grid > .row > .violet.column, +.play-button.grid > .violet.row, +.play-button.grid > .violet.column, +.play-button.grid > .row > .violet.column, +.download-button.grid > .violet.row, +.download-button.grid > .violet.column, +.download-button.grid > .row > .violet.column { + background-color: #C90072 !important; + color: #FFFFFF; +} +/* Purple */ +.ui.grid > .purple.row, +.ui.grid > .purple.column, +.ui.grid > .row > .purple.column, +.play-button.grid > .purple.row, +.play-button.grid > .purple.column, +.play-button.grid > .row > .purple.column, +.download-button.grid > .purple.row, +.download-button.grid > .purple.column, +.download-button.grid > .row > .purple.column { + background-color: #8169E6 !important; + color: #FFFFFF; +} +/* Pink */ +.ui.grid > .pink.row, +.ui.grid > .pink.column, +.ui.grid > .row > .pink.column, +.play-button.grid > .pink.row, +.play-button.grid > .pink.column, +.play-button.grid > .row > .pink.column, +.download-button.grid > .pink.row, +.download-button.grid > .pink.column, +.download-button.grid > .row > .pink.column { + background-color: #E2008C !important; + color: #FFFFFF; +} +/* Brown */ +.ui.grid > .brown.row, +.ui.grid > .brown.column, +.ui.grid > .row > .brown.column, +.play-button.grid > .brown.row, +.play-button.grid > .brown.column, +.play-button.grid > .row > .brown.column, +.download-button.grid > .brown.row, +.download-button.grid > .brown.column, +.download-button.grid > .row > .brown.column { + background-color: #6B5B4C !important; + color: #FFFFFF; +} +/* Grey */ +.ui.grid > .grey.row, +.ui.grid > .grey.column, +.ui.grid > .row > .grey.column, +.ui.grid > .ui.button.editortools-btn.row, +.ui.grid > .ui.button.editortools-btn.column, +.ui.grid > .row > .ui.button.editortools-btn.column, +.play-button.grid > .grey.row, +.play-button.grid > .grey.column, +.play-button.grid > .row > .grey.column, +.download-button.grid > .grey.row, +.download-button.grid > .grey.column, +.download-button.grid > .row > .grey.column, +.ui.grid > .play-button.button.editortools-btn.row, +.ui.grid > .play-button.button.editortools-btn.column, +.ui.grid > .row > .play-button.button.editortools-btn.column, +.ui.grid > .ui.play-button.editortools-btn.row, +.ui.grid > .ui.play-button.editortools-btn.column, +.ui.grid > .row > .ui.play-button.editortools-btn.column, +.ui.grid > .download-button.button.editortools-btn.row, +.ui.grid > .download-button.button.editortools-btn.column, +.ui.grid > .row > .download-button.button.editortools-btn.column, +.ui.grid > .ui.download-button.editortools-btn.row, +.ui.grid > .ui.download-button.editortools-btn.column, +.ui.grid > .row > .ui.download-button.editortools-btn.column { + background-color: #42495F !important; + color: #FFFFFF; +} +/* Black */ +.ui.grid > .black.row, +.ui.grid > .black.column, +.ui.grid > .row > .black.column, +.play-button.grid > .black.row, +.play-button.grid > .black.column, +.play-button.grid > .row > .black.column, +.download-button.grid > .black.row, +.download-button.grid > .black.column, +.download-button.grid > .row > .black.column { + background-color: #1B1C1D !important; + color: #FFFFFF; +} +/*---------------------- + Equal Width +-----------------------*/ +.ui[class*="equal width"].grid > .column:not(.row), +.ui[class*="equal width"].grid > .row > .column, +.ui.grid > [class*="equal width"].row > .column, +.play-button[class*="equal width"].grid > .column:not(.row), +.play-button[class*="equal width"].grid > .row > .column, +.play-button.grid > [class*="equal width"].row > .column, +.download-button[class*="equal width"].grid > .column:not(.row), +.download-button[class*="equal width"].grid > .row > .column, +.download-button.grid > [class*="equal width"].row > .column { + display: inline-block; + flex-grow: 1; +} +.ui[class*="equal width"].grid > .wide.column, +.ui[class*="equal width"].grid > .row > .wide.column, +.ui.grid > [class*="equal width"].row > .wide.column, +.play-button[class*="equal width"].grid > .wide.column, +.play-button[class*="equal width"].grid > .row > .wide.column, +.play-button.grid > [class*="equal width"].row > .wide.column, +.download-button[class*="equal width"].grid > .wide.column, +.download-button[class*="equal width"].grid > .row > .wide.column, +.download-button.grid > [class*="equal width"].row > .wide.column { + flex-grow: 0; +} +/*---------------------- + Reverse +-----------------------*/ +/* Mobile */ +@media only screen and (max-width: 767px) { + .ui[class*="mobile reversed"].grid, + .ui[class*="mobile reversed"].grid > .row, + .ui.grid > [class*="mobile reversed"].row, + .play-button[class*="mobile reversed"].grid, + .play-button[class*="mobile reversed"].grid > .row, + .play-button.grid > [class*="mobile reversed"].row, + .download-button[class*="mobile reversed"].grid, + .download-button[class*="mobile reversed"].grid > .row, + .download-button.grid > [class*="mobile reversed"].row { + flex-direction: row-reverse; + } + .ui[class*="mobile vertically reversed"].grid, + .ui.stackable[class*="mobile reversed"], + .play-button[class*="mobile vertically reversed"].grid, + .play-button.stackable[class*="mobile reversed"], + .download-button[class*="mobile vertically reversed"].grid, + .download-button.stackable[class*="mobile reversed"] { + flex-direction: column-reverse; + } + /* Divided Reversed */ + .ui[class*="mobile reversed"].divided.grid:not([class*="vertically divided"]) > .column:first-child, + .ui[class*="mobile reversed"].divided.grid:not([class*="vertically divided"]) > .row > .column:first-child, + .play-button[class*="mobile reversed"].divided.grid:not([class*="vertically divided"]) > .column:first-child, + .play-button[class*="mobile reversed"].divided.grid:not([class*="vertically divided"]) > .row > .column:first-child, + .download-button[class*="mobile reversed"].divided.grid:not([class*="vertically divided"]) > .column:first-child, + .download-button[class*="mobile reversed"].divided.grid:not([class*="vertically divided"]) > .row > .column:first-child { + box-shadow: -1px 0px 0px 0px rgba(34, 36, 38, 0.15); + } + .ui[class*="mobile reversed"].divided.grid:not([class*="vertically divided"]) > .column:last-child, + .ui[class*="mobile reversed"].divided.grid:not([class*="vertically divided"]) > .row > .column:last-child, + .play-button[class*="mobile reversed"].divided.grid:not([class*="vertically divided"]) > .column:last-child, + .play-button[class*="mobile reversed"].divided.grid:not([class*="vertically divided"]) > .row > .column:last-child, + .download-button[class*="mobile reversed"].divided.grid:not([class*="vertically divided"]) > .column:last-child, + .download-button[class*="mobile reversed"].divided.grid:not([class*="vertically divided"]) > .row > .column:last-child { + box-shadow: none; + } + /* Vertically Divided Reversed */ + .ui.grid[class*="vertically divided"][class*="mobile vertically reversed"] > .row:first-child:before, + .play-button.grid[class*="vertically divided"][class*="mobile vertically reversed"] > .row:first-child:before, + .download-button.grid[class*="vertically divided"][class*="mobile vertically reversed"] > .row:first-child:before { + box-shadow: 0px -1px 0px 0px rgba(34, 36, 38, 0.15); + } + .ui.grid[class*="vertically divided"][class*="mobile vertically reversed"] > .row:last-child:before, + .play-button.grid[class*="vertically divided"][class*="mobile vertically reversed"] > .row:last-child:before, + .download-button.grid[class*="vertically divided"][class*="mobile vertically reversed"] > .row:last-child:before { + box-shadow: none; + } + /* Celled Reversed */ + .ui[class*="mobile reversed"].celled.grid > .row > .column:first-child, + .play-button[class*="mobile reversed"].celled.grid > .row > .column:first-child, + .download-button[class*="mobile reversed"].celled.grid > .row > .column:first-child { + box-shadow: -1px 0px 0px 0px #D4D4D5; + } + .ui[class*="mobile reversed"].celled.grid > .row > .column:last-child, + .play-button[class*="mobile reversed"].celled.grid > .row > .column:last-child, + .download-button[class*="mobile reversed"].celled.grid > .row > .column:last-child { + box-shadow: none; + } +} +/* Tablet */ +@media only screen and (min-width: 768px) and (max-width: 991px) { + .ui[class*="tablet reversed"].grid, + .ui[class*="tablet reversed"].grid > .row, + .ui.grid > [class*="tablet reversed"].row, + .play-button[class*="tablet reversed"].grid, + .play-button[class*="tablet reversed"].grid > .row, + .play-button.grid > [class*="tablet reversed"].row, + .download-button[class*="tablet reversed"].grid, + .download-button[class*="tablet reversed"].grid > .row, + .download-button.grid > [class*="tablet reversed"].row { + flex-direction: row-reverse; + } + .ui[class*="tablet vertically reversed"].grid, + .play-button[class*="tablet vertically reversed"].grid, + .download-button[class*="tablet vertically reversed"].grid { + flex-direction: column-reverse; + } + /* Divided Reversed */ + .ui[class*="tablet reversed"].divided.grid:not([class*="vertically divided"]) > .column:first-child, + .ui[class*="tablet reversed"].divided.grid:not([class*="vertically divided"]) > .row > .column:first-child, + .play-button[class*="tablet reversed"].divided.grid:not([class*="vertically divided"]) > .column:first-child, + .play-button[class*="tablet reversed"].divided.grid:not([class*="vertically divided"]) > .row > .column:first-child, + .download-button[class*="tablet reversed"].divided.grid:not([class*="vertically divided"]) > .column:first-child, + .download-button[class*="tablet reversed"].divided.grid:not([class*="vertically divided"]) > .row > .column:first-child { + box-shadow: -1px 0px 0px 0px rgba(34, 36, 38, 0.15); + } + .ui[class*="tablet reversed"].divided.grid:not([class*="vertically divided"]) > .column:last-child, + .ui[class*="tablet reversed"].divided.grid:not([class*="vertically divided"]) > .row > .column:last-child, + .play-button[class*="tablet reversed"].divided.grid:not([class*="vertically divided"]) > .column:last-child, + .play-button[class*="tablet reversed"].divided.grid:not([class*="vertically divided"]) > .row > .column:last-child, + .download-button[class*="tablet reversed"].divided.grid:not([class*="vertically divided"]) > .column:last-child, + .download-button[class*="tablet reversed"].divided.grid:not([class*="vertically divided"]) > .row > .column:last-child { + box-shadow: none; + } + /* Vertically Divided Reversed */ + .ui.grid[class*="vertically divided"][class*="tablet vertically reversed"] > .row:first-child:before, + .play-button.grid[class*="vertically divided"][class*="tablet vertically reversed"] > .row:first-child:before, + .download-button.grid[class*="vertically divided"][class*="tablet vertically reversed"] > .row:first-child:before { + box-shadow: 0px -1px 0px 0px rgba(34, 36, 38, 0.15); + } + .ui.grid[class*="vertically divided"][class*="tablet vertically reversed"] > .row:last-child:before, + .play-button.grid[class*="vertically divided"][class*="tablet vertically reversed"] > .row:last-child:before, + .download-button.grid[class*="vertically divided"][class*="tablet vertically reversed"] > .row:last-child:before { + box-shadow: none; + } + /* Celled Reversed */ + .ui[class*="tablet reversed"].celled.grid > .row > .column:first-child, + .play-button[class*="tablet reversed"].celled.grid > .row > .column:first-child, + .download-button[class*="tablet reversed"].celled.grid > .row > .column:first-child { + box-shadow: -1px 0px 0px 0px #D4D4D5; + } + .ui[class*="tablet reversed"].celled.grid > .row > .column:last-child, + .play-button[class*="tablet reversed"].celled.grid > .row > .column:last-child, + .download-button[class*="tablet reversed"].celled.grid > .row > .column:last-child { + box-shadow: none; + } +} +/* Computer */ +@media only screen and (min-width: 992px) { + .ui[class*="computer reversed"].grid, + .ui[class*="computer reversed"].grid > .row, + .ui.grid > [class*="computer reversed"].row, + .play-button[class*="computer reversed"].grid, + .play-button[class*="computer reversed"].grid > .row, + .play-button.grid > [class*="computer reversed"].row, + .download-button[class*="computer reversed"].grid, + .download-button[class*="computer reversed"].grid > .row, + .download-button.grid > [class*="computer reversed"].row { + flex-direction: row-reverse; + } + .ui[class*="computer vertically reversed"].grid, + .play-button[class*="computer vertically reversed"].grid, + .download-button[class*="computer vertically reversed"].grid { + flex-direction: column-reverse; + } + /* Divided Reversed */ + .ui[class*="computer reversed"].divided.grid:not([class*="vertically divided"]) > .column:first-child, + .ui[class*="computer reversed"].divided.grid:not([class*="vertically divided"]) > .row > .column:first-child, + .play-button[class*="computer reversed"].divided.grid:not([class*="vertically divided"]) > .column:first-child, + .play-button[class*="computer reversed"].divided.grid:not([class*="vertically divided"]) > .row > .column:first-child, + .download-button[class*="computer reversed"].divided.grid:not([class*="vertically divided"]) > .column:first-child, + .download-button[class*="computer reversed"].divided.grid:not([class*="vertically divided"]) > .row > .column:first-child { + box-shadow: -1px 0px 0px 0px rgba(34, 36, 38, 0.15); + } + .ui[class*="computer reversed"].divided.grid:not([class*="vertically divided"]) > .column:last-child, + .ui[class*="computer reversed"].divided.grid:not([class*="vertically divided"]) > .row > .column:last-child, + .play-button[class*="computer reversed"].divided.grid:not([class*="vertically divided"]) > .column:last-child, + .play-button[class*="computer reversed"].divided.grid:not([class*="vertically divided"]) > .row > .column:last-child, + .download-button[class*="computer reversed"].divided.grid:not([class*="vertically divided"]) > .column:last-child, + .download-button[class*="computer reversed"].divided.grid:not([class*="vertically divided"]) > .row > .column:last-child { + box-shadow: none; + } + /* Vertically Divided Reversed */ + .ui.grid[class*="vertically divided"][class*="computer vertically reversed"] > .row:first-child:before, + .play-button.grid[class*="vertically divided"][class*="computer vertically reversed"] > .row:first-child:before, + .download-button.grid[class*="vertically divided"][class*="computer vertically reversed"] > .row:first-child:before { + box-shadow: 0px -1px 0px 0px rgba(34, 36, 38, 0.15); + } + .ui.grid[class*="vertically divided"][class*="computer vertically reversed"] > .row:last-child:before, + .play-button.grid[class*="vertically divided"][class*="computer vertically reversed"] > .row:last-child:before, + .download-button.grid[class*="vertically divided"][class*="computer vertically reversed"] > .row:last-child:before { + box-shadow: none; + } + /* Celled Reversed */ + .ui[class*="computer reversed"].celled.grid > .row > .column:first-child, + .play-button[class*="computer reversed"].celled.grid > .row > .column:first-child, + .download-button[class*="computer reversed"].celled.grid > .row > .column:first-child { + box-shadow: -1px 0px 0px 0px #D4D4D5; + } + .ui[class*="computer reversed"].celled.grid > .row > .column:last-child, + .play-button[class*="computer reversed"].celled.grid > .row > .column:last-child, + .download-button[class*="computer reversed"].celled.grid > .row > .column:last-child { + box-shadow: none; + } +} +/*------------------- + Doubling +--------------------*/ +/* Tablet Only */ +@media only screen and (min-width: 768px) and (max-width: 991px) { + .ui.doubling.grid, + .play-button.doubling.grid, + .download-button.doubling.grid { + width: auto; + } + .ui.grid > .doubling.row, + .ui.doubling.grid > .row, + .play-button.grid > .doubling.row, + .play-button.doubling.grid > .row, + .download-button.grid > .doubling.row, + .download-button.doubling.grid > .row { + margin: 0em !important; + padding: 0em !important; + } + .ui.grid > .doubling.row > .column, + .ui.doubling.grid > .row > .column, + .play-button.grid > .doubling.row > .column, + .play-button.doubling.grid > .row > .column, + .download-button.grid > .doubling.row > .column, + .download-button.doubling.grid > .row > .column { + display: inline-block !important; + padding-top: 1rem !important; + padding-bottom: 1rem !important; + box-shadow: none !important; + margin: 0em; + } + .ui[class*="two column"].doubling.grid > .row > .column, + .ui[class*="two column"].doubling.grid > .column:not(.row), + .ui.grid > [class*="two column"].doubling.row.row > .column, + .play-button[class*="two column"].doubling.grid > .row > .column, + .play-button[class*="two column"].doubling.grid > .column:not(.row), + .play-button.grid > [class*="two column"].doubling.row.row > .column, + .download-button[class*="two column"].doubling.grid > .row > .column, + .download-button[class*="two column"].doubling.grid > .column:not(.row), + .download-button.grid > [class*="two column"].doubling.row.row > .column { + width: 100% !important; + } + .ui[class*="three column"].doubling.grid > .row > .column, + .ui[class*="three column"].doubling.grid > .column:not(.row), + .ui.grid > [class*="three column"].doubling.row.row > .column, + .play-button[class*="three column"].doubling.grid > .row > .column, + .play-button[class*="three column"].doubling.grid > .column:not(.row), + .play-button.grid > [class*="three column"].doubling.row.row > .column, + .download-button[class*="three column"].doubling.grid > .row > .column, + .download-button[class*="three column"].doubling.grid > .column:not(.row), + .download-button.grid > [class*="three column"].doubling.row.row > .column { + width: 50% !important; + } + .ui[class*="four column"].doubling.grid > .row > .column, + .ui[class*="four column"].doubling.grid > .column:not(.row), + .ui.grid > [class*="four column"].doubling.row.row > .column, + .play-button[class*="four column"].doubling.grid > .row > .column, + .play-button[class*="four column"].doubling.grid > .column:not(.row), + .play-button.grid > [class*="four column"].doubling.row.row > .column, + .download-button[class*="four column"].doubling.grid > .row > .column, + .download-button[class*="four column"].doubling.grid > .column:not(.row), + .download-button.grid > [class*="four column"].doubling.row.row > .column { + width: 50% !important; + } + .ui[class*="five column"].doubling.grid > .row > .column, + .ui[class*="five column"].doubling.grid > .column:not(.row), + .ui.grid > [class*="five column"].doubling.row.row > .column, + .play-button[class*="five column"].doubling.grid > .row > .column, + .play-button[class*="five column"].doubling.grid > .column:not(.row), + .play-button.grid > [class*="five column"].doubling.row.row > .column, + .download-button[class*="five column"].doubling.grid > .row > .column, + .download-button[class*="five column"].doubling.grid > .column:not(.row), + .download-button.grid > [class*="five column"].doubling.row.row > .column { + width: 33.33333333% !important; + } + .ui[class*="six column"].doubling.grid > .row > .column, + .ui[class*="six column"].doubling.grid > .column:not(.row), + .ui.grid > [class*="six column"].doubling.row.row > .column, + .play-button[class*="six column"].doubling.grid > .row > .column, + .play-button[class*="six column"].doubling.grid > .column:not(.row), + .play-button.grid > [class*="six column"].doubling.row.row > .column, + .download-button[class*="six column"].doubling.grid > .row > .column, + .download-button[class*="six column"].doubling.grid > .column:not(.row), + .download-button.grid > [class*="six column"].doubling.row.row > .column { + width: 33.33333333% !important; + } + .ui[class*="seven column"].doubling.grid > .row > .column, + .ui[class*="seven column"].doubling.grid > .column:not(.row), + .ui.grid > [class*="seven column"].doubling.row.row > .column, + .play-button[class*="seven column"].doubling.grid > .row > .column, + .play-button[class*="seven column"].doubling.grid > .column:not(.row), + .play-button.grid > [class*="seven column"].doubling.row.row > .column, + .download-button[class*="seven column"].doubling.grid > .row > .column, + .download-button[class*="seven column"].doubling.grid > .column:not(.row), + .download-button.grid > [class*="seven column"].doubling.row.row > .column { + width: 33.33333333% !important; + } + .ui[class*="eight column"].doubling.grid > .row > .column, + .ui[class*="eight column"].doubling.grid > .column:not(.row), + .ui.grid > [class*="eight column"].doubling.row.row > .column, + .play-button[class*="eight column"].doubling.grid > .row > .column, + .play-button[class*="eight column"].doubling.grid > .column:not(.row), + .play-button.grid > [class*="eight column"].doubling.row.row > .column, + .download-button[class*="eight column"].doubling.grid > .row > .column, + .download-button[class*="eight column"].doubling.grid > .column:not(.row), + .download-button.grid > [class*="eight column"].doubling.row.row > .column { + width: 25% !important; + } + .ui[class*="nine column"].doubling.grid > .row > .column, + .ui[class*="nine column"].doubling.grid > .column:not(.row), + .ui.grid > [class*="nine column"].doubling.row.row > .column, + .play-button[class*="nine column"].doubling.grid > .row > .column, + .play-button[class*="nine column"].doubling.grid > .column:not(.row), + .play-button.grid > [class*="nine column"].doubling.row.row > .column, + .download-button[class*="nine column"].doubling.grid > .row > .column, + .download-button[class*="nine column"].doubling.grid > .column:not(.row), + .download-button.grid > [class*="nine column"].doubling.row.row > .column { + width: 25% !important; + } + .ui[class*="ten column"].doubling.grid > .row > .column, + .ui[class*="ten column"].doubling.grid > .column:not(.row), + .ui.grid > [class*="ten column"].doubling.row.row > .column, + .play-button[class*="ten column"].doubling.grid > .row > .column, + .play-button[class*="ten column"].doubling.grid > .column:not(.row), + .play-button.grid > [class*="ten column"].doubling.row.row > .column, + .download-button[class*="ten column"].doubling.grid > .row > .column, + .download-button[class*="ten column"].doubling.grid > .column:not(.row), + .download-button.grid > [class*="ten column"].doubling.row.row > .column { + width: 20% !important; + } + .ui[class*="eleven column"].doubling.grid > .row > .column, + .ui[class*="eleven column"].doubling.grid > .column:not(.row), + .ui.grid > [class*="eleven column"].doubling.row.row > .column, + .play-button[class*="eleven column"].doubling.grid > .row > .column, + .play-button[class*="eleven column"].doubling.grid > .column:not(.row), + .play-button.grid > [class*="eleven column"].doubling.row.row > .column, + .download-button[class*="eleven column"].doubling.grid > .row > .column, + .download-button[class*="eleven column"].doubling.grid > .column:not(.row), + .download-button.grid > [class*="eleven column"].doubling.row.row > .column { + width: 20% !important; + } + .ui[class*="twelve column"].doubling.grid > .row > .column, + .ui[class*="twelve column"].doubling.grid > .column:not(.row), + .ui.grid > [class*="twelve column"].doubling.row.row > .column, + .play-button[class*="twelve column"].doubling.grid > .row > .column, + .play-button[class*="twelve column"].doubling.grid > .column:not(.row), + .play-button.grid > [class*="twelve column"].doubling.row.row > .column, + .download-button[class*="twelve column"].doubling.grid > .row > .column, + .download-button[class*="twelve column"].doubling.grid > .column:not(.row), + .download-button.grid > [class*="twelve column"].doubling.row.row > .column { + width: 16.66666667% !important; + } + .ui[class*="thirteen column"].doubling.grid > .row > .column, + .ui[class*="thirteen column"].doubling.grid > .column:not(.row), + .ui.grid > [class*="thirteen column"].doubling.row.row > .column, + .play-button[class*="thirteen column"].doubling.grid > .row > .column, + .play-button[class*="thirteen column"].doubling.grid > .column:not(.row), + .play-button.grid > [class*="thirteen column"].doubling.row.row > .column, + .download-button[class*="thirteen column"].doubling.grid > .row > .column, + .download-button[class*="thirteen column"].doubling.grid > .column:not(.row), + .download-button.grid > [class*="thirteen column"].doubling.row.row > .column { + width: 16.66666667% !important; + } + .ui[class*="fourteen column"].doubling.grid > .row > .column, + .ui[class*="fourteen column"].doubling.grid > .column:not(.row), + .ui.grid > [class*="fourteen column"].doubling.row.row > .column, + .play-button[class*="fourteen column"].doubling.grid > .row > .column, + .play-button[class*="fourteen column"].doubling.grid > .column:not(.row), + .play-button.grid > [class*="fourteen column"].doubling.row.row > .column, + .download-button[class*="fourteen column"].doubling.grid > .row > .column, + .download-button[class*="fourteen column"].doubling.grid > .column:not(.row), + .download-button.grid > [class*="fourteen column"].doubling.row.row > .column { + width: 14.28571429% !important; + } + .ui[class*="fifteen column"].doubling.grid > .row > .column, + .ui[class*="fifteen column"].doubling.grid > .column:not(.row), + .ui.grid > [class*="fifteen column"].doubling.row.row > .column, + .play-button[class*="fifteen column"].doubling.grid > .row > .column, + .play-button[class*="fifteen column"].doubling.grid > .column:not(.row), + .play-button.grid > [class*="fifteen column"].doubling.row.row > .column, + .download-button[class*="fifteen column"].doubling.grid > .row > .column, + .download-button[class*="fifteen column"].doubling.grid > .column:not(.row), + .download-button.grid > [class*="fifteen column"].doubling.row.row > .column { + width: 14.28571429% !important; + } + .ui[class*="sixteen column"].doubling.grid > .row > .column, + .ui[class*="sixteen column"].doubling.grid > .column:not(.row), + .ui.grid > [class*="sixteen column"].doubling.row.row > .column, + .play-button[class*="sixteen column"].doubling.grid > .row > .column, + .play-button[class*="sixteen column"].doubling.grid > .column:not(.row), + .play-button.grid > [class*="sixteen column"].doubling.row.row > .column, + .download-button[class*="sixteen column"].doubling.grid > .row > .column, + .download-button[class*="sixteen column"].doubling.grid > .column:not(.row), + .download-button.grid > [class*="sixteen column"].doubling.row.row > .column { + width: 12.5% !important; + } +} +/* Mobile Only */ +@media only screen and (max-width: 767px) { + .ui.grid > .doubling.row, + .ui.doubling.grid > .row, + .play-button.grid > .doubling.row, + .play-button.doubling.grid > .row, + .download-button.grid > .doubling.row, + .download-button.doubling.grid > .row { + margin: 0em !important; + padding: 0em !important; + } + .ui.grid > .doubling.row > .column, + .ui.doubling.grid > .row > .column, + .play-button.grid > .doubling.row > .column, + .play-button.doubling.grid > .row > .column, + .download-button.grid > .doubling.row > .column, + .download-button.doubling.grid > .row > .column { + padding-top: 1rem !important; + padding-bottom: 1rem !important; + margin: 0em !important; + box-shadow: none !important; + } + .ui[class*="two column"].doubling:not(.stackable).grid > .row > .column, + .ui[class*="two column"].doubling:not(.stackable).grid > .column:not(.row), + .ui.grid > [class*="two column"].doubling:not(.stackable).row.row > .column, + .play-button[class*="two column"].doubling:not(.stackable).grid > .row > .column, + .play-button[class*="two column"].doubling:not(.stackable).grid > .column:not(.row), + .play-button.grid > [class*="two column"].doubling:not(.stackable).row.row > .column, + .download-button[class*="two column"].doubling:not(.stackable).grid > .row > .column, + .download-button[class*="two column"].doubling:not(.stackable).grid > .column:not(.row), + .download-button.grid > [class*="two column"].doubling:not(.stackable).row.row > .column { + width: 100% !important; + } + .ui[class*="three column"].doubling:not(.stackable).grid > .row > .column, + .ui[class*="three column"].doubling:not(.stackable).grid > .column:not(.row), + .ui.grid > [class*="three column"].doubling:not(.stackable).row.row > .column, + .play-button[class*="three column"].doubling:not(.stackable).grid > .row > .column, + .play-button[class*="three column"].doubling:not(.stackable).grid > .column:not(.row), + .play-button.grid > [class*="three column"].doubling:not(.stackable).row.row > .column, + .download-button[class*="three column"].doubling:not(.stackable).grid > .row > .column, + .download-button[class*="three column"].doubling:not(.stackable).grid > .column:not(.row), + .download-button.grid > [class*="three column"].doubling:not(.stackable).row.row > .column { + width: 50% !important; + } + .ui[class*="four column"].doubling:not(.stackable).grid > .row > .column, + .ui[class*="four column"].doubling:not(.stackable).grid > .column:not(.row), + .ui.grid > [class*="four column"].doubling:not(.stackable).row.row > .column, + .play-button[class*="four column"].doubling:not(.stackable).grid > .row > .column, + .play-button[class*="four column"].doubling:not(.stackable).grid > .column:not(.row), + .play-button.grid > [class*="four column"].doubling:not(.stackable).row.row > .column, + .download-button[class*="four column"].doubling:not(.stackable).grid > .row > .column, + .download-button[class*="four column"].doubling:not(.stackable).grid > .column:not(.row), + .download-button.grid > [class*="four column"].doubling:not(.stackable).row.row > .column { + width: 50% !important; + } + .ui[class*="five column"].doubling:not(.stackable).grid > .row > .column, + .ui[class*="five column"].doubling:not(.stackable).grid > .column:not(.row), + .ui.grid > [class*="five column"].doubling:not(.stackable).row.row > .column, + .play-button[class*="five column"].doubling:not(.stackable).grid > .row > .column, + .play-button[class*="five column"].doubling:not(.stackable).grid > .column:not(.row), + .play-button.grid > [class*="five column"].doubling:not(.stackable).row.row > .column, + .download-button[class*="five column"].doubling:not(.stackable).grid > .row > .column, + .download-button[class*="five column"].doubling:not(.stackable).grid > .column:not(.row), + .download-button.grid > [class*="five column"].doubling:not(.stackable).row.row > .column { + width: 50% !important; + } + .ui[class*="six column"].doubling:not(.stackable).grid > .row > .column, + .ui[class*="six column"].doubling:not(.stackable).grid > .column:not(.row), + .ui.grid > [class*="six column"].doubling:not(.stackable).row.row > .column, + .play-button[class*="six column"].doubling:not(.stackable).grid > .row > .column, + .play-button[class*="six column"].doubling:not(.stackable).grid > .column:not(.row), + .play-button.grid > [class*="six column"].doubling:not(.stackable).row.row > .column, + .download-button[class*="six column"].doubling:not(.stackable).grid > .row > .column, + .download-button[class*="six column"].doubling:not(.stackable).grid > .column:not(.row), + .download-button.grid > [class*="six column"].doubling:not(.stackable).row.row > .column { + width: 50% !important; + } + .ui[class*="seven column"].doubling:not(.stackable).grid > .row > .column, + .ui[class*="seven column"].doubling:not(.stackable).grid > .column:not(.row), + .ui.grid > [class*="seven column"].doubling:not(.stackable).row.row > .column, + .play-button[class*="seven column"].doubling:not(.stackable).grid > .row > .column, + .play-button[class*="seven column"].doubling:not(.stackable).grid > .column:not(.row), + .play-button.grid > [class*="seven column"].doubling:not(.stackable).row.row > .column, + .download-button[class*="seven column"].doubling:not(.stackable).grid > .row > .column, + .download-button[class*="seven column"].doubling:not(.stackable).grid > .column:not(.row), + .download-button.grid > [class*="seven column"].doubling:not(.stackable).row.row > .column { + width: 50% !important; + } + .ui[class*="eight column"].doubling:not(.stackable).grid > .row > .column, + .ui[class*="eight column"].doubling:not(.stackable).grid > .column:not(.row), + .ui.grid > [class*="eight column"].doubling:not(.stackable).row.row > .column, + .play-button[class*="eight column"].doubling:not(.stackable).grid > .row > .column, + .play-button[class*="eight column"].doubling:not(.stackable).grid > .column:not(.row), + .play-button.grid > [class*="eight column"].doubling:not(.stackable).row.row > .column, + .download-button[class*="eight column"].doubling:not(.stackable).grid > .row > .column, + .download-button[class*="eight column"].doubling:not(.stackable).grid > .column:not(.row), + .download-button.grid > [class*="eight column"].doubling:not(.stackable).row.row > .column { + width: 50% !important; + } + .ui[class*="nine column"].doubling:not(.stackable).grid > .row > .column, + .ui[class*="nine column"].doubling:not(.stackable).grid > .column:not(.row), + .ui.grid > [class*="nine column"].doubling:not(.stackable).row.row > .column, + .play-button[class*="nine column"].doubling:not(.stackable).grid > .row > .column, + .play-button[class*="nine column"].doubling:not(.stackable).grid > .column:not(.row), + .play-button.grid > [class*="nine column"].doubling:not(.stackable).row.row > .column, + .download-button[class*="nine column"].doubling:not(.stackable).grid > .row > .column, + .download-button[class*="nine column"].doubling:not(.stackable).grid > .column:not(.row), + .download-button.grid > [class*="nine column"].doubling:not(.stackable).row.row > .column { + width: 33.33333333% !important; + } + .ui[class*="ten column"].doubling:not(.stackable).grid > .row > .column, + .ui[class*="ten column"].doubling:not(.stackable).grid > .column:not(.row), + .ui.grid > [class*="ten column"].doubling:not(.stackable).row.row > .column, + .play-button[class*="ten column"].doubling:not(.stackable).grid > .row > .column, + .play-button[class*="ten column"].doubling:not(.stackable).grid > .column:not(.row), + .play-button.grid > [class*="ten column"].doubling:not(.stackable).row.row > .column, + .download-button[class*="ten column"].doubling:not(.stackable).grid > .row > .column, + .download-button[class*="ten column"].doubling:not(.stackable).grid > .column:not(.row), + .download-button.grid > [class*="ten column"].doubling:not(.stackable).row.row > .column { + width: 33.33333333% !important; + } + .ui[class*="eleven column"].doubling:not(.stackable).grid > .row > .column, + .ui[class*="eleven column"].doubling:not(.stackable).grid > .column:not(.row), + .ui.grid > [class*="eleven column"].doubling:not(.stackable).row.row > .column, + .play-button[class*="eleven column"].doubling:not(.stackable).grid > .row > .column, + .play-button[class*="eleven column"].doubling:not(.stackable).grid > .column:not(.row), + .play-button.grid > [class*="eleven column"].doubling:not(.stackable).row.row > .column, + .download-button[class*="eleven column"].doubling:not(.stackable).grid > .row > .column, + .download-button[class*="eleven column"].doubling:not(.stackable).grid > .column:not(.row), + .download-button.grid > [class*="eleven column"].doubling:not(.stackable).row.row > .column { + width: 33.33333333% !important; + } + .ui[class*="twelve column"].doubling:not(.stackable).grid > .row > .column, + .ui[class*="twelve column"].doubling:not(.stackable).grid > .column:not(.row), + .ui.grid > [class*="twelve column"].doubling:not(.stackable).row.row > .column, + .play-button[class*="twelve column"].doubling:not(.stackable).grid > .row > .column, + .play-button[class*="twelve column"].doubling:not(.stackable).grid > .column:not(.row), + .play-button.grid > [class*="twelve column"].doubling:not(.stackable).row.row > .column, + .download-button[class*="twelve column"].doubling:not(.stackable).grid > .row > .column, + .download-button[class*="twelve column"].doubling:not(.stackable).grid > .column:not(.row), + .download-button.grid > [class*="twelve column"].doubling:not(.stackable).row.row > .column { + width: 33.33333333% !important; + } + .ui[class*="thirteen column"].doubling:not(.stackable).grid > .row > .column, + .ui[class*="thirteen column"].doubling:not(.stackable).grid > .column:not(.row), + .ui.grid > [class*="thirteen column"].doubling:not(.stackable).row.row > .column, + .play-button[class*="thirteen column"].doubling:not(.stackable).grid > .row > .column, + .play-button[class*="thirteen column"].doubling:not(.stackable).grid > .column:not(.row), + .play-button.grid > [class*="thirteen column"].doubling:not(.stackable).row.row > .column, + .download-button[class*="thirteen column"].doubling:not(.stackable).grid > .row > .column, + .download-button[class*="thirteen column"].doubling:not(.stackable).grid > .column:not(.row), + .download-button.grid > [class*="thirteen column"].doubling:not(.stackable).row.row > .column { + width: 33.33333333% !important; + } + .ui[class*="fourteen column"].doubling:not(.stackable).grid > .row > .column, + .ui[class*="fourteen column"].doubling:not(.stackable).grid > .column:not(.row), + .ui.grid > [class*="fourteen column"].doubling:not(.stackable).row.row > .column, + .play-button[class*="fourteen column"].doubling:not(.stackable).grid > .row > .column, + .play-button[class*="fourteen column"].doubling:not(.stackable).grid > .column:not(.row), + .play-button.grid > [class*="fourteen column"].doubling:not(.stackable).row.row > .column, + .download-button[class*="fourteen column"].doubling:not(.stackable).grid > .row > .column, + .download-button[class*="fourteen column"].doubling:not(.stackable).grid > .column:not(.row), + .download-button.grid > [class*="fourteen column"].doubling:not(.stackable).row.row > .column { + width: 25% !important; + } + .ui[class*="fifteen column"].doubling:not(.stackable).grid > .row > .column, + .ui[class*="fifteen column"].doubling:not(.stackable).grid > .column:not(.row), + .ui.grid > [class*="fifteen column"].doubling:not(.stackable).row.row > .column, + .play-button[class*="fifteen column"].doubling:not(.stackable).grid > .row > .column, + .play-button[class*="fifteen column"].doubling:not(.stackable).grid > .column:not(.row), + .play-button.grid > [class*="fifteen column"].doubling:not(.stackable).row.row > .column, + .download-button[class*="fifteen column"].doubling:not(.stackable).grid > .row > .column, + .download-button[class*="fifteen column"].doubling:not(.stackable).grid > .column:not(.row), + .download-button.grid > [class*="fifteen column"].doubling:not(.stackable).row.row > .column { + width: 25% !important; + } + .ui[class*="sixteen column"].doubling:not(.stackable).grid > .row > .column, + .ui[class*="sixteen column"].doubling:not(.stackable).grid > .column:not(.row), + .ui.grid > [class*="sixteen column"].doubling:not(.stackable).row.row > .column, + .play-button[class*="sixteen column"].doubling:not(.stackable).grid > .row > .column, + .play-button[class*="sixteen column"].doubling:not(.stackable).grid > .column:not(.row), + .play-button.grid > [class*="sixteen column"].doubling:not(.stackable).row.row > .column, + .download-button[class*="sixteen column"].doubling:not(.stackable).grid > .row > .column, + .download-button[class*="sixteen column"].doubling:not(.stackable).grid > .column:not(.row), + .download-button.grid > [class*="sixteen column"].doubling:not(.stackable).row.row > .column { + width: 25% !important; + } +} +/*------------------- + Stackable +--------------------*/ +@media only screen and (max-width: 767px) { + .ui.stackable.grid, + .play-button.stackable.grid, + .download-button.stackable.grid { + width: auto; + margin-left: 0em !important; + margin-right: 0em !important; + } + .ui.stackable.grid > .row > .wide.column, + .ui.stackable.grid > .wide.column, + .ui.stackable.grid > .column.grid > .column, + .ui.stackable.grid > .column.row > .column, + .ui.stackable.grid > .row > .column, + .ui.stackable.grid > .column:not(.row), + .ui.grid > .stackable.stackable.row > .column, + .play-button.stackable.grid > .row > .wide.column, + .play-button.stackable.grid > .wide.column, + .play-button.stackable.grid > .column.grid > .column, + .play-button.stackable.grid > .column.row > .column, + .play-button.stackable.grid > .row > .column, + .play-button.stackable.grid > .column:not(.row), + .play-button.grid > .stackable.stackable.row > .column, + .download-button.stackable.grid > .row > .wide.column, + .download-button.stackable.grid > .wide.column, + .download-button.stackable.grid > .column.grid > .column, + .download-button.stackable.grid > .column.row > .column, + .download-button.stackable.grid > .row > .column, + .download-button.stackable.grid > .column:not(.row), + .download-button.grid > .stackable.stackable.row > .column { + width: 100% !important; + margin: 0em 0em !important; + box-shadow: none !important; + padding: 1rem 1rem !important; + } + .ui.stackable.grid:not(.vertically) > .row, + .play-button.stackable.grid:not(.vertically) > .row, + .download-button.stackable.grid:not(.vertically) > .row { + margin: 0em; + padding: 0em; + } + /* Coupling */ + .ui.container > .ui.stackable.grid > .column, + .ui.container > .ui.stackable.grid > .row > .column, + .play-button.container > .play-button.stackable.grid > .column, + .play-button.container > .play-button.stackable.grid > .row > .column, + .download-button.container > .download-button.stackable.grid > .column, + .download-button.container > .download-button.stackable.grid > .row > .column { + padding-left: 0em !important; + padding-right: 0em !important; + } + /* Don't pad inside segment or nested grid */ + .ui.grid .ui.stackable.grid, + .ui.segment:not(.vertical) .ui.stackable.page.grid, + .play-button.grid .play-button.stackable.grid, + .play-button.segment:not(.vertical) .play-button.stackable.page.grid, + .download-button.grid .download-button.stackable.grid, + .download-button.segment:not(.vertical) .download-button.stackable.page.grid { + margin-left: -1rem !important; + margin-right: -1rem !important; + } + /* Divided Stackable */ + .ui.stackable.divided.grid > .row:first-child > .column:first-child, + .ui.stackable.celled.grid > .row:first-child > .column:first-child, + .ui.stackable.divided.grid > .column:not(.row):first-child, + .ui.stackable.celled.grid > .column:not(.row):first-child, + .play-button.stackable.divided.grid > .row:first-child > .column:first-child, + .play-button.stackable.celled.grid > .row:first-child > .column:first-child, + .play-button.stackable.divided.grid > .column:not(.row):first-child, + .play-button.stackable.celled.grid > .column:not(.row):first-child, + .download-button.stackable.divided.grid > .row:first-child > .column:first-child, + .download-button.stackable.celled.grid > .row:first-child > .column:first-child, + .download-button.stackable.divided.grid > .column:not(.row):first-child, + .download-button.stackable.celled.grid > .column:not(.row):first-child { + border-top: none !important; + } + .ui.inverted.stackable.celled.grid > .column:not(.row), + .ui.inverted.stackable.divided.grid > .column:not(.row), + .ui.inverted.stackable.celled.grid > .row > .column, + .ui.inverted.stackable.divided.grid > .row > .column, + .play-button.inverted.stackable.celled.grid > .column:not(.row), + .play-button.inverted.stackable.divided.grid > .column:not(.row), + .play-button.inverted.stackable.celled.grid > .row > .column, + .play-button.inverted.stackable.divided.grid > .row > .column, + .download-button.inverted.stackable.celled.grid > .column:not(.row), + .download-button.inverted.stackable.divided.grid > .column:not(.row), + .download-button.inverted.stackable.celled.grid > .row > .column, + .download-button.inverted.stackable.divided.grid > .row > .column { + border-top: 1px solid rgba(255, 255, 255, 0.1); + } + .ui.stackable.celled.grid > .column:not(.row), + .ui.stackable.divided:not(.vertically).grid > .column:not(.row), + .ui.stackable.celled.grid > .row > .column, + .ui.stackable.divided:not(.vertically).grid > .row > .column, + .play-button.stackable.celled.grid > .column:not(.row), + .play-button.stackable.divided:not(.vertically).grid > .column:not(.row), + .play-button.stackable.celled.grid > .row > .column, + .play-button.stackable.divided:not(.vertically).grid > .row > .column, + .download-button.stackable.celled.grid > .column:not(.row), + .download-button.stackable.divided:not(.vertically).grid > .column:not(.row), + .download-button.stackable.celled.grid > .row > .column, + .download-button.stackable.divided:not(.vertically).grid > .row > .column { + border-top: 1px solid rgba(34, 36, 38, 0.15); + box-shadow: none !important; + padding-top: 2rem !important; + padding-bottom: 2rem !important; + } + .ui.stackable.celled.grid > .row, + .play-button.stackable.celled.grid > .row, + .download-button.stackable.celled.grid > .row { + box-shadow: none !important; + } + .ui.stackable.divided:not(.vertically).grid > .column:not(.row), + .ui.stackable.divided:not(.vertically).grid > .row > .column, + .play-button.stackable.divided:not(.vertically).grid > .column:not(.row), + .play-button.stackable.divided:not(.vertically).grid > .row > .column, + .download-button.stackable.divided:not(.vertically).grid > .column:not(.row), + .download-button.stackable.divided:not(.vertically).grid > .row > .column { + padding-left: 0em !important; + padding-right: 0em !important; + } +} +/*---------------------- + Only (Device) +-----------------------*/ +/* These include arbitrary class repetitions for forced specificity */ +/* Mobile Only Hide */ +@media only screen and (max-width: 767px) { + .ui[class*="tablet only"].grid.grid.grid:not(.mobile), + .ui.grid.grid.grid > [class*="tablet only"].row:not(.mobile), + .ui.grid.grid.grid > [class*="tablet only"].column:not(.mobile), + .ui.grid.grid.grid > .row > [class*="tablet only"].column:not(.mobile), + .play-button[class*="tablet only"].grid.grid.grid:not(.mobile), + .play-button.grid.grid.grid > [class*="tablet only"].row:not(.mobile), + .play-button.grid.grid.grid > [class*="tablet only"].column:not(.mobile), + .play-button.grid.grid.grid > .row > [class*="tablet only"].column:not(.mobile), + .download-button[class*="tablet only"].grid.grid.grid:not(.mobile), + .download-button.grid.grid.grid > [class*="tablet only"].row:not(.mobile), + .download-button.grid.grid.grid > [class*="tablet only"].column:not(.mobile), + .download-button.grid.grid.grid > .row > [class*="tablet only"].column:not(.mobile) { + display: none !important; + } + .ui[class*="computer only"].grid.grid.grid:not(.mobile), + .ui.grid.grid.grid > [class*="computer only"].row:not(.mobile), + .ui.grid.grid.grid > [class*="computer only"].column:not(.mobile), + .ui.grid.grid.grid > .row > [class*="computer only"].column:not(.mobile), + .play-button[class*="computer only"].grid.grid.grid:not(.mobile), + .play-button.grid.grid.grid > [class*="computer only"].row:not(.mobile), + .play-button.grid.grid.grid > [class*="computer only"].column:not(.mobile), + .play-button.grid.grid.grid > .row > [class*="computer only"].column:not(.mobile), + .download-button[class*="computer only"].grid.grid.grid:not(.mobile), + .download-button.grid.grid.grid > [class*="computer only"].row:not(.mobile), + .download-button.grid.grid.grid > [class*="computer only"].column:not(.mobile), + .download-button.grid.grid.grid > .row > [class*="computer only"].column:not(.mobile) { + display: none !important; + } + .ui[class*="large screen only"].grid.grid.grid:not(.mobile), + .ui.grid.grid.grid > [class*="large screen only"].row:not(.mobile), + .ui.grid.grid.grid > [class*="large screen only"].column:not(.mobile), + .ui.grid.grid.grid > .row > [class*="large screen only"].column:not(.mobile), + .play-button[class*="large screen only"].grid.grid.grid:not(.mobile), + .play-button.grid.grid.grid > [class*="large screen only"].row:not(.mobile), + .play-button.grid.grid.grid > [class*="large screen only"].column:not(.mobile), + .play-button.grid.grid.grid > .row > [class*="large screen only"].column:not(.mobile), + .download-button[class*="large screen only"].grid.grid.grid:not(.mobile), + .download-button.grid.grid.grid > [class*="large screen only"].row:not(.mobile), + .download-button.grid.grid.grid > [class*="large screen only"].column:not(.mobile), + .download-button.grid.grid.grid > .row > [class*="large screen only"].column:not(.mobile) { + display: none !important; + } + .ui[class*="widescreen only"].grid.grid.grid:not(.mobile), + .ui.grid.grid.grid > [class*="widescreen only"].row:not(.mobile), + .ui.grid.grid.grid > [class*="widescreen only"].column:not(.mobile), + .ui.grid.grid.grid > .row > [class*="widescreen only"].column:not(.mobile), + .play-button[class*="widescreen only"].grid.grid.grid:not(.mobile), + .play-button.grid.grid.grid > [class*="widescreen only"].row:not(.mobile), + .play-button.grid.grid.grid > [class*="widescreen only"].column:not(.mobile), + .play-button.grid.grid.grid > .row > [class*="widescreen only"].column:not(.mobile), + .download-button[class*="widescreen only"].grid.grid.grid:not(.mobile), + .download-button.grid.grid.grid > [class*="widescreen only"].row:not(.mobile), + .download-button.grid.grid.grid > [class*="widescreen only"].column:not(.mobile), + .download-button.grid.grid.grid > .row > [class*="widescreen only"].column:not(.mobile) { + display: none !important; + } +} +/* Tablet Only Hide */ +@media only screen and (min-width: 768px) and (max-width: 991px) { + .ui[class*="mobile only"].grid.grid.grid:not(.tablet), + .ui.grid.grid.grid > [class*="mobile only"].row:not(.tablet), + .ui.grid.grid.grid > [class*="mobile only"].column:not(.tablet), + .ui.grid.grid.grid > .row > [class*="mobile only"].column:not(.tablet), + .play-button[class*="mobile only"].grid.grid.grid:not(.tablet), + .play-button.grid.grid.grid > [class*="mobile only"].row:not(.tablet), + .play-button.grid.grid.grid > [class*="mobile only"].column:not(.tablet), + .play-button.grid.grid.grid > .row > [class*="mobile only"].column:not(.tablet), + .download-button[class*="mobile only"].grid.grid.grid:not(.tablet), + .download-button.grid.grid.grid > [class*="mobile only"].row:not(.tablet), + .download-button.grid.grid.grid > [class*="mobile only"].column:not(.tablet), + .download-button.grid.grid.grid > .row > [class*="mobile only"].column:not(.tablet) { + display: none !important; + } + .ui[class*="computer only"].grid.grid.grid:not(.tablet), + .ui.grid.grid.grid > [class*="computer only"].row:not(.tablet), + .ui.grid.grid.grid > [class*="computer only"].column:not(.tablet), + .ui.grid.grid.grid > .row > [class*="computer only"].column:not(.tablet), + .play-button[class*="computer only"].grid.grid.grid:not(.tablet), + .play-button.grid.grid.grid > [class*="computer only"].row:not(.tablet), + .play-button.grid.grid.grid > [class*="computer only"].column:not(.tablet), + .play-button.grid.grid.grid > .row > [class*="computer only"].column:not(.tablet), + .download-button[class*="computer only"].grid.grid.grid:not(.tablet), + .download-button.grid.grid.grid > [class*="computer only"].row:not(.tablet), + .download-button.grid.grid.grid > [class*="computer only"].column:not(.tablet), + .download-button.grid.grid.grid > .row > [class*="computer only"].column:not(.tablet) { + display: none !important; + } + .ui[class*="large screen only"].grid.grid.grid:not(.mobile), + .ui.grid.grid.grid > [class*="large screen only"].row:not(.mobile), + .ui.grid.grid.grid > [class*="large screen only"].column:not(.mobile), + .ui.grid.grid.grid > .row > [class*="large screen only"].column:not(.mobile), + .play-button[class*="large screen only"].grid.grid.grid:not(.mobile), + .play-button.grid.grid.grid > [class*="large screen only"].row:not(.mobile), + .play-button.grid.grid.grid > [class*="large screen only"].column:not(.mobile), + .play-button.grid.grid.grid > .row > [class*="large screen only"].column:not(.mobile), + .download-button[class*="large screen only"].grid.grid.grid:not(.mobile), + .download-button.grid.grid.grid > [class*="large screen only"].row:not(.mobile), + .download-button.grid.grid.grid > [class*="large screen only"].column:not(.mobile), + .download-button.grid.grid.grid > .row > [class*="large screen only"].column:not(.mobile) { + display: none !important; + } + .ui[class*="widescreen only"].grid.grid.grid:not(.mobile), + .ui.grid.grid.grid > [class*="widescreen only"].row:not(.mobile), + .ui.grid.grid.grid > [class*="widescreen only"].column:not(.mobile), + .ui.grid.grid.grid > .row > [class*="widescreen only"].column:not(.mobile), + .play-button[class*="widescreen only"].grid.grid.grid:not(.mobile), + .play-button.grid.grid.grid > [class*="widescreen only"].row:not(.mobile), + .play-button.grid.grid.grid > [class*="widescreen only"].column:not(.mobile), + .play-button.grid.grid.grid > .row > [class*="widescreen only"].column:not(.mobile), + .download-button[class*="widescreen only"].grid.grid.grid:not(.mobile), + .download-button.grid.grid.grid > [class*="widescreen only"].row:not(.mobile), + .download-button.grid.grid.grid > [class*="widescreen only"].column:not(.mobile), + .download-button.grid.grid.grid > .row > [class*="widescreen only"].column:not(.mobile) { + display: none !important; + } +} +/* Computer Only Hide */ +@media only screen and (min-width: 992px) and (max-width: 1199px) { + .ui[class*="mobile only"].grid.grid.grid:not(.computer), + .ui.grid.grid.grid > [class*="mobile only"].row:not(.computer), + .ui.grid.grid.grid > [class*="mobile only"].column:not(.computer), + .ui.grid.grid.grid > .row > [class*="mobile only"].column:not(.computer), + .play-button[class*="mobile only"].grid.grid.grid:not(.computer), + .play-button.grid.grid.grid > [class*="mobile only"].row:not(.computer), + .play-button.grid.grid.grid > [class*="mobile only"].column:not(.computer), + .play-button.grid.grid.grid > .row > [class*="mobile only"].column:not(.computer), + .download-button[class*="mobile only"].grid.grid.grid:not(.computer), + .download-button.grid.grid.grid > [class*="mobile only"].row:not(.computer), + .download-button.grid.grid.grid > [class*="mobile only"].column:not(.computer), + .download-button.grid.grid.grid > .row > [class*="mobile only"].column:not(.computer) { + display: none !important; + } + .ui[class*="tablet only"].grid.grid.grid:not(.computer), + .ui.grid.grid.grid > [class*="tablet only"].row:not(.computer), + .ui.grid.grid.grid > [class*="tablet only"].column:not(.computer), + .ui.grid.grid.grid > .row > [class*="tablet only"].column:not(.computer), + .play-button[class*="tablet only"].grid.grid.grid:not(.computer), + .play-button.grid.grid.grid > [class*="tablet only"].row:not(.computer), + .play-button.grid.grid.grid > [class*="tablet only"].column:not(.computer), + .play-button.grid.grid.grid > .row > [class*="tablet only"].column:not(.computer), + .download-button[class*="tablet only"].grid.grid.grid:not(.computer), + .download-button.grid.grid.grid > [class*="tablet only"].row:not(.computer), + .download-button.grid.grid.grid > [class*="tablet only"].column:not(.computer), + .download-button.grid.grid.grid > .row > [class*="tablet only"].column:not(.computer) { + display: none !important; + } + .ui[class*="large screen only"].grid.grid.grid:not(.mobile), + .ui.grid.grid.grid > [class*="large screen only"].row:not(.mobile), + .ui.grid.grid.grid > [class*="large screen only"].column:not(.mobile), + .ui.grid.grid.grid > .row > [class*="large screen only"].column:not(.mobile), + .play-button[class*="large screen only"].grid.grid.grid:not(.mobile), + .play-button.grid.grid.grid > [class*="large screen only"].row:not(.mobile), + .play-button.grid.grid.grid > [class*="large screen only"].column:not(.mobile), + .play-button.grid.grid.grid > .row > [class*="large screen only"].column:not(.mobile), + .download-button[class*="large screen only"].grid.grid.grid:not(.mobile), + .download-button.grid.grid.grid > [class*="large screen only"].row:not(.mobile), + .download-button.grid.grid.grid > [class*="large screen only"].column:not(.mobile), + .download-button.grid.grid.grid > .row > [class*="large screen only"].column:not(.mobile) { + display: none !important; + } + .ui[class*="widescreen only"].grid.grid.grid:not(.mobile), + .ui.grid.grid.grid > [class*="widescreen only"].row:not(.mobile), + .ui.grid.grid.grid > [class*="widescreen only"].column:not(.mobile), + .ui.grid.grid.grid > .row > [class*="widescreen only"].column:not(.mobile), + .play-button[class*="widescreen only"].grid.grid.grid:not(.mobile), + .play-button.grid.grid.grid > [class*="widescreen only"].row:not(.mobile), + .play-button.grid.grid.grid > [class*="widescreen only"].column:not(.mobile), + .play-button.grid.grid.grid > .row > [class*="widescreen only"].column:not(.mobile), + .download-button[class*="widescreen only"].grid.grid.grid:not(.mobile), + .download-button.grid.grid.grid > [class*="widescreen only"].row:not(.mobile), + .download-button.grid.grid.grid > [class*="widescreen only"].column:not(.mobile), + .download-button.grid.grid.grid > .row > [class*="widescreen only"].column:not(.mobile) { + display: none !important; + } +} +/* Large Screen Only Hide */ +@media only screen and (min-width: 1200px) and (max-width: 1919px) { + .ui[class*="mobile only"].grid.grid.grid:not(.computer), + .ui.grid.grid.grid > [class*="mobile only"].row:not(.computer), + .ui.grid.grid.grid > [class*="mobile only"].column:not(.computer), + .ui.grid.grid.grid > .row > [class*="mobile only"].column:not(.computer), + .play-button[class*="mobile only"].grid.grid.grid:not(.computer), + .play-button.grid.grid.grid > [class*="mobile only"].row:not(.computer), + .play-button.grid.grid.grid > [class*="mobile only"].column:not(.computer), + .play-button.grid.grid.grid > .row > [class*="mobile only"].column:not(.computer), + .download-button[class*="mobile only"].grid.grid.grid:not(.computer), + .download-button.grid.grid.grid > [class*="mobile only"].row:not(.computer), + .download-button.grid.grid.grid > [class*="mobile only"].column:not(.computer), + .download-button.grid.grid.grid > .row > [class*="mobile only"].column:not(.computer) { + display: none !important; + } + .ui[class*="tablet only"].grid.grid.grid:not(.computer), + .ui.grid.grid.grid > [class*="tablet only"].row:not(.computer), + .ui.grid.grid.grid > [class*="tablet only"].column:not(.computer), + .ui.grid.grid.grid > .row > [class*="tablet only"].column:not(.computer), + .play-button[class*="tablet only"].grid.grid.grid:not(.computer), + .play-button.grid.grid.grid > [class*="tablet only"].row:not(.computer), + .play-button.grid.grid.grid > [class*="tablet only"].column:not(.computer), + .play-button.grid.grid.grid > .row > [class*="tablet only"].column:not(.computer), + .download-button[class*="tablet only"].grid.grid.grid:not(.computer), + .download-button.grid.grid.grid > [class*="tablet only"].row:not(.computer), + .download-button.grid.grid.grid > [class*="tablet only"].column:not(.computer), + .download-button.grid.grid.grid > .row > [class*="tablet only"].column:not(.computer) { + display: none !important; + } + .ui[class*="widescreen only"].grid.grid.grid:not(.mobile), + .ui.grid.grid.grid > [class*="widescreen only"].row:not(.mobile), + .ui.grid.grid.grid > [class*="widescreen only"].column:not(.mobile), + .ui.grid.grid.grid > .row > [class*="widescreen only"].column:not(.mobile), + .play-button[class*="widescreen only"].grid.grid.grid:not(.mobile), + .play-button.grid.grid.grid > [class*="widescreen only"].row:not(.mobile), + .play-button.grid.grid.grid > [class*="widescreen only"].column:not(.mobile), + .play-button.grid.grid.grid > .row > [class*="widescreen only"].column:not(.mobile), + .download-button[class*="widescreen only"].grid.grid.grid:not(.mobile), + .download-button.grid.grid.grid > [class*="widescreen only"].row:not(.mobile), + .download-button.grid.grid.grid > [class*="widescreen only"].column:not(.mobile), + .download-button.grid.grid.grid > .row > [class*="widescreen only"].column:not(.mobile) { + display: none !important; + } +} +/* Widescreen Only Hide */ +@media only screen and (min-width: 1920px) { + .ui[class*="mobile only"].grid.grid.grid:not(.computer), + .ui.grid.grid.grid > [class*="mobile only"].row:not(.computer), + .ui.grid.grid.grid > [class*="mobile only"].column:not(.computer), + .ui.grid.grid.grid > .row > [class*="mobile only"].column:not(.computer), + .play-button[class*="mobile only"].grid.grid.grid:not(.computer), + .play-button.grid.grid.grid > [class*="mobile only"].row:not(.computer), + .play-button.grid.grid.grid > [class*="mobile only"].column:not(.computer), + .play-button.grid.grid.grid > .row > [class*="mobile only"].column:not(.computer), + .download-button[class*="mobile only"].grid.grid.grid:not(.computer), + .download-button.grid.grid.grid > [class*="mobile only"].row:not(.computer), + .download-button.grid.grid.grid > [class*="mobile only"].column:not(.computer), + .download-button.grid.grid.grid > .row > [class*="mobile only"].column:not(.computer) { + display: none !important; + } + .ui[class*="tablet only"].grid.grid.grid:not(.computer), + .ui.grid.grid.grid > [class*="tablet only"].row:not(.computer), + .ui.grid.grid.grid > [class*="tablet only"].column:not(.computer), + .ui.grid.grid.grid > .row > [class*="tablet only"].column:not(.computer), + .play-button[class*="tablet only"].grid.grid.grid:not(.computer), + .play-button.grid.grid.grid > [class*="tablet only"].row:not(.computer), + .play-button.grid.grid.grid > [class*="tablet only"].column:not(.computer), + .play-button.grid.grid.grid > .row > [class*="tablet only"].column:not(.computer), + .download-button[class*="tablet only"].grid.grid.grid:not(.computer), + .download-button.grid.grid.grid > [class*="tablet only"].row:not(.computer), + .download-button.grid.grid.grid > [class*="tablet only"].column:not(.computer), + .download-button.grid.grid.grid > .row > [class*="tablet only"].column:not(.computer) { + display: none !important; + } +} +/******************************* + Site Overrides +*******************************/ +/******************************* + Site Overrides +*******************************/ +/* + * # Semantic - Menu + * http://github.com/semantic-org/semantic-ui/ + * + * + * Copyright 2015 Contributor + * Released under the MIT license + * http://opensource.org/licenses/MIT + * + */ +/******************************* + Theme +*******************************/ +/* + +████████╗██╗ ██╗███████╗███╗ ███╗███████╗███████╗ +╚══██╔══╝██║ ██║██╔════╝████╗ ████║██╔════╝██╔════╝ + ██║ ███████║█████╗ ██╔████╔██║█████╗ ███████╗ + ██║ ██╔══██║██╔══╝ ██║╚██╔╝██║██╔══╝ ╚════██║ + ██║ ██║ ██║███████╗██║ ╚═╝ ██║███████╗███████║ + ╚═╝ ╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝╚══════╝╚══════╝ + +*/ +/******************************* + Theme Selection +*******************************/ +/* To override a theme for an individual element + specify theme name below +*/ +/* Global */ +/* Elements */ +/* Collections */ +/* Modules */ +/* Views */ +/******************************* + Folders +*******************************/ +/* Path to theme packages */ +/* Path to site override folder */ +/******************************* + Import Theme +*******************************/ +/******************************* + Import Directives +*******************************/ +/*------------------ + Theme +-------------------*/ +/*-------------------- + Site Variables +---------------------*/ +/* Default site.variables */ +/******************************* + Site Settings +*******************************/ +/*------------------- + Fonts +--------------------*/ +/*------------------- + Base Sizes +--------------------*/ +/* This is the single variable that controls them all */ +/* The size of page text */ +/*------------------- + Border Radius +--------------------*/ +/* See Power-user section below + for explanation of @px variables +*/ +/*------------------- + Brand Colors +--------------------*/ +/*-------------- + Page Heading +---------------*/ +/*-------------- + Form Input +---------------*/ +/* This adjusts the default form input across all elements */ +/* Input Text Color */ +/* Line Height Default For Inputs in Browser (Descendors are 17px at 14px base em) */ +/*------------------- + Focused Input +--------------------*/ +/* Used on inputs, textarea etc */ +/* Used on dropdowns, other larger blocks */ +/*------------------- + Sizes +--------------------*/ +/* + Sizes are all expressed in terms of 14px/em (default em) + This ensures these "ratios" remain constant despite changes in EM +*/ +/*------------------- + Page +--------------------*/ +/*------------------- + Paragraph +--------------------*/ +/*------------------- + Links +--------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ +/*------------------- + Highlighted Text +--------------------*/ +/*------------------- + Loader +--------------------*/ +/*------------------- + Grid +--------------------*/ +/*------------------- + Transitions +--------------------*/ +/*------------------- + Breakpoints +--------------------*/ +/*------------------- + Site Colors +--------------------*/ +/*--- Colors ---*/ +/*--- Light Colors ---*/ +/*--- Neutrals ---*/ +/*--- Colored Backgrounds ---*/ +/*--- Colored Headers ---*/ +/*--- Colored Text ---*/ +/*--- Colored Border ---*/ +/*------------------- + Alpha Colors +--------------------*/ +/*------------------- + Accents +--------------------*/ +/* Differentiating Neutrals */ +/* Differentiating Layers */ +/******************************* + Power-User +*******************************/ +/*------------------- + Emotive Colors +--------------------*/ +/* Positive */ +/* Negative */ +/* Info */ +/* Warning */ +/*------------------- + Paths +--------------------*/ +/* For source only. Modified in gulp for dist */ +/*------------------- + Em Sizes +--------------------*/ +/* + This rounds @size values to the closest pixel then expresses that value in (r)em. + This ensures all size values round to exact pixels +*/ +/* em */ +/* rem */ +/*------------------- + Icons +--------------------*/ +/* Maximum Glyph Width of Icon */ +/*------------------- + Neutral Text +--------------------*/ +/*------------------- + Brand Colors +--------------------*/ +/*------------------- + Borders +--------------------*/ +/*------------------- + Derived Values +--------------------*/ +/* Loaders Position Offset */ +/* Rendered Scrollbar Width */ +/* Maximum Single Character Glyph Width, aka Capital "W" */ +/* Used to match floats with text */ +/* Header Spacing */ +/* Minimum Mobile Width */ +/* Positive / Negative Dupes */ +/* Responsive */ +/*------------------- + Exact Pixel Values +--------------------*/ +/* + These are used to specify exact pixel values in em + for things like borders that remain constantly + sized as emSize adjusts + + Since there are many more sizes than names for sizes, + these are named by their original pixel values. + +*/ +/* Columns */ +/******************************* + States +*******************************/ +/*------------------- + Disabled +--------------------*/ +/*------------------- + Hover +--------------------*/ +/*--- Shadows ---*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Focus +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Down (:active) +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Active +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/* Packaged site.variables */ +/******************************* + User Global Variables +*******************************/ +/*------------------- + Fonts +--------------------*/ +/*------------------- + Breakpoints +--------------------*/ +/* +@mobileBreakpoint : unit( (63 * @emSize), px); +@tabletBreakpoint : unit( (79 * @emSize), px); +@computerBreakpoint : unit( (91 * @emSize), px); +@largeMonitorBreakpoint : unit( (99 * @emSize), px); +@widescreenMonitorBreakpoint : unit( (119 * @emSize), px); +*/ +/******************************* + PXT Variables +*******************************/ +/*------------------- + Menu +--------------------*/ +/*------------------- + Layout +--------------------*/ +/*------------------- + Background +--------------------*/ +/*------------------- + Full screen +--------------------*/ +/*------------------- + Side Docs +--------------------*/ +/*------------------- + Editor +--------------------*/ +/* Component's site.variables */ +/******************************* + User Global Variables +*******************************/ +/*------------------- + Fonts +--------------------*/ +/*------------------- + Breakpoints +--------------------*/ +/* +@mobileBreakpoint : unit( (63 * @emSize), px); +@tabletBreakpoint : unit( (79 * @emSize), px); +@computerBreakpoint : unit( (91 * @emSize), px); +@largeMonitorBreakpoint : unit( (99 * @emSize), px); +@widescreenMonitorBreakpoint : unit( (119 * @emSize), px); +*/ +/******************************* + PXT Variables +*******************************/ +/*------------------- + Menu +--------------------*/ +/*------------------- + Layout +--------------------*/ +/*------------------- + Background +--------------------*/ +/*------------------- + Full screen +--------------------*/ +/*------------------- + Side Docs +--------------------*/ +/*------------------- + Editor +--------------------*/ +/* Site theme site.variables */ +/******************************* + User Global Variables +*******************************/ +/*------------------- + Site Colors +--------------------*/ +/******************************* + PXT Overrides +*******************************/ +/*------------------- + Component Variables +---------------------*/ +/* Default */ +/******************************* + Menu +*******************************/ +/*------------------- + Collection +--------------------*/ +/* Menu */ +/* Menu Item */ +/* Divider */ +/* Sub Menu */ +/* Text Item */ +/*-------------- + Elements +---------------*/ +/* Icon */ +/* Dropdown Icon */ +/* Header */ +/* Vertical Icon */ +/* Vertical Header */ +/* Pointing Arrow */ +/*-------------- + Couplings +---------------*/ +/* Button */ +/* Input */ +/* Image */ +/* Label */ +/* Dropdown in Menu */ +/* Dropdown Variations */ +/*-------------- + States +---------------*/ +/* Hovered Item */ +/* Pressed Item */ +/* Active Item */ +/* Active Hovered Item */ +/* Selected Dropdown */ +/* Active Dropdown */ +/* Active Sub Menu */ +/*-------------- + Types +---------------*/ +/* Vertical */ +/* Secondary */ +/* Pointing */ +/* Inverted Secondary */ +/* Inverted Pointing */ +/* Tiered */ +/* Icon */ +/* Tabular */ +/* Pagination */ +/* Labeled Icon */ +/* Text */ +/*-------------- + Variations +---------------*/ +/* Inverted */ +/* Inverted Sub Menu */ +/* Inverted Hover */ +/* Pressed */ +/* Inverted Active */ +/* Inverted Active Hover */ +/* Inverted Menu Divider */ +/* Inverted Colored */ +/* Fixed */ +/* Floated */ +/* Attached */ +/* Resize large sizes */ +/* Sizes */ +/* Packaged Theme */ +/******************************* + User Variable Overrides +*******************************/ +/* PXT Variables */ +/* Site Theme */ +/******************************* + User Variable Overrides +*******************************/ +/******************************* + PXT Theme Overrides +*******************************/ +/******************************* + Mix-ins +*******************************/ +/*------------------ + Fonts +-------------------*/ +/*------------------ + Overrides +-------------------*/ +/* End Config */ +/******************************* + Standard +*******************************/ +/*-------------- + Menu +---------------*/ +.ui.menu, +.play-button.menu, +.download-button.menu { + display: flex; + margin: 1rem 0em; + font-family: 'Roboto Mono', 'Helvetica Neue', Arial, Helvetica, sans-serif; + background: #FFFFFF; + font-weight: normal; + border: 1px solid rgba(34, 36, 38, 0.15); + box-shadow: 0px 1px 2px 0 rgba(34, 36, 38, 0.15); + border-radius: 0.28571429rem; + min-height: 2.85714286em; +} +.ui.menu:after, +.play-button.menu:after, +.download-button.menu:after { + content: ''; + display: block; + height: 0px; + clear: both; + visibility: hidden; +} +.ui.menu:first-child, +.play-button.menu:first-child, +.download-button.menu:first-child { + margin-top: 0rem; +} +.ui.menu:last-child, +.play-button.menu:last-child, +.download-button.menu:last-child { + margin-bottom: 0rem; +} +/*-------------- + Sub-Menu +---------------*/ +.ui.menu .menu, +.play-button.menu .menu, +.download-button.menu .menu { + margin: 0em; +} +.ui.menu:not(.vertical) > .menu, +.play-button.menu:not(.vertical) > .menu, +.download-button.menu:not(.vertical) > .menu { + display: flex; +} +/*-------------- + Item +---------------*/ +.ui.menu:not(.vertical) .item, +.play-button.menu:not(.vertical) .item, +.download-button.menu:not(.vertical) .item { + display: flex; + align-items: center; +} +.ui.menu .item, +.play-button.menu .item, +.download-button.menu .item { + position: relative; + vertical-align: middle; + line-height: 1; + text-decoration: none; + -webkit-tap-highlight-color: transparent; + flex: 0 0 auto; + user-select: none; + background: none; + padding: 0.92857143em 1.14285714em; + text-transform: none; + color: rgba(0, 0, 0, 0.87); + font-weight: normal; + transition: background 0.1s ease, box-shadow 0.1s ease, color 0.1s ease; +} +.ui.menu > .item:first-child, +.play-button.menu > .item:first-child, +.download-button.menu > .item:first-child { + border-radius: 0.28571429rem 0px 0px 0.28571429rem; +} +/* Border */ +.ui.menu .item:before, +.play-button.menu .item:before, +.download-button.menu .item:before { + position: absolute; + content: ''; + top: 0%; + right: 0px; + height: 100%; + width: 1px; + background: rgba(34, 36, 38, 0.1); +} +/*-------------- + Text Content +---------------*/ +.ui.menu .text.item > *, +.ui.menu .item > a:not(.ui), +.ui.menu .item > p:only-child, +.play-button.menu .text.item > *, +.play-button.menu .item > a:not(.ui), +.play-button.menu .item > p:only-child, +.download-button.menu .text.item > *, +.download-button.menu .item > a:not(.ui), +.download-button.menu .item > p:only-child { + user-select: text; + line-height: 1.3; +} +.ui.menu .item > p:first-child, +.play-button.menu .item > p:first-child, +.download-button.menu .item > p:first-child { + margin-top: 0; +} +.ui.menu .item > p:last-child, +.play-button.menu .item > p:last-child, +.download-button.menu .item > p:last-child { + margin-bottom: 0; +} +/*-------------- + Icons +---------------*/ +.ui.menu .item > i.icon, +.play-button.menu .item > i.icon, +.download-button.menu .item > i.icon { + opacity: 0.9; + float: none; + margin: 0em 0.35714286em 0em 0em; +} +/*-------------- + Button +---------------*/ +.ui.menu:not(.vertical) .item > .button, +.play-button.menu:not(.vertical) .item > .button, +.ui.menu:not(.vertical) .item > .play-button, +.download-button.menu:not(.vertical) .item > .button, +.ui.menu:not(.vertical) .item > .download-button { + position: relative; + top: 0em; + margin: -0.5em 0em; + padding-bottom: 0.78571429em; + padding-top: 0.78571429em; + font-size: 1em; +} +/*---------------- + Grid / Container +-----------------*/ +.ui.menu > .grid, +.ui.menu > .container, +.play-button.menu > .grid, +.play-button.menu > .container, +.download-button.menu > .grid, +.download-button.menu > .container { + display: flex; + align-items: inherit; + flex-direction: inherit; +} +/*-------------- + Inputs +---------------*/ +.ui.menu .item > .input, +.play-button.menu .item > .input, +.download-button.menu .item > .input { + width: 100%; +} +.ui.menu:not(.vertical) .item > .input, +.play-button.menu:not(.vertical) .item > .input, +.download-button.menu:not(.vertical) .item > .input { + position: relative; + top: 0em; + margin: -0.5em 0em; +} +.ui.menu .item > .input input, +.play-button.menu .item > .input input, +.download-button.menu .item > .input input { + font-size: 1em; + padding-top: 0.57142857em; + padding-bottom: 0.57142857em; +} +/*-------------- + Header +---------------*/ +.ui.menu .header.item, +.ui.vertical.menu .header.item, +.play-button.menu .header.item, +.play-button.vertical.menu .header.item, +.download-button.menu .header.item, +.download-button.vertical.menu .header.item { + margin: 0em; + background: ''; + text-transform: normal; + font-weight: bold; +} +.ui.vertical.menu .item > .header:not(.ui), +.play-button.vertical.menu .item > .header:not(.ui), +.download-button.vertical.menu .item > .header:not(.ui) { + margin: 0em 0em 0.5em; + font-size: 1em; + font-weight: bold; +} +/*-------------- + Dropdowns +---------------*/ +/* Dropdown Icon */ +.ui.menu .item > i.dropdown.icon, +.play-button.menu .item > i.dropdown.icon, +.download-button.menu .item > i.dropdown.icon { + padding: 0em; + float: right; + margin: 0em 0em 0em 1em; +} +/* Menu */ +.ui.menu .dropdown.item .menu, +.play-button.menu .dropdown.item .menu, +.download-button.menu .dropdown.item .menu { + min-width: calc(100% - 1px); + border-radius: 0em 0em 0.28571429rem 0.28571429rem; + background: #FFFFFF; + margin: 0px 0px 0px; + box-shadow: 0px 1px 3px 0px rgba(0, 0, 0, 0.08); + flex-direction: column !important; +} +/* Menu Items */ +.ui.menu .ui.dropdown .menu > .item, +.play-button.menu .play-button.dropdown .menu > .item, +.download-button.menu .download-button.dropdown .menu > .item { + margin: 0; + text-align: left; + font-size: 1em !important; + padding: 0.78571429em 1.14285714em !important; + background: transparent !important; + color: rgba(0, 0, 0, 0.87) !important; + text-transform: none !important; + font-weight: normal !important; + box-shadow: none !important; + transition: none !important; +} +.ui.menu .ui.dropdown .menu > .item:hover, +.play-button.menu .play-button.dropdown .menu > .item:hover, +.download-button.menu .download-button.dropdown .menu > .item:hover { + background: rgba(0, 0, 0, 0.05) !important; + color: rgba(0, 0, 0, 0.95) !important; +} +.ui.menu .ui.dropdown .menu > .selected.item, +.play-button.menu .play-button.dropdown .menu > .selected.item, +.download-button.menu .download-button.dropdown .menu > .selected.item { + background: rgba(0, 0, 0, 0.05) !important; + color: rgba(0, 0, 0, 0.95) !important; +} +.ui.menu .ui.dropdown .menu > .active.item, +.play-button.menu .play-button.dropdown .menu > .active.item, +.download-button.menu .download-button.dropdown .menu > .active.item { + background: rgba(0, 0, 0, 0.03) !important; + font-weight: bold !important; + color: rgba(0, 0, 0, 0.95) !important; +} +.ui.menu .ui.dropdown.item .menu .item:not(.filtered), +.play-button.menu .play-button.dropdown.item .menu .item:not(.filtered), +.download-button.menu .download-button.dropdown.item .menu .item:not(.filtered) { + display: block; +} +.ui.menu .ui.dropdown .menu > .item .icon:not(.dropdown), +.play-button.menu .play-button.dropdown .menu > .item .icon:not(.dropdown), +.download-button.menu .download-button.dropdown .menu > .item .icon:not(.dropdown) { + display: inline-block; + font-size: 1em !important; + float: none; + margin: 0em 0.75em 0em 0em; +} +/* Secondary */ +.ui.secondary.menu .dropdown.item > .menu, +.ui.text.menu .dropdown.item > .menu, +.play-button.secondary.menu .dropdown.item > .menu, +.play-button.text.menu .dropdown.item > .menu, +.download-button.secondary.menu .dropdown.item > .menu, +.download-button.text.menu .dropdown.item > .menu { + border-radius: 0.28571429rem; + margin-top: 0.35714286em; +} +/* Pointing */ +.ui.menu .pointing.dropdown.item .menu, +.play-button.menu .pointing.dropdown.item .menu, +.download-button.menu .pointing.dropdown.item .menu { + margin-top: 0.75em; +} +/* Inverted */ +.ui.inverted.menu .search.dropdown.item > .search, +.ui.inverted.menu .search.dropdown.item > .text, +.play-button.inverted.menu .search.dropdown.item > .search, +.play-button.inverted.menu .search.dropdown.item > .text, +.download-button.inverted.menu .search.dropdown.item > .search, +.download-button.inverted.menu .search.dropdown.item > .text { + color: rgba(255, 255, 255, 0.9); +} +/* Vertical */ +.ui.vertical.menu .dropdown.item > .icon, +.play-button.vertical.menu .dropdown.item > .icon, +.download-button.vertical.menu .dropdown.item > .icon { + float: right; + content: "\f0da"; + margin-left: 1em; +} +.ui.vertical.menu .dropdown.item .menu, +.play-button.vertical.menu .dropdown.item .menu, +.download-button.vertical.menu .dropdown.item .menu { + left: 100%; + min-width: 0; + margin: 0em 0em 0em 0px; + box-shadow: 0 1px 3px 0px rgba(0, 0, 0, 0.08); + border-radius: 0em 0.28571429rem 0.28571429rem 0.28571429rem; +} +.ui.vertical.menu .dropdown.item.upward .menu, +.play-button.vertical.menu .dropdown.item.upward .menu, +.download-button.vertical.menu .dropdown.item.upward .menu { + bottom: 0; +} +.ui.vertical.menu .dropdown.item:not(.upward) .menu, +.play-button.vertical.menu .dropdown.item:not(.upward) .menu, +.download-button.vertical.menu .dropdown.item:not(.upward) .menu { + top: 0; +} +.ui.vertical.menu .active.dropdown.item, +.play-button.vertical.menu .active.dropdown.item, +.download-button.vertical.menu .active.dropdown.item { + border-top-right-radius: 0em; + border-bottom-right-radius: 0em; +} +.ui.vertical.menu .dropdown.active.item, +.play-button.vertical.menu .dropdown.active.item, +.download-button.vertical.menu .dropdown.active.item { + box-shadow: none; +} +/* Evenly Divided */ +.ui.item.menu .dropdown .menu .item, +.play-button.item.menu .dropdown .menu .item, +.download-button.item.menu .dropdown .menu .item { + width: 100%; +} +/*-------------- + Labels +---------------*/ +.ui.menu .item > .label, +.play-button.menu .item > .label, +.download-button.menu .item > .label { + background: #999999; + color: #FFFFFF; + margin-left: 1em; + padding: 0.3em 0.78571429em; +} +.ui.vertical.menu .item > .label, +.play-button.vertical.menu .item > .label, +.download-button.vertical.menu .item > .label { + background: #999999; + color: #FFFFFF; + margin-top: -0.15em; + margin-bottom: -0.15em; + padding: 0.3em 0.78571429em; +} +.ui.menu .item > .floating.label, +.play-button.menu .item > .floating.label, +.download-button.menu .item > .floating.label { + padding: 0.3em 0.78571429em; +} +/*-------------- + Images +---------------*/ +.ui.menu .item > img:not(.ui), +.play-button.menu .item > img:not(.ui), +.download-button.menu .item > img:not(.ui) { + display: inline-block; + vertical-align: middle; + margin: -0.3em 0em; + width: 2.5em; +} +.ui.vertical.menu .item > img:not(.ui):only-child, +.play-button.vertical.menu .item > img:not(.ui):only-child, +.download-button.vertical.menu .item > img:not(.ui):only-child { + display: block; + max-width: 100%; + width: auto; +} +/******************************* + Coupling +*******************************/ +/*-------------- + Sidebar +---------------*/ +/* Show vertical dividers below last */ +.ui.vertical.sidebar.menu > .item:first-child:before, +.play-button.vertical.sidebar.menu > .item:first-child:before, +.download-button.vertical.sidebar.menu > .item:first-child:before { + display: block !important; +} +.ui.vertical.sidebar.menu > .item::before, +.play-button.vertical.sidebar.menu > .item::before, +.download-button.vertical.sidebar.menu > .item::before { + top: auto; + bottom: 0px; +} +/*-------------- + Container +---------------*/ +@media only screen and (max-width: 767px) { + .ui.menu > .ui.container, + .play-button.menu > .play-button.container, + .download-button.menu > .download-button.container { + width: 100% !important; + margin-left: 0em !important; + margin-right: 0em !important; + } +} +@media only screen and (min-width: 768px) { + .ui.menu:not(.secondary):not(.text):not(.tabular):not(.borderless) > .container > .item:not(.right):not(.borderless):first-child, + .play-button.menu:not(.secondary):not(.text):not(.tabular):not(.borderless) > .container > .item:not(.right):not(.borderless):first-child, + .download-button.menu:not(.secondary):not(.text):not(.tabular):not(.borderless) > .container > .item:not(.right):not(.borderless):first-child { + border-left: 1px solid rgba(34, 36, 38, 0.1); + } +} +/******************************* + States +*******************************/ +/*-------------- + Hover +---------------*/ +.ui.link.menu .item:hover, +.ui.menu .dropdown.item:hover, +.ui.menu .link.item:hover, +.ui.menu a.item:hover, +.play-button.link.menu .item:hover, +.play-button.menu .dropdown.item:hover, +.play-button.menu .link.item:hover, +.play-button.menu a.item:hover, +.download-button.link.menu .item:hover, +.download-button.menu .dropdown.item:hover, +.download-button.menu .link.item:hover, +.download-button.menu a.item:hover { + cursor: pointer; + background: rgba(0, 0, 0, 0.03); + color: rgba(0, 0, 0, 0.95); +} +/*-------------- + Pressed +---------------*/ +.ui.link.menu .item:active, +.ui.menu .link.item:active, +.ui.menu a.item:active, +.play-button.link.menu .item:active, +.play-button.menu .link.item:active, +.play-button.menu a.item:active, +.download-button.link.menu .item:active, +.download-button.menu .link.item:active, +.download-button.menu a.item:active { + background: rgba(0, 0, 0, 0.03); + color: rgba(0, 0, 0, 0.95); +} +/*-------------- + Active +---------------*/ +.ui.menu .active.item, +.play-button.menu .active.item, +.download-button.menu .active.item { + background: rgba(0, 0, 0, 0.05); + color: rgba(0, 0, 0, 0.95); + font-weight: normal; + box-shadow: none; +} +.ui.menu .active.item > i.icon, +.play-button.menu .active.item > i.icon, +.download-button.menu .active.item > i.icon { + opacity: 1; +} +/*-------------- + Active Hover +---------------*/ +.ui.menu .active.item:hover, +.ui.vertical.menu .active.item:hover, +.play-button.menu .active.item:hover, +.play-button.vertical.menu .active.item:hover, +.download-button.menu .active.item:hover, +.download-button.vertical.menu .active.item:hover { + background-color: rgba(0, 0, 0, 0.05); + color: rgba(0, 0, 0, 0.95); +} +/*-------------- + Disabled +---------------*/ +.ui.menu .item.disabled, +.ui.menu .item.disabled:hover, +.play-button.menu .item.disabled, +.play-button.menu .item.disabled:hover, +.download-button.menu .item.disabled, +.download-button.menu .item.disabled:hover { + cursor: default; + background-color: transparent !important; + color: rgba(40, 40, 40, 0.3); +} +/******************************* + Types +*******************************/ +/*------------------ +Floated Menu / Item +-------------------*/ +/* Left Floated */ +.ui.menu:not(.vertical) .left.item, +.ui.menu:not(.vertical) .left.menu, +.play-button.menu:not(.vertical) .left.item, +.play-button.menu:not(.vertical) .left.menu, +.download-button.menu:not(.vertical) .left.item, +.download-button.menu:not(.vertical) .left.menu { + display: flex; + margin-right: auto !important; +} +/* Right Floated */ +.ui.menu:not(.vertical) .right.item, +.ui.menu:not(.vertical) .right.menu, +.play-button.menu:not(.vertical) .right.item, +.play-button.menu:not(.vertical) .right.menu, +.download-button.menu:not(.vertical) .right.item, +.download-button.menu:not(.vertical) .right.menu { + display: flex; + margin-left: auto !important; +} +/* Swapped Borders */ +.ui.menu .right.item::before, +.ui.menu .right.menu > .item::before, +.play-button.menu .right.item::before, +.play-button.menu .right.menu > .item::before, +.download-button.menu .right.item::before, +.download-button.menu .right.menu > .item::before { + right: auto; + left: 0; +} +/*-------------- + Vertical +---------------*/ +.ui.vertical.menu, +.play-button.vertical.menu, +.download-button.vertical.menu { + display: block; + flex-direction: column; + background: #FFFFFF; + box-shadow: 0px 1px 2px 0 rgba(34, 36, 38, 0.15); +} +/*--- Item ---*/ +.ui.vertical.menu .item, +.play-button.vertical.menu .item, +.download-button.vertical.menu .item { + display: block; + background: none; + border-top: none; + border-right: none; +} +.ui.vertical.menu > .item:first-child, +.play-button.vertical.menu > .item:first-child, +.download-button.vertical.menu > .item:first-child { + border-radius: 0.28571429rem 0.28571429rem 0px 0px; +} +.ui.vertical.menu > .item:last-child, +.play-button.vertical.menu > .item:last-child, +.download-button.vertical.menu > .item:last-child { + border-radius: 0px 0px 0.28571429rem 0.28571429rem; +} +/*--- Label ---*/ +.ui.vertical.menu .item > .label, +.play-button.vertical.menu .item > .label, +.download-button.vertical.menu .item > .label { + float: right; + text-align: center; +} +/*--- Icon ---*/ +.ui.vertical.menu .item > i.icon, +.play-button.vertical.menu .item > i.icon, +.download-button.vertical.menu .item > i.icon { + width: 1.18em; + float: right; + margin: 0em 0em 0em 0.5em; +} +.ui.vertical.menu .item > .label + i.icon, +.play-button.vertical.menu .item > .label + i.icon, +.download-button.vertical.menu .item > .label + i.icon { + float: none; + margin: 0em 0.5em 0em 0em; +} +/*--- Border ---*/ +.ui.vertical.menu .item:before, +.play-button.vertical.menu .item:before, +.download-button.vertical.menu .item:before { + position: absolute; + content: ''; + top: 0%; + left: 0px; + width: 100%; + height: 1px; + background: rgba(34, 36, 38, 0.1); +} +.ui.vertical.menu .item:first-child:before, +.play-button.vertical.menu .item:first-child:before, +.download-button.vertical.menu .item:first-child:before { + display: none !important; +} +/*--- Sub Menu ---*/ +.ui.vertical.menu .item > .menu, +.play-button.vertical.menu .item > .menu, +.download-button.vertical.menu .item > .menu { + margin: 0.5em -1.14285714em 0em; +} +.ui.vertical.menu .menu .item, +.play-button.vertical.menu .menu .item, +.download-button.vertical.menu .menu .item { + background: none; + padding: 0.5em 1.33333333em; + font-size: 0.85714286em; + color: rgba(0, 0, 0, 0.5); +} +.ui.vertical.menu .item .menu a.item:hover, +.ui.vertical.menu .item .menu .link.item:hover, +.play-button.vertical.menu .item .menu a.item:hover, +.play-button.vertical.menu .item .menu .link.item:hover, +.download-button.vertical.menu .item .menu a.item:hover, +.download-button.vertical.menu .item .menu .link.item:hover { + color: rgba(0, 0, 0, 0.85); +} +.ui.vertical.menu .menu .item:before, +.play-button.vertical.menu .menu .item:before, +.download-button.vertical.menu .menu .item:before { + display: none; +} +/* Vertical Active */ +.ui.vertical.menu .active.item, +.play-button.vertical.menu .active.item, +.download-button.vertical.menu .active.item { + background: rgba(0, 0, 0, 0.05); + border-radius: 0em; + box-shadow: none; +} +.ui.vertical.menu > .active.item:first-child, +.play-button.vertical.menu > .active.item:first-child, +.download-button.vertical.menu > .active.item:first-child { + border-radius: 0.28571429rem 0.28571429rem 0em 0em; +} +.ui.vertical.menu > .active.item:last-child, +.play-button.vertical.menu > .active.item:last-child, +.download-button.vertical.menu > .active.item:last-child { + border-radius: 0em 0em 0.28571429rem 0.28571429rem; +} +.ui.vertical.menu > .active.item:only-child, +.play-button.vertical.menu > .active.item:only-child, +.download-button.vertical.menu > .active.item:only-child { + border-radius: 0.28571429rem; +} +.ui.vertical.menu .active.item .menu .active.item, +.play-button.vertical.menu .active.item .menu .active.item, +.download-button.vertical.menu .active.item .menu .active.item { + border-left: none; +} +.ui.vertical.menu .item .menu .active.item, +.play-button.vertical.menu .item .menu .active.item, +.download-button.vertical.menu .item .menu .active.item { + background-color: transparent; + font-weight: bold; + color: rgba(0, 0, 0, 0.95); +} +/*-------------- + Tabular +---------------*/ +.ui.tabular.menu, +.play-button.tabular.menu, +.download-button.tabular.menu { + border-radius: 0em; + box-shadow: none !important; + border: none; + background: none transparent; + border-bottom: 1px solid #D4D4D5; +} +.ui.tabular.fluid.menu, +.play-button.tabular.fluid.menu, +.download-button.tabular.fluid.menu { + width: calc(100% + 2px ) !important; +} +.ui.tabular.menu .item, +.play-button.tabular.menu .item, +.download-button.tabular.menu .item { + background: transparent; + border-bottom: none; + border-left: 1px solid transparent; + border-right: 1px solid transparent; + border-top: 2px solid transparent; + padding: 0.92857143em 1.42857143em; + color: rgba(0, 0, 0, 0.87); +} +.ui.tabular.menu .item:before, +.play-button.tabular.menu .item:before, +.download-button.tabular.menu .item:before { + display: none; +} +/* Hover */ +.ui.tabular.menu .item:hover, +.play-button.tabular.menu .item:hover, +.download-button.tabular.menu .item:hover { + background-color: transparent; + color: rgba(0, 0, 0, 0.8); +} +/* Active */ +.ui.tabular.menu .active.item, +.play-button.tabular.menu .active.item, +.download-button.tabular.menu .active.item { + background: none #FFFFFF; + color: rgba(0, 0, 0, 0.95); + border-top-width: 1px; + border-color: #D4D4D5; + font-weight: bold; + margin-bottom: -1px; + box-shadow: none; + border-radius: 0.28571429rem 0.28571429rem 0px 0px !important; +} +/* Coupling with segment for attachment */ +.ui.tabular.menu + .attached:not(.top).segment, +.ui.tabular.menu + .attached:not(.top).segment + .attached:not(.top).segment, +.play-button.tabular.menu + .attached:not(.top).segment, +.play-button.tabular.menu + .attached:not(.top).segment + .attached:not(.top).segment, +.download-button.tabular.menu + .attached:not(.top).segment, +.download-button.tabular.menu + .attached:not(.top).segment + .attached:not(.top).segment { + border-top: none; + margin-left: 0px; + margin-top: 0px; + margin-right: 0px; + width: 100%; +} +.top.attached.segment + .ui.bottom.tabular.menu, +.top.attached.segment + .play-button.bottom.tabular.menu, +.top.attached.segment + .download-button.bottom.tabular.menu { + position: relative; + width: calc(100% + 2px ); + left: -1px; +} +/* Bottom Vertical Tabular */ +.ui.bottom.tabular.menu, +.play-button.bottom.tabular.menu, +.download-button.bottom.tabular.menu { + background: none transparent; + border-radius: 0em; + box-shadow: none !important; + border-bottom: none; + border-top: 1px solid #D4D4D5; +} +.ui.bottom.tabular.menu .item, +.play-button.bottom.tabular.menu .item, +.download-button.bottom.tabular.menu .item { + background: none; + border-left: 1px solid transparent; + border-right: 1px solid transparent; + border-bottom: 1px solid transparent; + border-top: none; +} +.ui.bottom.tabular.menu .active.item, +.play-button.bottom.tabular.menu .active.item, +.download-button.bottom.tabular.menu .active.item { + background: none #FFFFFF; + color: rgba(0, 0, 0, 0.95); + border-color: #D4D4D5; + margin: -1px 0px 0px 0px; + border-radius: 0px 0px 0.28571429rem 0.28571429rem !important; +} +/* Vertical Tabular (Left) */ +.ui.vertical.tabular.menu, +.play-button.vertical.tabular.menu, +.download-button.vertical.tabular.menu { + background: none transparent; + border-radius: 0em; + box-shadow: none !important; + border-bottom: none; + border-right: 1px solid #D4D4D5; +} +.ui.vertical.tabular.menu .item, +.play-button.vertical.tabular.menu .item, +.download-button.vertical.tabular.menu .item { + background: none; + border-left: 1px solid transparent; + border-bottom: 1px solid transparent; + border-top: 1px solid transparent; + border-right: none; +} +.ui.vertical.tabular.menu .active.item, +.play-button.vertical.tabular.menu .active.item, +.download-button.vertical.tabular.menu .active.item { + background: none #FFFFFF; + color: rgba(0, 0, 0, 0.95); + border-color: #D4D4D5; + margin: 0px -1px 0px 0px; + border-radius: 0.28571429rem 0px 0px 0.28571429rem !important; +} +/* Vertical Right Tabular */ +.ui.vertical.right.tabular.menu, +.play-button.vertical.right.tabular.menu, +.download-button.vertical.right.tabular.menu { + background: none transparent; + border-radius: 0em; + box-shadow: none !important; + border-bottom: none; + border-right: none; + border-left: 1px solid #D4D4D5; +} +.ui.vertical.right.tabular.menu .item, +.play-button.vertical.right.tabular.menu .item, +.download-button.vertical.right.tabular.menu .item { + background: none; + border-right: 1px solid transparent; + border-bottom: 1px solid transparent; + border-top: 1px solid transparent; + border-left: none; +} +.ui.vertical.right.tabular.menu .active.item, +.play-button.vertical.right.tabular.menu .active.item, +.download-button.vertical.right.tabular.menu .active.item { + background: none #FFFFFF; + color: rgba(0, 0, 0, 0.95); + border-color: #D4D4D5; + margin: 0px 0px 0px -1px; + border-radius: 0px 0.28571429rem 0.28571429rem 0px !important; +} +/* Dropdown */ +.ui.tabular.menu .active.dropdown.item, +.play-button.tabular.menu .active.dropdown.item, +.download-button.tabular.menu .active.dropdown.item { + margin-bottom: 0px; + border-left: 1px solid transparent; + border-right: 1px solid transparent; + border-top: 2px solid transparent; + border-bottom: none; +} +/*-------------- + Pagination +---------------*/ +.ui.pagination.menu, +.play-button.pagination.menu, +.download-button.pagination.menu { + margin: 0em; + display: inline-flex; + vertical-align: middle; +} +.ui.pagination.menu .item:last-child, +.play-button.pagination.menu .item:last-child, +.download-button.pagination.menu .item:last-child { + border-radius: 0em 0.28571429rem 0.28571429rem 0em; +} +.ui.compact.menu .item:last-child, +.play-button.compact.menu .item:last-child, +.download-button.compact.menu .item:last-child { + border-radius: 0em 0.28571429rem 0.28571429rem 0em; +} +.ui.pagination.menu .item:last-child:before, +.play-button.pagination.menu .item:last-child:before, +.download-button.pagination.menu .item:last-child:before { + display: none; +} +.ui.pagination.menu .item, +.play-button.pagination.menu .item, +.download-button.pagination.menu .item { + min-width: 3em; + text-align: center; +} +.ui.pagination.menu .icon.item i.icon, +.play-button.pagination.menu .icon.item i.icon, +.download-button.pagination.menu .icon.item i.icon { + vertical-align: top; +} +/* Active */ +.ui.pagination.menu .active.item, +.play-button.pagination.menu .active.item, +.download-button.pagination.menu .active.item { + border-top: none; + padding-top: 0.92857143em; + background-color: rgba(0, 0, 0, 0.05); + color: rgba(0, 0, 0, 0.95); + box-shadow: none; +} +/*-------------- + Secondary +---------------*/ +.ui.secondary.menu, +.play-button.secondary.menu, +.download-button.secondary.menu { + background: none; + margin-left: -0.35714286em; + margin-right: -0.35714286em; + border-radius: 0em; + border: none; + box-shadow: none; +} +/* Item */ +.ui.secondary.menu .item, +.play-button.secondary.menu .item, +.download-button.secondary.menu .item { + align-self: center; + box-shadow: none; + border: none; + padding: 0.78571429em 0.92857143em; + margin: 0em 0.35714286em; + background: none; + transition: color 0.1s ease; + border-radius: 0.28571429rem; +} +/* No Divider */ +.ui.secondary.menu .item:before, +.play-button.secondary.menu .item:before, +.download-button.secondary.menu .item:before { + display: none !important; +} +/* Header */ +.ui.secondary.menu .header.item, +.play-button.secondary.menu .header.item, +.download-button.secondary.menu .header.item { + border-radius: 0em; + border-right: none; + background: none transparent; +} +/* Image */ +.ui.secondary.menu .item > img:not(.ui), +.play-button.secondary.menu .item > img:not(.ui), +.download-button.secondary.menu .item > img:not(.ui) { + margin: 0em; +} +/* Hover */ +.ui.secondary.menu .dropdown.item:hover, +.ui.secondary.menu .link.item:hover, +.ui.secondary.menu a.item:hover, +.play-button.secondary.menu .dropdown.item:hover, +.play-button.secondary.menu .link.item:hover, +.play-button.secondary.menu a.item:hover, +.download-button.secondary.menu .dropdown.item:hover, +.download-button.secondary.menu .link.item:hover, +.download-button.secondary.menu a.item:hover { + background: rgba(0, 0, 0, 0.05); + color: rgba(0, 0, 0, 0.95); +} +/* Active */ +.ui.secondary.menu .active.item, +.play-button.secondary.menu .active.item, +.download-button.secondary.menu .active.item { + box-shadow: none; + background: rgba(0, 0, 0, 0.05); + color: rgba(0, 0, 0, 0.95); + border-radius: 0.28571429rem; +} +/* Active Hover */ +.ui.secondary.menu .active.item:hover, +.play-button.secondary.menu .active.item:hover, +.download-button.secondary.menu .active.item:hover { + box-shadow: none; + background: rgba(0, 0, 0, 0.05); + color: rgba(0, 0, 0, 0.95); +} +/* Inverted */ +.ui.secondary.inverted.menu .link.item, +.ui.secondary.inverted.menu a.item, +.play-button.secondary.inverted.menu .link.item, +.play-button.secondary.inverted.menu a.item, +.download-button.secondary.inverted.menu .link.item, +.download-button.secondary.inverted.menu a.item { + color: rgba(255, 255, 255, 0.7) !important; +} +.ui.secondary.inverted.menu .dropdown.item:hover, +.ui.secondary.inverted.menu .link.item:hover, +.ui.secondary.inverted.menu a.item:hover, +.play-button.secondary.inverted.menu .dropdown.item:hover, +.play-button.secondary.inverted.menu .link.item:hover, +.play-button.secondary.inverted.menu a.item:hover, +.download-button.secondary.inverted.menu .dropdown.item:hover, +.download-button.secondary.inverted.menu .link.item:hover, +.download-button.secondary.inverted.menu a.item:hover { + background: rgba(255, 255, 255, 0.08); + color: #ffffff !important; +} +.ui.secondary.inverted.menu .active.item, +.play-button.secondary.inverted.menu .active.item, +.download-button.secondary.inverted.menu .active.item { + background: rgba(255, 255, 255, 0.15); + color: #ffffff !important; +} +/* Fix item margins */ +.ui.secondary.item.menu, +.play-button.secondary.item.menu, +.download-button.secondary.item.menu { + margin-left: 0em; + margin-right: 0em; +} +.ui.secondary.item.menu .item:last-child, +.play-button.secondary.item.menu .item:last-child, +.download-button.secondary.item.menu .item:last-child { + margin-right: 0em; +} +.ui.secondary.attached.menu, +.play-button.secondary.attached.menu, +.download-button.secondary.attached.menu { + box-shadow: none; +} +/* Sub Menu */ +.ui.vertical.secondary.menu .item:not(.dropdown) > .menu, +.play-button.vertical.secondary.menu .item:not(.dropdown) > .menu, +.download-button.vertical.secondary.menu .item:not(.dropdown) > .menu { + margin: 0em -0.92857143em; +} +.ui.vertical.secondary.menu .item:not(.dropdown) > .menu > .item, +.play-button.vertical.secondary.menu .item:not(.dropdown) > .menu > .item, +.download-button.vertical.secondary.menu .item:not(.dropdown) > .menu > .item { + margin: 0em; + padding: 0.5em 1.33333333em; +} +/*--------------------- + Secondary Vertical +-----------------------*/ +.ui.secondary.vertical.menu > .item, +.play-button.secondary.vertical.menu > .item, +.download-button.secondary.vertical.menu > .item { + border: none; + margin: 0em 0em 0.35714286em; + border-radius: 0.28571429rem !important; +} +.ui.secondary.vertical.menu > .header.item, +.play-button.secondary.vertical.menu > .header.item, +.download-button.secondary.vertical.menu > .header.item { + border-radius: 0em; +} +/* Sub Menu */ +.ui.vertical.secondary.menu .item > .menu .item, +.play-button.vertical.secondary.menu .item > .menu .item, +.download-button.vertical.secondary.menu .item > .menu .item { + background-color: transparent; +} +/* Inverted */ +.ui.secondary.inverted.menu, +.play-button.secondary.inverted.menu, +.download-button.secondary.inverted.menu { + background-color: transparent; +} +/*--------------------- + Secondary Pointing +-----------------------*/ +.ui.secondary.pointing.menu, +.play-button.secondary.pointing.menu, +.download-button.secondary.pointing.menu { + margin-left: 0em; + margin-right: 0em; + border-bottom: 2px solid rgba(34, 36, 38, 0.15); +} +.ui.secondary.pointing.menu .item, +.play-button.secondary.pointing.menu .item, +.download-button.secondary.pointing.menu .item { + border-bottom-color: transparent; + border-bottom-style: solid; + border-radius: 0em; + align-self: flex-end; + margin: 0em 0em -2px; + padding: 0.85714286em 1.14285714em; + border-bottom-width: 2px; + transition: color 0.1s ease; +} +/* Item Types */ +.ui.secondary.pointing.menu .header.item, +.play-button.secondary.pointing.menu .header.item, +.download-button.secondary.pointing.menu .header.item { + color: rgba(0, 0, 0, 0.85) !important; +} +.ui.secondary.pointing.menu .text.item, +.play-button.secondary.pointing.menu .text.item, +.download-button.secondary.pointing.menu .text.item { + box-shadow: none !important; +} +.ui.secondary.pointing.menu .item:after, +.play-button.secondary.pointing.menu .item:after, +.download-button.secondary.pointing.menu .item:after { + display: none; +} +/* Hover */ +.ui.secondary.pointing.menu .dropdown.item:hover, +.ui.secondary.pointing.menu .link.item:hover, +.ui.secondary.pointing.menu a.item:hover, +.play-button.secondary.pointing.menu .dropdown.item:hover, +.play-button.secondary.pointing.menu .link.item:hover, +.play-button.secondary.pointing.menu a.item:hover, +.download-button.secondary.pointing.menu .dropdown.item:hover, +.download-button.secondary.pointing.menu .link.item:hover, +.download-button.secondary.pointing.menu a.item:hover { + background-color: transparent; + color: rgba(0, 0, 0, 0.87); +} +/* Pressed */ +.ui.secondary.pointing.menu .dropdown.item:active, +.ui.secondary.pointing.menu .link.item:active, +.ui.secondary.pointing.menu a.item:active, +.play-button.secondary.pointing.menu .dropdown.item:active, +.play-button.secondary.pointing.menu .link.item:active, +.play-button.secondary.pointing.menu a.item:active, +.download-button.secondary.pointing.menu .dropdown.item:active, +.download-button.secondary.pointing.menu .link.item:active, +.download-button.secondary.pointing.menu a.item:active { + background-color: transparent; + border-color: rgba(34, 36, 38, 0.15); +} +/* Active */ +.ui.secondary.pointing.menu .active.item, +.play-button.secondary.pointing.menu .active.item, +.download-button.secondary.pointing.menu .active.item { + background-color: transparent; + box-shadow: none; + border-color: #1B1C1D; + font-weight: bold; + color: rgba(0, 0, 0, 0.95); +} +/* Active Hover */ +.ui.secondary.pointing.menu .active.item:hover, +.play-button.secondary.pointing.menu .active.item:hover, +.download-button.secondary.pointing.menu .active.item:hover { + border-color: #1B1C1D; + color: rgba(0, 0, 0, 0.95); +} +/* Active Dropdown */ +.ui.secondary.pointing.menu .active.dropdown.item, +.play-button.secondary.pointing.menu .active.dropdown.item, +.download-button.secondary.pointing.menu .active.dropdown.item { + border-color: transparent; +} +/* Vertical Pointing */ +.ui.secondary.vertical.pointing.menu, +.play-button.secondary.vertical.pointing.menu, +.download-button.secondary.vertical.pointing.menu { + border-bottom-width: 0px; + border-right-width: 2px; + border-right-style: solid; + border-right-color: rgba(34, 36, 38, 0.15); +} +.ui.secondary.vertical.pointing.menu .item, +.play-button.secondary.vertical.pointing.menu .item, +.download-button.secondary.vertical.pointing.menu .item { + border-bottom: none; + border-right-style: solid; + border-right-color: transparent; + border-radius: 0em !important; + margin: 0em -2px 0em 0em; + border-right-width: 2px; +} +/* Vertical Active */ +.ui.secondary.vertical.pointing.menu .active.item, +.play-button.secondary.vertical.pointing.menu .active.item, +.download-button.secondary.vertical.pointing.menu .active.item { + border-color: #1B1C1D; +} +/* Inverted */ +.ui.secondary.inverted.pointing.menu, +.play-button.secondary.inverted.pointing.menu, +.download-button.secondary.inverted.pointing.menu { + border-color: rgba(255, 255, 255, 0.1); +} +.ui.secondary.inverted.pointing.menu, +.play-button.secondary.inverted.pointing.menu, +.download-button.secondary.inverted.pointing.menu { + border-width: 2px; + border-color: rgba(34, 36, 38, 0.15); +} +.ui.secondary.inverted.pointing.menu .item, +.play-button.secondary.inverted.pointing.menu .item, +.download-button.secondary.inverted.pointing.menu .item { + color: rgba(255, 255, 255, 0.9); +} +.ui.secondary.inverted.pointing.menu .header.item, +.play-button.secondary.inverted.pointing.menu .header.item, +.download-button.secondary.inverted.pointing.menu .header.item { + color: #FFFFFF !important; +} +/* Hover */ +.ui.secondary.inverted.pointing.menu .link.item:hover, +.ui.secondary.inverted.pointing.menu a.item:hover, +.play-button.secondary.inverted.pointing.menu .link.item:hover, +.play-button.secondary.inverted.pointing.menu a.item:hover, +.download-button.secondary.inverted.pointing.menu .link.item:hover, +.download-button.secondary.inverted.pointing.menu a.item:hover { + color: rgba(0, 0, 0, 0.95); +} +/* Active */ +.ui.secondary.inverted.pointing.menu .active.item, +.play-button.secondary.inverted.pointing.menu .active.item, +.download-button.secondary.inverted.pointing.menu .active.item { + border-color: #FFFFFF; + color: #ffffff; +} +/*-------------- + Text Menu +---------------*/ +.ui.text.menu, +.play-button.text.menu, +.download-button.text.menu { + background: none transparent; + border-radius: 0px; + box-shadow: none; + border: none; + margin: 1em -0.5em; +} +.ui.text.menu .item, +.play-button.text.menu .item, +.download-button.text.menu .item { + border-radius: 0px; + box-shadow: none; + align-self: center; + margin: 0em 0em; + padding: 0.35714286em 0.5em; + font-weight: normal; + color: rgba(0, 0, 0, 0.6); + transition: opacity 0.1s ease; +} +/* Border */ +.ui.text.menu .item:before, +.ui.text.menu .menu .item:before, +.play-button.text.menu .item:before, +.play-button.text.menu .menu .item:before, +.download-button.text.menu .item:before, +.download-button.text.menu .menu .item:before { + display: none !important; +} +/* Header */ +.ui.text.menu .header.item, +.play-button.text.menu .header.item, +.download-button.text.menu .header.item { + background-color: transparent; + opacity: 1; + color: rgba(0, 0, 0, 0.85); + font-size: 0.92857143em; + text-transform: uppercase; + font-weight: bold; +} +/* Image */ +.ui.text.menu .item > img:not(.ui), +.play-button.text.menu .item > img:not(.ui), +.download-button.text.menu .item > img:not(.ui) { + margin: 0em; +} +/*--- fluid text ---*/ +.ui.text.item.menu .item, +.play-button.text.item.menu .item, +.download-button.text.item.menu .item { + margin: 0em; +} +/*--- vertical text ---*/ +.ui.vertical.text.menu, +.play-button.vertical.text.menu, +.download-button.vertical.text.menu { + margin: 1em 0em; +} +.ui.vertical.text.menu:first-child, +.play-button.vertical.text.menu:first-child, +.download-button.vertical.text.menu:first-child { + margin-top: 0rem; +} +.ui.vertical.text.menu:last-child, +.play-button.vertical.text.menu:last-child, +.download-button.vertical.text.menu:last-child { + margin-bottom: 0rem; +} +.ui.vertical.text.menu .item, +.play-button.vertical.text.menu .item, +.download-button.vertical.text.menu .item { + margin: 0.57142857em 0em; + padding-left: 0em; + padding-right: 0em; +} +.ui.vertical.text.menu .item > i.icon, +.play-button.vertical.text.menu .item > i.icon, +.download-button.vertical.text.menu .item > i.icon { + float: none; + margin: 0em 0.35714286em 0em 0em; +} +.ui.vertical.text.menu .header.item, +.play-button.vertical.text.menu .header.item, +.download-button.vertical.text.menu .header.item { + margin: 0.57142857em 0em 0.71428571em; +} +/* Vertical Sub Menu */ +.ui.vertical.text.menu .item:not(.dropdown) > .menu, +.play-button.vertical.text.menu .item:not(.dropdown) > .menu, +.download-button.vertical.text.menu .item:not(.dropdown) > .menu { + margin: 0em; +} +.ui.vertical.text.menu .item:not(.dropdown) > .menu > .item, +.play-button.vertical.text.menu .item:not(.dropdown) > .menu > .item, +.download-button.vertical.text.menu .item:not(.dropdown) > .menu > .item { + margin: 0em; + padding: 0.5em 0em; +} +/*--- hover ---*/ +.ui.text.menu .item:hover, +.play-button.text.menu .item:hover, +.download-button.text.menu .item:hover { + opacity: 1; + background-color: transparent; +} +/*--- active ---*/ +.ui.text.menu .active.item, +.play-button.text.menu .active.item, +.download-button.text.menu .active.item { + background-color: transparent; + border: none; + box-shadow: none; + font-weight: normal; + color: rgba(0, 0, 0, 0.95); +} +/*--- active hover ---*/ +.ui.text.menu .active.item:hover, +.play-button.text.menu .active.item:hover, +.download-button.text.menu .active.item:hover { + background-color: transparent; +} +/* Disable Bariations */ +.ui.text.pointing.menu .active.item:after, +.play-button.text.pointing.menu .active.item:after, +.download-button.text.pointing.menu .active.item:after { + box-shadow: none; +} +.ui.text.attached.menu, +.play-button.text.attached.menu, +.download-button.text.attached.menu { + box-shadow: none; +} +/* Inverted */ +.ui.inverted.text.menu, +.ui.inverted.text.menu .item, +.ui.inverted.text.menu .item:hover, +.ui.inverted.text.menu .active.item, +.play-button.inverted.text.menu, +.play-button.inverted.text.menu .item, +.play-button.inverted.text.menu .item:hover, +.play-button.inverted.text.menu .active.item, +.download-button.inverted.text.menu, +.download-button.inverted.text.menu .item, +.download-button.inverted.text.menu .item:hover, +.download-button.inverted.text.menu .active.item { + background-color: transparent !important; +} +/* Fluid */ +.ui.fluid.text.menu, +.play-button.fluid.text.menu, +.download-button.fluid.text.menu { + margin-left: 0em; + margin-right: 0em; +} +/*-------------- + Icon Only +---------------*/ +/* Vertical Menu */ +.ui.vertical.icon.menu, +.play-button.vertical.icon.menu, +.download-button.vertical.icon.menu { + display: inline-block; + width: auto; +} +/* Item */ +.ui.icon.menu .item, +.play-button.icon.menu .item, +.download-button.icon.menu .item { + height: auto; + text-align: center; + color: #1B1C1D; +} +/* Icon */ +.ui.icon.menu .item > .icon:not(.dropdown), +.play-button.icon.menu .item > .icon:not(.dropdown), +.download-button.icon.menu .item > .icon:not(.dropdown) { + margin: 0; + opacity: 1; +} +/* Icon Gylph */ +.ui.icon.menu .icon:before, +.play-button.icon.menu .icon:before, +.download-button.icon.menu .icon:before { + opacity: 1; +} +/* (x) Item Icon */ +.ui.menu .icon.item > .icon, +.play-button.menu .icon.item > .icon, +.download-button.menu .icon.item > .icon { + width: auto; + margin: 0em auto; +} +/* Vertical Icon */ +.ui.vertical.icon.menu .item > .icon:not(.dropdown), +.play-button.vertical.icon.menu .item > .icon:not(.dropdown), +.download-button.vertical.icon.menu .item > .icon:not(.dropdown) { + display: block; + opacity: 1; + margin: 0em auto; + float: none; +} +/* Inverted */ +.ui.inverted.icon.menu .item, +.play-button.inverted.icon.menu .item, +.download-button.inverted.icon.menu .item { + color: #FFFFFF; +} +/*-------------- + Labeled Icon +---------------*/ +/* Menu */ +.ui.labeled.icon.menu, +.play-button.labeled.icon.menu, +.download-button.labeled.icon.menu { + text-align: center; +} +/* Item */ +.ui.labeled.icon.menu .item, +.play-button.labeled.icon.menu .item, +.download-button.labeled.icon.menu .item { + min-width: 6em; + flex-direction: column; +} +/* Icon */ +.ui.labeled.icon.menu .item > .icon:not(.dropdown), +.play-button.labeled.icon.menu .item > .icon:not(.dropdown), +.download-button.labeled.icon.menu .item > .icon:not(.dropdown) { + height: 1em; + display: block; + font-size: 1.71428571em !important; + margin: 0em auto 0.5rem !important; +} +/* Fluid */ +.ui.fluid.labeled.icon.menu > .item, +.play-button.fluid.labeled.icon.menu > .item, +.download-button.fluid.labeled.icon.menu > .item { + min-width: 0em; +} +/******************************* + Variations +*******************************/ +/*-------------- + Stackable +---------------*/ +@media only screen and (max-width: 767px) { + .ui.stackable.menu, + .play-button.stackable.menu, + .download-button.stackable.menu { + flex-direction: column; + } + .ui.stackable.menu .item, + .play-button.stackable.menu .item, + .download-button.stackable.menu .item { + width: 100% !important; + } + .ui.stackable.menu .item:before, + .play-button.stackable.menu .item:before, + .download-button.stackable.menu .item:before { + position: absolute; + content: ''; + top: auto; + bottom: 0px; + left: 0px; + width: 100%; + height: 1px; + background: rgba(34, 36, 38, 0.1); + } + .ui.stackable.menu .left.menu, + .ui.stackable.menu .left.item, + .play-button.stackable.menu .left.menu, + .play-button.stackable.menu .left.item, + .download-button.stackable.menu .left.menu, + .download-button.stackable.menu .left.item { + margin-right: 0 !important; + } + .ui.stackable.menu .right.menu, + .ui.stackable.menu .right.item, + .play-button.stackable.menu .right.menu, + .play-button.stackable.menu .right.item, + .download-button.stackable.menu .right.menu, + .download-button.stackable.menu .right.item { + margin-left: 0 !important; + } + .ui.stackable.menu .right.menu, + .ui.stackable.menu .left.menu, + .play-button.stackable.menu .right.menu, + .play-button.stackable.menu .left.menu, + .download-button.stackable.menu .right.menu, + .download-button.stackable.menu .left.menu { + flex-direction: column; + } +} +/*-------------- + Colors +---------------*/ +/*--- Standard Colors ---*/ +.ui.menu .red.active.item, +.ui.red.menu .active.item, +.play-button.menu .red.active.item, +.play-button.red.menu .active.item, +.download-button.menu .red.active.item, +.download-button.red.menu .active.item { + border-color: #E81123 !important; + color: #E81123 !important; +} +.ui.menu .orange.active.item, +.ui.orange.menu .active.item, +.play-button.menu .orange.active.item, +.play-button.orange.menu .active.item, +.download-button.menu .orange.active.item, +.download-button.orange.menu .active.item { + border-color: #DF4600 !important; + color: #DF4600 !important; +} +.ui.menu .yellow.active.item, +.ui.yellow.menu .active.item, +.play-button.menu .yellow.active.item, +.play-button.yellow.menu .active.item, +.download-button.menu .yellow.active.item, +.download-button.yellow.menu .active.item, +.ui.menu .download-button.active.item, +.ui.download-button.menu .active.item { + border-color: #F4C918 !important; + color: #F4C918 !important; +} +.ui.menu .olive.active.item, +.ui.olive.menu .active.item, +.play-button.menu .olive.active.item, +.play-button.olive.menu .active.item, +.download-button.menu .olive.active.item, +.download-button.olive.menu .active.item { + border-color: #B5CC18 !important; + color: #B5CC18 !important; +} +.ui.menu .green.active.item, +.ui.green.menu .active.item, +.ui.menu .ui.button.getting-started-btn.active.item, +.ui.ui.button.getting-started-btn.menu .active.item, +.play-button.menu .green.active.item, +.play-button.green.menu .active.item, +.download-button.menu .green.active.item, +.download-button.green.menu .active.item, +.ui.menu .play-button.button.getting-started-btn.active.item, +.ui.play-button.button.getting-started-btn.menu .active.item, +.ui.menu .ui.play-button.getting-started-btn.active.item, +.ui.ui.play-button.getting-started-btn.menu .active.item, +.ui.menu .download-button.button.getting-started-btn.active.item, +.ui.download-button.button.getting-started-btn.menu .active.item, +.ui.menu .ui.download-button.getting-started-btn.active.item, +.ui.ui.download-button.getting-started-btn.menu .active.item { + border-color: #3FC863 !important; + color: #3FC863 !important; +} +.ui.menu .teal.active.item, +.ui.teal.menu .active.item, +.play-button.menu .teal.active.item, +.play-button.teal.menu .active.item, +.download-button.menu .teal.active.item, +.download-button.teal.menu .active.item { + border-color: #008272 !important; + color: #008272 !important; +} +.ui.menu .blue.active.item, +.ui.blue.menu .active.item, +.play-button.menu .blue.active.item, +.play-button.blue.menu .active.item, +.ui.menu .play-button.active.item, +.ui.play-button.menu .active.item, +.download-button.menu .blue.active.item, +.download-button.blue.menu .active.item { + border-color: #54C9C9 !important; + color: #54C9C9 !important; +} +.ui.menu .violet.active.item, +.ui.violet.menu .active.item, +.play-button.menu .violet.active.item, +.play-button.violet.menu .active.item, +.download-button.menu .violet.active.item, +.download-button.violet.menu .active.item { + border-color: #C90072 !important; + color: #C90072 !important; +} +.ui.menu .purple.active.item, +.ui.purple.menu .active.item, +.play-button.menu .purple.active.item, +.play-button.purple.menu .active.item, +.download-button.menu .purple.active.item, +.download-button.purple.menu .active.item { + border-color: #8169E6 !important; + color: #8169E6 !important; +} +.ui.menu .pink.active.item, +.ui.pink.menu .active.item, +.play-button.menu .pink.active.item, +.play-button.pink.menu .active.item, +.download-button.menu .pink.active.item, +.download-button.pink.menu .active.item { + border-color: #E2008C !important; + color: #E2008C !important; +} +.ui.menu .brown.active.item, +.ui.brown.menu .active.item, +.play-button.menu .brown.active.item, +.play-button.brown.menu .active.item, +.download-button.menu .brown.active.item, +.download-button.brown.menu .active.item { + border-color: #6B5B4C !important; + color: #6B5B4C !important; +} +.ui.menu .grey.active.item, +.ui.grey.menu .active.item, +.ui.menu .ui.button.editortools-btn.active.item, +.ui.ui.button.editortools-btn.menu .active.item, +.play-button.menu .grey.active.item, +.play-button.grey.menu .active.item, +.download-button.menu .grey.active.item, +.download-button.grey.menu .active.item, +.ui.menu .play-button.button.editortools-btn.active.item, +.ui.play-button.button.editortools-btn.menu .active.item, +.ui.menu .ui.play-button.editortools-btn.active.item, +.ui.ui.play-button.editortools-btn.menu .active.item, +.ui.menu .download-button.button.editortools-btn.active.item, +.ui.download-button.button.editortools-btn.menu .active.item, +.ui.menu .ui.download-button.editortools-btn.active.item, +.ui.ui.download-button.editortools-btn.menu .active.item { + border-color: #42495F !important; + color: #42495F !important; +} +/*-------------- + Inverted +---------------*/ +.ui.inverted.menu, +.play-button.inverted.menu, +.download-button.inverted.menu { + border: 0px solid transparent; + background: #525A67; + box-shadow: none; +} +/* Menu Item */ +.ui.inverted.menu .item, +.ui.inverted.menu .item > a:not(.ui), +.play-button.inverted.menu .item, +.play-button.inverted.menu .item > a:not(.ui), +.download-button.inverted.menu .item, +.download-button.inverted.menu .item > a:not(.ui) { + background: transparent; + color: rgba(255, 255, 255, 0.9); +} +.ui.inverted.menu .item.menu, +.play-button.inverted.menu .item.menu, +.download-button.inverted.menu .item.menu { + background: transparent; +} +/*--- Border ---*/ +.ui.inverted.menu .item:before, +.play-button.inverted.menu .item:before, +.download-button.inverted.menu .item:before { + background: rgba(255, 255, 255, 0.08); +} +.ui.vertical.inverted.menu .item:before, +.play-button.vertical.inverted.menu .item:before, +.download-button.vertical.inverted.menu .item:before { + background: rgba(255, 255, 255, 0.08); +} +/* Sub Menu */ +.ui.vertical.inverted.menu .menu .item, +.ui.vertical.inverted.menu .menu .item a:not(.ui), +.play-button.vertical.inverted.menu .menu .item, +.play-button.vertical.inverted.menu .menu .item a:not(.ui), +.download-button.vertical.inverted.menu .menu .item, +.download-button.vertical.inverted.menu .menu .item a:not(.ui) { + color: rgba(255, 255, 255, 0.5); +} +/* Header */ +.ui.inverted.menu .header.item, +.play-button.inverted.menu .header.item, +.download-button.inverted.menu .header.item { + margin: 0em; + background: transparent; + box-shadow: none; +} +/* Disabled */ +.ui.inverted.menu .item.disabled, +.ui.inverted.menu .item.disabled:hover, +.play-button.inverted.menu .item.disabled, +.play-button.inverted.menu .item.disabled:hover, +.download-button.inverted.menu .item.disabled, +.download-button.inverted.menu .item.disabled:hover { + color: rgba(225, 225, 225, 0.3); +} +/*--- Hover ---*/ +.ui.link.inverted.menu .item:hover, +.ui.inverted.menu .dropdown.item:hover, +.ui.inverted.menu .link.item:hover, +.ui.inverted.menu a.item:hover, +.play-button.link.inverted.menu .item:hover, +.play-button.inverted.menu .dropdown.item:hover, +.play-button.inverted.menu .link.item:hover, +.play-button.inverted.menu a.item:hover, +.download-button.link.inverted.menu .item:hover, +.download-button.inverted.menu .dropdown.item:hover, +.download-button.inverted.menu .link.item:hover, +.download-button.inverted.menu a.item:hover { + background: rgba(255, 255, 255, 0.08); + color: #ffffff; +} +.ui.vertical.inverted.menu .item .menu a.item:hover, +.ui.vertical.inverted.menu .item .menu .link.item:hover, +.play-button.vertical.inverted.menu .item .menu a.item:hover, +.play-button.vertical.inverted.menu .item .menu .link.item:hover, +.download-button.vertical.inverted.menu .item .menu a.item:hover, +.download-button.vertical.inverted.menu .item .menu .link.item:hover { + background: transparent; + color: #ffffff; +} +/*--- Pressed ---*/ +.ui.inverted.menu a.item:active, +.ui.inverted.menu .link.item:active, +.play-button.inverted.menu a.item:active, +.play-button.inverted.menu .link.item:active, +.download-button.inverted.menu a.item:active, +.download-button.inverted.menu .link.item:active { + background: rgba(255, 255, 255, 0.08); + color: #ffffff; +} +/*--- Active ---*/ +.ui.inverted.menu .active.item, +.play-button.inverted.menu .active.item, +.download-button.inverted.menu .active.item { + background: rgba(255, 255, 255, 0.15); + color: #ffffff !important; +} +.ui.inverted.vertical.menu .item .menu .active.item, +.play-button.inverted.vertical.menu .item .menu .active.item, +.download-button.inverted.vertical.menu .item .menu .active.item { + background: transparent; + color: #FFFFFF; +} +.ui.inverted.pointing.menu .active.item:after, +.play-button.inverted.pointing.menu .active.item:after, +.download-button.inverted.pointing.menu .active.item:after { + background: #3D3E3F !important; + margin: 0em !important; + box-shadow: none !important; + border: none !important; +} +/*--- Active Hover ---*/ +.ui.inverted.menu .active.item:hover, +.play-button.inverted.menu .active.item:hover, +.download-button.inverted.menu .active.item:hover { + background: rgba(255, 255, 255, 0.15); + color: #FFFFFF !important; +} +.ui.inverted.pointing.menu .active.item:hover:after, +.play-button.inverted.pointing.menu .active.item:hover:after, +.download-button.inverted.pointing.menu .active.item:hover:after { + background: #3D3E3F !important; +} +/*-------------- + Floated +---------------*/ +.ui.floated.menu, +.play-button.floated.menu, +.download-button.floated.menu { + float: left; + margin: 0rem 0.5rem 0rem 0rem; +} +.ui.floated.menu .item:last-child:before, +.play-button.floated.menu .item:last-child:before, +.download-button.floated.menu .item:last-child:before { + display: none; +} +.ui.right.floated.menu, +.play-button.right.floated.menu, +.download-button.right.floated.menu { + float: right; + margin: 0rem 0rem 0rem 0.5rem; +} +/*-------------- + Inverted +---------------*/ +/* Red */ +.ui.inverted.menu .red.active.item, +.ui.inverted.red.menu, +.play-button.inverted.menu .red.active.item, +.play-button.inverted.red.menu, +.download-button.inverted.menu .red.active.item, +.download-button.inverted.red.menu { + background-color: #E81123; +} +.ui.inverted.red.menu .item:before, +.play-button.inverted.red.menu .item:before, +.download-button.inverted.red.menu .item:before { + background-color: rgba(34, 36, 38, 0.1); +} +.ui.inverted.red.menu .active.item, +.play-button.inverted.red.menu .active.item, +.download-button.inverted.red.menu .active.item { + background-color: rgba(0, 0, 0, 0.1) !important; +} +/* Orange */ +.ui.inverted.menu .orange.active.item, +.ui.inverted.orange.menu, +.play-button.inverted.menu .orange.active.item, +.play-button.inverted.orange.menu, +.download-button.inverted.menu .orange.active.item, +.download-button.inverted.orange.menu { + background-color: #DF4600; +} +.ui.inverted.orange.menu .item:before, +.play-button.inverted.orange.menu .item:before, +.download-button.inverted.orange.menu .item:before { + background-color: rgba(34, 36, 38, 0.1); +} +.ui.inverted.orange.menu .active.item, +.play-button.inverted.orange.menu .active.item, +.download-button.inverted.orange.menu .active.item { + background-color: rgba(0, 0, 0, 0.1) !important; +} +/* Yellow */ +.ui.inverted.menu .yellow.active.item, +.ui.inverted.yellow.menu, +.play-button.inverted.menu .yellow.active.item, +.play-button.inverted.yellow.menu, +.download-button.inverted.menu .yellow.active.item, +.download-button.inverted.yellow.menu, +.ui.inverted.menu .download-button.active.item, +.ui.inverted.download-button.menu { + background-color: #F4C918; +} +.ui.inverted.yellow.menu .item:before, +.play-button.inverted.yellow.menu .item:before, +.download-button.inverted.yellow.menu .item:before, +.ui.inverted.download-button.menu .item:before { + background-color: rgba(34, 36, 38, 0.1); +} +.ui.inverted.yellow.menu .active.item, +.play-button.inverted.yellow.menu .active.item, +.download-button.inverted.yellow.menu .active.item, +.ui.inverted.download-button.menu .active.item { + background-color: rgba(0, 0, 0, 0.1) !important; +} +/* Olive */ +.ui.inverted.menu .olive.active.item, +.ui.inverted.olive.menu, +.play-button.inverted.menu .olive.active.item, +.play-button.inverted.olive.menu, +.download-button.inverted.menu .olive.active.item, +.download-button.inverted.olive.menu { + background-color: #B5CC18; +} +.ui.inverted.olive.menu .item:before, +.play-button.inverted.olive.menu .item:before, +.download-button.inverted.olive.menu .item:before { + background-color: rgba(34, 36, 38, 0.1); +} +.ui.inverted.olive.menu .active.item, +.play-button.inverted.olive.menu .active.item, +.download-button.inverted.olive.menu .active.item { + background-color: rgba(0, 0, 0, 0.1) !important; +} +/* Green */ +.ui.inverted.menu .green.active.item, +.ui.inverted.green.menu, +.ui.inverted.menu .ui.button.getting-started-btn.active.item, +.ui.inverted.ui.button.getting-started-btn.menu, +.play-button.inverted.menu .green.active.item, +.play-button.inverted.green.menu, +.download-button.inverted.menu .green.active.item, +.download-button.inverted.green.menu, +.ui.inverted.menu .play-button.button.getting-started-btn.active.item, +.ui.inverted.play-button.button.getting-started-btn.menu, +.ui.inverted.menu .ui.play-button.getting-started-btn.active.item, +.ui.inverted.ui.play-button.getting-started-btn.menu, +.ui.inverted.menu .download-button.button.getting-started-btn.active.item, +.ui.inverted.download-button.button.getting-started-btn.menu, +.ui.inverted.menu .ui.download-button.getting-started-btn.active.item, +.ui.inverted.ui.download-button.getting-started-btn.menu { + background-color: #3FC863; +} +.ui.inverted.green.menu .item:before, +.ui.inverted.ui.button.getting-started-btn.menu .item:before, +.play-button.inverted.green.menu .item:before, +.download-button.inverted.green.menu .item:before, +.ui.inverted.play-button.button.getting-started-btn.menu .item:before, +.ui.inverted.ui.play-button.getting-started-btn.menu .item:before, +.ui.inverted.download-button.button.getting-started-btn.menu .item:before, +.ui.inverted.ui.download-button.getting-started-btn.menu .item:before { + background-color: rgba(34, 36, 38, 0.1); +} +.ui.inverted.green.menu .active.item, +.ui.inverted.ui.button.getting-started-btn.menu .active.item, +.play-button.inverted.green.menu .active.item, +.download-button.inverted.green.menu .active.item, +.ui.inverted.play-button.button.getting-started-btn.menu .active.item, +.ui.inverted.ui.play-button.getting-started-btn.menu .active.item, +.ui.inverted.download-button.button.getting-started-btn.menu .active.item, +.ui.inverted.ui.download-button.getting-started-btn.menu .active.item { + background-color: rgba(0, 0, 0, 0.1) !important; +} +/* Teal */ +.ui.inverted.menu .teal.active.item, +.ui.inverted.teal.menu, +.play-button.inverted.menu .teal.active.item, +.play-button.inverted.teal.menu, +.download-button.inverted.menu .teal.active.item, +.download-button.inverted.teal.menu { + background-color: #008272; +} +.ui.inverted.teal.menu .item:before, +.play-button.inverted.teal.menu .item:before, +.download-button.inverted.teal.menu .item:before { + background-color: rgba(34, 36, 38, 0.1); +} +.ui.inverted.teal.menu .active.item, +.play-button.inverted.teal.menu .active.item, +.download-button.inverted.teal.menu .active.item { + background-color: rgba(0, 0, 0, 0.1) !important; +} +/* Blue */ +.ui.inverted.menu .blue.active.item, +.ui.inverted.blue.menu, +.play-button.inverted.menu .blue.active.item, +.play-button.inverted.blue.menu, +.ui.inverted.menu .play-button.active.item, +.ui.inverted.play-button.menu, +.download-button.inverted.menu .blue.active.item, +.download-button.inverted.blue.menu { + background-color: #54C9C9; +} +.ui.inverted.blue.menu .item:before, +.play-button.inverted.blue.menu .item:before, +.ui.inverted.play-button.menu .item:before, +.download-button.inverted.blue.menu .item:before { + background-color: rgba(34, 36, 38, 0.1); +} +.ui.inverted.blue.menu .active.item, +.play-button.inverted.blue.menu .active.item, +.ui.inverted.play-button.menu .active.item, +.download-button.inverted.blue.menu .active.item { + background-color: rgba(0, 0, 0, 0.1) !important; +} +/* Violet */ +.ui.inverted.menu .violet.active.item, +.ui.inverted.violet.menu, +.play-button.inverted.menu .violet.active.item, +.play-button.inverted.violet.menu, +.download-button.inverted.menu .violet.active.item, +.download-button.inverted.violet.menu { + background-color: #C90072; +} +.ui.inverted.violet.menu .item:before, +.play-button.inverted.violet.menu .item:before, +.download-button.inverted.violet.menu .item:before { + background-color: rgba(34, 36, 38, 0.1); +} +.ui.inverted.violet.menu .active.item, +.play-button.inverted.violet.menu .active.item, +.download-button.inverted.violet.menu .active.item { + background-color: rgba(0, 0, 0, 0.1) !important; +} +/* Purple */ +.ui.inverted.menu .purple.active.item, +.ui.inverted.purple.menu, +.play-button.inverted.menu .purple.active.item, +.play-button.inverted.purple.menu, +.download-button.inverted.menu .purple.active.item, +.download-button.inverted.purple.menu { + background-color: #8169E6; +} +.ui.inverted.purple.menu .item:before, +.play-button.inverted.purple.menu .item:before, +.download-button.inverted.purple.menu .item:before { + background-color: rgba(34, 36, 38, 0.1); +} +.ui.inverted.purple.menu .active.item, +.play-button.inverted.purple.menu .active.item, +.download-button.inverted.purple.menu .active.item { + background-color: rgba(0, 0, 0, 0.1) !important; +} +/* Pink */ +.ui.inverted.menu .pink.active.item, +.ui.inverted.pink.menu, +.play-button.inverted.menu .pink.active.item, +.play-button.inverted.pink.menu, +.download-button.inverted.menu .pink.active.item, +.download-button.inverted.pink.menu { + background-color: #E2008C; +} +.ui.inverted.pink.menu .item:before, +.play-button.inverted.pink.menu .item:before, +.download-button.inverted.pink.menu .item:before { + background-color: rgba(34, 36, 38, 0.1); +} +.ui.inverted.pink.menu .active.item, +.play-button.inverted.pink.menu .active.item, +.download-button.inverted.pink.menu .active.item { + background-color: rgba(0, 0, 0, 0.1) !important; +} +/* Brown */ +.ui.inverted.menu .brown.active.item, +.ui.inverted.brown.menu, +.play-button.inverted.menu .brown.active.item, +.play-button.inverted.brown.menu, +.download-button.inverted.menu .brown.active.item, +.download-button.inverted.brown.menu { + background-color: #6B5B4C; +} +.ui.inverted.brown.menu .item:before, +.play-button.inverted.brown.menu .item:before, +.download-button.inverted.brown.menu .item:before { + background-color: rgba(34, 36, 38, 0.1); +} +.ui.inverted.brown.menu .active.item, +.play-button.inverted.brown.menu .active.item, +.download-button.inverted.brown.menu .active.item { + background-color: rgba(0, 0, 0, 0.1) !important; +} +/* Grey */ +.ui.inverted.menu .grey.active.item, +.ui.inverted.grey.menu, +.ui.inverted.menu .ui.button.editortools-btn.active.item, +.ui.inverted.ui.button.editortools-btn.menu, +.play-button.inverted.menu .grey.active.item, +.play-button.inverted.grey.menu, +.download-button.inverted.menu .grey.active.item, +.download-button.inverted.grey.menu, +.ui.inverted.menu .play-button.button.editortools-btn.active.item, +.ui.inverted.play-button.button.editortools-btn.menu, +.ui.inverted.menu .ui.play-button.editortools-btn.active.item, +.ui.inverted.ui.play-button.editortools-btn.menu, +.ui.inverted.menu .download-button.button.editortools-btn.active.item, +.ui.inverted.download-button.button.editortools-btn.menu, +.ui.inverted.menu .ui.download-button.editortools-btn.active.item, +.ui.inverted.ui.download-button.editortools-btn.menu { + background-color: #42495F; +} +.ui.inverted.grey.menu .item:before, +.ui.inverted.ui.button.editortools-btn.menu .item:before, +.play-button.inverted.grey.menu .item:before, +.download-button.inverted.grey.menu .item:before, +.ui.inverted.play-button.button.editortools-btn.menu .item:before, +.ui.inverted.ui.play-button.editortools-btn.menu .item:before, +.ui.inverted.download-button.button.editortools-btn.menu .item:before, +.ui.inverted.ui.download-button.editortools-btn.menu .item:before { + background-color: rgba(34, 36, 38, 0.1); +} +.ui.inverted.grey.menu .active.item, +.ui.inverted.ui.button.editortools-btn.menu .active.item, +.play-button.inverted.grey.menu .active.item, +.download-button.inverted.grey.menu .active.item, +.ui.inverted.play-button.button.editortools-btn.menu .active.item, +.ui.inverted.ui.play-button.editortools-btn.menu .active.item, +.ui.inverted.download-button.button.editortools-btn.menu .active.item, +.ui.inverted.ui.download-button.editortools-btn.menu .active.item { + background-color: rgba(0, 0, 0, 0.1) !important; +} +/*-------------- + Fitted +---------------*/ +.ui.fitted.menu .item, +.ui.fitted.menu .item .menu .item, +.ui.menu .fitted.item, +.play-button.fitted.menu .item, +.play-button.fitted.menu .item .menu .item, +.play-button.menu .fitted.item, +.download-button.fitted.menu .item, +.download-button.fitted.menu .item .menu .item, +.download-button.menu .fitted.item { + padding: 0em; +} +.ui.horizontally.fitted.menu .item, +.ui.horizontally.fitted.menu .item .menu .item, +.ui.menu .horizontally.fitted.item, +.play-button.horizontally.fitted.menu .item, +.play-button.horizontally.fitted.menu .item .menu .item, +.play-button.menu .horizontally.fitted.item, +.download-button.horizontally.fitted.menu .item, +.download-button.horizontally.fitted.menu .item .menu .item, +.download-button.menu .horizontally.fitted.item { + padding-top: 0.92857143em; + padding-bottom: 0.92857143em; +} +.ui.vertically.fitted.menu .item, +.ui.vertically.fitted.menu .item .menu .item, +.ui.menu .vertically.fitted.item, +.play-button.vertically.fitted.menu .item, +.play-button.vertically.fitted.menu .item .menu .item, +.play-button.menu .vertically.fitted.item, +.download-button.vertically.fitted.menu .item, +.download-button.vertically.fitted.menu .item .menu .item, +.download-button.menu .vertically.fitted.item { + padding-left: 1.14285714em; + padding-right: 1.14285714em; +} +/*-------------- + Borderless +---------------*/ +.ui.borderless.menu .item:before, +.ui.borderless.menu .item .menu .item:before, +.ui.menu .borderless.item:before, +.play-button.borderless.menu .item:before, +.play-button.borderless.menu .item .menu .item:before, +.play-button.menu .borderless.item:before, +.download-button.borderless.menu .item:before, +.download-button.borderless.menu .item .menu .item:before, +.download-button.menu .borderless.item:before { + background: none !important; +} +/*------------------- + Compact +--------------------*/ +.ui.compact.menu, +.play-button.compact.menu, +.download-button.compact.menu { + display: inline-flex; + margin: 0em; + vertical-align: middle; +} +.ui.compact.vertical.menu, +.play-button.compact.vertical.menu, +.download-button.compact.vertical.menu { + display: inline-block; +} +.ui.compact.menu .item:last-child, +.play-button.compact.menu .item:last-child, +.download-button.compact.menu .item:last-child { + border-radius: 0em 0.28571429rem 0.28571429rem 0em; +} +.ui.compact.menu .item:last-child:before, +.play-button.compact.menu .item:last-child:before, +.download-button.compact.menu .item:last-child:before { + display: none; +} +.ui.compact.vertical.menu, +.play-button.compact.vertical.menu, +.download-button.compact.vertical.menu { + width: auto !important; +} +.ui.compact.vertical.menu .item:last-child::before, +.play-button.compact.vertical.menu .item:last-child::before, +.download-button.compact.vertical.menu .item:last-child::before { + display: block; +} +/*------------------- + Fluid +--------------------*/ +.ui.menu.fluid, +.ui.vertical.menu.fluid, +.play-button.menu.fluid, +.play-button.vertical.menu.fluid, +.download-button.menu.fluid, +.download-button.vertical.menu.fluid { + width: 100% !important; +} +/*------------------- + Evenly Sized +--------------------*/ +.ui.item.menu, +.ui.item.menu .item, +.play-button.item.menu, +.play-button.item.menu .item, +.download-button.item.menu, +.download-button.item.menu .item { + width: 100%; + padding-left: 0em !important; + padding-right: 0em !important; + margin-left: 0em !important; + margin-right: 0em !important; + text-align: center; + justify-content: center; +} +.ui.attached.item.menu, +.play-button.attached.item.menu, +.download-button.attached.item.menu { + margin: 0em -1px !important; +} +.ui.item.menu .item:last-child:before, +.play-button.item.menu .item:last-child:before, +.download-button.item.menu .item:last-child:before { + display: none; +} +.ui.menu.two.item .item, +.play-button.menu.two.item .item, +.download-button.menu.two.item .item { + width: 50%; +} +.ui.menu.three.item .item, +.play-button.menu.three.item .item, +.download-button.menu.three.item .item { + width: 33.333%; +} +.ui.menu.four.item .item, +.play-button.menu.four.item .item, +.download-button.menu.four.item .item { + width: 25%; +} +.ui.menu.five.item .item, +.play-button.menu.five.item .item, +.download-button.menu.five.item .item { + width: 20%; +} +.ui.menu.six.item .item, +.play-button.menu.six.item .item, +.download-button.menu.six.item .item { + width: 16.666%; +} +.ui.menu.seven.item .item, +.play-button.menu.seven.item .item, +.download-button.menu.seven.item .item { + width: 14.285%; +} +.ui.menu.eight.item .item, +.play-button.menu.eight.item .item, +.download-button.menu.eight.item .item { + width: 12.500%; +} +.ui.menu.nine.item .item, +.play-button.menu.nine.item .item, +.download-button.menu.nine.item .item { + width: 11.11%; +} +.ui.menu.ten.item .item, +.play-button.menu.ten.item .item, +.download-button.menu.ten.item .item { + width: 10.0%; +} +.ui.menu.eleven.item .item, +.play-button.menu.eleven.item .item, +.download-button.menu.eleven.item .item { + width: 9.09%; +} +.ui.menu.twelve.item .item, +.play-button.menu.twelve.item .item, +.download-button.menu.twelve.item .item { + width: 8.333%; +} +/*-------------- + Fixed +---------------*/ +.ui.menu.fixed, +.play-button.menu.fixed, +.download-button.menu.fixed { + position: fixed; + z-index: 101; + margin: 0em; + width: 100%; +} +.ui.menu.fixed, +.ui.menu.fixed .item:first-child, +.ui.menu.fixed .item:last-child, +.play-button.menu.fixed, +.play-button.menu.fixed .item:first-child, +.play-button.menu.fixed .item:last-child, +.download-button.menu.fixed, +.download-button.menu.fixed .item:first-child, +.download-button.menu.fixed .item:last-child { + border-radius: 0px !important; +} +.ui.fixed.menu, +.ui[class*="top fixed"].menu, +.play-button.fixed.menu, +.play-button[class*="top fixed"].menu, +.download-button.fixed.menu, +.download-button[class*="top fixed"].menu { + top: 0px; + left: 0px; + right: auto; + bottom: auto; +} +.ui[class*="top fixed"].menu, +.play-button[class*="top fixed"].menu, +.download-button[class*="top fixed"].menu { + border-top: none; + border-left: none; + border-right: none; +} +.ui[class*="right fixed"].menu, +.play-button[class*="right fixed"].menu, +.download-button[class*="right fixed"].menu { + border-top: none; + border-bottom: none; + border-right: none; + top: 0px; + right: 0px; + left: auto; + bottom: auto; + width: auto; + height: 100%; +} +.ui[class*="bottom fixed"].menu, +.play-button[class*="bottom fixed"].menu, +.download-button[class*="bottom fixed"].menu { + border-bottom: none; + border-left: none; + border-right: none; + bottom: 0px; + left: 0px; + top: auto; + right: auto; +} +.ui[class*="left fixed"].menu, +.play-button[class*="left fixed"].menu, +.download-button[class*="left fixed"].menu { + border-top: none; + border-bottom: none; + border-left: none; + top: 0px; + left: 0px; + right: auto; + bottom: auto; + width: auto; + height: 100%; +} +/* Coupling with Grid */ +.ui.fixed.menu + .ui.grid, +.play-button.fixed.menu + .play-button.grid, +.download-button.fixed.menu + .download-button.grid { + padding-top: 2.75rem; +} +/*------------------- + Pointing +--------------------*/ +.ui.pointing.menu .item:after, +.play-button.pointing.menu .item:after, +.download-button.pointing.menu .item:after { + visibility: hidden; + position: absolute; + content: ''; + top: 100%; + left: 50%; + transform: translateX(-50%) translateY(-50%) rotate(45deg); + background: none; + margin: 0.5px 0em 0em; + width: 0.57142857em; + height: 0.57142857em; + border: none; + border-bottom: 1px solid #D4D4D5; + border-right: 1px solid #D4D4D5; + z-index: 2; + transition: background 0.1s ease; +} +.ui.vertical.pointing.menu .item:after, +.play-button.vertical.pointing.menu .item:after, +.download-button.vertical.pointing.menu .item:after { + position: absolute; + top: 50%; + right: 0%; + bottom: auto; + left: auto; + transform: translateX(50%) translateY(-50%) rotate(45deg); + margin: 0em -0.5px 0em 0em; + border: none; + border-top: 1px solid #D4D4D5; + border-right: 1px solid #D4D4D5; +} +/* Active */ +.ui.pointing.menu .active.item:after, +.play-button.pointing.menu .active.item:after, +.download-button.pointing.menu .active.item:after { + visibility: visible; +} +.ui.pointing.menu .active.dropdown.item:after, +.play-button.pointing.menu .active.dropdown.item:after, +.download-button.pointing.menu .active.dropdown.item:after { + visibility: hidden; +} +/* Don't double up pointers */ +.ui.pointing.menu .dropdown.active.item:after, +.ui.pointing.menu .active.item .menu .active.item:after, +.play-button.pointing.menu .dropdown.active.item:after, +.play-button.pointing.menu .active.item .menu .active.item:after, +.download-button.pointing.menu .dropdown.active.item:after, +.download-button.pointing.menu .active.item .menu .active.item:after { + display: none; +} +/* Colors */ +.ui.pointing.menu .active.item:hover:after, +.play-button.pointing.menu .active.item:hover:after, +.download-button.pointing.menu .active.item:hover:after { + background-color: #F2F2F2; +} +.ui.pointing.menu .active.item:after, +.play-button.pointing.menu .active.item:after, +.download-button.pointing.menu .active.item:after { + background-color: #F2F2F2; +} +.ui.pointing.menu .active.item:hover:after, +.play-button.pointing.menu .active.item:hover:after, +.download-button.pointing.menu .active.item:hover:after { + background-color: #F2F2F2; +} +.ui.vertical.pointing.menu .active.item:hover:after, +.play-button.vertical.pointing.menu .active.item:hover:after, +.download-button.vertical.pointing.menu .active.item:hover:after { + background-color: #F2F2F2; +} +.ui.vertical.pointing.menu .active.item:after, +.play-button.vertical.pointing.menu .active.item:after, +.download-button.vertical.pointing.menu .active.item:after { + background-color: #F2F2F2; +} +.ui.vertical.pointing.menu .menu .active.item:after, +.play-button.vertical.pointing.menu .menu .active.item:after, +.download-button.vertical.pointing.menu .menu .active.item:after { + background-color: #FFFFFF; +} +/*-------------- + Attached +---------------*/ +/* Middle */ +.ui.attached.menu, +.play-button.attached.menu, +.download-button.attached.menu { + top: 0px; + bottom: 0px; + border-radius: 0px; + margin: 0em -1px; + width: calc(100% + 2px ); + max-width: calc(100% + 2px ); + box-shadow: none; +} +.ui.attached + .ui.attached.menu:not(.top), +.play-button.attached + .play-button.attached.menu:not(.top), +.download-button.attached + .download-button.attached.menu:not(.top) { + border-top: none; +} +/* Top */ +.ui[class*="top attached"].menu, +.play-button[class*="top attached"].menu, +.download-button[class*="top attached"].menu { + bottom: 0px; + margin-bottom: 0em; + top: 0px; + margin-top: 1rem; + border-radius: 0.28571429rem 0.28571429rem 0em 0em; +} +.ui.menu[class*="top attached"]:first-child, +.play-button.menu[class*="top attached"]:first-child, +.download-button.menu[class*="top attached"]:first-child { + margin-top: 0em; +} +/* Bottom */ +.ui[class*="bottom attached"].menu, +.play-button[class*="bottom attached"].menu, +.download-button[class*="bottom attached"].menu { + bottom: 0px; + margin-top: 0em; + top: 0px; + margin-bottom: 1rem; + box-shadow: 0px 1px 2px 0 rgba(34, 36, 38, 0.15), none; + border-radius: 0em 0em 0.28571429rem 0.28571429rem; +} +.ui[class*="bottom attached"].menu:last-child, +.play-button[class*="bottom attached"].menu:last-child, +.download-button[class*="bottom attached"].menu:last-child { + margin-bottom: 0em; +} +/* Attached Menu Item */ +.ui.top.attached.menu > .item:first-child, +.play-button.top.attached.menu > .item:first-child, +.download-button.top.attached.menu > .item:first-child { + border-radius: 0.28571429rem 0em 0em 0em; +} +.ui.bottom.attached.menu > .item:first-child, +.play-button.bottom.attached.menu > .item:first-child, +.download-button.bottom.attached.menu > .item:first-child { + border-radius: 0em 0em 0em 0.28571429rem; +} +/* Tabular Attached */ +.ui.attached.menu:not(.tabular), +.play-button.attached.menu:not(.tabular), +.download-button.attached.menu:not(.tabular) { + border: 1px solid #D4D4D5; +} +.ui.attached.inverted.menu, +.play-button.attached.inverted.menu, +.download-button.attached.inverted.menu { + border: none; +} +.ui.attached.tabular.menu, +.play-button.attached.tabular.menu, +.download-button.attached.tabular.menu { + margin-left: 0; + margin-right: 0; + width: 100%; +} +/*-------------- + Sizes +---------------*/ +/* Mini */ +.ui.mini.menu, +.play-button.mini.menu, +.download-button.mini.menu { + font-size: 0.78571429rem; +} +.ui.mini.vertical.menu, +.play-button.mini.vertical.menu, +.download-button.mini.vertical.menu { + width: 9rem; +} +/* Tiny */ +.ui.tiny.menu, +.play-button.tiny.menu, +.download-button.tiny.menu { + font-size: 0.85714286rem; +} +.ui.tiny.vertical.menu, +.play-button.tiny.vertical.menu, +.download-button.tiny.vertical.menu { + width: 11rem; +} +/* Small */ +.ui.small.menu, +.play-button.small.menu, +.download-button.small.menu { + font-size: 0.92857143rem; +} +.ui.small.vertical.menu, +.play-button.small.vertical.menu, +.download-button.small.vertical.menu { + width: 13rem; +} +/* Medium */ +.ui.menu, +.play-button.menu, +.download-button.menu { + font-size: 1rem; +} +.ui.vertical.menu, +.play-button.vertical.menu, +.download-button.vertical.menu { + width: 15rem; +} +/* Large */ +.ui.large.menu, +.play-button.large.menu, +.download-button.large.menu { + font-size: 1.07142857rem; +} +.ui.large.vertical.menu, +.play-button.large.vertical.menu, +.download-button.large.vertical.menu { + width: 18rem; +} +/* Huge */ +.ui.huge.menu, +.play-button.huge.menu, +.download-button.huge.menu { + font-size: 1.14285714rem; +} +.ui.huge.vertical.menu, +.play-button.huge.vertical.menu, +.download-button.huge.vertical.menu { + width: 20rem; +} +/* Big */ +.ui.big.menu, +.play-button.big.menu, +.download-button.big.menu { + font-size: 1.21428571rem; +} +.ui.big.vertical.menu, +.play-button.big.vertical.menu, +.download-button.big.vertical.menu { + width: 22rem; +} +/* Massive */ +.ui.massive.menu, +.play-button.massive.menu, +.download-button.massive.menu { + font-size: 1.28571429rem; +} +.ui.massive.vertical.menu, +.play-button.massive.vertical.menu, +.download-button.massive.vertical.menu { + width: 25rem; +} +/******************************* + Site Overrides +*******************************/ +#menubar { + position: absolute; + left: 0; + top: 0; + right: 0; +} +#menubar .ui.menu, +#menubar .play-button.menu, +#menubar .download-button.menu { + height: 5rem; + min-height: 3.85714286em !important; +} +#menubar .item > .button, +#menubar .item > .play-button, +#menubar .item > .download-button { + margin-right: 0.25rem; +} +@media only screen and (max-width: 991px) { + #menubar .ui.menu, + #menubar .play-button.menu, + #menubar .download-button.menu { + height: 5rem !important; + min-height: 5rem !important; + } +} +.ui.inverted.menu .active.item, +.play-button.inverted.menu .active.item, +.download-button.inverted.menu .active.item { + background: rgba(255, 255, 255, 0.3); +} +/* Tutorial mode */ +.tutorial .ui.inverted.menu, +.tutorial .play-button.inverted.menu, +.tutorial .download-button.inverted.menu { + background: #DF4600 !important; +} +/******************************* + Site Overrides +*******************************/ +/*! + * # Semantic UI - Message + * http://github.com/semantic-org/semantic-ui/ + * + * + * Released under the MIT license + * http://opensource.org/licenses/MIT + * + */ +/******************************* + Theme +*******************************/ +/* + +████████╗██╗ ██╗███████╗███╗ ███╗███████╗███████╗ +╚══██╔══╝██║ ██║██╔════╝████╗ ████║██╔════╝██╔════╝ + ██║ ███████║█████╗ ██╔████╔██║█████╗ ███████╗ + ██║ ██╔══██║██╔══╝ ██║╚██╔╝██║██╔══╝ ╚════██║ + ██║ ██║ ██║███████╗██║ ╚═╝ ██║███████╗███████║ + ╚═╝ ╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝╚══════╝╚══════╝ + +*/ +/******************************* + Theme Selection +*******************************/ +/* To override a theme for an individual element + specify theme name below +*/ +/* Global */ +/* Elements */ +/* Collections */ +/* Modules */ +/* Views */ +/******************************* + Folders +*******************************/ +/* Path to theme packages */ +/* Path to site override folder */ +/******************************* + Import Theme +*******************************/ +/******************************* + Import Directives +*******************************/ +/*------------------ + Theme +-------------------*/ +/*-------------------- + Site Variables +---------------------*/ +/* Default site.variables */ +/******************************* + Site Settings +*******************************/ +/*------------------- + Fonts +--------------------*/ +/*------------------- + Base Sizes +--------------------*/ +/* This is the single variable that controls them all */ +/* The size of page text */ +/*------------------- + Border Radius +--------------------*/ +/* See Power-user section below + for explanation of @px variables +*/ +/*------------------- + Brand Colors +--------------------*/ +/*-------------- + Page Heading +---------------*/ +/*-------------- + Form Input +---------------*/ +/* This adjusts the default form input across all elements */ +/* Input Text Color */ +/* Line Height Default For Inputs in Browser (Descendors are 17px at 14px base em) */ +/*------------------- + Focused Input +--------------------*/ +/* Used on inputs, textarea etc */ +/* Used on dropdowns, other larger blocks */ +/*------------------- + Sizes +--------------------*/ +/* + Sizes are all expressed in terms of 14px/em (default em) + This ensures these "ratios" remain constant despite changes in EM +*/ +/*------------------- + Page +--------------------*/ +/*------------------- + Paragraph +--------------------*/ +/*------------------- + Links +--------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ +/*------------------- + Highlighted Text +--------------------*/ +/*------------------- + Loader +--------------------*/ +/*------------------- + Grid +--------------------*/ +/*------------------- + Transitions +--------------------*/ +/*------------------- + Breakpoints +--------------------*/ +/*------------------- + Site Colors +--------------------*/ +/*--- Colors ---*/ +/*--- Light Colors ---*/ +/*--- Neutrals ---*/ +/*--- Colored Backgrounds ---*/ +/*--- Colored Headers ---*/ +/*--- Colored Text ---*/ +/*--- Colored Border ---*/ +/*------------------- + Alpha Colors +--------------------*/ +/*------------------- + Accents +--------------------*/ +/* Differentiating Neutrals */ +/* Differentiating Layers */ +/******************************* + Power-User +*******************************/ +/*------------------- + Emotive Colors +--------------------*/ +/* Positive */ +/* Negative */ +/* Info */ +/* Warning */ +/*------------------- + Paths +--------------------*/ +/* For source only. Modified in gulp for dist */ +/*------------------- + Em Sizes +--------------------*/ +/* + This rounds @size values to the closest pixel then expresses that value in (r)em. + This ensures all size values round to exact pixels +*/ +/* em */ +/* rem */ +/*------------------- + Icons +--------------------*/ +/* Maximum Glyph Width of Icon */ +/*------------------- + Neutral Text +--------------------*/ +/*------------------- + Brand Colors +--------------------*/ +/*------------------- + Borders +--------------------*/ +/*------------------- + Derived Values +--------------------*/ +/* Loaders Position Offset */ +/* Rendered Scrollbar Width */ +/* Maximum Single Character Glyph Width, aka Capital "W" */ +/* Used to match floats with text */ +/* Header Spacing */ +/* Minimum Mobile Width */ +/* Positive / Negative Dupes */ +/* Responsive */ +/*------------------- + Exact Pixel Values +--------------------*/ +/* + These are used to specify exact pixel values in em + for things like borders that remain constantly + sized as emSize adjusts + + Since there are many more sizes than names for sizes, + these are named by their original pixel values. + +*/ +/* Columns */ +/******************************* + States +*******************************/ +/*------------------- + Disabled +--------------------*/ +/*------------------- + Hover +--------------------*/ +/*--- Shadows ---*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Focus +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Down (:active) +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Active +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/* Packaged site.variables */ +/******************************* + User Global Variables +*******************************/ +/*------------------- + Fonts +--------------------*/ +/*------------------- + Breakpoints +--------------------*/ +/* +@mobileBreakpoint : unit( (63 * @emSize), px); +@tabletBreakpoint : unit( (79 * @emSize), px); +@computerBreakpoint : unit( (91 * @emSize), px); +@largeMonitorBreakpoint : unit( (99 * @emSize), px); +@widescreenMonitorBreakpoint : unit( (119 * @emSize), px); +*/ +/******************************* + PXT Variables +*******************************/ +/*------------------- + Menu +--------------------*/ +/*------------------- + Layout +--------------------*/ +/*------------------- + Background +--------------------*/ +/*------------------- + Full screen +--------------------*/ +/*------------------- + Side Docs +--------------------*/ +/*------------------- + Editor +--------------------*/ +/* Component's site.variables */ +/******************************* + Site Settings +*******************************/ +/*------------------- + Fonts +--------------------*/ +/*------------------- + Base Sizes +--------------------*/ +/* This is the single variable that controls them all */ +/* The size of page text */ +/*------------------- + Border Radius +--------------------*/ +/* See Power-user section below + for explanation of @px variables +*/ +/*------------------- + Brand Colors +--------------------*/ +/*-------------- + Page Heading +---------------*/ +/*-------------- + Form Input +---------------*/ +/* This adjusts the default form input across all elements */ +/* Input Text Color */ +/* Line Height Default For Inputs in Browser (Descendors are 17px at 14px base em) */ +/*------------------- + Focused Input +--------------------*/ +/* Used on inputs, textarea etc */ +/* Used on dropdowns, other larger blocks */ +/*------------------- + Sizes +--------------------*/ +/* + Sizes are all expressed in terms of 14px/em (default em) + This ensures these "ratios" remain constant despite changes in EM +*/ +/*------------------- + Page +--------------------*/ +/*------------------- + Paragraph +--------------------*/ +/*------------------- + Links +--------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ +/*------------------- + Highlighted Text +--------------------*/ +/*------------------- + Loader +--------------------*/ +/*------------------- + Grid +--------------------*/ +/*------------------- + Transitions +--------------------*/ +/*------------------- + Breakpoints +--------------------*/ +/*------------------- + Site Colors +--------------------*/ +/*--- Colors ---*/ +/*--- Light Colors ---*/ +/*--- Neutrals ---*/ +/*--- Colored Backgrounds ---*/ +/*--- Colored Headers ---*/ +/*--- Colored Text ---*/ +/*--- Colored Border ---*/ +/*------------------- + Alpha Colors +--------------------*/ +/*------------------- + Accents +--------------------*/ +/* Differentiating Neutrals */ +/* Differentiating Layers */ +/******************************* + Power-User +*******************************/ +/*------------------- + Emotive Colors +--------------------*/ +/* Positive */ +/* Negative */ +/* Info */ +/* Warning */ +/*------------------- + Paths +--------------------*/ +/* For source only. Modified in gulp for dist */ +/*------------------- + Em Sizes +--------------------*/ +/* + This rounds @size values to the closest pixel then expresses that value in (r)em. + This ensures all size values round to exact pixels +*/ +/* em */ +/* rem */ +/*------------------- + Icons +--------------------*/ +/* Maximum Glyph Width of Icon */ +/*------------------- + Neutral Text +--------------------*/ +/*------------------- + Brand Colors +--------------------*/ +/*------------------- + Borders +--------------------*/ +/*------------------- + Derived Values +--------------------*/ +/* Loaders Position Offset */ +/* Rendered Scrollbar Width */ +/* Maximum Single Character Glyph Width, aka Capital "W" */ +/* Used to match floats with text */ +/* Header Spacing */ +/* Minimum Mobile Width */ +/* Positive / Negative Dupes */ +/* Responsive */ +/*------------------- + Exact Pixel Values +--------------------*/ +/* + These are used to specify exact pixel values in em + for things like borders that remain constantly + sized as emSize adjusts + + Since there are many more sizes than names for sizes, + these are named by their original pixel values. + +*/ +/* Columns */ +/******************************* + States +*******************************/ +/*------------------- + Disabled +--------------------*/ +/*------------------- + Hover +--------------------*/ +/*--- Shadows ---*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Focus +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Down (:active) +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Active +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/* Site theme site.variables */ +/******************************* + User Global Variables +*******************************/ +/*------------------- + Site Colors +--------------------*/ +/******************************* + PXT Overrides +*******************************/ +/*------------------- + Component Variables +---------------------*/ +/* Default */ +/******************************* + Message +*******************************/ +/*------------------- + Elements +--------------------*/ +/* Header */ +/* Paragraph */ +/* List */ +/* Icon */ +/* Close Icon */ +/*------------------- + Types +--------------------*/ +/* Icon Message */ +/* Attached */ +/* Floating */ +/* Colors */ +/* Warning / Positive / Negative / Info */ +/* Packaged Theme */ +/******************************* + Message +*******************************/ +/*------------------- + Elements +--------------------*/ +/* Header */ +/* Paragraph */ +/* List */ +/* Icon */ +/* Close Icon */ +/*------------------- + Types +--------------------*/ +/* Icon Message */ +/* Attached */ +/* Floating */ +/* Colors */ +/* Warning / Positive / Negative / Info */ +/* Site Theme */ +/******************************* + User Variable Overrides +*******************************/ +/******************************* + Mix-ins +*******************************/ +/*------------------ + Fonts +-------------------*/ +/*------------------ + Overrides +-------------------*/ +/* End Config */ +/******************************* + Message +*******************************/ +.ui.message, +.play-button.message, +.download-button.message { + position: relative; + min-height: 1em; + margin: 1em 0em; + background: #F8F8F9; + padding: 1em 1.5em; + line-height: 1.4285em; + color: rgba(0, 0, 0, 0.87); + transition: opacity 0.1s ease, color 0.1s ease, background 0.1s ease, box-shadow 0.1s ease; + border-radius: 0.28571429rem; + box-shadow: 0px 0px 0px 1px rgba(34, 36, 38, 0.22) inset, 0px 0px 0px 0px rgba(0, 0, 0, 0); +} +.ui.message:first-child, +.play-button.message:first-child, +.download-button.message:first-child { + margin-top: 0em; +} +.ui.message:last-child, +.play-button.message:last-child, +.download-button.message:last-child { + margin-bottom: 0em; +} +/*-------------- + Content +---------------*/ +/* Header */ +.ui.message .header, +.play-button.message .header, +.download-button.message .header { + display: block; + font-family: 'Roboto Mono', 'Helvetica Neue', Arial, Helvetica, sans-serif; + font-weight: bold; + margin: -0.14285714em 0em 0rem 0em; +} +/* Default font size */ +.ui.message .header:not(.ui), +.play-button.message .header:not(.ui), +.download-button.message .header:not(.ui) { + font-size: 1.14285714em; +} +/* Paragraph */ +.ui.message p, +.play-button.message p, +.download-button.message p { + opacity: 0.85; + margin: 0.75em 0em; +} +.ui.message p:first-child, +.play-button.message p:first-child, +.download-button.message p:first-child { + margin-top: 0em; +} +.ui.message p:last-child, +.play-button.message p:last-child, +.download-button.message p:last-child { + margin-bottom: 0em; +} +.ui.message .header + p, +.play-button.message .header + p, +.download-button.message .header + p { + margin-top: 0.25em; +} +/* List */ +.ui.message .list:not(.ui), +.play-button.message .list:not(.ui), +.download-button.message .list:not(.ui) { + text-align: left; + padding: 0em; + opacity: 0.85; + list-style-position: inside; + margin: 0.5em 0em 0em; +} +.ui.message .list:not(.ui):first-child, +.play-button.message .list:not(.ui):first-child, +.download-button.message .list:not(.ui):first-child { + margin-top: 0em; +} +.ui.message .list:not(.ui):last-child, +.play-button.message .list:not(.ui):last-child, +.download-button.message .list:not(.ui):last-child { + margin-bottom: 0em; +} +.ui.message .list:not(.ui) li, +.play-button.message .list:not(.ui) li, +.download-button.message .list:not(.ui) li { + position: relative; + list-style-type: none; + margin: 0em 0em 0.3em 1em; + padding: 0em; +} +.ui.message .list:not(.ui) li:before, +.play-button.message .list:not(.ui) li:before, +.download-button.message .list:not(.ui) li:before { + position: absolute; + content: '•'; + left: -1em; + height: 100%; + vertical-align: baseline; +} +.ui.message .list:not(.ui) li:last-child, +.play-button.message .list:not(.ui) li:last-child, +.download-button.message .list:not(.ui) li:last-child { + margin-bottom: 0em; +} +/* Icon */ +.ui.message > .icon, +.play-button.message > .icon, +.download-button.message > .icon { + margin-right: 0.6em; +} +/* Close Icon */ +.ui.message > .close.icon, +.play-button.message > .close.icon, +.download-button.message > .close.icon { + cursor: pointer; + position: absolute; + margin: 0em; + top: 0.78575em; + right: 0.5em; + opacity: 0.7; + transition: opacity 0.1s ease; +} +.ui.message > .close.icon:hover, +.play-button.message > .close.icon:hover, +.download-button.message > .close.icon:hover { + opacity: 1; +} +/* First / Last Element */ +.ui.message > :first-child, +.play-button.message > :first-child, +.download-button.message > :first-child { + margin-top: 0em; +} +.ui.message > :last-child, +.play-button.message > :last-child, +.download-button.message > :last-child { + margin-bottom: 0em; +} +/******************************* + Coupling +*******************************/ +.ui.dropdown .menu > .message, +.play-button.dropdown .menu > .message, +.download-button.dropdown .menu > .message { + margin: 0px -1px; +} +/******************************* + States +*******************************/ +/*-------------- + Visible +---------------*/ +.ui.visible.visible.visible.visible.message, +.play-button.visible.visible.visible.visible.message, +.download-button.visible.visible.visible.visible.message { + display: block; +} +.ui.icon.visible.visible.visible.visible.message, +.play-button.icon.visible.visible.visible.visible.message, +.download-button.icon.visible.visible.visible.visible.message { + display: flex; +} +/*-------------- + Hidden +---------------*/ +.ui.hidden.hidden.hidden.hidden.message, +.play-button.hidden.hidden.hidden.hidden.message, +.download-button.hidden.hidden.hidden.hidden.message { + display: none; +} +/******************************* + Variations +*******************************/ +/*-------------- + Compact +---------------*/ +.ui.compact.message, +.play-button.compact.message, +.download-button.compact.message { + display: inline-block; +} +.ui.compact.icon.message, +.play-button.compact.icon.message, +.download-button.compact.icon.message { + display: inline-flex; +} +/*-------------- + Attached +---------------*/ +.ui.attached.message, +.play-button.attached.message, +.download-button.attached.message { + margin-bottom: -1px; + border-radius: 0.28571429rem 0.28571429rem 0em 0em; + box-shadow: 0em 0em 0em 1px rgba(34, 36, 38, 0.15) inset; + margin-left: -1px; + margin-right: -1px; +} +.ui.attached + .ui.attached.message:not(.top):not(.bottom), +.play-button.attached + .play-button.attached.message:not(.top):not(.bottom), +.download-button.attached + .download-button.attached.message:not(.top):not(.bottom) { + margin-top: -1px; + border-radius: 0em; +} +.ui.bottom.attached.message, +.play-button.bottom.attached.message, +.download-button.bottom.attached.message { + margin-top: -1px; + border-radius: 0em 0em 0.28571429rem 0.28571429rem; + box-shadow: 0em 0em 0em 1px rgba(34, 36, 38, 0.15) inset, 0px 1px 2px 0 rgba(34, 36, 38, 0.15); +} +.ui.bottom.attached.message:not(:last-child), +.play-button.bottom.attached.message:not(:last-child), +.download-button.bottom.attached.message:not(:last-child) { + margin-bottom: 1em; +} +.ui.attached.icon.message, +.play-button.attached.icon.message, +.download-button.attached.icon.message { + width: auto; +} +/*-------------- + Icon +---------------*/ +.ui.icon.message, +.play-button.icon.message, +.download-button.icon.message { + display: flex; + width: 100%; + align-items: center; +} +.ui.icon.message > .icon:not(.close), +.play-button.icon.message > .icon:not(.close), +.download-button.icon.message > .icon:not(.close) { + display: block; + flex: 0 0 auto; + width: auto; + line-height: 1; + vertical-align: middle; + font-size: 3em; + opacity: 0.8; +} +.ui.icon.message > .content, +.play-button.icon.message > .content, +.download-button.icon.message > .content { + display: block; + flex: 1 1 auto; + vertical-align: middle; +} +.ui.icon.message .icon:not(.close) + .content, +.play-button.icon.message .icon:not(.close) + .content, +.download-button.icon.message .icon:not(.close) + .content { + padding-left: 0rem; +} +.ui.icon.message .circular.icon, +.play-button.icon.message .circular.icon, +.download-button.icon.message .circular.icon { + width: 1em; +} +/*-------------- + Floating +---------------*/ +.ui.floating.message, +.play-button.floating.message, +.download-button.floating.message { + box-shadow: 0px 0px 0px 1px rgba(34, 36, 38, 0.22) inset, 0px 2px 4px 0px rgba(34, 36, 38, 0.12), 0px 2px 10px 0px rgba(34, 36, 38, 0.15); +} +/*-------------- + Colors +---------------*/ +.ui.black.message, +.play-button.black.message, +.download-button.black.message { + background-color: #1B1C1D; + color: rgba(255, 255, 255, 0.9); +} +/*-------------- + Types +---------------*/ +/* Positive */ +.ui.positive.message, +.play-button.positive.message, +.download-button.positive.message { + background-color: #FCFFF5; + color: #2C662D; +} +.ui.positive.message, +.ui.attached.positive.message, +.play-button.positive.message, +.play-button.attached.positive.message, +.download-button.positive.message, +.download-button.attached.positive.message { + box-shadow: 0px 0px 0px 1px #A3C293 inset, 0px 0px 0px 0px rgba(0, 0, 0, 0); +} +.ui.positive.message .header, +.play-button.positive.message .header, +.download-button.positive.message .header { + color: #1A531B; +} +/* Negative */ +.ui.negative.message, +.play-button.negative.message, +.download-button.negative.message { + background-color: #FFF6F6; + color: #9F3A38; +} +.ui.negative.message, +.ui.attached.negative.message, +.play-button.negative.message, +.play-button.attached.negative.message, +.download-button.negative.message, +.download-button.attached.negative.message { + box-shadow: 0px 0px 0px 1px #E0B4B4 inset, 0px 0px 0px 0px rgba(0, 0, 0, 0); +} +.ui.negative.message .header, +.play-button.negative.message .header, +.download-button.negative.message .header { + color: #912D2B; +} +/* Info */ +.ui.info.message, +.play-button.info.message, +.download-button.info.message { + background-color: #F8FFFF; + color: #276F86; +} +.ui.info.message, +.ui.attached.info.message, +.play-button.info.message, +.play-button.attached.info.message, +.download-button.info.message, +.download-button.attached.info.message { + box-shadow: 0px 0px 0px 1px #A9D5DE inset, 0px 0px 0px 0px rgba(0, 0, 0, 0); +} +.ui.info.message .header, +.play-button.info.message .header, +.download-button.info.message .header { + color: #0E566C; +} +/* Warning */ +.ui.warning.message, +.play-button.warning.message, +.download-button.warning.message { + background-color: #FFFAF3; + color: #573A08; +} +.ui.warning.message, +.ui.attached.warning.message, +.play-button.warning.message, +.play-button.attached.warning.message, +.download-button.warning.message, +.download-button.attached.warning.message { + box-shadow: 0px 0px 0px 1px #C9BA9B inset, 0px 0px 0px 0px rgba(0, 0, 0, 0); +} +.ui.warning.message .header, +.play-button.warning.message .header, +.download-button.warning.message .header { + color: #794B02; +} +/* Error */ +.ui.error.message, +.play-button.error.message, +.download-button.error.message { + background-color: #FFF6F6; + color: #9F3A38; +} +.ui.error.message, +.ui.attached.error.message, +.play-button.error.message, +.play-button.attached.error.message, +.download-button.error.message, +.download-button.attached.error.message { + box-shadow: 0px 0px 0px 1px #E0B4B4 inset, 0px 0px 0px 0px rgba(0, 0, 0, 0); +} +.ui.error.message .header, +.play-button.error.message .header, +.download-button.error.message .header { + color: #912D2B; +} +/* Success */ +.ui.success.message, +.play-button.success.message, +.download-button.success.message { + background-color: #FCFFF5; + color: #2C662D; +} +.ui.success.message, +.ui.attached.success.message, +.play-button.success.message, +.play-button.attached.success.message, +.download-button.success.message, +.download-button.attached.success.message { + box-shadow: 0px 0px 0px 1px #A3C293 inset, 0px 0px 0px 0px rgba(0, 0, 0, 0); +} +.ui.success.message .header, +.play-button.success.message .header, +.download-button.success.message .header { + color: #1A531B; +} +/* Colors */ +.ui.inverted.message, +.ui.black.message, +.play-button.inverted.message, +.play-button.black.message, +.download-button.inverted.message, +.download-button.black.message { + background-color: #1B1C1D; + color: rgba(255, 255, 255, 0.9); +} +.ui.red.message, +.play-button.red.message, +.download-button.red.message { + background-color: #FFE8E6; + color: #E81123; + box-shadow: 0px 0px 0px 1px #E81123 inset, 0px 0px 0px 0px rgba(0, 0, 0, 0); +} +.ui.red.message .header, +.play-button.red.message .header, +.download-button.red.message .header { + color: #d00f1f; +} +.ui.orange.message, +.play-button.orange.message, +.download-button.orange.message { + background-color: #FFEDDE; + color: #DF4600; + box-shadow: 0px 0px 0px 1px #DF4600 inset, 0px 0px 0px 0px rgba(0, 0, 0, 0); +} +.ui.orange.message .header, +.play-button.orange.message .header, +.download-button.orange.message .header { + color: #c63e00; +} +.ui.yellow.message, +.play-button.yellow.message, +.download-button.yellow.message, +.ui.download-button.message { + background-color: #FFF8DB; + color: #B58105; + box-shadow: 0px 0px 0px 1px #B58105 inset, 0px 0px 0px 0px rgba(0, 0, 0, 0); +} +.ui.yellow.message .header, +.play-button.yellow.message .header, +.download-button.yellow.message .header, +.ui.download-button.message .header { + color: #9c6f04; +} +.ui.olive.message, +.play-button.olive.message, +.download-button.olive.message { + background-color: #FBFDEF; + color: #8ABC1E; + box-shadow: 0px 0px 0px 1px #8ABC1E inset, 0px 0px 0px 0px rgba(0, 0, 0, 0); +} +.ui.olive.message .header, +.play-button.olive.message .header, +.download-button.olive.message .header { + color: #7aa61a; +} +.ui.green.message, +.ui.ui.button.getting-started-btn.message, +.play-button.green.message, +.download-button.green.message, +.ui.play-button.button.getting-started-btn.message, +.ui.ui.play-button.getting-started-btn.message, +.ui.download-button.button.getting-started-btn.message, +.ui.ui.download-button.getting-started-btn.message { + background-color: #E5F9E7; + color: #1EBC30; + box-shadow: 0px 0px 0px 1px #1EBC30 inset, 0px 0px 0px 0px rgba(0, 0, 0, 0); +} +.ui.green.message .header, +.ui.ui.button.getting-started-btn.message .header, +.play-button.green.message .header, +.download-button.green.message .header, +.ui.play-button.button.getting-started-btn.message .header, +.ui.ui.play-button.getting-started-btn.message .header, +.ui.download-button.button.getting-started-btn.message .header, +.ui.ui.download-button.getting-started-btn.message .header { + color: #1aa62a; +} +.ui.teal.message, +.play-button.teal.message, +.download-button.teal.message { + background-color: #E1F7F7; + color: #10A3A3; + box-shadow: 0px 0px 0px 1px #10A3A3 inset, 0px 0px 0px 0px rgba(0, 0, 0, 0); +} +.ui.teal.message .header, +.play-button.teal.message .header, +.download-button.teal.message .header { + color: #0e8c8c; +} +.ui.blue.message, +.play-button.blue.message, +.ui.play-button.message, +.download-button.blue.message { + background-color: #DFF0FF; + color: #54C9C9; + box-shadow: 0px 0px 0px 1px #54C9C9 inset, 0px 0px 0px 0px rgba(0, 0, 0, 0); +} +.ui.blue.message .header, +.play-button.blue.message .header, +.ui.play-button.message .header, +.download-button.blue.message .header { + color: #41c3c3; +} +.ui.violet.message, +.play-button.violet.message, +.download-button.violet.message { + background-color: #EAE7FF; + color: #C90072; + box-shadow: 0px 0px 0px 1px #C90072 inset, 0px 0px 0px 0px rgba(0, 0, 0, 0); +} +.ui.violet.message .header, +.play-button.violet.message .header, +.download-button.violet.message .header { + color: #b00064; +} +.ui.purple.message, +.play-button.purple.message, +.download-button.purple.message { + background-color: #F6E7FF; + color: #8169E6; + box-shadow: 0px 0px 0px 1px #8169E6 inset, 0px 0px 0px 0px rgba(0, 0, 0, 0); +} +.ui.purple.message .header, +.play-button.purple.message .header, +.download-button.purple.message .header { + color: #6f53e2; +} +.ui.pink.message, +.play-button.pink.message, +.download-button.pink.message { + background-color: #FFE3FB; + color: #E2008C; + box-shadow: 0px 0px 0px 1px #E2008C inset, 0px 0px 0px 0px rgba(0, 0, 0, 0); +} +.ui.pink.message .header, +.play-button.pink.message .header, +.download-button.pink.message .header { + color: #c9007c; +} +.ui.brown.message, +.play-button.brown.message, +.download-button.brown.message { + background-color: #F1E2D3; + color: #6B5B4C; + box-shadow: 0px 0px 0px 1px #6B5B4C inset, 0px 0px 0px 0px rgba(0, 0, 0, 0); +} +.ui.brown.message .header, +.play-button.brown.message .header, +.download-button.brown.message .header { + color: #5c4e41; +} +/*-------------- + Sizes +---------------*/ +.ui.mini.message, +.play-button.mini.message, +.download-button.mini.message { + font-size: 0.78571429em; +} +.ui.tiny.message, +.play-button.tiny.message, +.download-button.tiny.message { + font-size: 0.85714286em; +} +.ui.small.message, +.play-button.small.message, +.download-button.small.message { + font-size: 0.92857143em; +} +.ui.message, +.play-button.message, +.download-button.message { + font-size: 1em; +} +.ui.large.message, +.play-button.large.message, +.download-button.large.message { + font-size: 1.14285714em; +} +.ui.big.message, +.play-button.big.message, +.download-button.big.message { + font-size: 1.28571429em; +} +.ui.huge.message, +.play-button.huge.message, +.download-button.huge.message { + font-size: 1.42857143em; +} +.ui.massive.message, +.play-button.massive.message, +.download-button.massive.message { + font-size: 1.71428571em; +} +/******************************* + Theme Overrides +*******************************/ +/******************************* + Site Overrides +*******************************/ +/*! + * # Semantic UI - Table + * http://github.com/semantic-org/semantic-ui/ + * + * + * Released under the MIT license + * http://opensource.org/licenses/MIT + * + */ +/******************************* + Theme +*******************************/ +/* + +████████╗██╗ ██╗███████╗███╗ ███╗███████╗███████╗ +╚══██╔══╝██║ ██║██╔════╝████╗ ████║██╔════╝██╔════╝ + ██║ ███████║█████╗ ██╔████╔██║█████╗ ███████╗ + ██║ ██╔══██║██╔══╝ ██║╚██╔╝██║██╔══╝ ╚════██║ + ██║ ██║ ██║███████╗██║ ╚═╝ ██║███████╗███████║ + ╚═╝ ╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝╚══════╝╚══════╝ + +*/ +/******************************* + Theme Selection +*******************************/ +/* To override a theme for an individual element + specify theme name below +*/ +/* Global */ +/* Elements */ +/* Collections */ +/* Modules */ +/* Views */ +/******************************* + Folders +*******************************/ +/* Path to theme packages */ +/* Path to site override folder */ +/******************************* + Import Theme +*******************************/ +/******************************* + Import Directives +*******************************/ +/*------------------ + Theme +-------------------*/ +/*-------------------- + Site Variables +---------------------*/ +/* Default site.variables */ +/******************************* + Site Settings +*******************************/ +/*------------------- + Fonts +--------------------*/ +/*------------------- + Base Sizes +--------------------*/ +/* This is the single variable that controls them all */ +/* The size of page text */ +/*------------------- + Border Radius +--------------------*/ +/* See Power-user section below + for explanation of @px variables +*/ +/*------------------- + Brand Colors +--------------------*/ +/*-------------- + Page Heading +---------------*/ +/*-------------- + Form Input +---------------*/ +/* This adjusts the default form input across all elements */ +/* Input Text Color */ +/* Line Height Default For Inputs in Browser (Descendors are 17px at 14px base em) */ +/*------------------- + Focused Input +--------------------*/ +/* Used on inputs, textarea etc */ +/* Used on dropdowns, other larger blocks */ +/*------------------- + Sizes +--------------------*/ +/* + Sizes are all expressed in terms of 14px/em (default em) + This ensures these "ratios" remain constant despite changes in EM +*/ +/*------------------- + Page +--------------------*/ +/*------------------- + Paragraph +--------------------*/ +/*------------------- + Links +--------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ +/*------------------- + Highlighted Text +--------------------*/ +/*------------------- + Loader +--------------------*/ +/*------------------- + Grid +--------------------*/ +/*------------------- + Transitions +--------------------*/ +/*------------------- + Breakpoints +--------------------*/ +/*------------------- + Site Colors +--------------------*/ +/*--- Colors ---*/ +/*--- Light Colors ---*/ +/*--- Neutrals ---*/ +/*--- Colored Backgrounds ---*/ +/*--- Colored Headers ---*/ +/*--- Colored Text ---*/ +/*--- Colored Border ---*/ +/*------------------- + Alpha Colors +--------------------*/ +/*------------------- + Accents +--------------------*/ +/* Differentiating Neutrals */ +/* Differentiating Layers */ +/******************************* + Power-User +*******************************/ +/*------------------- + Emotive Colors +--------------------*/ +/* Positive */ +/* Negative */ +/* Info */ +/* Warning */ +/*------------------- + Paths +--------------------*/ +/* For source only. Modified in gulp for dist */ +/*------------------- + Em Sizes +--------------------*/ +/* + This rounds @size values to the closest pixel then expresses that value in (r)em. + This ensures all size values round to exact pixels +*/ +/* em */ +/* rem */ +/*------------------- + Icons +--------------------*/ +/* Maximum Glyph Width of Icon */ +/*------------------- + Neutral Text +--------------------*/ +/*------------------- + Brand Colors +--------------------*/ +/*------------------- + Borders +--------------------*/ +/*------------------- + Derived Values +--------------------*/ +/* Loaders Position Offset */ +/* Rendered Scrollbar Width */ +/* Maximum Single Character Glyph Width, aka Capital "W" */ +/* Used to match floats with text */ +/* Header Spacing */ +/* Minimum Mobile Width */ +/* Positive / Negative Dupes */ +/* Responsive */ +/*------------------- + Exact Pixel Values +--------------------*/ +/* + These are used to specify exact pixel values in em + for things like borders that remain constantly + sized as emSize adjusts + + Since there are many more sizes than names for sizes, + these are named by their original pixel values. + +*/ +/* Columns */ +/******************************* + States +*******************************/ +/*------------------- + Disabled +--------------------*/ +/*------------------- + Hover +--------------------*/ +/*--- Shadows ---*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Focus +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Down (:active) +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Active +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/* Packaged site.variables */ +/******************************* + User Global Variables +*******************************/ +/*------------------- + Fonts +--------------------*/ +/*------------------- + Breakpoints +--------------------*/ +/* +@mobileBreakpoint : unit( (63 * @emSize), px); +@tabletBreakpoint : unit( (79 * @emSize), px); +@computerBreakpoint : unit( (91 * @emSize), px); +@largeMonitorBreakpoint : unit( (99 * @emSize), px); +@widescreenMonitorBreakpoint : unit( (119 * @emSize), px); +*/ +/******************************* + PXT Variables +*******************************/ +/*------------------- + Menu +--------------------*/ +/*------------------- + Layout +--------------------*/ +/*------------------- + Background +--------------------*/ +/*------------------- + Full screen +--------------------*/ +/*------------------- + Side Docs +--------------------*/ +/*------------------- + Editor +--------------------*/ +/* Component's site.variables */ +/******************************* + Site Settings +*******************************/ +/*------------------- + Fonts +--------------------*/ +/*------------------- + Base Sizes +--------------------*/ +/* This is the single variable that controls them all */ +/* The size of page text */ +/*------------------- + Border Radius +--------------------*/ +/* See Power-user section below + for explanation of @px variables +*/ +/*------------------- + Brand Colors +--------------------*/ +/*-------------- + Page Heading +---------------*/ +/*-------------- + Form Input +---------------*/ +/* This adjusts the default form input across all elements */ +/* Input Text Color */ +/* Line Height Default For Inputs in Browser (Descendors are 17px at 14px base em) */ +/*------------------- + Focused Input +--------------------*/ +/* Used on inputs, textarea etc */ +/* Used on dropdowns, other larger blocks */ +/*------------------- + Sizes +--------------------*/ +/* + Sizes are all expressed in terms of 14px/em (default em) + This ensures these "ratios" remain constant despite changes in EM +*/ +/*------------------- + Page +--------------------*/ +/*------------------- + Paragraph +--------------------*/ +/*------------------- + Links +--------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ +/*------------------- + Highlighted Text +--------------------*/ +/*------------------- + Loader +--------------------*/ +/*------------------- + Grid +--------------------*/ +/*------------------- + Transitions +--------------------*/ +/*------------------- + Breakpoints +--------------------*/ +/*------------------- + Site Colors +--------------------*/ +/*--- Colors ---*/ +/*--- Light Colors ---*/ +/*--- Neutrals ---*/ +/*--- Colored Backgrounds ---*/ +/*--- Colored Headers ---*/ +/*--- Colored Text ---*/ +/*--- Colored Border ---*/ +/*------------------- + Alpha Colors +--------------------*/ +/*------------------- + Accents +--------------------*/ +/* Differentiating Neutrals */ +/* Differentiating Layers */ +/******************************* + Power-User +*******************************/ +/*------------------- + Emotive Colors +--------------------*/ +/* Positive */ +/* Negative */ +/* Info */ +/* Warning */ +/*------------------- + Paths +--------------------*/ +/* For source only. Modified in gulp for dist */ +/*------------------- + Em Sizes +--------------------*/ +/* + This rounds @size values to the closest pixel then expresses that value in (r)em. + This ensures all size values round to exact pixels +*/ +/* em */ +/* rem */ +/*------------------- + Icons +--------------------*/ +/* Maximum Glyph Width of Icon */ +/*------------------- + Neutral Text +--------------------*/ +/*------------------- + Brand Colors +--------------------*/ +/*------------------- + Borders +--------------------*/ +/*------------------- + Derived Values +--------------------*/ +/* Loaders Position Offset */ +/* Rendered Scrollbar Width */ +/* Maximum Single Character Glyph Width, aka Capital "W" */ +/* Used to match floats with text */ +/* Header Spacing */ +/* Minimum Mobile Width */ +/* Positive / Negative Dupes */ +/* Responsive */ +/*------------------- + Exact Pixel Values +--------------------*/ +/* + These are used to specify exact pixel values in em + for things like borders that remain constantly + sized as emSize adjusts + + Since there are many more sizes than names for sizes, + these are named by their original pixel values. + +*/ +/* Columns */ +/******************************* + States +*******************************/ +/*------------------- + Disabled +--------------------*/ +/*------------------- + Hover +--------------------*/ +/*--- Shadows ---*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Focus +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Down (:active) +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Active +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/* Site theme site.variables */ +/******************************* + User Global Variables +*******************************/ +/*------------------- + Site Colors +--------------------*/ +/******************************* + PXT Overrides +*******************************/ +/*------------------- + Component Variables +---------------------*/ +/* Default */ +/******************************* + Table +*******************************/ +/*------------------- + Element +--------------------*/ +/*-------------- + Parts +---------------*/ +/* Table Row */ +/* Table Cell */ +/* Table Header */ +/* Table Footer */ +/* Responsive Size */ +/*------------------- + Types +--------------------*/ +/* Definition */ +/*-------------- + Couplings +---------------*/ +/*-------------- + States +---------------*/ +/* Positive */ +/* Negative */ +/* Error */ +/* Warning */ +/* Active */ +/*-------------- + Types +---------------*/ +/* Attached */ +/* Striped */ +/* Selectable */ +/* Sortable */ +/* Colors */ +/* Inverted */ +/* Basic */ +/* Padded */ +/* Compact */ +/* Sizes */ +/* Packaged Theme */ +/******************************* + Table +*******************************/ +/*------------------- + Element +--------------------*/ +/*-------------- + Parts +---------------*/ +/* Table Row */ +/* Table Cell */ +/* Table Header */ +/* Table Footer */ +/* Responsive Size */ +/*------------------- + Types +--------------------*/ +/* Definition */ +/*-------------- + Couplings +---------------*/ +/*-------------- + States +---------------*/ +/* Positive */ +/* Negative */ +/* Error */ +/* Warning */ +/* Active */ +/*-------------- + Types +---------------*/ +/* Attached */ +/* Striped */ +/* Selectable */ +/* Sortable */ +/* Colors */ +/* Inverted */ +/* Basic */ +/* Padded */ +/* Compact */ +/* Sizes */ +/* Site Theme */ +/******************************* + User Variable Overrides +*******************************/ +/******************************* + Mix-ins +*******************************/ +/*------------------ + Fonts +-------------------*/ +/*------------------ + Overrides +-------------------*/ +/* End Config */ +/******************************* + Table +*******************************/ +/* Prototype */ +.ui.table, +.play-button.table, +.download-button.table { + width: 100%; + background: #FFFFFF; + margin: 1em 0em; + border: 1px solid rgba(34, 36, 38, 0.15); + box-shadow: none; + border-radius: 0.28571429rem; + text-align: left; + color: rgba(0, 0, 0, 0.87); + border-collapse: separate; + border-spacing: 0px; +} +.ui.table:first-child, +.play-button.table:first-child, +.download-button.table:first-child { + margin-top: 0em; +} +.ui.table:last-child, +.play-button.table:last-child, +.download-button.table:last-child { + margin-bottom: 0em; +} +/******************************* + Parts +*******************************/ +/* Table Content */ +.ui.table th, +.ui.table td, +.play-button.table th, +.play-button.table td, +.download-button.table th, +.download-button.table td { + transition: background 0.1s ease, color 0.1s ease; +} +/* Headers */ +.ui.table thead, +.play-button.table thead, +.download-button.table thead { + box-shadow: none; +} +.ui.table thead th, +.play-button.table thead th, +.download-button.table thead th { + cursor: auto; + background: #F9FAFB; + text-align: inherit; + color: rgba(0, 0, 0, 0.87); + padding: 0.92857143em 0.78571429em; + vertical-align: inherit; + font-style: none; + font-weight: bold; + text-transform: none; + border-bottom: 1px solid rgba(34, 36, 38, 0.1); + border-left: none; +} +.ui.table thead tr > th:first-child, +.play-button.table thead tr > th:first-child, +.download-button.table thead tr > th:first-child { + border-left: none; +} +.ui.table thead tr:first-child > th:first-child, +.play-button.table thead tr:first-child > th:first-child, +.download-button.table thead tr:first-child > th:first-child { + border-radius: 0.28571429rem 0em 0em 0em; +} +.ui.table thead tr:first-child > th:last-child, +.play-button.table thead tr:first-child > th:last-child, +.download-button.table thead tr:first-child > th:last-child { + border-radius: 0em 0.28571429rem 0em 0em; +} +.ui.table thead tr:first-child > th:only-child, +.play-button.table thead tr:first-child > th:only-child, +.download-button.table thead tr:first-child > th:only-child { + border-radius: 0.28571429rem 0.28571429rem 0em 0em; +} +/* Footer */ +.ui.table tfoot, +.play-button.table tfoot, +.download-button.table tfoot { + box-shadow: none; +} +.ui.table tfoot th, +.play-button.table tfoot th, +.download-button.table tfoot th { + cursor: auto; + border-top: 1px solid rgba(34, 36, 38, 0.15); + background: #F9FAFB; + text-align: inherit; + color: rgba(0, 0, 0, 0.87); + padding: 0.78571429em 0.78571429em; + vertical-align: middle; + font-style: normal; + font-weight: normal; + text-transform: none; +} +.ui.table tfoot tr > th:first-child, +.play-button.table tfoot tr > th:first-child, +.download-button.table tfoot tr > th:first-child { + border-left: none; +} +.ui.table tfoot tr:first-child > th:first-child, +.play-button.table tfoot tr:first-child > th:first-child, +.download-button.table tfoot tr:first-child > th:first-child { + border-radius: 0em 0em 0em 0.28571429rem; +} +.ui.table tfoot tr:first-child > th:last-child, +.play-button.table tfoot tr:first-child > th:last-child, +.download-button.table tfoot tr:first-child > th:last-child { + border-radius: 0em 0em 0.28571429rem 0em; +} +.ui.table tfoot tr:first-child > th:only-child, +.play-button.table tfoot tr:first-child > th:only-child, +.download-button.table tfoot tr:first-child > th:only-child { + border-radius: 0em 0em 0.28571429rem 0.28571429rem; +} +/* Table Row */ +.ui.table tr td, +.play-button.table tr td, +.download-button.table tr td { + border-top: 1px solid rgba(34, 36, 38, 0.1); +} +.ui.table tr:first-child td, +.play-button.table tr:first-child td, +.download-button.table tr:first-child td { + border-top: none; +} +/* Table Cells */ +.ui.table td, +.play-button.table td, +.download-button.table td { + padding: 0.78571429em 0.78571429em; + text-align: inherit; +} +/* Icons */ +.ui.table > .icon, +.play-button.table > .icon, +.download-button.table > .icon { + vertical-align: baseline; +} +.ui.table > .icon:only-child, +.play-button.table > .icon:only-child, +.download-button.table > .icon:only-child { + margin: 0em; +} +/* Table Segment */ +.ui.table.segment, +.play-button.table.segment, +.download-button.table.segment { + padding: 0em; +} +.ui.table.segment:after, +.play-button.table.segment:after, +.download-button.table.segment:after { + display: none; +} +.ui.table.segment.stacked:after, +.play-button.table.segment.stacked:after, +.download-button.table.segment.stacked:after { + display: block; +} +/* Responsive */ +@media only screen and (max-width: 767px) { + .ui.table:not(.unstackable), + .play-button.table:not(.unstackable), + .download-button.table:not(.unstackable) { + width: 100%; + } + .ui.table:not(.unstackable) tbody, + .ui.table:not(.unstackable) tr, + .ui.table:not(.unstackable) tr > th, + .ui.table:not(.unstackable) tr > td, + .play-button.table:not(.unstackable) tbody, + .play-button.table:not(.unstackable) tr, + .play-button.table:not(.unstackable) tr > th, + .play-button.table:not(.unstackable) tr > td, + .download-button.table:not(.unstackable) tbody, + .download-button.table:not(.unstackable) tr, + .download-button.table:not(.unstackable) tr > th, + .download-button.table:not(.unstackable) tr > td { + width: auto !important; + display: block !important; + } + .ui.table:not(.unstackable), + .play-button.table:not(.unstackable), + .download-button.table:not(.unstackable) { + padding: 0em; + } + .ui.table:not(.unstackable) thead, + .play-button.table:not(.unstackable) thead, + .download-button.table:not(.unstackable) thead { + display: block; + } + .ui.table:not(.unstackable) tfoot, + .play-button.table:not(.unstackable) tfoot, + .download-button.table:not(.unstackable) tfoot { + display: block; + } + .ui.table:not(.unstackable) tr, + .play-button.table:not(.unstackable) tr, + .download-button.table:not(.unstackable) tr { + padding-top: 1em; + padding-bottom: 1em; + box-shadow: 0px -1px 0px 0px rgba(0, 0, 0, 0.1) inset !important; + } + .ui.table:not(.unstackable) tr > th, + .ui.table:not(.unstackable) tr > td, + .play-button.table:not(.unstackable) tr > th, + .play-button.table:not(.unstackable) tr > td, + .download-button.table:not(.unstackable) tr > th, + .download-button.table:not(.unstackable) tr > td { + background: none; + border: none !important; + padding: 0.25em 0.75em !important; + box-shadow: none !important; + } + .ui.table:not(.unstackable) th:first-child, + .ui.table:not(.unstackable) td:first-child, + .play-button.table:not(.unstackable) th:first-child, + .play-button.table:not(.unstackable) td:first-child, + .download-button.table:not(.unstackable) th:first-child, + .download-button.table:not(.unstackable) td:first-child { + font-weight: bold; + } + /* Definition Table */ + .ui.definition.table:not(.unstackable) thead th:first-child, + .play-button.definition.table:not(.unstackable) thead th:first-child, + .download-button.definition.table:not(.unstackable) thead th:first-child { + box-shadow: none !important; + } +} +/******************************* + Coupling +*******************************/ +/* UI Image */ +.ui.table th .image, +.ui.table th .image img, +.ui.table td .image, +.ui.table td .image img, +.play-button.table th .image, +.play-button.table th .image img, +.play-button.table td .image, +.play-button.table td .image img, +.download-button.table th .image, +.download-button.table th .image img, +.download-button.table td .image, +.download-button.table td .image img { + max-width: none; +} +/******************************* + Types +*******************************/ +/*-------------- + Complex +---------------*/ +.ui.structured.table, +.play-button.structured.table, +.download-button.structured.table { + border-collapse: collapse; +} +.ui.structured.table thead th, +.play-button.structured.table thead th, +.download-button.structured.table thead th { + border-left: none; + border-right: none; +} +.ui.structured.sortable.table thead th, +.play-button.structured.sortable.table thead th, +.download-button.structured.sortable.table thead th { + border-left: 1px solid rgba(34, 36, 38, 0.15); + border-right: 1px solid rgba(34, 36, 38, 0.15); +} +.ui.structured.basic.table th, +.play-button.structured.basic.table th, +.download-button.structured.basic.table th { + border-left: none; + border-right: none; +} +.ui.structured.celled.table tr th, +.ui.structured.celled.table tr td, +.play-button.structured.celled.table tr th, +.play-button.structured.celled.table tr td, +.download-button.structured.celled.table tr th, +.download-button.structured.celled.table tr td { + border-left: 1px solid rgba(34, 36, 38, 0.1); + border-right: 1px solid rgba(34, 36, 38, 0.1); +} +/*-------------- + Definition +---------------*/ +.ui.definition.table thead:not(.full-width) th:first-child, +.play-button.definition.table thead:not(.full-width) th:first-child, +.download-button.definition.table thead:not(.full-width) th:first-child { + pointer-events: none; + background: transparent; + font-weight: normal; + color: rgba(0, 0, 0, 0.4); + box-shadow: -1px -1px 0px 1px #FFFFFF; +} +.ui.definition.table tfoot:not(.full-width) th:first-child, +.play-button.definition.table tfoot:not(.full-width) th:first-child, +.download-button.definition.table tfoot:not(.full-width) th:first-child { + pointer-events: none; + background: transparent; + font-weight: rgba(0, 0, 0, 0.4); + color: normal; + box-shadow: 1px 1px 0px 1px #FFFFFF; +} +/* Remove Border */ +.ui.celled.definition.table thead:not(.full-width) th:first-child, +.play-button.celled.definition.table thead:not(.full-width) th:first-child, +.download-button.celled.definition.table thead:not(.full-width) th:first-child { + box-shadow: 0px -1px 0px 1px #FFFFFF; +} +.ui.celled.definition.table tfoot:not(.full-width) th:first-child, +.play-button.celled.definition.table tfoot:not(.full-width) th:first-child, +.download-button.celled.definition.table tfoot:not(.full-width) th:first-child { + box-shadow: 0px 1px 0px 1px #FFFFFF; +} +/* Highlight Defining Column */ +.ui.definition.table tr td:first-child:not(.ignored), +.ui.definition.table tr td.definition, +.play-button.definition.table tr td:first-child:not(.ignored), +.play-button.definition.table tr td.definition, +.download-button.definition.table tr td:first-child:not(.ignored), +.download-button.definition.table tr td.definition { + background: rgba(0, 0, 0, 0.03); + font-weight: bold; + color: rgba(0, 0, 0, 0.95); + text-transform: ''; + box-shadow: ''; + text-align: ''; + font-size: 1em; + padding-left: ''; + padding-right: ''; +} +/* Fix 2nd Column */ +.ui.definition.table thead:not(.full-width) th:nth-child(2), +.play-button.definition.table thead:not(.full-width) th:nth-child(2), +.download-button.definition.table thead:not(.full-width) th:nth-child(2) { + border-left: 1px solid rgba(34, 36, 38, 0.15); +} +.ui.definition.table tfoot:not(.full-width) th:nth-child(2), +.play-button.definition.table tfoot:not(.full-width) th:nth-child(2), +.download-button.definition.table tfoot:not(.full-width) th:nth-child(2) { + border-left: 1px solid rgba(34, 36, 38, 0.15); +} +.ui.definition.table td:nth-child(2), +.play-button.definition.table td:nth-child(2), +.download-button.definition.table td:nth-child(2) { + border-left: 1px solid rgba(34, 36, 38, 0.15); +} +/******************************* + States +*******************************/ +/*-------------- + Positive +---------------*/ +.ui.table tr.positive, +.ui.table td.positive, +.play-button.table tr.positive, +.play-button.table td.positive, +.download-button.table tr.positive, +.download-button.table td.positive { + box-shadow: 0px 0px 0px #A3C293 inset; +} +.ui.table tr.positive, +.ui.table td.positive, +.play-button.table tr.positive, +.play-button.table td.positive, +.download-button.table tr.positive, +.download-button.table td.positive { + background: #FCFFF5 !important; + color: #2C662D !important; +} +/*-------------- + Negative +---------------*/ +.ui.table tr.negative, +.ui.table td.negative, +.play-button.table tr.negative, +.play-button.table td.negative, +.download-button.table tr.negative, +.download-button.table td.negative { + box-shadow: 0px 0px 0px #E0B4B4 inset; +} +.ui.table tr.negative, +.ui.table td.negative, +.play-button.table tr.negative, +.play-button.table td.negative, +.download-button.table tr.negative, +.download-button.table td.negative { + background: #FFF6F6 !important; + color: #9F3A38 !important; +} +/*-------------- + Error +---------------*/ +.ui.table tr.error, +.ui.table td.error, +.play-button.table tr.error, +.play-button.table td.error, +.download-button.table tr.error, +.download-button.table td.error { + box-shadow: 0px 0px 0px #E0B4B4 inset; +} +.ui.table tr.error, +.ui.table td.error, +.play-button.table tr.error, +.play-button.table td.error, +.download-button.table tr.error, +.download-button.table td.error { + background: #FFF6F6 !important; + color: #9F3A38 !important; +} +/*-------------- + Warning +---------------*/ +.ui.table tr.warning, +.ui.table td.warning, +.play-button.table tr.warning, +.play-button.table td.warning, +.download-button.table tr.warning, +.download-button.table td.warning { + box-shadow: 0px 0px 0px #C9BA9B inset; +} +.ui.table tr.warning, +.ui.table td.warning, +.play-button.table tr.warning, +.play-button.table td.warning, +.download-button.table tr.warning, +.download-button.table td.warning { + background: #FFFAF3 !important; + color: #573A08 !important; +} +/*-------------- + Active +---------------*/ +.ui.table tr.active, +.ui.table td.active, +.play-button.table tr.active, +.play-button.table td.active, +.download-button.table tr.active, +.download-button.table td.active { + box-shadow: 0px 0px 0px rgba(0, 0, 0, 0.87) inset; +} +.ui.table tr.active, +.ui.table td.active, +.play-button.table tr.active, +.play-button.table td.active, +.download-button.table tr.active, +.download-button.table td.active { + background: #E0E0E0 !important; + color: rgba(0, 0, 0, 0.87) !important; +} +/*-------------- + Disabled +---------------*/ +.ui.table tr.disabled td, +.ui.table tr td.disabled, +.ui.table tr.disabled:hover, +.ui.table tr:hover td.disabled, +.play-button.table tr.disabled td, +.play-button.table tr td.disabled, +.play-button.table tr.disabled:hover, +.play-button.table tr:hover td.disabled, +.download-button.table tr.disabled td, +.download-button.table tr td.disabled, +.download-button.table tr.disabled:hover, +.download-button.table tr:hover td.disabled { + pointer-events: none; + color: rgba(40, 40, 40, 0.3); +} +/******************************* + Variations +*******************************/ +/*-------------- + Stackable +---------------*/ +@media only screen and (max-width: 991px) { + .ui[class*="tablet stackable"].table, + .ui[class*="tablet stackable"].table tbody, + .ui[class*="tablet stackable"].table tr, + .ui[class*="tablet stackable"].table tr > th, + .ui[class*="tablet stackable"].table tr > td, + .play-button[class*="tablet stackable"].table, + .play-button[class*="tablet stackable"].table tbody, + .play-button[class*="tablet stackable"].table tr, + .play-button[class*="tablet stackable"].table tr > th, + .play-button[class*="tablet stackable"].table tr > td, + .download-button[class*="tablet stackable"].table, + .download-button[class*="tablet stackable"].table tbody, + .download-button[class*="tablet stackable"].table tr, + .download-button[class*="tablet stackable"].table tr > th, + .download-button[class*="tablet stackable"].table tr > td { + width: 100% !important; + display: block !important; + } + .ui[class*="tablet stackable"].table, + .play-button[class*="tablet stackable"].table, + .download-button[class*="tablet stackable"].table { + padding: 0em; + } + .ui[class*="tablet stackable"].table thead, + .play-button[class*="tablet stackable"].table thead, + .download-button[class*="tablet stackable"].table thead { + display: block; + } + .ui[class*="tablet stackable"].table tfoot, + .play-button[class*="tablet stackable"].table tfoot, + .download-button[class*="tablet stackable"].table tfoot { + display: block; + } + .ui[class*="tablet stackable"].table tr, + .play-button[class*="tablet stackable"].table tr, + .download-button[class*="tablet stackable"].table tr { + padding-top: 1em; + padding-bottom: 1em; + box-shadow: 0px -1px 0px 0px rgba(0, 0, 0, 0.1) inset !important; + } + .ui[class*="tablet stackable"].table tr > th, + .ui[class*="tablet stackable"].table tr > td, + .play-button[class*="tablet stackable"].table tr > th, + .play-button[class*="tablet stackable"].table tr > td, + .download-button[class*="tablet stackable"].table tr > th, + .download-button[class*="tablet stackable"].table tr > td { + background: none; + border: none !important; + padding: 0.25em 0.75em; + box-shadow: none !important; + } + /* Definition Table */ + .ui.definition[class*="tablet stackable"].table thead th:first-child, + .play-button.definition[class*="tablet stackable"].table thead th:first-child, + .download-button.definition[class*="tablet stackable"].table thead th:first-child { + box-shadow: none !important; + } +} +/*-------------- + Text Alignment +---------------*/ +.ui.table[class*="left aligned"], +.ui.table [class*="left aligned"], +.play-button.table[class*="left aligned"], +.play-button.table [class*="left aligned"], +.download-button.table[class*="left aligned"], +.download-button.table [class*="left aligned"] { + text-align: left; +} +.ui.table[class*="center aligned"], +.ui.table [class*="center aligned"], +.play-button.table[class*="center aligned"], +.play-button.table [class*="center aligned"], +.download-button.table[class*="center aligned"], +.download-button.table [class*="center aligned"] { + text-align: center; +} +.ui.table[class*="right aligned"], +.ui.table [class*="right aligned"], +.play-button.table[class*="right aligned"], +.play-button.table [class*="right aligned"], +.download-button.table[class*="right aligned"], +.download-button.table [class*="right aligned"] { + text-align: right; +} +/*------------------ + Vertical Alignment +------------------*/ +.ui.table[class*="top aligned"], +.ui.table [class*="top aligned"], +.play-button.table[class*="top aligned"], +.play-button.table [class*="top aligned"], +.download-button.table[class*="top aligned"], +.download-button.table [class*="top aligned"] { + vertical-align: top; +} +.ui.table[class*="middle aligned"], +.ui.table [class*="middle aligned"], +.play-button.table[class*="middle aligned"], +.play-button.table [class*="middle aligned"], +.download-button.table[class*="middle aligned"], +.download-button.table [class*="middle aligned"] { + vertical-align: middle; +} +.ui.table[class*="bottom aligned"], +.ui.table [class*="bottom aligned"], +.play-button.table[class*="bottom aligned"], +.play-button.table [class*="bottom aligned"], +.download-button.table[class*="bottom aligned"], +.download-button.table [class*="bottom aligned"] { + vertical-align: bottom; +} +/*-------------- + Collapsing +---------------*/ +.ui.table th.collapsing, +.ui.table td.collapsing, +.play-button.table th.collapsing, +.play-button.table td.collapsing, +.download-button.table th.collapsing, +.download-button.table td.collapsing { + width: 1px; + white-space: nowrap; +} +/*-------------- + Fixed +---------------*/ +.ui.fixed.table, +.play-button.fixed.table, +.download-button.fixed.table { + table-layout: fixed; +} +.ui.fixed.table th, +.ui.fixed.table td, +.play-button.fixed.table th, +.play-button.fixed.table td, +.download-button.fixed.table th, +.download-button.fixed.table td { + overflow: hidden; + text-overflow: ellipsis; +} +/*-------------- + Selectable +---------------*/ +.ui.selectable.table tbody tr:hover, +.ui.table tbody tr td.selectable:hover, +.play-button.selectable.table tbody tr:hover, +.play-button.table tbody tr td.selectable:hover, +.download-button.selectable.table tbody tr:hover, +.download-button.table tbody tr td.selectable:hover { + background: rgba(0, 0, 0, 0.05) !important; + color: rgba(0, 0, 0, 0.95) !important; +} +.ui.selectable.inverted.table tbody tr:hover, +.ui.inverted.table tbody tr td.selectable:hover, +.play-button.selectable.inverted.table tbody tr:hover, +.play-button.inverted.table tbody tr td.selectable:hover, +.download-button.selectable.inverted.table tbody tr:hover, +.download-button.inverted.table tbody tr td.selectable:hover { + background: rgba(255, 255, 255, 0.08) !important; + color: #ffffff !important; +} +/* Selectable Cell Link */ +.ui.table tbody tr td.selectable, +.play-button.table tbody tr td.selectable, +.download-button.table tbody tr td.selectable { + padding: 0em; +} +.ui.table tbody tr td.selectable > a:not(.ui), +.play-button.table tbody tr td.selectable > a:not(.ui), +.download-button.table tbody tr td.selectable > a:not(.ui) { + display: block; + color: inherit; + padding: 0.78571429em 0.78571429em; +} +/* Other States */ +.ui.selectable.table tr.error:hover, +.ui.table tr td.selectable.error:hover, +.ui.selectable.table tr:hover td.error, +.play-button.selectable.table tr.error:hover, +.play-button.table tr td.selectable.error:hover, +.play-button.selectable.table tr:hover td.error, +.download-button.selectable.table tr.error:hover, +.download-button.table tr td.selectable.error:hover, +.download-button.selectable.table tr:hover td.error { + background: #ffe7e7 !important; + color: #943634 !important; +} +.ui.selectable.table tr.warning:hover, +.ui.table tr td.selectable.warning:hover, +.ui.selectable.table tr:hover td.warning, +.play-button.selectable.table tr.warning:hover, +.play-button.table tr td.selectable.warning:hover, +.play-button.selectable.table tr:hover td.warning, +.download-button.selectable.table tr.warning:hover, +.download-button.table tr td.selectable.warning:hover, +.download-button.selectable.table tr:hover td.warning { + background: #fff4e4 !important; + color: #493107 !important; +} +.ui.selectable.table tr.active:hover, +.ui.table tr td.selectable.active:hover, +.ui.selectable.table tr:hover td.active, +.play-button.selectable.table tr.active:hover, +.play-button.table tr td.selectable.active:hover, +.play-button.selectable.table tr:hover td.active, +.download-button.selectable.table tr.active:hover, +.download-button.table tr td.selectable.active:hover, +.download-button.selectable.table tr:hover td.active { + background: #E0E0E0 !important; + color: rgba(0, 0, 0, 0.87) !important; +} +.ui.selectable.table tr.positive:hover, +.ui.table tr td.selectable.positive:hover, +.ui.selectable.table tr:hover td.positive, +.play-button.selectable.table tr.positive:hover, +.play-button.table tr td.selectable.positive:hover, +.play-button.selectable.table tr:hover td.positive, +.download-button.selectable.table tr.positive:hover, +.download-button.table tr td.selectable.positive:hover, +.download-button.selectable.table tr:hover td.positive { + background: #f7ffe6 !important; + color: #275b28 !important; +} +.ui.selectable.table tr.negative:hover, +.ui.table tr td.selectable.negative:hover, +.ui.selectable.table tr:hover td.negative, +.play-button.selectable.table tr.negative:hover, +.play-button.table tr td.selectable.negative:hover, +.play-button.selectable.table tr:hover td.negative, +.download-button.selectable.table tr.negative:hover, +.download-button.table tr td.selectable.negative:hover, +.download-button.selectable.table tr:hover td.negative { + background: #ffe7e7 !important; + color: #943634 !important; +} +/*------------------- + Attached +--------------------*/ +/* Middle */ +.ui.attached.table, +.play-button.attached.table, +.download-button.attached.table { + top: 0px; + bottom: 0px; + border-radius: 0px; + margin: 0em -1px; + width: calc(100% + 2px ); + max-width: calc(100% + 2px ); + box-shadow: none; + border: 1px solid #D4D4D5; +} +.ui.attached + .ui.attached.table:not(.top), +.play-button.attached + .play-button.attached.table:not(.top), +.download-button.attached + .download-button.attached.table:not(.top) { + border-top: none; +} +/* Top */ +.ui[class*="top attached"].table, +.play-button[class*="top attached"].table, +.download-button[class*="top attached"].table { + bottom: 0px; + margin-bottom: 0em; + top: 0px; + margin-top: 1em; + border-radius: 0.28571429rem 0.28571429rem 0em 0em; +} +.ui.table[class*="top attached"]:first-child, +.play-button.table[class*="top attached"]:first-child, +.download-button.table[class*="top attached"]:first-child { + margin-top: 0em; +} +/* Bottom */ +.ui[class*="bottom attached"].table, +.play-button[class*="bottom attached"].table, +.download-button[class*="bottom attached"].table { + bottom: 0px; + margin-top: 0em; + top: 0px; + margin-bottom: 1em; + box-shadow: none, none; + border-radius: 0em 0em 0.28571429rem 0.28571429rem; +} +.ui[class*="bottom attached"].table:last-child, +.play-button[class*="bottom attached"].table:last-child, +.download-button[class*="bottom attached"].table:last-child { + margin-bottom: 0em; +} +/*-------------- + Striped +---------------*/ +/* Table Striping */ +.ui.striped.table > tr:nth-child(2n), +.ui.striped.table tbody tr:nth-child(2n), +.play-button.striped.table > tr:nth-child(2n), +.play-button.striped.table tbody tr:nth-child(2n), +.download-button.striped.table > tr:nth-child(2n), +.download-button.striped.table tbody tr:nth-child(2n) { + background-color: rgba(0, 0, 50, 0.02); +} +/* Stripes */ +.ui.inverted.striped.table > tr:nth-child(2n), +.ui.inverted.striped.table tbody tr:nth-child(2n), +.play-button.inverted.striped.table > tr:nth-child(2n), +.play-button.inverted.striped.table tbody tr:nth-child(2n), +.download-button.inverted.striped.table > tr:nth-child(2n), +.download-button.inverted.striped.table tbody tr:nth-child(2n) { + background-color: rgba(255, 255, 255, 0.05); +} +/* Allow striped active hover */ +.ui.striped.selectable.selectable.selectable.table tbody tr.active:hover, +.play-button.striped.selectable.selectable.selectable.table tbody tr.active:hover, +.download-button.striped.selectable.selectable.selectable.table tbody tr.active:hover { + background: #EFEFEF !important; + color: rgba(0, 0, 0, 0.95) !important; +} +/*-------------- + Single Line +---------------*/ +.ui.table[class*="single line"], +.ui.table [class*="single line"], +.play-button.table[class*="single line"], +.play-button.table [class*="single line"], +.download-button.table[class*="single line"], +.download-button.table [class*="single line"] { + white-space: nowrap; +} +.ui.table[class*="single line"], +.ui.table [class*="single line"], +.play-button.table[class*="single line"], +.play-button.table [class*="single line"], +.download-button.table[class*="single line"], +.download-button.table [class*="single line"] { + white-space: nowrap; +} +/*------------------- + Colors +--------------------*/ +/* Red */ +.ui.red.table, +.play-button.red.table, +.download-button.red.table { + border-top: 0.2em solid #E81123; +} +.ui.inverted.red.table, +.play-button.inverted.red.table, +.download-button.inverted.red.table { + background-color: #E81123 !important; + color: #FFFFFF !important; +} +/* Orange */ +.ui.orange.table, +.play-button.orange.table, +.download-button.orange.table { + border-top: 0.2em solid #DF4600; +} +.ui.inverted.orange.table, +.play-button.inverted.orange.table, +.download-button.inverted.orange.table { + background-color: #DF4600 !important; + color: #FFFFFF !important; +} +/* Yellow */ +.ui.yellow.table, +.play-button.yellow.table, +.download-button.yellow.table, +.ui.download-button.table { + border-top: 0.2em solid #F4C918; +} +.ui.inverted.yellow.table, +.play-button.inverted.yellow.table, +.download-button.inverted.yellow.table, +.ui.inverted.download-button.table { + background-color: #F4C918 !important; + color: #FFFFFF !important; +} +/* Olive */ +.ui.olive.table, +.play-button.olive.table, +.download-button.olive.table { + border-top: 0.2em solid #B5CC18; +} +.ui.inverted.olive.table, +.play-button.inverted.olive.table, +.download-button.inverted.olive.table { + background-color: #B5CC18 !important; + color: #FFFFFF !important; +} +/* Green */ +.ui.green.table, +.ui.ui.button.getting-started-btn.table, +.play-button.green.table, +.download-button.green.table, +.ui.play-button.button.getting-started-btn.table, +.ui.ui.play-button.getting-started-btn.table, +.ui.download-button.button.getting-started-btn.table, +.ui.ui.download-button.getting-started-btn.table { + border-top: 0.2em solid #3FC863; +} +.ui.inverted.green.table, +.ui.inverted.ui.button.getting-started-btn.table, +.play-button.inverted.green.table, +.download-button.inverted.green.table, +.ui.inverted.play-button.button.getting-started-btn.table, +.ui.inverted.ui.play-button.getting-started-btn.table, +.ui.inverted.download-button.button.getting-started-btn.table, +.ui.inverted.ui.download-button.getting-started-btn.table { + background-color: #3FC863 !important; + color: #FFFFFF !important; +} +/* Teal */ +.ui.teal.table, +.play-button.teal.table, +.download-button.teal.table { + border-top: 0.2em solid #008272; +} +.ui.inverted.teal.table, +.play-button.inverted.teal.table, +.download-button.inverted.teal.table { + background-color: #008272 !important; + color: #FFFFFF !important; +} +/* Blue */ +.ui.blue.table, +.play-button.blue.table, +.ui.play-button.table, +.download-button.blue.table { + border-top: 0.2em solid #54C9C9; +} +.ui.inverted.blue.table, +.play-button.inverted.blue.table, +.ui.inverted.play-button.table, +.download-button.inverted.blue.table { + background-color: #54C9C9 !important; + color: #FFFFFF !important; +} +/* Violet */ +.ui.violet.table, +.play-button.violet.table, +.download-button.violet.table { + border-top: 0.2em solid #C90072; +} +.ui.inverted.violet.table, +.play-button.inverted.violet.table, +.download-button.inverted.violet.table { + background-color: #C90072 !important; + color: #FFFFFF !important; +} +/* Purple */ +.ui.purple.table, +.play-button.purple.table, +.download-button.purple.table { + border-top: 0.2em solid #8169E6; +} +.ui.inverted.purple.table, +.play-button.inverted.purple.table, +.download-button.inverted.purple.table { + background-color: #8169E6 !important; + color: #FFFFFF !important; +} +/* Pink */ +.ui.pink.table, +.play-button.pink.table, +.download-button.pink.table { + border-top: 0.2em solid #E2008C; +} +.ui.inverted.pink.table, +.play-button.inverted.pink.table, +.download-button.inverted.pink.table { + background-color: #E2008C !important; + color: #FFFFFF !important; +} +/* Brown */ +.ui.brown.table, +.play-button.brown.table, +.download-button.brown.table { + border-top: 0.2em solid #6B5B4C; +} +.ui.inverted.brown.table, +.play-button.inverted.brown.table, +.download-button.inverted.brown.table { + background-color: #6B5B4C !important; + color: #FFFFFF !important; +} +/* Grey */ +.ui.grey.table, +.ui.ui.button.editortools-btn.table, +.play-button.grey.table, +.download-button.grey.table, +.ui.play-button.button.editortools-btn.table, +.ui.ui.play-button.editortools-btn.table, +.ui.download-button.button.editortools-btn.table, +.ui.ui.download-button.editortools-btn.table { + border-top: 0.2em solid #42495F; +} +.ui.inverted.grey.table, +.ui.inverted.ui.button.editortools-btn.table, +.play-button.inverted.grey.table, +.download-button.inverted.grey.table, +.ui.inverted.play-button.button.editortools-btn.table, +.ui.inverted.ui.play-button.editortools-btn.table, +.ui.inverted.download-button.button.editortools-btn.table, +.ui.inverted.ui.download-button.editortools-btn.table { + background-color: #42495F !important; + color: #FFFFFF !important; +} +/* Black */ +.ui.black.table, +.play-button.black.table, +.download-button.black.table { + border-top: 0.2em solid #1B1C1D; +} +.ui.inverted.black.table, +.play-button.inverted.black.table, +.download-button.inverted.black.table { + background-color: #1B1C1D !important; + color: #FFFFFF !important; +} +/*-------------- + Column Count +---------------*/ +/* Grid Based */ +.ui.one.column.table td, +.play-button.one.column.table td, +.download-button.one.column.table td { + width: 100%; +} +.ui.two.column.table td, +.play-button.two.column.table td, +.download-button.two.column.table td { + width: 50%; +} +.ui.three.column.table td, +.play-button.three.column.table td, +.download-button.three.column.table td { + width: 33.33333333%; +} +.ui.four.column.table td, +.play-button.four.column.table td, +.download-button.four.column.table td { + width: 25%; +} +.ui.five.column.table td, +.play-button.five.column.table td, +.download-button.five.column.table td { + width: 20%; +} +.ui.six.column.table td, +.play-button.six.column.table td, +.download-button.six.column.table td { + width: 16.66666667%; +} +.ui.seven.column.table td, +.play-button.seven.column.table td, +.download-button.seven.column.table td { + width: 14.28571429%; +} +.ui.eight.column.table td, +.play-button.eight.column.table td, +.download-button.eight.column.table td { + width: 12.5%; +} +.ui.nine.column.table td, +.play-button.nine.column.table td, +.download-button.nine.column.table td { + width: 11.11111111%; +} +.ui.ten.column.table td, +.play-button.ten.column.table td, +.download-button.ten.column.table td { + width: 10%; +} +.ui.eleven.column.table td, +.play-button.eleven.column.table td, +.download-button.eleven.column.table td { + width: 9.09090909%; +} +.ui.twelve.column.table td, +.play-button.twelve.column.table td, +.download-button.twelve.column.table td { + width: 8.33333333%; +} +.ui.thirteen.column.table td, +.play-button.thirteen.column.table td, +.download-button.thirteen.column.table td { + width: 7.69230769%; +} +.ui.fourteen.column.table td, +.play-button.fourteen.column.table td, +.download-button.fourteen.column.table td { + width: 7.14285714%; +} +.ui.fifteen.column.table td, +.play-button.fifteen.column.table td, +.download-button.fifteen.column.table td { + width: 6.66666667%; +} +.ui.sixteen.column.table td, +.play-button.sixteen.column.table td, +.download-button.sixteen.column.table td { + width: 6.25%; +} +/* Column Width */ +.ui.table th.one.wide, +.ui.table td.one.wide, +.play-button.table th.one.wide, +.play-button.table td.one.wide, +.download-button.table th.one.wide, +.download-button.table td.one.wide { + width: 6.25%; +} +.ui.table th.two.wide, +.ui.table td.two.wide, +.play-button.table th.two.wide, +.play-button.table td.two.wide, +.download-button.table th.two.wide, +.download-button.table td.two.wide { + width: 12.5%; +} +.ui.table th.three.wide, +.ui.table td.three.wide, +.play-button.table th.three.wide, +.play-button.table td.three.wide, +.download-button.table th.three.wide, +.download-button.table td.three.wide { + width: 18.75%; +} +.ui.table th.four.wide, +.ui.table td.four.wide, +.play-button.table th.four.wide, +.play-button.table td.four.wide, +.download-button.table th.four.wide, +.download-button.table td.four.wide { + width: 25%; +} +.ui.table th.five.wide, +.ui.table td.five.wide, +.play-button.table th.five.wide, +.play-button.table td.five.wide, +.download-button.table th.five.wide, +.download-button.table td.five.wide { + width: 31.25%; +} +.ui.table th.six.wide, +.ui.table td.six.wide, +.play-button.table th.six.wide, +.play-button.table td.six.wide, +.download-button.table th.six.wide, +.download-button.table td.six.wide { + width: 37.5%; +} +.ui.table th.seven.wide, +.ui.table td.seven.wide, +.play-button.table th.seven.wide, +.play-button.table td.seven.wide, +.download-button.table th.seven.wide, +.download-button.table td.seven.wide { + width: 43.75%; +} +.ui.table th.eight.wide, +.ui.table td.eight.wide, +.play-button.table th.eight.wide, +.play-button.table td.eight.wide, +.download-button.table th.eight.wide, +.download-button.table td.eight.wide { + width: 50%; +} +.ui.table th.nine.wide, +.ui.table td.nine.wide, +.play-button.table th.nine.wide, +.play-button.table td.nine.wide, +.download-button.table th.nine.wide, +.download-button.table td.nine.wide { + width: 56.25%; +} +.ui.table th.ten.wide, +.ui.table td.ten.wide, +.play-button.table th.ten.wide, +.play-button.table td.ten.wide, +.download-button.table th.ten.wide, +.download-button.table td.ten.wide { + width: 62.5%; +} +.ui.table th.eleven.wide, +.ui.table td.eleven.wide, +.play-button.table th.eleven.wide, +.play-button.table td.eleven.wide, +.download-button.table th.eleven.wide, +.download-button.table td.eleven.wide { + width: 68.75%; +} +.ui.table th.twelve.wide, +.ui.table td.twelve.wide, +.play-button.table th.twelve.wide, +.play-button.table td.twelve.wide, +.download-button.table th.twelve.wide, +.download-button.table td.twelve.wide { + width: 75%; +} +.ui.table th.thirteen.wide, +.ui.table td.thirteen.wide, +.play-button.table th.thirteen.wide, +.play-button.table td.thirteen.wide, +.download-button.table th.thirteen.wide, +.download-button.table td.thirteen.wide { + width: 81.25%; +} +.ui.table th.fourteen.wide, +.ui.table td.fourteen.wide, +.play-button.table th.fourteen.wide, +.play-button.table td.fourteen.wide, +.download-button.table th.fourteen.wide, +.download-button.table td.fourteen.wide { + width: 87.5%; +} +.ui.table th.fifteen.wide, +.ui.table td.fifteen.wide, +.play-button.table th.fifteen.wide, +.play-button.table td.fifteen.wide, +.download-button.table th.fifteen.wide, +.download-button.table td.fifteen.wide { + width: 93.75%; +} +.ui.table th.sixteen.wide, +.ui.table td.sixteen.wide, +.play-button.table th.sixteen.wide, +.play-button.table td.sixteen.wide, +.download-button.table th.sixteen.wide, +.download-button.table td.sixteen.wide { + width: 100%; +} +/*-------------- + Sortable +---------------*/ +.ui.sortable.table thead th, +.play-button.sortable.table thead th, +.download-button.sortable.table thead th { + cursor: pointer; + white-space: nowrap; + border-left: 1px solid rgba(34, 36, 38, 0.15); + color: rgba(0, 0, 0, 0.87); +} +.ui.sortable.table thead th:first-child, +.play-button.sortable.table thead th:first-child, +.download-button.sortable.table thead th:first-child { + border-left: none; +} +.ui.sortable.table thead th.sorted, +.ui.sortable.table thead th.sorted:hover, +.play-button.sortable.table thead th.sorted, +.play-button.sortable.table thead th.sorted:hover, +.download-button.sortable.table thead th.sorted, +.download-button.sortable.table thead th.sorted:hover { + user-select: none; +} +.ui.sortable.table thead th:after, +.play-button.sortable.table thead th:after, +.download-button.sortable.table thead th:after { + display: none; + font-style: normal; + font-weight: normal; + text-decoration: inherit; + content: ''; + height: 1em; + width: auto; + opacity: 0.8; + margin: 0em 0em 0em 0.5em; + font-family: 'Icons'; +} +.ui.sortable.table thead th.ascending:after, +.play-button.sortable.table thead th.ascending:after, +.download-button.sortable.table thead th.ascending:after { + content: '\f0d8'; +} +.ui.sortable.table thead th.descending:after, +.play-button.sortable.table thead th.descending:after, +.download-button.sortable.table thead th.descending:after { + content: '\f0d7'; +} +/* Hover */ +.ui.sortable.table th.disabled:hover, +.play-button.sortable.table th.disabled:hover, +.download-button.sortable.table th.disabled:hover { + cursor: auto; + color: rgba(40, 40, 40, 0.3); +} +.ui.sortable.table thead th:hover, +.play-button.sortable.table thead th:hover, +.download-button.sortable.table thead th:hover { + background: rgba(0, 0, 0, 0.05); + color: rgba(0, 0, 0, 0.8); +} +/* Sorted */ +.ui.sortable.table thead th.sorted, +.play-button.sortable.table thead th.sorted, +.download-button.sortable.table thead th.sorted { + background: rgba(0, 0, 0, 0.05); + color: rgba(0, 0, 0, 0.95); +} +.ui.sortable.table thead th.sorted:after, +.play-button.sortable.table thead th.sorted:after, +.download-button.sortable.table thead th.sorted:after { + display: inline-block; +} +/* Sorted Hover */ +.ui.sortable.table thead th.sorted:hover, +.play-button.sortable.table thead th.sorted:hover, +.download-button.sortable.table thead th.sorted:hover { + background: rgba(0, 0, 0, 0.05); + color: rgba(0, 0, 0, 0.95); +} +/* Inverted */ +.ui.inverted.sortable.table thead th.sorted, +.play-button.inverted.sortable.table thead th.sorted, +.download-button.inverted.sortable.table thead th.sorted { + background: rgba(255, 255, 255, 0.15) linear-gradient(transparent, rgba(0, 0, 0, 0.05)); + color: #ffffff; +} +.ui.inverted.sortable.table thead th:hover, +.play-button.inverted.sortable.table thead th:hover, +.download-button.inverted.sortable.table thead th:hover { + background: rgba(255, 255, 255, 0.08) linear-gradient(transparent, rgba(0, 0, 0, 0.05)); + color: #ffffff; +} +.ui.inverted.sortable.table thead th, +.play-button.inverted.sortable.table thead th, +.download-button.inverted.sortable.table thead th { + border-left-color: transparent; + border-right-color: transparent; +} +/*-------------- + Inverted +---------------*/ +/* Text Color */ +.ui.inverted.table, +.play-button.inverted.table, +.download-button.inverted.table { + background: #333333; + color: rgba(255, 255, 255, 0.9); + border: none; +} +.ui.inverted.table th, +.play-button.inverted.table th, +.download-button.inverted.table th { + background-color: rgba(0, 0, 0, 0.15); + border-color: rgba(255, 255, 255, 0.1) !important; + color: rgba(255, 255, 255, 0.9) !important; +} +.ui.inverted.table tr td, +.play-button.inverted.table tr td, +.download-button.inverted.table tr td { + border-color: rgba(255, 255, 255, 0.1) !important; +} +.ui.inverted.table tr.disabled td, +.ui.inverted.table tr td.disabled, +.ui.inverted.table tr.disabled:hover td, +.ui.inverted.table tr:hover td.disabled, +.play-button.inverted.table tr.disabled td, +.play-button.inverted.table tr td.disabled, +.play-button.inverted.table tr.disabled:hover td, +.play-button.inverted.table tr:hover td.disabled, +.download-button.inverted.table tr.disabled td, +.download-button.inverted.table tr td.disabled, +.download-button.inverted.table tr.disabled:hover td, +.download-button.inverted.table tr:hover td.disabled { + pointer-events: none; + color: rgba(225, 225, 225, 0.3); +} +/* Definition */ +.ui.inverted.definition.table tfoot:not(.full-width) th:first-child, +.ui.inverted.definition.table thead:not(.full-width) th:first-child, +.play-button.inverted.definition.table tfoot:not(.full-width) th:first-child, +.play-button.inverted.definition.table thead:not(.full-width) th:first-child, +.download-button.inverted.definition.table tfoot:not(.full-width) th:first-child, +.download-button.inverted.definition.table thead:not(.full-width) th:first-child { + background: #FFFFFF; +} +.ui.inverted.definition.table tr td:first-child, +.play-button.inverted.definition.table tr td:first-child, +.download-button.inverted.definition.table tr td:first-child { + background: rgba(255, 255, 255, 0.02); + color: #ffffff; +} +/*-------------- + Collapsing +---------------*/ +.ui.collapsing.table, +.play-button.collapsing.table, +.download-button.collapsing.table { + width: auto; +} +/*-------------- + Basic +---------------*/ +.ui.basic.table, +.play-button.basic.table, +.download-button.basic.table { + background: transparent; + border: 1px solid rgba(34, 36, 38, 0.15); + box-shadow: none; +} +.ui.basic.table thead, +.ui.basic.table tfoot, +.play-button.basic.table thead, +.play-button.basic.table tfoot, +.download-button.basic.table thead, +.download-button.basic.table tfoot { + box-shadow: none; +} +.ui.basic.table th, +.play-button.basic.table th, +.download-button.basic.table th { + background: transparent; + border-left: none; +} +.ui.basic.table tbody tr, +.play-button.basic.table tbody tr, +.download-button.basic.table tbody tr { + border-bottom: 1px solid rgba(0, 0, 0, 0.1); +} +.ui.basic.table td, +.play-button.basic.table td, +.download-button.basic.table td { + background: transparent; +} +.ui.basic.striped.table tbody tr:nth-child(2n), +.play-button.basic.striped.table tbody tr:nth-child(2n), +.download-button.basic.striped.table tbody tr:nth-child(2n) { + background-color: rgba(0, 0, 0, 0.05) !important; +} +/* Very Basic */ +.ui[class*="very basic"].table, +.play-button[class*="very basic"].table, +.download-button[class*="very basic"].table { + border: none; +} +.ui[class*="very basic"].table:not(.sortable):not(.striped) th, +.ui[class*="very basic"].table:not(.sortable):not(.striped) td, +.play-button[class*="very basic"].table:not(.sortable):not(.striped) th, +.play-button[class*="very basic"].table:not(.sortable):not(.striped) td, +.download-button[class*="very basic"].table:not(.sortable):not(.striped) th, +.download-button[class*="very basic"].table:not(.sortable):not(.striped) td { + padding: ''; +} +.ui[class*="very basic"].table:not(.sortable):not(.striped) th:first-child, +.ui[class*="very basic"].table:not(.sortable):not(.striped) td:first-child, +.play-button[class*="very basic"].table:not(.sortable):not(.striped) th:first-child, +.play-button[class*="very basic"].table:not(.sortable):not(.striped) td:first-child, +.download-button[class*="very basic"].table:not(.sortable):not(.striped) th:first-child, +.download-button[class*="very basic"].table:not(.sortable):not(.striped) td:first-child { + padding-left: 0em; +} +.ui[class*="very basic"].table:not(.sortable):not(.striped) th:last-child, +.ui[class*="very basic"].table:not(.sortable):not(.striped) td:last-child, +.play-button[class*="very basic"].table:not(.sortable):not(.striped) th:last-child, +.play-button[class*="very basic"].table:not(.sortable):not(.striped) td:last-child, +.download-button[class*="very basic"].table:not(.sortable):not(.striped) th:last-child, +.download-button[class*="very basic"].table:not(.sortable):not(.striped) td:last-child { + padding-right: 0em; +} +.ui[class*="very basic"].table:not(.sortable):not(.striped) thead tr:first-child th, +.play-button[class*="very basic"].table:not(.sortable):not(.striped) thead tr:first-child th, +.download-button[class*="very basic"].table:not(.sortable):not(.striped) thead tr:first-child th { + padding-top: 0em; +} +/*-------------- + Celled +---------------*/ +.ui.celled.table tr th, +.ui.celled.table tr td, +.play-button.celled.table tr th, +.play-button.celled.table tr td, +.download-button.celled.table tr th, +.download-button.celled.table tr td { + border-left: 1px solid rgba(34, 36, 38, 0.1); +} +.ui.celled.table tr th:first-child, +.ui.celled.table tr td:first-child, +.play-button.celled.table tr th:first-child, +.play-button.celled.table tr td:first-child, +.download-button.celled.table tr th:first-child, +.download-button.celled.table tr td:first-child { + border-left: none; +} +/*-------------- + Padded +---------------*/ +.ui.padded.table th, +.play-button.padded.table th, +.download-button.padded.table th { + padding-left: 1em; + padding-right: 1em; +} +.ui.padded.table th, +.ui.padded.table td, +.play-button.padded.table th, +.play-button.padded.table td, +.download-button.padded.table th, +.download-button.padded.table td { + padding: 1em 1em; +} +/* Very */ +.ui[class*="very padded"].table th, +.play-button[class*="very padded"].table th, +.download-button[class*="very padded"].table th { + padding-left: 1.5em; + padding-right: 1.5em; +} +.ui[class*="very padded"].table td, +.play-button[class*="very padded"].table td, +.download-button[class*="very padded"].table td { + padding: 1.5em 1.5em; +} +/*-------------- + Compact +---------------*/ +.ui.compact.table th, +.play-button.compact.table th, +.download-button.compact.table th { + padding-left: 0.7em; + padding-right: 0.7em; +} +.ui.compact.table td, +.play-button.compact.table td, +.download-button.compact.table td { + padding: 0.5em 0.7em; +} +/* Very */ +.ui[class*="very compact"].table th, +.play-button[class*="very compact"].table th, +.download-button[class*="very compact"].table th { + padding-left: 0.6em; + padding-right: 0.6em; +} +.ui[class*="very compact"].table td, +.play-button[class*="very compact"].table td, +.download-button[class*="very compact"].table td { + padding: 0.4em 0.6em; +} +/*-------------- + Sizes +---------------*/ +/* Small */ +.ui.small.table, +.play-button.small.table, +.download-button.small.table { + font-size: 0.9em; +} +/* Standard */ +.ui.table, +.play-button.table, +.download-button.table { + font-size: 1em; +} +/* Large */ +.ui.large.table, +.play-button.large.table, +.download-button.large.table { + font-size: 1.1em; +} +/******************************* + Site Overrides +*******************************/ +/* Views */ +/*! + * # Semantic UI - Ad + * http://github.com/semantic-org/semantic-ui/ + * + * + * Copyright 2013 Contributors + * Released under the MIT license + * http://opensource.org/licenses/MIT + * + */ +/******************************* + Theme +*******************************/ +/* + +████████╗██╗ ██╗███████╗███╗ ███╗███████╗███████╗ +╚══██╔══╝██║ ██║██╔════╝████╗ ████║██╔════╝██╔════╝ + ██║ ███████║█████╗ ██╔████╔██║█████╗ ███████╗ + ██║ ██╔══██║██╔══╝ ██║╚██╔╝██║██╔══╝ ╚════██║ + ██║ ██║ ██║███████╗██║ ╚═╝ ██║███████╗███████║ + ╚═╝ ╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝╚══════╝╚══════╝ + +*/ +/******************************* + Theme Selection +*******************************/ +/* To override a theme for an individual element + specify theme name below +*/ +/* Global */ +/* Elements */ +/* Collections */ +/* Modules */ +/* Views */ +/******************************* + Folders +*******************************/ +/* Path to theme packages */ +/* Path to site override folder */ +/******************************* + Import Theme +*******************************/ +/******************************* + Import Directives +*******************************/ +/*------------------ + Theme +-------------------*/ +/*-------------------- + Site Variables +---------------------*/ +/* Default site.variables */ +/******************************* + Site Settings +*******************************/ +/*------------------- + Fonts +--------------------*/ +/*------------------- + Base Sizes +--------------------*/ +/* This is the single variable that controls them all */ +/* The size of page text */ +/*------------------- + Border Radius +--------------------*/ +/* See Power-user section below + for explanation of @px variables +*/ +/*------------------- + Brand Colors +--------------------*/ +/*-------------- + Page Heading +---------------*/ +/*-------------- + Form Input +---------------*/ +/* This adjusts the default form input across all elements */ +/* Input Text Color */ +/* Line Height Default For Inputs in Browser (Descendors are 17px at 14px base em) */ +/*------------------- + Focused Input +--------------------*/ +/* Used on inputs, textarea etc */ +/* Used on dropdowns, other larger blocks */ +/*------------------- + Sizes +--------------------*/ +/* + Sizes are all expressed in terms of 14px/em (default em) + This ensures these "ratios" remain constant despite changes in EM +*/ +/*------------------- + Page +--------------------*/ +/*------------------- + Paragraph +--------------------*/ +/*------------------- + Links +--------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ +/*------------------- + Highlighted Text +--------------------*/ +/*------------------- + Loader +--------------------*/ +/*------------------- + Grid +--------------------*/ +/*------------------- + Transitions +--------------------*/ +/*------------------- + Breakpoints +--------------------*/ +/*------------------- + Site Colors +--------------------*/ +/*--- Colors ---*/ +/*--- Light Colors ---*/ +/*--- Neutrals ---*/ +/*--- Colored Backgrounds ---*/ +/*--- Colored Headers ---*/ +/*--- Colored Text ---*/ +/*--- Colored Border ---*/ +/*------------------- + Alpha Colors +--------------------*/ +/*------------------- + Accents +--------------------*/ +/* Differentiating Neutrals */ +/* Differentiating Layers */ +/******************************* + Power-User +*******************************/ +/*------------------- + Emotive Colors +--------------------*/ +/* Positive */ +/* Negative */ +/* Info */ +/* Warning */ +/*------------------- + Paths +--------------------*/ +/* For source only. Modified in gulp for dist */ +/*------------------- + Em Sizes +--------------------*/ +/* + This rounds @size values to the closest pixel then expresses that value in (r)em. + This ensures all size values round to exact pixels +*/ +/* em */ +/* rem */ +/*------------------- + Icons +--------------------*/ +/* Maximum Glyph Width of Icon */ +/*------------------- + Neutral Text +--------------------*/ +/*------------------- + Brand Colors +--------------------*/ +/*------------------- + Borders +--------------------*/ +/*------------------- + Derived Values +--------------------*/ +/* Loaders Position Offset */ +/* Rendered Scrollbar Width */ +/* Maximum Single Character Glyph Width, aka Capital "W" */ +/* Used to match floats with text */ +/* Header Spacing */ +/* Minimum Mobile Width */ +/* Positive / Negative Dupes */ +/* Responsive */ +/*------------------- + Exact Pixel Values +--------------------*/ +/* + These are used to specify exact pixel values in em + for things like borders that remain constantly + sized as emSize adjusts + + Since there are many more sizes than names for sizes, + these are named by their original pixel values. + +*/ +/* Columns */ +/******************************* + States +*******************************/ +/*------------------- + Disabled +--------------------*/ +/*------------------- + Hover +--------------------*/ +/*--- Shadows ---*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Focus +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Down (:active) +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Active +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/* Packaged site.variables */ +/******************************* + User Global Variables +*******************************/ +/*------------------- + Fonts +--------------------*/ +/*------------------- + Breakpoints +--------------------*/ +/* +@mobileBreakpoint : unit( (63 * @emSize), px); +@tabletBreakpoint : unit( (79 * @emSize), px); +@computerBreakpoint : unit( (91 * @emSize), px); +@largeMonitorBreakpoint : unit( (99 * @emSize), px); +@widescreenMonitorBreakpoint : unit( (119 * @emSize), px); +*/ +/******************************* + PXT Variables +*******************************/ +/*------------------- + Menu +--------------------*/ +/*------------------- + Layout +--------------------*/ +/*------------------- + Background +--------------------*/ +/*------------------- + Full screen +--------------------*/ +/*------------------- + Side Docs +--------------------*/ +/*------------------- + Editor +--------------------*/ +/* Component's site.variables */ +/******************************* + Site Settings +*******************************/ +/*------------------- + Fonts +--------------------*/ +/*------------------- + Base Sizes +--------------------*/ +/* This is the single variable that controls them all */ +/* The size of page text */ +/*------------------- + Border Radius +--------------------*/ +/* See Power-user section below + for explanation of @px variables +*/ +/*------------------- + Brand Colors +--------------------*/ +/*-------------- + Page Heading +---------------*/ +/*-------------- + Form Input +---------------*/ +/* This adjusts the default form input across all elements */ +/* Input Text Color */ +/* Line Height Default For Inputs in Browser (Descendors are 17px at 14px base em) */ +/*------------------- + Focused Input +--------------------*/ +/* Used on inputs, textarea etc */ +/* Used on dropdowns, other larger blocks */ +/*------------------- + Sizes +--------------------*/ +/* + Sizes are all expressed in terms of 14px/em (default em) + This ensures these "ratios" remain constant despite changes in EM +*/ +/*------------------- + Page +--------------------*/ +/*------------------- + Paragraph +--------------------*/ +/*------------------- + Links +--------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ +/*------------------- + Highlighted Text +--------------------*/ +/*------------------- + Loader +--------------------*/ +/*------------------- + Grid +--------------------*/ +/*------------------- + Transitions +--------------------*/ +/*------------------- + Breakpoints +--------------------*/ +/*------------------- + Site Colors +--------------------*/ +/*--- Colors ---*/ +/*--- Light Colors ---*/ +/*--- Neutrals ---*/ +/*--- Colored Backgrounds ---*/ +/*--- Colored Headers ---*/ +/*--- Colored Text ---*/ +/*--- Colored Border ---*/ +/*------------------- + Alpha Colors +--------------------*/ +/*------------------- + Accents +--------------------*/ +/* Differentiating Neutrals */ +/* Differentiating Layers */ +/******************************* + Power-User +*******************************/ +/*------------------- + Emotive Colors +--------------------*/ +/* Positive */ +/* Negative */ +/* Info */ +/* Warning */ +/*------------------- + Paths +--------------------*/ +/* For source only. Modified in gulp for dist */ +/*------------------- + Em Sizes +--------------------*/ +/* + This rounds @size values to the closest pixel then expresses that value in (r)em. + This ensures all size values round to exact pixels +*/ +/* em */ +/* rem */ +/*------------------- + Icons +--------------------*/ +/* Maximum Glyph Width of Icon */ +/*------------------- + Neutral Text +--------------------*/ +/*------------------- + Brand Colors +--------------------*/ +/*------------------- + Borders +--------------------*/ +/*------------------- + Derived Values +--------------------*/ +/* Loaders Position Offset */ +/* Rendered Scrollbar Width */ +/* Maximum Single Character Glyph Width, aka Capital "W" */ +/* Used to match floats with text */ +/* Header Spacing */ +/* Minimum Mobile Width */ +/* Positive / Negative Dupes */ +/* Responsive */ +/*------------------- + Exact Pixel Values +--------------------*/ +/* + These are used to specify exact pixel values in em + for things like borders that remain constantly + sized as emSize adjusts + + Since there are many more sizes than names for sizes, + these are named by their original pixel values. + +*/ +/* Columns */ +/******************************* + States +*******************************/ +/*------------------- + Disabled +--------------------*/ +/*------------------- + Hover +--------------------*/ +/*--- Shadows ---*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Focus +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Down (:active) +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Active +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/* Site theme site.variables */ +/******************************* + User Global Variables +*******************************/ +/*------------------- + Site Colors +--------------------*/ +/******************************* + PXT Overrides +*******************************/ +/*------------------- + Component Variables +---------------------*/ +/* Default */ +/******************************* + Advertisement +*******************************/ +/* Packaged Theme */ +/******************************* + Advertisement +*******************************/ +/* Site Theme */ +/******************************* + User Variable Overrides +*******************************/ +/******************************* + Mix-ins +*******************************/ +/*------------------ + Fonts +-------------------*/ +/*------------------ + Overrides +-------------------*/ +/* End Config */ +/******************************* + Advertisement +*******************************/ +.ui.ad, +.play-button.ad, +.download-button.ad { + display: block; + overflow: hidden; + margin: 1em 0em; +} +.ui.ad:first-child, +.play-button.ad:first-child, +.download-button.ad:first-child { + margin: 0em; +} +.ui.ad:last-child, +.play-button.ad:last-child, +.download-button.ad:last-child { + margin: 0em; +} +.ui.ad iframe, +.play-button.ad iframe, +.download-button.ad iframe { + margin: 0em; + padding: 0em; + border: none; + overflow: hidden; +} +/*-------------- + Common +---------------*/ +/* Leaderboard */ +.ui.leaderboard.ad, +.play-button.leaderboard.ad, +.download-button.leaderboard.ad { + width: 728px; + height: 90px; +} +/* Medium Rectangle */ +.ui[class*="medium rectangle"].ad, +.play-button[class*="medium rectangle"].ad, +.download-button[class*="medium rectangle"].ad { + width: 300px; + height: 250px; +} +/* Large Rectangle */ +.ui[class*="large rectangle"].ad, +.play-button[class*="large rectangle"].ad, +.download-button[class*="large rectangle"].ad { + width: 336px; + height: 280px; +} +/* Half Page */ +.ui[class*="half page"].ad, +.play-button[class*="half page"].ad, +.download-button[class*="half page"].ad { + width: 300px; + height: 600px; +} +/*-------------- + Square +---------------*/ +/* Square */ +.ui.square.ad, +.play-button.square.ad, +.download-button.square.ad { + width: 250px; + height: 250px; +} +/* Small Square */ +.ui[class*="small square"].ad, +.play-button[class*="small square"].ad, +.download-button[class*="small square"].ad { + width: 200px; + height: 200px; +} +/*-------------- + Rectangle +---------------*/ +/* Small Rectangle */ +.ui[class*="small rectangle"].ad, +.play-button[class*="small rectangle"].ad, +.download-button[class*="small rectangle"].ad { + width: 180px; + height: 150px; +} +/* Vertical Rectangle */ +.ui[class*="vertical rectangle"].ad, +.play-button[class*="vertical rectangle"].ad, +.download-button[class*="vertical rectangle"].ad { + width: 240px; + height: 400px; +} +/*-------------- + Button +---------------*/ +.ui.button.ad, +.play-button.button.ad, +.ui.play-button.ad, +.download-button.button.ad, +.ui.download-button.ad { + width: 120px; + height: 90px; +} +.ui[class*="square button"].ad, +.play-button[class*="square button"].ad, +.download-button[class*="square button"].ad { + width: 125px; + height: 125px; +} +.ui[class*="small button"].ad, +.play-button[class*="small button"].ad, +.download-button[class*="small button"].ad { + width: 120px; + height: 60px; +} +/*-------------- + Skyscrapers +---------------*/ +/* Skyscraper */ +.ui.skyscraper.ad, +.play-button.skyscraper.ad, +.download-button.skyscraper.ad { + width: 120px; + height: 600px; +} +/* Wide Skyscraper */ +.ui[class*="wide skyscraper"].ad, +.play-button[class*="wide skyscraper"].ad, +.download-button[class*="wide skyscraper"].ad { + width: 160px; +} +/*-------------- + Banners +---------------*/ +/* Banner */ +.ui.banner.ad, +.play-button.banner.ad, +.download-button.banner.ad { + width: 468px; + height: 60px; +} +/* Vertical Banner */ +.ui[class*="vertical banner"].ad, +.play-button[class*="vertical banner"].ad, +.download-button[class*="vertical banner"].ad { + width: 120px; + height: 240px; +} +/* Top Banner */ +.ui[class*="top banner"].ad, +.play-button[class*="top banner"].ad, +.download-button[class*="top banner"].ad { + width: 930px; + height: 180px; +} +/* Half Banner */ +.ui[class*="half banner"].ad, +.play-button[class*="half banner"].ad, +.download-button[class*="half banner"].ad { + width: 234px; + height: 60px; +} +/*-------------- + Boards +---------------*/ +/* Leaderboard */ +.ui[class*="large leaderboard"].ad, +.play-button[class*="large leaderboard"].ad, +.download-button[class*="large leaderboard"].ad { + width: 970px; + height: 90px; +} +/* Billboard */ +.ui.billboard.ad, +.play-button.billboard.ad, +.download-button.billboard.ad { + width: 970px; + height: 250px; +} +/*-------------- + Panorama +---------------*/ +/* Panorama */ +.ui.panorama.ad, +.play-button.panorama.ad, +.download-button.panorama.ad { + width: 980px; + height: 120px; +} +/*-------------- + Netboard +---------------*/ +/* Netboard */ +.ui.netboard.ad, +.play-button.netboard.ad, +.download-button.netboard.ad { + width: 580px; + height: 400px; +} +/*-------------- + Mobile +---------------*/ +/* Large Mobile Banner */ +.ui[class*="large mobile banner"].ad, +.play-button[class*="large mobile banner"].ad, +.download-button[class*="large mobile banner"].ad { + width: 320px; + height: 100px; +} +/* Mobile Leaderboard */ +.ui[class*="mobile leaderboard"].ad, +.play-button[class*="mobile leaderboard"].ad, +.download-button[class*="mobile leaderboard"].ad { + width: 320px; + height: 50px; +} +/******************************* + Types +*******************************/ +/* Mobile Sizes */ +.ui.mobile.ad, +.play-button.mobile.ad, +.download-button.mobile.ad { + display: none; +} +@media only screen and (max-width: 767px) { + .ui.mobile.ad, + .play-button.mobile.ad, + .download-button.mobile.ad { + display: block; + } +} +/******************************* + Variations +*******************************/ +.ui.centered.ad, +.play-button.centered.ad, +.download-button.centered.ad { + margin-left: auto; + margin-right: auto; +} +.ui.test.ad, +.play-button.test.ad, +.download-button.test.ad { + position: relative; + background: #545454; +} +.ui.test.ad:after, +.play-button.test.ad:after, +.download-button.test.ad:after { + position: absolute; + top: 50%; + left: 50%; + width: 100%; + text-align: center; + transform: translateX(-50%) translateY(-50%); + content: 'Ad'; + color: #FFFFFF; + font-size: 1em; + font-weight: bold; +} +.ui.mobile.test.ad:after, +.play-button.mobile.test.ad:after, +.download-button.mobile.test.ad:after { + font-size: 0.85714286em; +} +.ui.test.ad[data-text]:after, +.play-button.test.ad[data-text]:after, +.download-button.test.ad[data-text]:after { + content: attr(data-text); +} +/******************************* + Theme Overrides +*******************************/ +/******************************* + User Variable Overrides +*******************************/ +/*! + * # Semantic UI - Item + * http://github.com/semantic-org/semantic-ui/ + * + * + * Released under the MIT license + * http://opensource.org/licenses/MIT + * + */ +/******************************* + Theme +*******************************/ +/* + +████████╗██╗ ██╗███████╗███╗ ███╗███████╗███████╗ +╚══██╔══╝██║ ██║██╔════╝████╗ ████║██╔════╝██╔════╝ + ██║ ███████║█████╗ ██╔████╔██║█████╗ ███████╗ + ██║ ██╔══██║██╔══╝ ██║╚██╔╝██║██╔══╝ ╚════██║ + ██║ ██║ ██║███████╗██║ ╚═╝ ██║███████╗███████║ + ╚═╝ ╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝╚══════╝╚══════╝ + +*/ +/******************************* + Theme Selection +*******************************/ +/* To override a theme for an individual element + specify theme name below +*/ +/* Global */ +/* Elements */ +/* Collections */ +/* Modules */ +/* Views */ +/******************************* + Folders +*******************************/ +/* Path to theme packages */ +/* Path to site override folder */ +/******************************* + Import Theme +*******************************/ +/******************************* + Import Directives +*******************************/ +/*------------------ + Theme +-------------------*/ +/*-------------------- + Site Variables +---------------------*/ +/* Default site.variables */ +/******************************* + Site Settings +*******************************/ +/*------------------- + Fonts +--------------------*/ +/*------------------- + Base Sizes +--------------------*/ +/* This is the single variable that controls them all */ +/* The size of page text */ +/*------------------- + Border Radius +--------------------*/ +/* See Power-user section below + for explanation of @px variables +*/ +/*------------------- + Brand Colors +--------------------*/ +/*-------------- + Page Heading +---------------*/ +/*-------------- + Form Input +---------------*/ +/* This adjusts the default form input across all elements */ +/* Input Text Color */ +/* Line Height Default For Inputs in Browser (Descendors are 17px at 14px base em) */ +/*------------------- + Focused Input +--------------------*/ +/* Used on inputs, textarea etc */ +/* Used on dropdowns, other larger blocks */ +/*------------------- + Sizes +--------------------*/ +/* + Sizes are all expressed in terms of 14px/em (default em) + This ensures these "ratios" remain constant despite changes in EM +*/ +/*------------------- + Page +--------------------*/ +/*------------------- + Paragraph +--------------------*/ +/*------------------- + Links +--------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ +/*------------------- + Highlighted Text +--------------------*/ +/*------------------- + Loader +--------------------*/ +/*------------------- + Grid +--------------------*/ +/*------------------- + Transitions +--------------------*/ +/*------------------- + Breakpoints +--------------------*/ +/*------------------- + Site Colors +--------------------*/ +/*--- Colors ---*/ +/*--- Light Colors ---*/ +/*--- Neutrals ---*/ +/*--- Colored Backgrounds ---*/ +/*--- Colored Headers ---*/ +/*--- Colored Text ---*/ +/*--- Colored Border ---*/ +/*------------------- + Alpha Colors +--------------------*/ +/*------------------- + Accents +--------------------*/ +/* Differentiating Neutrals */ +/* Differentiating Layers */ +/******************************* + Power-User +*******************************/ +/*------------------- + Emotive Colors +--------------------*/ +/* Positive */ +/* Negative */ +/* Info */ +/* Warning */ +/*------------------- + Paths +--------------------*/ +/* For source only. Modified in gulp for dist */ +/*------------------- + Em Sizes +--------------------*/ +/* + This rounds @size values to the closest pixel then expresses that value in (r)em. + This ensures all size values round to exact pixels +*/ +/* em */ +/* rem */ +/*------------------- + Icons +--------------------*/ +/* Maximum Glyph Width of Icon */ +/*------------------- + Neutral Text +--------------------*/ +/*------------------- + Brand Colors +--------------------*/ +/*------------------- + Borders +--------------------*/ +/*------------------- + Derived Values +--------------------*/ +/* Loaders Position Offset */ +/* Rendered Scrollbar Width */ +/* Maximum Single Character Glyph Width, aka Capital "W" */ +/* Used to match floats with text */ +/* Header Spacing */ +/* Minimum Mobile Width */ +/* Positive / Negative Dupes */ +/* Responsive */ +/*------------------- + Exact Pixel Values +--------------------*/ +/* + These are used to specify exact pixel values in em + for things like borders that remain constantly + sized as emSize adjusts + + Since there are many more sizes than names for sizes, + these are named by their original pixel values. + +*/ +/* Columns */ +/******************************* + States +*******************************/ +/*------------------- + Disabled +--------------------*/ +/*------------------- + Hover +--------------------*/ +/*--- Shadows ---*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Focus +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Down (:active) +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Active +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/* Packaged site.variables */ +/******************************* + User Global Variables +*******************************/ +/*------------------- + Fonts +--------------------*/ +/*------------------- + Breakpoints +--------------------*/ +/* +@mobileBreakpoint : unit( (63 * @emSize), px); +@tabletBreakpoint : unit( (79 * @emSize), px); +@computerBreakpoint : unit( (91 * @emSize), px); +@largeMonitorBreakpoint : unit( (99 * @emSize), px); +@widescreenMonitorBreakpoint : unit( (119 * @emSize), px); +*/ +/******************************* + PXT Variables +*******************************/ +/*------------------- + Menu +--------------------*/ +/*------------------- + Layout +--------------------*/ +/*------------------- + Background +--------------------*/ +/*------------------- + Full screen +--------------------*/ +/*------------------- + Side Docs +--------------------*/ +/*------------------- + Editor +--------------------*/ +/* Component's site.variables */ +/******************************* + Site Settings +*******************************/ +/*------------------- + Fonts +--------------------*/ +/*------------------- + Base Sizes +--------------------*/ +/* This is the single variable that controls them all */ +/* The size of page text */ +/*------------------- + Border Radius +--------------------*/ +/* See Power-user section below + for explanation of @px variables +*/ +/*------------------- + Brand Colors +--------------------*/ +/*-------------- + Page Heading +---------------*/ +/*-------------- + Form Input +---------------*/ +/* This adjusts the default form input across all elements */ +/* Input Text Color */ +/* Line Height Default For Inputs in Browser (Descendors are 17px at 14px base em) */ +/*------------------- + Focused Input +--------------------*/ +/* Used on inputs, textarea etc */ +/* Used on dropdowns, other larger blocks */ +/*------------------- + Sizes +--------------------*/ +/* + Sizes are all expressed in terms of 14px/em (default em) + This ensures these "ratios" remain constant despite changes in EM +*/ +/*------------------- + Page +--------------------*/ +/*------------------- + Paragraph +--------------------*/ +/*------------------- + Links +--------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ +/*------------------- + Highlighted Text +--------------------*/ +/*------------------- + Loader +--------------------*/ +/*------------------- + Grid +--------------------*/ +/*------------------- + Transitions +--------------------*/ +/*------------------- + Breakpoints +--------------------*/ +/*------------------- + Site Colors +--------------------*/ +/*--- Colors ---*/ +/*--- Light Colors ---*/ +/*--- Neutrals ---*/ +/*--- Colored Backgrounds ---*/ +/*--- Colored Headers ---*/ +/*--- Colored Text ---*/ +/*--- Colored Border ---*/ +/*------------------- + Alpha Colors +--------------------*/ +/*------------------- + Accents +--------------------*/ +/* Differentiating Neutrals */ +/* Differentiating Layers */ +/******************************* + Power-User +*******************************/ +/*------------------- + Emotive Colors +--------------------*/ +/* Positive */ +/* Negative */ +/* Info */ +/* Warning */ +/*------------------- + Paths +--------------------*/ +/* For source only. Modified in gulp for dist */ +/*------------------- + Em Sizes +--------------------*/ +/* + This rounds @size values to the closest pixel then expresses that value in (r)em. + This ensures all size values round to exact pixels +*/ +/* em */ +/* rem */ +/*------------------- + Icons +--------------------*/ +/* Maximum Glyph Width of Icon */ +/*------------------- + Neutral Text +--------------------*/ +/*------------------- + Brand Colors +--------------------*/ +/*------------------- + Borders +--------------------*/ +/*------------------- + Derived Values +--------------------*/ +/* Loaders Position Offset */ +/* Rendered Scrollbar Width */ +/* Maximum Single Character Glyph Width, aka Capital "W" */ +/* Used to match floats with text */ +/* Header Spacing */ +/* Minimum Mobile Width */ +/* Positive / Negative Dupes */ +/* Responsive */ +/*------------------- + Exact Pixel Values +--------------------*/ +/* + These are used to specify exact pixel values in em + for things like borders that remain constantly + sized as emSize adjusts + + Since there are many more sizes than names for sizes, + these are named by their original pixel values. + +*/ +/* Columns */ +/******************************* + States +*******************************/ +/*------------------- + Disabled +--------------------*/ +/*------------------- + Hover +--------------------*/ +/*--- Shadows ---*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Focus +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Down (:active) +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Active +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/* Site theme site.variables */ +/******************************* + User Global Variables +*******************************/ +/*------------------- + Site Colors +--------------------*/ +/******************************* + PXT Overrides +*******************************/ +/*------------------- + Component Variables +---------------------*/ +/* Default */ +/******************************* + Card +*******************************/ +/*------------------- + View +--------------------*/ +/* Shadow */ +/* Card */ +/* Card Group */ +/* Consecutive Cards */ +/*------------------- + Content +--------------------*/ +/* Image */ +/* Content */ +/* Header */ +/* Metadata */ +/* Icons */ +/* Links */ +/* Description */ +/* Content Image */ +/* Avatar Image */ +/* Paragraph */ +/* Dimmer */ +/* Additional Content */ +/* Extra Links */ +/* Buttons */ +/*------------------- + Variations +--------------------*/ +/* Link */ +/* Raised */ +/* Card Count */ +/* Stackable */ +/* Sizes */ +/* Colored */ +/* Packaged Theme */ +/******************************* + Card +*******************************/ +/*------------------- + View +--------------------*/ +/* Shadow */ +/* Card */ +/* Card Group */ +/* Consecutive Cards */ +/*------------------- + Content +--------------------*/ +/* Image */ +/* Content */ +/* Header */ +/* Metadata */ +/* Icons */ +/* Links */ +/* Description */ +/* Content Image */ +/* Avatar Image */ +/* Paragraph */ +/* Dimmer */ +/* Additional Content */ +/* Extra Links */ +/* Buttons */ +/*------------------- + Variations +--------------------*/ +/* Link */ +/* Raised */ +/* Card Count */ +/* Stackable */ +/* Sizes */ +/* Colored */ +/* Site Theme */ +/******************************* + User Variable Overrides +*******************************/ +/******************************* + Mix-ins +*******************************/ +/*------------------ + Fonts +-------------------*/ +/*------------------ + Overrides +-------------------*/ +/* End Config */ +/******************************* + Standard +*******************************/ +/*-------------- + Card +---------------*/ +.ui.cards > .card, +.ui.card, +.play-button.cards > .card, +.play-button.card, +.download-button.cards > .card, +.download-button.card { + max-width: 100%; + position: relative; + display: flex; + flex-direction: column; + width: 290px; + min-height: 0px; + background: #FFFFFF; + padding: 0em; + border: none; + border-radius: 0.28571429rem; + box-shadow: 0px 1px 3px 0px #D4D4D5, 0px 0px 0px 1px #D4D4D5; + transition: box-shadow 0.1s ease, transform 0.1s ease; + z-index: ''; +} +.ui.card, +.play-button.card, +.download-button.card { + margin: 1em 0em; +} +.ui.cards > .card a, +.ui.card a, +.play-button.cards > .card a, +.play-button.card a, +.download-button.cards > .card a, +.download-button.card a { + cursor: pointer; +} +.ui.card:first-child, +.play-button.card:first-child, +.download-button.card:first-child { + margin-top: 0em; +} +.ui.card:last-child, +.play-button.card:last-child, +.download-button.card:last-child { + margin-bottom: 0em; +} +/*-------------- + Cards +---------------*/ +.ui.cards, +.play-button.cards, +.download-button.cards { + display: flex; + margin: -0.875em -0.5em; + flex-wrap: wrap; +} +.ui.cards > .card, +.play-button.cards > .card, +.download-button.cards > .card { + display: flex; + margin: 0.875em 0.5em; + float: none; +} +/* Clearing */ +.ui.cards:after, +.ui.card:after, +.play-button.cards:after, +.play-button.card:after, +.download-button.cards:after, +.download-button.card:after { + display: block; + content: ' '; + height: 0px; + clear: both; + overflow: hidden; + visibility: hidden; +} +/* Consecutive Card Groups Preserve Row Spacing */ +.ui.cards ~ .ui.cards, +.play-button.cards ~ .play-button.cards, +.download-button.cards ~ .download-button.cards { + margin-top: 0.875em; +} +/*-------------- + Rounded Edges +---------------*/ +.ui.cards > .card > :first-child, +.ui.card > :first-child, +.play-button.cards > .card > :first-child, +.play-button.card > :first-child, +.download-button.cards > .card > :first-child, +.download-button.card > :first-child { + border-radius: 0.28571429rem 0.28571429rem 0em 0em !important; + border-top: none !important; +} +.ui.cards > .card > :last-child, +.ui.card > :last-child, +.play-button.cards > .card > :last-child, +.play-button.card > :last-child, +.download-button.cards > .card > :last-child, +.download-button.card > :last-child { + border-radius: 0em 0em 0.28571429rem 0.28571429rem !important; +} +.ui.cards > .card > :only-child, +.ui.card > :only-child, +.play-button.cards > .card > :only-child, +.play-button.card > :only-child, +.download-button.cards > .card > :only-child, +.download-button.card > :only-child { + border-radius: 0.28571429rem !important; +} +/*-------------- + Images +---------------*/ +.ui.cards > .card > .image, +.ui.card > .image, +.play-button.cards > .card > .image, +.play-button.card > .image, +.download-button.cards > .card > .image, +.download-button.card > .image { + position: relative; + display: block; + flex: 0 0 auto; + padding: 0em; + background: rgba(0, 0, 0, 0.05); +} +.ui.cards > .card > .image > img, +.ui.card > .image > img, +.play-button.cards > .card > .image > img, +.play-button.card > .image > img, +.download-button.cards > .card > .image > img, +.download-button.card > .image > img { + display: block; + width: 100%; + height: auto; + border-radius: inherit; +} +.ui.cards > .card > .image:not(.ui) > img, +.ui.card > .image:not(.ui) > img, +.play-button.cards > .card > .image:not(.ui) > img, +.play-button.card > .image:not(.ui) > img, +.download-button.cards > .card > .image:not(.ui) > img, +.download-button.card > .image:not(.ui) > img { + border: none; +} +/*-------------- + Content +---------------*/ +.ui.cards > .card > .content, +.ui.card > .content, +.play-button.cards > .card > .content, +.play-button.card > .content, +.download-button.cards > .card > .content, +.download-button.card > .content { + flex-grow: 1; + border: none; + border-top: 1px solid rgba(34, 36, 38, 0.1); + background: none; + margin: 0em; + padding: 1em 1em; + box-shadow: none; + font-size: 1em; + border-radius: 0em; +} +.ui.cards > .card > .content:after, +.ui.card > .content:after, +.play-button.cards > .card > .content:after, +.play-button.card > .content:after, +.download-button.cards > .card > .content:after, +.download-button.card > .content:after { + display: block; + content: ' '; + height: 0px; + clear: both; + overflow: hidden; + visibility: hidden; +} +.ui.cards > .card > .content > .header, +.ui.card > .content > .header, +.play-button.cards > .card > .content > .header, +.play-button.card > .content > .header, +.download-button.cards > .card > .content > .header, +.download-button.card > .content > .header { + display: block; + margin: ''; + font-family: 'Roboto Mono', 'Helvetica Neue', Arial, Helvetica, sans-serif; + color: rgba(0, 0, 0, 0.85); +} +/* Default Header Size */ +.ui.cards > .card > .content > .header:not(.ui), +.ui.card > .content > .header:not(.ui), +.play-button.cards > .card > .content > .header:not(.ui), +.play-button.card > .content > .header:not(.ui), +.download-button.cards > .card > .content > .header:not(.ui), +.download-button.card > .content > .header:not(.ui) { + font-weight: bold; + font-size: 1.28571429em; + margin-top: -0.21425em; + line-height: 1.28571429em; +} +.ui.cards > .card > .content > .meta + .description, +.ui.cards > .card > .content > .header + .description, +.ui.card > .content > .meta + .description, +.ui.card > .content > .header + .description, +.play-button.cards > .card > .content > .meta + .description, +.play-button.cards > .card > .content > .header + .description, +.play-button.card > .content > .meta + .description, +.play-button.card > .content > .header + .description, +.download-button.cards > .card > .content > .meta + .description, +.download-button.cards > .card > .content > .header + .description, +.download-button.card > .content > .meta + .description, +.download-button.card > .content > .header + .description { + margin-top: 0.5em; +} +/*---------------- + Floated Content +-----------------*/ +.ui.cards > .card [class*="left floated"], +.ui.card [class*="left floated"], +.play-button.cards > .card [class*="left floated"], +.play-button.card [class*="left floated"], +.download-button.cards > .card [class*="left floated"], +.download-button.card [class*="left floated"] { + float: left; +} +.ui.cards > .card [class*="right floated"], +.ui.card [class*="right floated"], +.play-button.cards > .card [class*="right floated"], +.play-button.card [class*="right floated"], +.download-button.cards > .card [class*="right floated"], +.download-button.card [class*="right floated"] { + float: right; +} +/*-------------- + Aligned +---------------*/ +.ui.cards > .card [class*="left aligned"], +.ui.card [class*="left aligned"], +.play-button.cards > .card [class*="left aligned"], +.play-button.card [class*="left aligned"], +.download-button.cards > .card [class*="left aligned"], +.download-button.card [class*="left aligned"] { + text-align: left; +} +.ui.cards > .card [class*="center aligned"], +.ui.card [class*="center aligned"], +.play-button.cards > .card [class*="center aligned"], +.play-button.card [class*="center aligned"], +.download-button.cards > .card [class*="center aligned"], +.download-button.card [class*="center aligned"] { + text-align: center; +} +.ui.cards > .card [class*="right aligned"], +.ui.card [class*="right aligned"], +.play-button.cards > .card [class*="right aligned"], +.play-button.card [class*="right aligned"], +.download-button.cards > .card [class*="right aligned"], +.download-button.card [class*="right aligned"] { + text-align: right; +} +/*-------------- + Content Image +---------------*/ +.ui.cards > .card .content img, +.ui.card .content img, +.play-button.cards > .card .content img, +.play-button.card .content img, +.download-button.cards > .card .content img, +.download-button.card .content img { + display: inline-block; + vertical-align: middle; + width: ''; +} +.ui.cards > .card img.avatar, +.ui.cards > .card .avatar img, +.ui.card img.avatar, +.ui.card .avatar img, +.play-button.cards > .card img.avatar, +.play-button.cards > .card .avatar img, +.play-button.card img.avatar, +.play-button.card .avatar img, +.download-button.cards > .card img.avatar, +.download-button.cards > .card .avatar img, +.download-button.card img.avatar, +.download-button.card .avatar img { + width: 2em; + height: 2em; + border-radius: 500rem; +} +/*-------------- + Description +---------------*/ +.ui.cards > .card > .content > .description, +.ui.card > .content > .description, +.play-button.cards > .card > .content > .description, +.play-button.card > .content > .description, +.download-button.cards > .card > .content > .description, +.download-button.card > .content > .description { + clear: both; + color: rgba(0, 0, 0, 0.68); +} +/*-------------- + Paragraph +---------------*/ +.ui.cards > .card > .content p, +.ui.card > .content p, +.play-button.cards > .card > .content p, +.play-button.card > .content p, +.download-button.cards > .card > .content p, +.download-button.card > .content p { + margin: 0em 0em 0.5em; +} +.ui.cards > .card > .content p:last-child, +.ui.card > .content p:last-child, +.play-button.cards > .card > .content p:last-child, +.play-button.card > .content p:last-child, +.download-button.cards > .card > .content p:last-child, +.download-button.card > .content p:last-child { + margin-bottom: 0em; +} +/*-------------- + Meta +---------------*/ +.ui.cards > .card .meta, +.ui.card .meta, +.play-button.cards > .card .meta, +.play-button.card .meta, +.download-button.cards > .card .meta, +.download-button.card .meta { + font-size: 1em; + color: rgba(0, 0, 0, 0.4); +} +.ui.cards > .card .meta *, +.ui.card .meta *, +.play-button.cards > .card .meta *, +.play-button.card .meta *, +.download-button.cards > .card .meta *, +.download-button.card .meta * { + margin-right: 0.3em; +} +.ui.cards > .card .meta :last-child, +.ui.card .meta :last-child, +.play-button.cards > .card .meta :last-child, +.play-button.card .meta :last-child, +.download-button.cards > .card .meta :last-child, +.download-button.card .meta :last-child { + margin-right: 0em; +} +.ui.cards > .card .meta [class*="right floated"], +.ui.card .meta [class*="right floated"], +.play-button.cards > .card .meta [class*="right floated"], +.play-button.card .meta [class*="right floated"], +.download-button.cards > .card .meta [class*="right floated"], +.download-button.card .meta [class*="right floated"] { + margin-right: 0em; + margin-left: 0.3em; +} +/*-------------- + Links +---------------*/ +/* Generic */ +.ui.cards > .card > .content a:not(.ui), +.ui.card > .content a:not(.ui), +.play-button.cards > .card > .content a:not(.ui), +.play-button.card > .content a:not(.ui), +.download-button.cards > .card > .content a:not(.ui), +.download-button.card > .content a:not(.ui) { + color: ''; + transition: color 0.1s ease; +} +.ui.cards > .card > .content a:not(.ui):hover, +.ui.card > .content a:not(.ui):hover, +.play-button.cards > .card > .content a:not(.ui):hover, +.play-button.card > .content a:not(.ui):hover, +.download-button.cards > .card > .content a:not(.ui):hover, +.download-button.card > .content a:not(.ui):hover { + color: ''; +} +/* Header */ +.ui.cards > .card > .content > a.header, +.ui.card > .content > a.header, +.play-button.cards > .card > .content > a.header, +.play-button.card > .content > a.header, +.download-button.cards > .card > .content > a.header, +.download-button.card > .content > a.header { + color: rgba(0, 0, 0, 0.85); +} +.ui.cards > .card > .content > a.header:hover, +.ui.card > .content > a.header:hover, +.play-button.cards > .card > .content > a.header:hover, +.play-button.card > .content > a.header:hover, +.download-button.cards > .card > .content > a.header:hover, +.download-button.card > .content > a.header:hover { + color: #1e70bf; +} +/* Meta */ +.ui.cards > .card .meta > a:not(.ui), +.ui.card .meta > a:not(.ui), +.play-button.cards > .card .meta > a:not(.ui), +.play-button.card .meta > a:not(.ui), +.download-button.cards > .card .meta > a:not(.ui), +.download-button.card .meta > a:not(.ui) { + color: rgba(0, 0, 0, 0.4); +} +.ui.cards > .card .meta > a:not(.ui):hover, +.ui.card .meta > a:not(.ui):hover, +.play-button.cards > .card .meta > a:not(.ui):hover, +.play-button.card .meta > a:not(.ui):hover, +.download-button.cards > .card .meta > a:not(.ui):hover, +.download-button.card .meta > a:not(.ui):hover { + color: rgba(0, 0, 0, 0.87); +} +/*-------------- + Buttons +---------------*/ +.ui.cards > .card > .buttons, +.ui.card > .buttons, +.ui.cards > .card > .button, +.ui.card > .button, +.play-button.cards > .card > .buttons, +.play-button.card > .buttons, +.play-button.cards > .card > .button, +.play-button.card > .button, +.ui.cards > .card > .play-button, +.ui.card > .play-button, +.download-button.cards > .card > .buttons, +.download-button.card > .buttons, +.download-button.cards > .card > .button, +.download-button.card > .button, +.ui.cards > .card > .download-button, +.ui.card > .download-button { + margin: 0px -1px; + width: calc(100% + 2px ); +} +/*-------------- + Dimmer +---------------*/ +.ui.cards > .card .dimmer, +.ui.card .dimmer, +.play-button.cards > .card .dimmer, +.play-button.card .dimmer, +.download-button.cards > .card .dimmer, +.download-button.card .dimmer { + background-color: ''; + z-index: 10; +} +/*-------------- + Labels +---------------*/ +/*-----Star----- */ +/* Icon */ +.ui.cards > .card > .content .star.icon, +.ui.card > .content .star.icon, +.play-button.cards > .card > .content .star.icon, +.play-button.card > .content .star.icon, +.download-button.cards > .card > .content .star.icon, +.download-button.card > .content .star.icon { + cursor: pointer; + opacity: 0.75; + transition: color 0.1s ease; +} +.ui.cards > .card > .content .star.icon:hover, +.ui.card > .content .star.icon:hover, +.play-button.cards > .card > .content .star.icon:hover, +.play-button.card > .content .star.icon:hover, +.download-button.cards > .card > .content .star.icon:hover, +.download-button.card > .content .star.icon:hover { + opacity: 1; + color: #FFB70A; +} +.ui.cards > .card > .content .active.star.icon, +.ui.card > .content .active.star.icon, +.play-button.cards > .card > .content .active.star.icon, +.play-button.card > .content .active.star.icon, +.download-button.cards > .card > .content .active.star.icon, +.download-button.card > .content .active.star.icon { + color: #FFE623; +} +/*-----Like----- */ +/* Icon */ +.ui.cards > .card > .content .like.icon, +.ui.card > .content .like.icon, +.play-button.cards > .card > .content .like.icon, +.play-button.card > .content .like.icon, +.download-button.cards > .card > .content .like.icon, +.download-button.card > .content .like.icon { + cursor: pointer; + opacity: 0.75; + transition: color 0.1s ease; +} +.ui.cards > .card > .content .like.icon:hover, +.ui.card > .content .like.icon:hover, +.play-button.cards > .card > .content .like.icon:hover, +.play-button.card > .content .like.icon:hover, +.download-button.cards > .card > .content .like.icon:hover, +.download-button.card > .content .like.icon:hover { + opacity: 1; + color: #FF2733; +} +.ui.cards > .card > .content .active.like.icon, +.ui.card > .content .active.like.icon, +.play-button.cards > .card > .content .active.like.icon, +.play-button.card > .content .active.like.icon, +.download-button.cards > .card > .content .active.like.icon, +.download-button.card > .content .active.like.icon { + color: #FF2733; +} +/*---------------- + Extra Content +-----------------*/ +.ui.cards > .card > .extra, +.ui.card > .extra, +.play-button.cards > .card > .extra, +.play-button.card > .extra, +.download-button.cards > .card > .extra, +.download-button.card > .extra { + max-width: 100%; + min-height: 0em !important; + flex-grow: 0; + border-top: 1px solid rgba(0, 0, 0, 0.05) !important; + position: static; + background: none; + width: auto; + margin: 0em 0em; + padding: 0.75em 1em; + top: 0em; + left: 0em; + color: rgba(0, 0, 0, 0.4); + box-shadow: none; + transition: color 0.1s ease; +} +.ui.cards > .card > .extra a:not(.ui), +.ui.card > .extra a:not(.ui), +.play-button.cards > .card > .extra a:not(.ui), +.play-button.card > .extra a:not(.ui), +.download-button.cards > .card > .extra a:not(.ui), +.download-button.card > .extra a:not(.ui) { + color: rgba(0, 0, 0, 0.4); +} +.ui.cards > .card > .extra a:not(.ui):hover, +.ui.card > .extra a:not(.ui):hover, +.play-button.cards > .card > .extra a:not(.ui):hover, +.play-button.card > .extra a:not(.ui):hover, +.download-button.cards > .card > .extra a:not(.ui):hover, +.download-button.card > .extra a:not(.ui):hover { + color: #1e70bf; +} +/******************************* + Variations +*******************************/ +/*------------------- + Raised +--------------------*/ +.ui.raised.cards > .card, +.ui.raised.card, +.play-button.raised.cards > .card, +.play-button.raised.card, +.download-button.raised.cards > .card, +.download-button.raised.card { + box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 4px 0px rgba(34, 36, 38, 0.12), 0px 2px 10px 0px rgba(34, 36, 38, 0.15); +} +.ui.raised.cards a.card:hover, +.ui.link.cards .raised.card:hover, +a.ui.raised.card:hover, +.ui.link.raised.card:hover, +.play-button.raised.cards a.card:hover, +.play-button.link.cards .raised.card:hover, +a.play-button.raised.card:hover, +.play-button.link.raised.card:hover, +.download-button.raised.cards a.card:hover, +.download-button.link.cards .raised.card:hover, +a.download-button.raised.card:hover, +.download-button.link.raised.card:hover { + box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 4px 0px rgba(34, 36, 38, 0.15), 0px 2px 10px 0px rgba(34, 36, 38, 0.25); +} +.ui.raised.cards > .card, +.ui.raised.card, +.play-button.raised.cards > .card, +.play-button.raised.card, +.download-button.raised.cards > .card, +.download-button.raised.card { + box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 4px 0px rgba(34, 36, 38, 0.12), 0px 2px 10px 0px rgba(34, 36, 38, 0.15); +} +/*------------------- + Centered +--------------------*/ +.ui.centered.cards, +.play-button.centered.cards, +.download-button.centered.cards { + justify-content: center; +} +.ui.centered.card, +.play-button.centered.card, +.download-button.centered.card { + margin-left: auto; + margin-right: auto; +} +/*------------------- + Fluid +--------------------*/ +.ui.fluid.card, +.play-button.fluid.card, +.download-button.fluid.card { + width: 100%; + max-width: 9999px; +} +/*------------------- + Link +--------------------*/ +.ui.cards a.card, +.ui.link.cards .card, +a.ui.card, +.ui.link.card, +.play-button.cards a.card, +.play-button.link.cards .card, +a.play-button.card, +.play-button.link.card, +.download-button.cards a.card, +.download-button.link.cards .card, +a.download-button.card, +.download-button.link.card { + transform: none; +} +.ui.cards a.card:hover, +.ui.link.cards .card:hover, +a.ui.card:hover, +.ui.link.card:hover, +.play-button.cards a.card:hover, +.play-button.link.cards .card:hover, +a.play-button.card:hover, +.play-button.link.card:hover, +.download-button.cards a.card:hover, +.download-button.link.cards .card:hover, +a.download-button.card:hover, +.download-button.link.card:hover { + cursor: pointer; + z-index: 5; + background: #FFFFFF; + border: none; + box-shadow: 0px 1px 3px 0px #BCBDBD, 0px 0px 0px 1px #D4D4D5; + transform: translateY(-3px); +} +/*------------------- + Colors +--------------------*/ +/* Red */ +.ui.red.cards > .card, +.ui.cards > .red.card, +.ui.red.card, +.play-button.red.cards > .card, +.play-button.cards > .red.card, +.play-button.red.card, +.download-button.red.cards > .card, +.download-button.cards > .red.card, +.download-button.red.card { + box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #E81123, 0px 1px 3px 0px #D4D4D5; +} +.ui.red.cards > .card:hover, +.ui.cards > .red.card:hover, +.ui.red.card:hover, +.play-button.red.cards > .card:hover, +.play-button.cards > .red.card:hover, +.play-button.red.card:hover, +.download-button.red.cards > .card:hover, +.download-button.cards > .red.card:hover, +.download-button.red.card:hover { + box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #da0617, 0px 1px 3px 0px #BCBDBD; +} +/* Orange */ +.ui.orange.cards > .card, +.ui.cards > .orange.card, +.ui.orange.card, +.play-button.orange.cards > .card, +.play-button.cards > .orange.card, +.play-button.orange.card, +.download-button.orange.cards > .card, +.download-button.cards > .orange.card, +.download-button.orange.card { + box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #DF4600, 0px 1px 3px 0px #D4D4D5; +} +.ui.orange.cards > .card:hover, +.ui.cards > .orange.card:hover, +.ui.orange.card:hover, +.play-button.orange.cards > .card:hover, +.play-button.cards > .orange.card:hover, +.play-button.orange.card:hover, +.download-button.orange.cards > .card:hover, +.download-button.cards > .orange.card:hover, +.download-button.orange.card:hover { + box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #c63e00, 0px 1px 3px 0px #BCBDBD; +} +/* Yellow */ +.ui.yellow.cards > .card, +.ui.cards > .yellow.card, +.ui.yellow.card, +.play-button.yellow.cards > .card, +.play-button.cards > .yellow.card, +.play-button.yellow.card, +.download-button.yellow.cards > .card, +.download-button.cards > .yellow.card, +.download-button.yellow.card, +.ui.download-button.cards > .card, +.ui.cards > .download-button.card, +.ui.download-button.card { + box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #F4C918, 0px 1px 3px 0px #D4D4D5; +} +.ui.yellow.cards > .card:hover, +.ui.cards > .yellow.card:hover, +.ui.yellow.card:hover, +.play-button.yellow.cards > .card:hover, +.play-button.cards > .yellow.card:hover, +.play-button.yellow.card:hover, +.download-button.yellow.cards > .card:hover, +.download-button.cards > .yellow.card:hover, +.download-button.yellow.card:hover, +.ui.download-button.cards > .card:hover, +.ui.cards > .download-button.card:hover, +.ui.download-button.card:hover { + box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #f3c300, 0px 1px 3px 0px #BCBDBD; +} +/* Olive */ +.ui.olive.cards > .card, +.ui.cards > .olive.card, +.ui.olive.card, +.play-button.olive.cards > .card, +.play-button.cards > .olive.card, +.play-button.olive.card, +.download-button.olive.cards > .card, +.download-button.cards > .olive.card, +.download-button.olive.card { + box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #B5CC18, 0px 1px 3px 0px #D4D4D5; +} +.ui.olive.cards > .card:hover, +.ui.cards > .olive.card:hover, +.ui.olive.card:hover, +.play-button.olive.cards > .card:hover, +.play-button.cards > .olive.card:hover, +.play-button.olive.card:hover, +.download-button.olive.cards > .card:hover, +.download-button.cards > .olive.card:hover, +.download-button.olive.card:hover { + box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #a7bd0d, 0px 1px 3px 0px #BCBDBD; +} +/* Green */ +.ui.green.cards > .card, +.ui.cards > .green.card, +.ui.green.card, +.ui.ui.button.getting-started-btn.cards > .card, +.ui.cards > .ui.button.getting-started-btn.card, +.ui.ui.button.getting-started-btn.card, +.play-button.green.cards > .card, +.play-button.cards > .green.card, +.play-button.green.card, +.download-button.green.cards > .card, +.download-button.cards > .green.card, +.download-button.green.card, +.ui.play-button.button.getting-started-btn.cards > .card, +.ui.cards > .play-button.button.getting-started-btn.card, +.ui.play-button.button.getting-started-btn.card, +.ui.ui.play-button.getting-started-btn.cards > .card, +.ui.cards > .ui.play-button.getting-started-btn.card, +.ui.ui.play-button.getting-started-btn.card, +.ui.download-button.button.getting-started-btn.cards > .card, +.ui.cards > .download-button.button.getting-started-btn.card, +.ui.download-button.button.getting-started-btn.card, +.ui.ui.download-button.getting-started-btn.cards > .card, +.ui.cards > .ui.download-button.getting-started-btn.card, +.ui.ui.download-button.getting-started-btn.card { + box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #3FC863, 0px 1px 3px 0px #D4D4D5; +} +.ui.green.cards > .card:hover, +.ui.cards > .green.card:hover, +.ui.green.card:hover, +.ui.ui.button.getting-started-btn.cards > .card:hover, +.ui.cards > .ui.button.getting-started-btn.card:hover, +.ui.ui.button.getting-started-btn.card:hover, +.play-button.green.cards > .card:hover, +.play-button.cards > .green.card:hover, +.play-button.green.card:hover, +.download-button.green.cards > .card:hover, +.download-button.cards > .green.card:hover, +.download-button.green.card:hover, +.ui.play-button.button.getting-started-btn.cards > .card:hover, +.ui.cards > .play-button.button.getting-started-btn.card:hover, +.ui.play-button.button.getting-started-btn.card:hover, +.ui.ui.play-button.getting-started-btn.cards > .card:hover, +.ui.cards > .ui.play-button.getting-started-btn.card:hover, +.ui.ui.play-button.getting-started-btn.card:hover, +.ui.download-button.button.getting-started-btn.cards > .card:hover, +.ui.cards > .download-button.button.getting-started-btn.card:hover, +.ui.download-button.button.getting-started-btn.card:hover, +.ui.ui.download-button.getting-started-btn.cards > .card:hover, +.ui.cards > .ui.download-button.getting-started-btn.card:hover, +.ui.ui.download-button.getting-started-btn.card:hover { + box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #2ebf54, 0px 1px 3px 0px #BCBDBD; +} +/* Teal */ +.ui.teal.cards > .card, +.ui.cards > .teal.card, +.ui.teal.card, +.play-button.teal.cards > .card, +.play-button.cards > .teal.card, +.play-button.teal.card, +.download-button.teal.cards > .card, +.download-button.cards > .teal.card, +.download-button.teal.card { + box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #008272, 0px 1px 3px 0px #D4D4D5; +} +.ui.teal.cards > .card:hover, +.ui.cards > .teal.card:hover, +.ui.teal.card:hover, +.play-button.teal.cards > .card:hover, +.play-button.cards > .teal.card:hover, +.play-button.teal.card:hover, +.download-button.teal.cards > .card:hover, +.download-button.cards > .teal.card:hover, +.download-button.teal.card:hover { + box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #00695c, 0px 1px 3px 0px #BCBDBD; +} +/* Blue */ +.ui.blue.cards > .card, +.ui.cards > .blue.card, +.ui.blue.card, +.play-button.blue.cards > .card, +.play-button.cards > .blue.card, +.play-button.blue.card, +.ui.play-button.cards > .card, +.ui.cards > .play-button.card, +.ui.play-button.card, +.download-button.blue.cards > .card, +.download-button.cards > .blue.card, +.download-button.blue.card { + box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #54C9C9, 0px 1px 3px 0px #D4D4D5; +} +.ui.blue.cards > .card:hover, +.ui.cards > .blue.card:hover, +.ui.blue.card:hover, +.play-button.blue.cards > .card:hover, +.play-button.cards > .blue.card:hover, +.play-button.blue.card:hover, +.ui.play-button.cards > .card:hover, +.ui.cards > .play-button.card:hover, +.ui.play-button.card:hover, +.download-button.blue.cards > .card:hover, +.download-button.cards > .blue.card:hover, +.download-button.blue.card:hover { + box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #3ac9c9, 0px 1px 3px 0px #BCBDBD; +} +/* Violet */ +.ui.violet.cards > .card, +.ui.cards > .violet.card, +.ui.violet.card, +.play-button.violet.cards > .card, +.play-button.cards > .violet.card, +.play-button.violet.card, +.download-button.violet.cards > .card, +.download-button.cards > .violet.card, +.download-button.violet.card { + box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #C90072, 0px 1px 3px 0px #D4D4D5; +} +.ui.violet.cards > .card:hover, +.ui.cards > .violet.card:hover, +.ui.violet.card:hover, +.play-button.violet.cards > .card:hover, +.play-button.cards > .violet.card:hover, +.play-button.violet.card:hover, +.download-button.violet.cards > .card:hover, +.download-button.cards > .violet.card:hover, +.download-button.violet.card:hover { + box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #b00064, 0px 1px 3px 0px #BCBDBD; +} +/* Purple */ +.ui.purple.cards > .card, +.ui.cards > .purple.card, +.ui.purple.card, +.play-button.purple.cards > .card, +.play-button.cards > .purple.card, +.play-button.purple.card, +.download-button.purple.cards > .card, +.download-button.cards > .purple.card, +.download-button.purple.card { + box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #8169E6, 0px 1px 3px 0px #D4D4D5; +} +.ui.purple.cards > .card:hover, +.ui.cards > .purple.card:hover, +.ui.purple.card:hover, +.play-button.purple.cards > .card:hover, +.play-button.cards > .purple.card:hover, +.play-button.purple.card:hover, +.download-button.purple.cards > .card:hover, +.download-button.cards > .purple.card:hover, +.download-button.purple.card:hover { + box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #6a4cea, 0px 1px 3px 0px #BCBDBD; +} +/* Pink */ +.ui.pink.cards > .card, +.ui.cards > .pink.card, +.ui.pink.card, +.play-button.pink.cards > .card, +.play-button.cards > .pink.card, +.play-button.pink.card, +.download-button.pink.cards > .card, +.download-button.cards > .pink.card, +.download-button.pink.card { + box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #E2008C, 0px 1px 3px 0px #D4D4D5; +} +.ui.pink.cards > .card:hover, +.ui.cards > .pink.card:hover, +.ui.pink.card:hover, +.play-button.pink.cards > .card:hover, +.play-button.cards > .pink.card:hover, +.play-button.pink.card:hover, +.download-button.pink.cards > .card:hover, +.download-button.cards > .pink.card:hover, +.download-button.pink.card:hover { + box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #c9007c, 0px 1px 3px 0px #BCBDBD; +} +/* Brown */ +.ui.brown.cards > .card, +.ui.cards > .brown.card, +.ui.brown.card, +.play-button.brown.cards > .card, +.play-button.cards > .brown.card, +.play-button.brown.card, +.download-button.brown.cards > .card, +.download-button.cards > .brown.card, +.download-button.brown.card { + box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #6B5B4C, 0px 1px 3px 0px #D4D4D5; +} +.ui.brown.cards > .card:hover, +.ui.cards > .brown.card:hover, +.ui.brown.card:hover, +.play-button.brown.cards > .card:hover, +.play-button.cards > .brown.card:hover, +.play-button.brown.card:hover, +.download-button.brown.cards > .card:hover, +.download-button.cards > .brown.card:hover, +.download-button.brown.card:hover { + box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #5d4e40, 0px 1px 3px 0px #BCBDBD; +} +/* Grey */ +.ui.grey.cards > .card, +.ui.cards > .grey.card, +.ui.grey.card, +.ui.ui.button.editortools-btn.cards > .card, +.ui.cards > .ui.button.editortools-btn.card, +.ui.ui.button.editortools-btn.card, +.play-button.grey.cards > .card, +.play-button.cards > .grey.card, +.play-button.grey.card, +.download-button.grey.cards > .card, +.download-button.cards > .grey.card, +.download-button.grey.card, +.ui.play-button.button.editortools-btn.cards > .card, +.ui.cards > .play-button.button.editortools-btn.card, +.ui.play-button.button.editortools-btn.card, +.ui.ui.play-button.editortools-btn.cards > .card, +.ui.cards > .ui.play-button.editortools-btn.card, +.ui.ui.play-button.editortools-btn.card, +.ui.download-button.button.editortools-btn.cards > .card, +.ui.cards > .download-button.button.editortools-btn.card, +.ui.download-button.button.editortools-btn.card, +.ui.ui.download-button.editortools-btn.cards > .card, +.ui.cards > .ui.download-button.editortools-btn.card, +.ui.ui.download-button.editortools-btn.card { + box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #42495F, 0px 1px 3px 0px #D4D4D5; +} +.ui.grey.cards > .card:hover, +.ui.cards > .grey.card:hover, +.ui.grey.card:hover, +.ui.ui.button.editortools-btn.cards > .card:hover, +.ui.cards > .ui.button.editortools-btn.card:hover, +.ui.ui.button.editortools-btn.card:hover, +.play-button.grey.cards > .card:hover, +.play-button.cards > .grey.card:hover, +.play-button.grey.card:hover, +.download-button.grey.cards > .card:hover, +.download-button.cards > .grey.card:hover, +.download-button.grey.card:hover, +.ui.play-button.button.editortools-btn.cards > .card:hover, +.ui.cards > .play-button.button.editortools-btn.card:hover, +.ui.play-button.button.editortools-btn.card:hover, +.ui.ui.play-button.editortools-btn.cards > .card:hover, +.ui.cards > .ui.play-button.editortools-btn.card:hover, +.ui.ui.play-button.editortools-btn.card:hover, +.ui.download-button.button.editortools-btn.cards > .card:hover, +.ui.cards > .download-button.button.editortools-btn.card:hover, +.ui.download-button.button.editortools-btn.card:hover, +.ui.ui.download-button.editortools-btn.cards > .card:hover, +.ui.cards > .ui.download-button.editortools-btn.card:hover, +.ui.ui.download-button.editortools-btn.card:hover { + box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #4c556e, 0px 1px 3px 0px #BCBDBD; +} +/* Black */ +.ui.black.cards > .card, +.ui.cards > .black.card, +.ui.black.card, +.play-button.black.cards > .card, +.play-button.cards > .black.card, +.play-button.black.card, +.download-button.black.cards > .card, +.download-button.cards > .black.card, +.download-button.black.card { + box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #1B1C1D, 0px 1px 3px 0px #D4D4D5; +} +.ui.black.cards > .card:hover, +.ui.cards > .black.card:hover, +.ui.black.card:hover, +.play-button.black.cards > .card:hover, +.play-button.cards > .black.card:hover, +.play-button.black.card:hover, +.download-button.black.cards > .card:hover, +.download-button.cards > .black.card:hover, +.download-button.black.card:hover { + box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #27292a, 0px 1px 3px 0px #BCBDBD; +} +/*-------------- + Card Count +---------------*/ +.ui.one.cards, +.play-button.one.cards, +.download-button.one.cards { + margin-left: 0em; + margin-right: 0em; +} +.ui.one.cards > .card, +.play-button.one.cards > .card, +.download-button.one.cards > .card { + width: 100%; +} +.ui.two.cards, +.play-button.two.cards, +.download-button.two.cards { + margin-left: -1em; + margin-right: -1em; +} +.ui.two.cards > .card, +.play-button.two.cards > .card, +.download-button.two.cards > .card { + width: calc( 50% - 2em ); + margin-left: 1em; + margin-right: 1em; +} +.ui.three.cards, +.play-button.three.cards, +.download-button.three.cards { + margin-left: -1em; + margin-right: -1em; +} +.ui.three.cards > .card, +.play-button.three.cards > .card, +.download-button.three.cards > .card { + width: calc( 33.33333333% - 2em ); + margin-left: 1em; + margin-right: 1em; +} +.ui.four.cards, +.play-button.four.cards, +.download-button.four.cards { + margin-left: -0.75em; + margin-right: -0.75em; +} +.ui.four.cards > .card, +.play-button.four.cards > .card, +.download-button.four.cards > .card { + width: calc( 25% - 1.5em ); + margin-left: 0.75em; + margin-right: 0.75em; +} +.ui.five.cards, +.play-button.five.cards, +.download-button.five.cards { + margin-left: -0.75em; + margin-right: -0.75em; +} +.ui.five.cards > .card, +.play-button.five.cards > .card, +.download-button.five.cards > .card { + width: calc( 20% - 1.5em ); + margin-left: 0.75em; + margin-right: 0.75em; +} +.ui.six.cards, +.play-button.six.cards, +.download-button.six.cards { + margin-left: -0.75em; + margin-right: -0.75em; +} +.ui.six.cards > .card, +.play-button.six.cards > .card, +.download-button.six.cards > .card { + width: calc( 16.66666667% - 1.5em ); + margin-left: 0.75em; + margin-right: 0.75em; +} +.ui.seven.cards, +.play-button.seven.cards, +.download-button.seven.cards { + margin-left: -0.5em; + margin-right: -0.5em; +} +.ui.seven.cards > .card, +.play-button.seven.cards > .card, +.download-button.seven.cards > .card { + width: calc( 14.28571429% - 1em ); + margin-left: 0.5em; + margin-right: 0.5em; +} +.ui.eight.cards, +.play-button.eight.cards, +.download-button.eight.cards { + margin-left: -0.5em; + margin-right: -0.5em; +} +.ui.eight.cards > .card, +.play-button.eight.cards > .card, +.download-button.eight.cards > .card { + width: calc( 12.5% - 1em ); + margin-left: 0.5em; + margin-right: 0.5em; + font-size: 11px; +} +.ui.nine.cards, +.play-button.nine.cards, +.download-button.nine.cards { + margin-left: -0.5em; + margin-right: -0.5em; +} +.ui.nine.cards > .card, +.play-button.nine.cards > .card, +.download-button.nine.cards > .card { + width: calc( 11.11111111% - 1em ); + margin-left: 0.5em; + margin-right: 0.5em; + font-size: 10px; +} +.ui.ten.cards, +.play-button.ten.cards, +.download-button.ten.cards { + margin-left: -0.5em; + margin-right: -0.5em; +} +.ui.ten.cards > .card, +.play-button.ten.cards > .card, +.download-button.ten.cards > .card { + width: calc( 10% - 1em ); + margin-left: 0.5em; + margin-right: 0.5em; +} +/*------------------- + Doubling +--------------------*/ +/* Mobile Only */ +@media only screen and (max-width: 767px) { + .ui.two.doubling.cards, + .play-button.two.doubling.cards, + .download-button.two.doubling.cards { + margin-left: 0em; + margin-right: 0em; + } + .ui.two.doubling.cards > .card, + .play-button.two.doubling.cards > .card, + .download-button.two.doubling.cards > .card { + width: 100%; + margin-left: 0em; + margin-right: 0em; + } + .ui.three.doubling.cards, + .play-button.three.doubling.cards, + .download-button.three.doubling.cards { + margin-left: -1em; + margin-right: -1em; + } + .ui.three.doubling.cards > .card, + .play-button.three.doubling.cards > .card, + .download-button.three.doubling.cards > .card { + width: calc( 50% - 2em ); + margin-left: 1em; + margin-right: 1em; + } + .ui.four.doubling.cards, + .play-button.four.doubling.cards, + .download-button.four.doubling.cards { + margin-left: -1em; + margin-right: -1em; + } + .ui.four.doubling.cards > .card, + .play-button.four.doubling.cards > .card, + .download-button.four.doubling.cards > .card { + width: calc( 50% - 2em ); + margin-left: 1em; + margin-right: 1em; + } + .ui.five.doubling.cards, + .play-button.five.doubling.cards, + .download-button.five.doubling.cards { + margin-left: -1em; + margin-right: -1em; + } + .ui.five.doubling.cards > .card, + .play-button.five.doubling.cards > .card, + .download-button.five.doubling.cards > .card { + width: calc( 50% - 2em ); + margin-left: 1em; + margin-right: 1em; + } + .ui.six.doubling.cards, + .play-button.six.doubling.cards, + .download-button.six.doubling.cards { + margin-left: -1em; + margin-right: -1em; + } + .ui.six.doubling.cards > .card, + .play-button.six.doubling.cards > .card, + .download-button.six.doubling.cards > .card { + width: calc( 50% - 2em ); + margin-left: 1em; + margin-right: 1em; + } + .ui.seven.doubling.cards, + .play-button.seven.doubling.cards, + .download-button.seven.doubling.cards { + margin-left: -1em; + margin-right: -1em; + } + .ui.seven.doubling.cards > .card, + .play-button.seven.doubling.cards > .card, + .download-button.seven.doubling.cards > .card { + width: calc( 33.33333333% - 2em ); + margin-left: 1em; + margin-right: 1em; + } + .ui.eight.doubling.cards, + .play-button.eight.doubling.cards, + .download-button.eight.doubling.cards { + margin-left: -1em; + margin-right: -1em; + } + .ui.eight.doubling.cards > .card, + .play-button.eight.doubling.cards > .card, + .download-button.eight.doubling.cards > .card { + width: calc( 33.33333333% - 2em ); + margin-left: 1em; + margin-right: 1em; + } + .ui.nine.doubling.cards, + .play-button.nine.doubling.cards, + .download-button.nine.doubling.cards { + margin-left: -1em; + margin-right: -1em; + } + .ui.nine.doubling.cards > .card, + .play-button.nine.doubling.cards > .card, + .download-button.nine.doubling.cards > .card { + width: calc( 33.33333333% - 2em ); + margin-left: 1em; + margin-right: 1em; + } + .ui.ten.doubling.cards, + .play-button.ten.doubling.cards, + .download-button.ten.doubling.cards { + margin-left: -1em; + margin-right: -1em; + } + .ui.ten.doubling.cards > .card, + .play-button.ten.doubling.cards > .card, + .download-button.ten.doubling.cards > .card { + width: calc( 33.33333333% - 2em ); + margin-left: 1em; + margin-right: 1em; + } +} +/* Tablet Only */ +@media only screen and (min-width: 768px) and (max-width: 991px) { + .ui.two.doubling.cards, + .play-button.two.doubling.cards, + .download-button.two.doubling.cards { + margin-left: 0em; + margin-right: 0em; + } + .ui.two.doubling.cards > .card, + .play-button.two.doubling.cards > .card, + .download-button.two.doubling.cards > .card { + width: 100%; + margin-left: 0em; + margin-right: 0em; + } + .ui.three.doubling.cards, + .play-button.three.doubling.cards, + .download-button.three.doubling.cards { + margin-left: -1em; + margin-right: -1em; + } + .ui.three.doubling.cards > .card, + .play-button.three.doubling.cards > .card, + .download-button.three.doubling.cards > .card { + width: calc( 50% - 2em ); + margin-left: 1em; + margin-right: 1em; + } + .ui.four.doubling.cards, + .play-button.four.doubling.cards, + .download-button.four.doubling.cards { + margin-left: -1em; + margin-right: -1em; + } + .ui.four.doubling.cards > .card, + .play-button.four.doubling.cards > .card, + .download-button.four.doubling.cards > .card { + width: calc( 50% - 2em ); + margin-left: 1em; + margin-right: 1em; + } + .ui.five.doubling.cards, + .play-button.five.doubling.cards, + .download-button.five.doubling.cards { + margin-left: -1em; + margin-right: -1em; + } + .ui.five.doubling.cards > .card, + .play-button.five.doubling.cards > .card, + .download-button.five.doubling.cards > .card { + width: calc( 33.33333333% - 2em ); + margin-left: 1em; + margin-right: 1em; + } + .ui.six.doubling.cards, + .play-button.six.doubling.cards, + .download-button.six.doubling.cards { + margin-left: -1em; + margin-right: -1em; + } + .ui.six.doubling.cards > .card, + .play-button.six.doubling.cards > .card, + .download-button.six.doubling.cards > .card { + width: calc( 33.33333333% - 2em ); + margin-left: 1em; + margin-right: 1em; + } + .ui.eight.doubling.cards, + .play-button.eight.doubling.cards, + .download-button.eight.doubling.cards { + margin-left: -1em; + margin-right: -1em; + } + .ui.eight.doubling.cards > .card, + .play-button.eight.doubling.cards > .card, + .download-button.eight.doubling.cards > .card { + width: calc( 33.33333333% - 2em ); + margin-left: 1em; + margin-right: 1em; + } + .ui.eight.doubling.cards, + .play-button.eight.doubling.cards, + .download-button.eight.doubling.cards { + margin-left: -0.75em; + margin-right: -0.75em; + } + .ui.eight.doubling.cards > .card, + .play-button.eight.doubling.cards > .card, + .download-button.eight.doubling.cards > .card { + width: calc( 25% - 1.5em ); + margin-left: 0.75em; + margin-right: 0.75em; + } + .ui.nine.doubling.cards, + .play-button.nine.doubling.cards, + .download-button.nine.doubling.cards { + margin-left: -0.75em; + margin-right: -0.75em; + } + .ui.nine.doubling.cards > .card, + .play-button.nine.doubling.cards > .card, + .download-button.nine.doubling.cards > .card { + width: calc( 25% - 1.5em ); + margin-left: 0.75em; + margin-right: 0.75em; + } + .ui.ten.doubling.cards, + .play-button.ten.doubling.cards, + .download-button.ten.doubling.cards { + margin-left: -0.75em; + margin-right: -0.75em; + } + .ui.ten.doubling.cards > .card, + .play-button.ten.doubling.cards > .card, + .download-button.ten.doubling.cards > .card { + width: calc( 20% - 1.5em ); + margin-left: 0.75em; + margin-right: 0.75em; + } +} +/*------------------- + Stackable +--------------------*/ +@media only screen and (max-width: 767px) { + .ui.stackable.cards, + .play-button.stackable.cards, + .download-button.stackable.cards { + display: block !important; + } + .ui.stackable.cards .card:first-child, + .play-button.stackable.cards .card:first-child, + .download-button.stackable.cards .card:first-child { + margin-top: 0em !important; + } + .ui.stackable.cards > .card, + .play-button.stackable.cards > .card, + .download-button.stackable.cards > .card { + display: block !important; + height: auto !important; + margin: 1em 1em; + padding: 0 !important; + width: calc( 100% - 2em ) !important; + } +} +/*-------------- + Size +---------------*/ +.ui.cards > .card, +.play-button.cards > .card, +.download-button.cards > .card { + font-size: 1em; +} +/******************************* + Theme Overrides +*******************************/ +/******************************* + User Variable Overrides +*******************************/ +/*! + * # Semantic UI - Comment + * http://github.com/semantic-org/semantic-ui/ + * + * + * Released under the MIT license + * http://opensource.org/licenses/MIT + * + */ +/******************************* + Theme +*******************************/ +/* + +████████╗██╗ ██╗███████╗███╗ ███╗███████╗███████╗ +╚══██╔══╝██║ ██║██╔════╝████╗ ████║██╔════╝██╔════╝ + ██║ ███████║█████╗ ██╔████╔██║█████╗ ███████╗ + ██║ ██╔══██║██╔══╝ ██║╚██╔╝██║██╔══╝ ╚════██║ + ██║ ██║ ██║███████╗██║ ╚═╝ ██║███████╗███████║ + ╚═╝ ╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝╚══════╝╚══════╝ + +*/ +/******************************* + Theme Selection +*******************************/ +/* To override a theme for an individual element + specify theme name below +*/ +/* Global */ +/* Elements */ +/* Collections */ +/* Modules */ +/* Views */ +/******************************* + Folders +*******************************/ +/* Path to theme packages */ +/* Path to site override folder */ +/******************************* + Import Theme +*******************************/ +/******************************* + Import Directives +*******************************/ +/*------------------ + Theme +-------------------*/ +/*-------------------- + Site Variables +---------------------*/ +/* Default site.variables */ +/******************************* + Site Settings +*******************************/ +/*------------------- + Fonts +--------------------*/ +/*------------------- + Base Sizes +--------------------*/ +/* This is the single variable that controls them all */ +/* The size of page text */ +/*------------------- + Border Radius +--------------------*/ +/* See Power-user section below + for explanation of @px variables +*/ +/*------------------- + Brand Colors +--------------------*/ +/*-------------- + Page Heading +---------------*/ +/*-------------- + Form Input +---------------*/ +/* This adjusts the default form input across all elements */ +/* Input Text Color */ +/* Line Height Default For Inputs in Browser (Descendors are 17px at 14px base em) */ +/*------------------- + Focused Input +--------------------*/ +/* Used on inputs, textarea etc */ +/* Used on dropdowns, other larger blocks */ +/*------------------- + Sizes +--------------------*/ +/* + Sizes are all expressed in terms of 14px/em (default em) + This ensures these "ratios" remain constant despite changes in EM +*/ +/*------------------- + Page +--------------------*/ +/*------------------- + Paragraph +--------------------*/ +/*------------------- + Links +--------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ +/*------------------- + Highlighted Text +--------------------*/ +/*------------------- + Loader +--------------------*/ +/*------------------- + Grid +--------------------*/ +/*------------------- + Transitions +--------------------*/ +/*------------------- + Breakpoints +--------------------*/ +/*------------------- + Site Colors +--------------------*/ +/*--- Colors ---*/ +/*--- Light Colors ---*/ +/*--- Neutrals ---*/ +/*--- Colored Backgrounds ---*/ +/*--- Colored Headers ---*/ +/*--- Colored Text ---*/ +/*--- Colored Border ---*/ +/*------------------- + Alpha Colors +--------------------*/ +/*------------------- + Accents +--------------------*/ +/* Differentiating Neutrals */ +/* Differentiating Layers */ +/******************************* + Power-User +*******************************/ +/*------------------- + Emotive Colors +--------------------*/ +/* Positive */ +/* Negative */ +/* Info */ +/* Warning */ +/*------------------- + Paths +--------------------*/ +/* For source only. Modified in gulp for dist */ +/*------------------- + Em Sizes +--------------------*/ +/* + This rounds @size values to the closest pixel then expresses that value in (r)em. + This ensures all size values round to exact pixels +*/ +/* em */ +/* rem */ +/*------------------- + Icons +--------------------*/ +/* Maximum Glyph Width of Icon */ +/*------------------- + Neutral Text +--------------------*/ +/*------------------- + Brand Colors +--------------------*/ +/*------------------- + Borders +--------------------*/ +/*------------------- + Derived Values +--------------------*/ +/* Loaders Position Offset */ +/* Rendered Scrollbar Width */ +/* Maximum Single Character Glyph Width, aka Capital "W" */ +/* Used to match floats with text */ +/* Header Spacing */ +/* Minimum Mobile Width */ +/* Positive / Negative Dupes */ +/* Responsive */ +/*------------------- + Exact Pixel Values +--------------------*/ +/* + These are used to specify exact pixel values in em + for things like borders that remain constantly + sized as emSize adjusts + + Since there are many more sizes than names for sizes, + these are named by their original pixel values. + +*/ +/* Columns */ +/******************************* + States +*******************************/ +/*------------------- + Disabled +--------------------*/ +/*------------------- + Hover +--------------------*/ +/*--- Shadows ---*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Focus +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Down (:active) +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Active +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/* Packaged site.variables */ +/******************************* + User Global Variables +*******************************/ +/*------------------- + Fonts +--------------------*/ +/*------------------- + Breakpoints +--------------------*/ +/* +@mobileBreakpoint : unit( (63 * @emSize), px); +@tabletBreakpoint : unit( (79 * @emSize), px); +@computerBreakpoint : unit( (91 * @emSize), px); +@largeMonitorBreakpoint : unit( (99 * @emSize), px); +@widescreenMonitorBreakpoint : unit( (119 * @emSize), px); +*/ +/******************************* + PXT Variables +*******************************/ +/*------------------- + Menu +--------------------*/ +/*------------------- + Layout +--------------------*/ +/*------------------- + Background +--------------------*/ +/*------------------- + Full screen +--------------------*/ +/*------------------- + Side Docs +--------------------*/ +/*------------------- + Editor +--------------------*/ +/* Component's site.variables */ +/******************************* + Site Settings +*******************************/ +/*------------------- + Fonts +--------------------*/ +/*------------------- + Base Sizes +--------------------*/ +/* This is the single variable that controls them all */ +/* The size of page text */ +/*------------------- + Border Radius +--------------------*/ +/* See Power-user section below + for explanation of @px variables +*/ +/*------------------- + Brand Colors +--------------------*/ +/*-------------- + Page Heading +---------------*/ +/*-------------- + Form Input +---------------*/ +/* This adjusts the default form input across all elements */ +/* Input Text Color */ +/* Line Height Default For Inputs in Browser (Descendors are 17px at 14px base em) */ +/*------------------- + Focused Input +--------------------*/ +/* Used on inputs, textarea etc */ +/* Used on dropdowns, other larger blocks */ +/*------------------- + Sizes +--------------------*/ +/* + Sizes are all expressed in terms of 14px/em (default em) + This ensures these "ratios" remain constant despite changes in EM +*/ +/*------------------- + Page +--------------------*/ +/*------------------- + Paragraph +--------------------*/ +/*------------------- + Links +--------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ +/*------------------- + Highlighted Text +--------------------*/ +/*------------------- + Loader +--------------------*/ +/*------------------- + Grid +--------------------*/ +/*------------------- + Transitions +--------------------*/ +/*------------------- + Breakpoints +--------------------*/ +/*------------------- + Site Colors +--------------------*/ +/*--- Colors ---*/ +/*--- Light Colors ---*/ +/*--- Neutrals ---*/ +/*--- Colored Backgrounds ---*/ +/*--- Colored Headers ---*/ +/*--- Colored Text ---*/ +/*--- Colored Border ---*/ +/*------------------- + Alpha Colors +--------------------*/ +/*------------------- + Accents +--------------------*/ +/* Differentiating Neutrals */ +/* Differentiating Layers */ +/******************************* + Power-User +*******************************/ +/*------------------- + Emotive Colors +--------------------*/ +/* Positive */ +/* Negative */ +/* Info */ +/* Warning */ +/*------------------- + Paths +--------------------*/ +/* For source only. Modified in gulp for dist */ +/*------------------- + Em Sizes +--------------------*/ +/* + This rounds @size values to the closest pixel then expresses that value in (r)em. + This ensures all size values round to exact pixels +*/ +/* em */ +/* rem */ +/*------------------- + Icons +--------------------*/ +/* Maximum Glyph Width of Icon */ +/*------------------- + Neutral Text +--------------------*/ +/*------------------- + Brand Colors +--------------------*/ +/*------------------- + Borders +--------------------*/ +/*------------------- + Derived Values +--------------------*/ +/* Loaders Position Offset */ +/* Rendered Scrollbar Width */ +/* Maximum Single Character Glyph Width, aka Capital "W" */ +/* Used to match floats with text */ +/* Header Spacing */ +/* Minimum Mobile Width */ +/* Positive / Negative Dupes */ +/* Responsive */ +/*------------------- + Exact Pixel Values +--------------------*/ +/* + These are used to specify exact pixel values in em + for things like borders that remain constantly + sized as emSize adjusts + + Since there are many more sizes than names for sizes, + these are named by their original pixel values. + +*/ +/* Columns */ +/******************************* + States +*******************************/ +/*------------------- + Disabled +--------------------*/ +/*------------------- + Hover +--------------------*/ +/*--- Shadows ---*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Focus +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Down (:active) +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Active +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/* Site theme site.variables */ +/******************************* + User Global Variables +*******************************/ +/*------------------- + Site Colors +--------------------*/ +/******************************* + PXT Overrides +*******************************/ +/*------------------- + Component Variables +---------------------*/ +/* Default */ +/******************************* + Comments +*******************************/ +/*------------------- + View +--------------------*/ +/*------------------- + Elements +--------------------*/ +/* Comment */ +/* Nested Comment */ +/* Avatar */ +/* Content */ +/* Author */ +/* Metadata */ +/* Text */ +/* Actions */ +/* Reply */ +/*------------------- + Variations +--------------------*/ +/* Threaded */ +/* Minimal */ +/* Packaged Theme */ +/******************************* + Comments +*******************************/ +/*------------------- + View +--------------------*/ +/*------------------- + Elements +--------------------*/ +/* Comment */ +/* Nested Comment */ +/* Avatar */ +/* Content */ +/* Author */ +/* Metadata */ +/* Text */ +/* Actions */ +/* Reply */ +/*------------------- + Variations +--------------------*/ +/* Threaded */ +/* Minimal */ +/* Site Theme */ +/******************************* + User Variable Overrides +*******************************/ +/******************************* + Mix-ins +*******************************/ +/*------------------ + Fonts +-------------------*/ +/*------------------ + Overrides +-------------------*/ +/* End Config */ +/******************************* + Standard +*******************************/ +/*-------------- + Comments +---------------*/ +.ui.comments, +.play-button.comments, +.download-button.comments { + margin: 1.5em 0em; + max-width: 650px; +} +.ui.comments:first-child, +.play-button.comments:first-child, +.download-button.comments:first-child { + margin-top: 0em; +} +.ui.comments:last-child, +.play-button.comments:last-child, +.download-button.comments:last-child { + margin-bottom: 0em; +} +/*-------------- + Comment +---------------*/ +.ui.comments .comment, +.play-button.comments .comment, +.download-button.comments .comment { + position: relative; + background: none; + margin: 0.5em 0em 0em; + padding: 0.5em 0em 0em; + border: none; + border-top: none; + line-height: 1.2; +} +.ui.comments .comment:first-child, +.play-button.comments .comment:first-child, +.download-button.comments .comment:first-child { + margin-top: 0em; + padding-top: 0em; +} +/*-------------------- + Nested Comments +---------------------*/ +.ui.comments .comment .comments, +.play-button.comments .comment .comments, +.download-button.comments .comment .comments { + margin: 0em 0em 0.5em 0.5em; + padding: 1em 0em 1em 1em; +} +.ui.comments .comment .comments:before, +.play-button.comments .comment .comments:before, +.download-button.comments .comment .comments:before { + position: absolute; + top: 0px; + left: 0px; +} +.ui.comments .comment .comments .comment, +.play-button.comments .comment .comments .comment, +.download-button.comments .comment .comments .comment { + border: none; + border-top: none; + background: none; +} +/*-------------- + Avatar +---------------*/ +.ui.comments .comment .avatar, +.play-button.comments .comment .avatar, +.download-button.comments .comment .avatar { + display: block; + width: 2.5em; + height: auto; + float: left; + margin: 0.2em 0em 0em; +} +.ui.comments .comment img.avatar, +.ui.comments .comment .avatar img, +.play-button.comments .comment img.avatar, +.play-button.comments .comment .avatar img, +.download-button.comments .comment img.avatar, +.download-button.comments .comment .avatar img { + display: block; + margin: 0em auto; + width: 100%; + height: 100%; + border-radius: 0.25rem; +} +/*-------------- + Content +---------------*/ +.ui.comments .comment > .content, +.play-button.comments .comment > .content, +.download-button.comments .comment > .content { + display: block; +} +/* If there is an avatar move content over */ +.ui.comments .comment > .avatar ~ .content, +.play-button.comments .comment > .avatar ~ .content, +.download-button.comments .comment > .avatar ~ .content { + margin-left: 3.5em; +} +/*-------------- + Author +---------------*/ +.ui.comments .comment .author, +.play-button.comments .comment .author, +.download-button.comments .comment .author { + font-size: 1em; + color: rgba(0, 0, 0, 0.87); + font-weight: bold; +} +.ui.comments .comment a.author, +.play-button.comments .comment a.author, +.download-button.comments .comment a.author { + cursor: pointer; +} +.ui.comments .comment a.author:hover, +.play-button.comments .comment a.author:hover, +.download-button.comments .comment a.author:hover { + color: #1e70bf; +} +/*-------------- + Metadata +---------------*/ +.ui.comments .comment .metadata, +.play-button.comments .comment .metadata, +.download-button.comments .comment .metadata { + display: inline-block; + margin-left: 0.5em; + color: rgba(0, 0, 0, 0.4); + font-size: 0.875em; +} +.ui.comments .comment .metadata > *, +.play-button.comments .comment .metadata > *, +.download-button.comments .comment .metadata > * { + display: inline-block; + margin: 0em 0.5em 0em 0em; +} +.ui.comments .comment .metadata > :last-child, +.play-button.comments .comment .metadata > :last-child, +.download-button.comments .comment .metadata > :last-child { + margin-right: 0em; +} +/*-------------------- + Comment Text +---------------------*/ +.ui.comments .comment .text, +.play-button.comments .comment .text, +.download-button.comments .comment .text { + margin: 0.25em 0em 0.5em; + font-size: 1em; + word-wrap: break-word; + color: rgba(0, 0, 0, 0.87); + line-height: 1.3; +} +/*-------------------- + User Actions +---------------------*/ +.ui.comments .comment .actions, +.play-button.comments .comment .actions, +.download-button.comments .comment .actions { + font-size: 0.875em; +} +.ui.comments .comment .actions a, +.play-button.comments .comment .actions a, +.download-button.comments .comment .actions a { + cursor: pointer; + display: inline-block; + margin: 0em 0.75em 0em 0em; + color: rgba(0, 0, 0, 0.4); +} +.ui.comments .comment .actions a:last-child, +.play-button.comments .comment .actions a:last-child, +.download-button.comments .comment .actions a:last-child { + margin-right: 0em; +} +.ui.comments .comment .actions a.active, +.ui.comments .comment .actions a:hover, +.play-button.comments .comment .actions a.active, +.play-button.comments .comment .actions a:hover, +.download-button.comments .comment .actions a.active, +.download-button.comments .comment .actions a:hover { + color: rgba(0, 0, 0, 0.8); +} +/*-------------------- + Reply Form +---------------------*/ +.ui.comments > .reply.form, +.play-button.comments > .reply.form, +.download-button.comments > .reply.form { + margin-top: 1em; +} +.ui.comments .comment .reply.form, +.play-button.comments .comment .reply.form, +.download-button.comments .comment .reply.form { + width: 100%; + margin-top: 1em; +} +.ui.comments .reply.form textarea, +.play-button.comments .reply.form textarea, +.download-button.comments .reply.form textarea { + font-size: 1em; + height: 12em; +} +/******************************* + State +*******************************/ +.ui.collapsed.comments, +.ui.comments .collapsed.comments, +.ui.comments .collapsed.comment, +.play-button.collapsed.comments, +.play-button.comments .collapsed.comments, +.play-button.comments .collapsed.comment, +.download-button.collapsed.comments, +.download-button.comments .collapsed.comments, +.download-button.comments .collapsed.comment { + display: none; +} +/******************************* + Variations +*******************************/ +/*-------------------- + Threaded +---------------------*/ +.ui.threaded.comments .comment .comments, +.play-button.threaded.comments .comment .comments, +.download-button.threaded.comments .comment .comments { + margin: -1.5em 0 -1em 1.25em; + padding: 3em 0em 2em 2.25em; + box-shadow: -1px 0px 0px rgba(34, 36, 38, 0.15); +} +/*-------------------- + Minimal +---------------------*/ +.ui.minimal.comments .comment .actions, +.play-button.minimal.comments .comment .actions, +.download-button.minimal.comments .comment .actions { + opacity: 0; + position: absolute; + top: 0px; + right: 0px; + left: auto; + transition: opacity 0.2s ease; + transition-delay: 0.1s; +} +.ui.minimal.comments .comment > .content:hover > .actions, +.play-button.minimal.comments .comment > .content:hover > .actions, +.download-button.minimal.comments .comment > .content:hover > .actions { + opacity: 1; +} +/*------------------- + Sizes +--------------------*/ +.ui.mini.comments, +.play-button.mini.comments, +.download-button.mini.comments { + font-size: 0.78571429rem; +} +.ui.tiny.comments, +.play-button.tiny.comments, +.download-button.tiny.comments { + font-size: 0.85714286rem; +} +.ui.small.comments, +.play-button.small.comments, +.download-button.small.comments { + font-size: 0.92857143rem; +} +.ui.comments, +.play-button.comments, +.download-button.comments { + font-size: 1rem; +} +.ui.large.comments, +.play-button.large.comments, +.download-button.large.comments { + font-size: 1.14285714rem; +} +.ui.big.comments, +.play-button.big.comments, +.download-button.big.comments { + font-size: 1.28571429rem; +} +.ui.huge.comments, +.play-button.huge.comments, +.download-button.huge.comments { + font-size: 1.42857143rem; +} +.ui.massive.comments, +.play-button.massive.comments, +.download-button.massive.comments { + font-size: 1.71428571rem; +} +/******************************* + Theme Overrides +*******************************/ +/******************************* + User Variable Overrides +*******************************/ +/*! + * # Semantic UI - Feed + * http://github.com/semantic-org/semantic-ui/ + * + * + * Released under the MIT license + * http://opensource.org/licenses/MIT + * + */ +/******************************* + Theme +*******************************/ +/* + +████████╗██╗ ██╗███████╗███╗ ███╗███████╗███████╗ +╚══██╔══╝██║ ██║██╔════╝████╗ ████║██╔════╝██╔════╝ + ██║ ███████║█████╗ ██╔████╔██║█████╗ ███████╗ + ██║ ██╔══██║██╔══╝ ██║╚██╔╝██║██╔══╝ ╚════██║ + ██║ ██║ ██║███████╗██║ ╚═╝ ██║███████╗███████║ + ╚═╝ ╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝╚══════╝╚══════╝ + +*/ +/******************************* + Theme Selection +*******************************/ +/* To override a theme for an individual element + specify theme name below +*/ +/* Global */ +/* Elements */ +/* Collections */ +/* Modules */ +/* Views */ +/******************************* + Folders +*******************************/ +/* Path to theme packages */ +/* Path to site override folder */ +/******************************* + Import Theme +*******************************/ +/******************************* + Import Directives +*******************************/ +/*------------------ + Theme +-------------------*/ +/*-------------------- + Site Variables +---------------------*/ +/* Default site.variables */ +/******************************* + Site Settings +*******************************/ +/*------------------- + Fonts +--------------------*/ +/*------------------- + Base Sizes +--------------------*/ +/* This is the single variable that controls them all */ +/* The size of page text */ +/*------------------- + Border Radius +--------------------*/ +/* See Power-user section below + for explanation of @px variables +*/ +/*------------------- + Brand Colors +--------------------*/ +/*-------------- + Page Heading +---------------*/ +/*-------------- + Form Input +---------------*/ +/* This adjusts the default form input across all elements */ +/* Input Text Color */ +/* Line Height Default For Inputs in Browser (Descendors are 17px at 14px base em) */ +/*------------------- + Focused Input +--------------------*/ +/* Used on inputs, textarea etc */ +/* Used on dropdowns, other larger blocks */ +/*------------------- + Sizes +--------------------*/ +/* + Sizes are all expressed in terms of 14px/em (default em) + This ensures these "ratios" remain constant despite changes in EM +*/ +/*------------------- + Page +--------------------*/ +/*------------------- + Paragraph +--------------------*/ +/*------------------- + Links +--------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ +/*------------------- + Highlighted Text +--------------------*/ +/*------------------- + Loader +--------------------*/ +/*------------------- + Grid +--------------------*/ +/*------------------- + Transitions +--------------------*/ +/*------------------- + Breakpoints +--------------------*/ +/*------------------- + Site Colors +--------------------*/ +/*--- Colors ---*/ +/*--- Light Colors ---*/ +/*--- Neutrals ---*/ +/*--- Colored Backgrounds ---*/ +/*--- Colored Headers ---*/ +/*--- Colored Text ---*/ +/*--- Colored Border ---*/ +/*------------------- + Alpha Colors +--------------------*/ +/*------------------- + Accents +--------------------*/ +/* Differentiating Neutrals */ +/* Differentiating Layers */ +/******************************* + Power-User +*******************************/ +/*------------------- + Emotive Colors +--------------------*/ +/* Positive */ +/* Negative */ +/* Info */ +/* Warning */ +/*------------------- + Paths +--------------------*/ +/* For source only. Modified in gulp for dist */ +/*------------------- + Em Sizes +--------------------*/ +/* + This rounds @size values to the closest pixel then expresses that value in (r)em. + This ensures all size values round to exact pixels +*/ +/* em */ +/* rem */ +/*------------------- + Icons +--------------------*/ +/* Maximum Glyph Width of Icon */ +/*------------------- + Neutral Text +--------------------*/ +/*------------------- + Brand Colors +--------------------*/ +/*------------------- + Borders +--------------------*/ +/*------------------- + Derived Values +--------------------*/ +/* Loaders Position Offset */ +/* Rendered Scrollbar Width */ +/* Maximum Single Character Glyph Width, aka Capital "W" */ +/* Used to match floats with text */ +/* Header Spacing */ +/* Minimum Mobile Width */ +/* Positive / Negative Dupes */ +/* Responsive */ +/*------------------- + Exact Pixel Values +--------------------*/ +/* + These are used to specify exact pixel values in em + for things like borders that remain constantly + sized as emSize adjusts + + Since there are many more sizes than names for sizes, + these are named by their original pixel values. + +*/ +/* Columns */ +/******************************* + States +*******************************/ +/*------------------- + Disabled +--------------------*/ +/*------------------- + Hover +--------------------*/ +/*--- Shadows ---*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Focus +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Down (:active) +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Active +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/* Packaged site.variables */ +/******************************* + User Global Variables +*******************************/ +/*------------------- + Fonts +--------------------*/ +/*------------------- + Breakpoints +--------------------*/ +/* +@mobileBreakpoint : unit( (63 * @emSize), px); +@tabletBreakpoint : unit( (79 * @emSize), px); +@computerBreakpoint : unit( (91 * @emSize), px); +@largeMonitorBreakpoint : unit( (99 * @emSize), px); +@widescreenMonitorBreakpoint : unit( (119 * @emSize), px); +*/ +/******************************* + PXT Variables +*******************************/ +/*------------------- + Menu +--------------------*/ +/*------------------- + Layout +--------------------*/ +/*------------------- + Background +--------------------*/ +/*------------------- + Full screen +--------------------*/ +/*------------------- + Side Docs +--------------------*/ +/*------------------- + Editor +--------------------*/ +/* Component's site.variables */ +/******************************* + Site Settings +*******************************/ +/*------------------- + Fonts +--------------------*/ +/*------------------- + Base Sizes +--------------------*/ +/* This is the single variable that controls them all */ +/* The size of page text */ +/*------------------- + Border Radius +--------------------*/ +/* See Power-user section below + for explanation of @px variables +*/ +/*------------------- + Brand Colors +--------------------*/ +/*-------------- + Page Heading +---------------*/ +/*-------------- + Form Input +---------------*/ +/* This adjusts the default form input across all elements */ +/* Input Text Color */ +/* Line Height Default For Inputs in Browser (Descendors are 17px at 14px base em) */ +/*------------------- + Focused Input +--------------------*/ +/* Used on inputs, textarea etc */ +/* Used on dropdowns, other larger blocks */ +/*------------------- + Sizes +--------------------*/ +/* + Sizes are all expressed in terms of 14px/em (default em) + This ensures these "ratios" remain constant despite changes in EM +*/ +/*------------------- + Page +--------------------*/ +/*------------------- + Paragraph +--------------------*/ +/*------------------- + Links +--------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ +/*------------------- + Highlighted Text +--------------------*/ +/*------------------- + Loader +--------------------*/ +/*------------------- + Grid +--------------------*/ +/*------------------- + Transitions +--------------------*/ +/*------------------- + Breakpoints +--------------------*/ +/*------------------- + Site Colors +--------------------*/ +/*--- Colors ---*/ +/*--- Light Colors ---*/ +/*--- Neutrals ---*/ +/*--- Colored Backgrounds ---*/ +/*--- Colored Headers ---*/ +/*--- Colored Text ---*/ +/*--- Colored Border ---*/ +/*------------------- + Alpha Colors +--------------------*/ +/*------------------- + Accents +--------------------*/ +/* Differentiating Neutrals */ +/* Differentiating Layers */ +/******************************* + Power-User +*******************************/ +/*------------------- + Emotive Colors +--------------------*/ +/* Positive */ +/* Negative */ +/* Info */ +/* Warning */ +/*------------------- + Paths +--------------------*/ +/* For source only. Modified in gulp for dist */ +/*------------------- + Em Sizes +--------------------*/ +/* + This rounds @size values to the closest pixel then expresses that value in (r)em. + This ensures all size values round to exact pixels +*/ +/* em */ +/* rem */ +/*------------------- + Icons +--------------------*/ +/* Maximum Glyph Width of Icon */ +/*------------------- + Neutral Text +--------------------*/ +/*------------------- + Brand Colors +--------------------*/ +/*------------------- + Borders +--------------------*/ +/*------------------- + Derived Values +--------------------*/ +/* Loaders Position Offset */ +/* Rendered Scrollbar Width */ +/* Maximum Single Character Glyph Width, aka Capital "W" */ +/* Used to match floats with text */ +/* Header Spacing */ +/* Minimum Mobile Width */ +/* Positive / Negative Dupes */ +/* Responsive */ +/*------------------- + Exact Pixel Values +--------------------*/ +/* + These are used to specify exact pixel values in em + for things like borders that remain constantly + sized as emSize adjusts + + Since there are many more sizes than names for sizes, + these are named by their original pixel values. + +*/ +/* Columns */ +/******************************* + States +*******************************/ +/*------------------- + Disabled +--------------------*/ +/*------------------- + Hover +--------------------*/ +/*--- Shadows ---*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Focus +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Down (:active) +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Active +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/* Site theme site.variables */ +/******************************* + User Global Variables +*******************************/ +/*------------------- + Site Colors +--------------------*/ +/******************************* + PXT Overrides +*******************************/ +/*------------------- + Component Variables +---------------------*/ +/* Default */ +/******************************* + Feed +*******************************/ +/*------------------- + Feed +--------------------*/ +/*------------------- + Elements +--------------------*/ +/* Event */ +/* Event Label */ +/* Icon Label */ +/* Image Label */ +/* Content w/ Label */ +/* Content */ +/* Date */ +/* Summary */ +/* Summary Image */ +/* Summary Date */ +/* User */ +/* Extra Summary Data */ +/* Extra Images */ +/* Extra Text */ +/* Metadata Group */ +/* Like */ +/* Metadata Divider */ +/*------------------- + Variations +--------------------*/ +/* Packaged Theme */ +/******************************* + Feed +*******************************/ +/*------------------- + Feed +--------------------*/ +/*------------------- + Elements +--------------------*/ +/* Event */ +/* Event Label */ +/* Icon Label */ +/* Image Label */ +/* Content w/ Label */ +/* Content */ +/* Date */ +/* Summary */ +/* Summary Image */ +/* Summary Date */ +/* User */ +/* Extra Summary Data */ +/* Extra Images */ +/* Extra Text */ +/* Metadata Group */ +/* Like */ +/* Metadata Divider */ +/*------------------- + Variations +--------------------*/ +/* Site Theme */ +/******************************* + User Variable Overrides +*******************************/ +/******************************* + Mix-ins +*******************************/ +/*------------------ + Fonts +-------------------*/ +/*------------------ + Overrides +-------------------*/ +/* End Config */ +/******************************* + Activity Feed +*******************************/ +.ui.feed, +.play-button.feed, +.download-button.feed { + margin: 1em 0em; +} +.ui.feed:first-child, +.play-button.feed:first-child, +.download-button.feed:first-child { + margin-top: 0em; +} +.ui.feed:last-child, +.play-button.feed:last-child, +.download-button.feed:last-child { + margin-bottom: 0em; +} +/******************************* + Content +*******************************/ +/* Event */ +.ui.feed > .event, +.play-button.feed > .event, +.download-button.feed > .event { + display: flex; + flex-direction: row; + width: 100%; + padding: 0.21428571rem 0em; + margin: 0em; + background: none; + border-top: none; +} +.ui.feed > .event:first-child, +.play-button.feed > .event:first-child, +.download-button.feed > .event:first-child { + border-top: 0px; + padding-top: 0em; +} +.ui.feed > .event:last-child, +.play-button.feed > .event:last-child, +.download-button.feed > .event:last-child { + padding-bottom: 0em; +} +/* Event Label */ +.ui.feed > .event > .label, +.play-button.feed > .event > .label, +.download-button.feed > .event > .label { + display: block; + flex: 0 0 auto; + width: 2.5em; + height: auto; + align-self: stretch; + text-align: left; +} +.ui.feed > .event > .label .icon, +.play-button.feed > .event > .label .icon, +.download-button.feed > .event > .label .icon { + opacity: 1; + font-size: 1.5em; + width: 100%; + padding: 0.25em; + background: none; + border: none; + border-radius: none; + color: rgba(0, 0, 0, 0.6); +} +.ui.feed > .event > .label img, +.play-button.feed > .event > .label img, +.download-button.feed > .event > .label img { + width: 100%; + height: auto; + border-radius: 500rem; +} +.ui.feed > .event > .label + .content, +.play-button.feed > .event > .label + .content, +.download-button.feed > .event > .label + .content { + margin: 0.5em 0em 0.35714286em 1.14285714em; +} +/*-------------- + Content +---------------*/ +/* Content */ +.ui.feed > .event > .content, +.play-button.feed > .event > .content, +.download-button.feed > .event > .content { + display: block; + flex: 1 1 auto; + align-self: stretch; + text-align: left; + word-wrap: break-word; +} +.ui.feed > .event:last-child > .content, +.play-button.feed > .event:last-child > .content, +.download-button.feed > .event:last-child > .content { + padding-bottom: 0em; +} +/* Link */ +.ui.feed > .event > .content a, +.play-button.feed > .event > .content a, +.download-button.feed > .event > .content a { + cursor: pointer; +} +/*-------------- + Date +---------------*/ +.ui.feed > .event > .content .date, +.play-button.feed > .event > .content .date, +.download-button.feed > .event > .content .date { + margin: -0.5rem 0em 0em; + padding: 0em; + font-weight: normal; + font-size: 1em; + font-style: normal; + color: rgba(0, 0, 0, 0.4); +} +/*-------------- + Summary +---------------*/ +.ui.feed > .event > .content .summary, +.play-button.feed > .event > .content .summary, +.download-button.feed > .event > .content .summary { + margin: 0em; + font-size: 1em; + font-weight: bold; + color: rgba(0, 0, 0, 0.87); +} +/* Summary Image */ +.ui.feed > .event > .content .summary img, +.play-button.feed > .event > .content .summary img, +.download-button.feed > .event > .content .summary img { + display: inline-block; + width: auto; + height: 10em; + margin: -0.25em 0.25em 0em 0em; + border-radius: 0.25em; + vertical-align: middle; +} +/*-------------- + User +---------------*/ +.ui.feed > .event > .content .user, +.play-button.feed > .event > .content .user, +.download-button.feed > .event > .content .user { + display: inline-block; + font-weight: bold; + margin-right: 0em; + vertical-align: baseline; +} +.ui.feed > .event > .content .user img, +.play-button.feed > .event > .content .user img, +.download-button.feed > .event > .content .user img { + margin: -0.25em 0.25em 0em 0em; + width: auto; + height: 10em; + vertical-align: middle; +} +/*-------------- + Inline Date +---------------*/ +/* Date inside Summary */ +.ui.feed > .event > .content .summary > .date, +.play-button.feed > .event > .content .summary > .date, +.download-button.feed > .event > .content .summary > .date { + display: inline-block; + float: none; + font-weight: normal; + font-size: 0.85714286em; + font-style: normal; + margin: 0em 0em 0em 0.5em; + padding: 0em; + color: rgba(0, 0, 0, 0.4); +} +/*-------------- + Extra Summary +---------------*/ +.ui.feed > .event > .content .extra, +.play-button.feed > .event > .content .extra, +.download-button.feed > .event > .content .extra { + margin: 0.5em 0em 0em; + background: none; + padding: 0em; + color: rgba(0, 0, 0, 0.87); +} +/* Images */ +.ui.feed > .event > .content .extra.images img, +.play-button.feed > .event > .content .extra.images img, +.download-button.feed > .event > .content .extra.images img { + display: inline-block; + margin: 0em 0.25em 0em 0em; + width: 6em; +} +/* Text */ +.ui.feed > .event > .content .extra.text, +.play-button.feed > .event > .content .extra.text, +.download-button.feed > .event > .content .extra.text { + padding: 0em; + border-left: none; + font-size: 1em; + max-width: 500px; + line-height: 1.4285em; +} +/*-------------- + Meta +---------------*/ +.ui.feed > .event > .content .meta, +.play-button.feed > .event > .content .meta, +.download-button.feed > .event > .content .meta { + display: inline-block; + font-size: 0.85714286em; + margin: 0.5em 0em 0em; + background: none; + border: none; + border-radius: 0; + box-shadow: none; + padding: 0em; + color: rgba(0, 0, 0, 0.6); +} +.ui.feed > .event > .content .meta > *, +.play-button.feed > .event > .content .meta > *, +.download-button.feed > .event > .content .meta > * { + position: relative; + margin-left: 0.75em; +} +.ui.feed > .event > .content .meta > *:after, +.play-button.feed > .event > .content .meta > *:after, +.download-button.feed > .event > .content .meta > *:after { + content: ''; + color: rgba(0, 0, 0, 0.2); + top: 0em; + left: -1em; + opacity: 1; + position: absolute; + vertical-align: top; +} +.ui.feed > .event > .content .meta .like, +.play-button.feed > .event > .content .meta .like, +.download-button.feed > .event > .content .meta .like { + color: ''; + transition: 0.2s color ease; +} +.ui.feed > .event > .content .meta .like:hover .icon, +.play-button.feed > .event > .content .meta .like:hover .icon, +.download-button.feed > .event > .content .meta .like:hover .icon { + color: #FF2733; +} +.ui.feed > .event > .content .meta .active.like .icon, +.play-button.feed > .event > .content .meta .active.like .icon, +.download-button.feed > .event > .content .meta .active.like .icon { + color: #EF404A; +} +/* First element */ +.ui.feed > .event > .content .meta > :first-child, +.play-button.feed > .event > .content .meta > :first-child, +.download-button.feed > .event > .content .meta > :first-child { + margin-left: 0em; +} +.ui.feed > .event > .content .meta > :first-child::after, +.play-button.feed > .event > .content .meta > :first-child::after, +.download-button.feed > .event > .content .meta > :first-child::after { + display: none; +} +/* Action */ +.ui.feed > .event > .content .meta a, +.ui.feed > .event > .content .meta > .icon, +.play-button.feed > .event > .content .meta a, +.play-button.feed > .event > .content .meta > .icon, +.download-button.feed > .event > .content .meta a, +.download-button.feed > .event > .content .meta > .icon { + cursor: pointer; + opacity: 1; + color: rgba(0, 0, 0, 0.5); + transition: color 0.1s ease; +} +.ui.feed > .event > .content .meta a:hover, +.ui.feed > .event > .content .meta a:hover .icon, +.ui.feed > .event > .content .meta > .icon:hover, +.play-button.feed > .event > .content .meta a:hover, +.play-button.feed > .event > .content .meta a:hover .icon, +.play-button.feed > .event > .content .meta > .icon:hover, +.download-button.feed > .event > .content .meta a:hover, +.download-button.feed > .event > .content .meta a:hover .icon, +.download-button.feed > .event > .content .meta > .icon:hover { + color: rgba(0, 0, 0, 0.95); +} +/******************************* + Variations +*******************************/ +.ui.small.feed, +.play-button.small.feed, +.download-button.small.feed { + font-size: 0.92857143rem; +} +.ui.feed, +.play-button.feed, +.download-button.feed { + font-size: 1rem; +} +.ui.large.feed, +.play-button.large.feed, +.download-button.large.feed { + font-size: 1.14285714rem; +} +/******************************* + Theme Overrides +*******************************/ +/******************************* + User Variable Overrides +*******************************/ +/*! + * # Semantic UI - Item + * http://github.com/semantic-org/semantic-ui/ + * + * + * Released under the MIT license + * http://opensource.org/licenses/MIT + * + */ +/******************************* + Theme +*******************************/ +/* + +████████╗██╗ ██╗███████╗███╗ ███╗███████╗███████╗ +╚══██╔══╝██║ ██║██╔════╝████╗ ████║██╔════╝██╔════╝ + ██║ ███████║█████╗ ██╔████╔██║█████╗ ███████╗ + ██║ ██╔══██║██╔══╝ ██║╚██╔╝██║██╔══╝ ╚════██║ + ██║ ██║ ██║███████╗██║ ╚═╝ ██║███████╗███████║ + ╚═╝ ╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝╚══════╝╚══════╝ + +*/ +/******************************* + Theme Selection +*******************************/ +/* To override a theme for an individual element + specify theme name below +*/ +/* Global */ +/* Elements */ +/* Collections */ +/* Modules */ +/* Views */ +/******************************* + Folders +*******************************/ +/* Path to theme packages */ +/* Path to site override folder */ +/******************************* + Import Theme +*******************************/ +/******************************* + Import Directives +*******************************/ +/*------------------ + Theme +-------------------*/ +/*-------------------- + Site Variables +---------------------*/ +/* Default site.variables */ +/******************************* + Site Settings +*******************************/ +/*------------------- + Fonts +--------------------*/ +/*------------------- + Base Sizes +--------------------*/ +/* This is the single variable that controls them all */ +/* The size of page text */ +/*------------------- + Border Radius +--------------------*/ +/* See Power-user section below + for explanation of @px variables +*/ +/*------------------- + Brand Colors +--------------------*/ +/*-------------- + Page Heading +---------------*/ +/*-------------- + Form Input +---------------*/ +/* This adjusts the default form input across all elements */ +/* Input Text Color */ +/* Line Height Default For Inputs in Browser (Descendors are 17px at 14px base em) */ +/*------------------- + Focused Input +--------------------*/ +/* Used on inputs, textarea etc */ +/* Used on dropdowns, other larger blocks */ +/*------------------- + Sizes +--------------------*/ +/* + Sizes are all expressed in terms of 14px/em (default em) + This ensures these "ratios" remain constant despite changes in EM +*/ +/*------------------- + Page +--------------------*/ +/*------------------- + Paragraph +--------------------*/ +/*------------------- + Links +--------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ +/*------------------- + Highlighted Text +--------------------*/ +/*------------------- + Loader +--------------------*/ +/*------------------- + Grid +--------------------*/ +/*------------------- + Transitions +--------------------*/ +/*------------------- + Breakpoints +--------------------*/ +/*------------------- + Site Colors +--------------------*/ +/*--- Colors ---*/ +/*--- Light Colors ---*/ +/*--- Neutrals ---*/ +/*--- Colored Backgrounds ---*/ +/*--- Colored Headers ---*/ +/*--- Colored Text ---*/ +/*--- Colored Border ---*/ +/*------------------- + Alpha Colors +--------------------*/ +/*------------------- + Accents +--------------------*/ +/* Differentiating Neutrals */ +/* Differentiating Layers */ +/******************************* + Power-User +*******************************/ +/*------------------- + Emotive Colors +--------------------*/ +/* Positive */ +/* Negative */ +/* Info */ +/* Warning */ +/*------------------- + Paths +--------------------*/ +/* For source only. Modified in gulp for dist */ +/*------------------- + Em Sizes +--------------------*/ +/* + This rounds @size values to the closest pixel then expresses that value in (r)em. + This ensures all size values round to exact pixels +*/ +/* em */ +/* rem */ +/*------------------- + Icons +--------------------*/ +/* Maximum Glyph Width of Icon */ +/*------------------- + Neutral Text +--------------------*/ +/*------------------- + Brand Colors +--------------------*/ +/*------------------- + Borders +--------------------*/ +/*------------------- + Derived Values +--------------------*/ +/* Loaders Position Offset */ +/* Rendered Scrollbar Width */ +/* Maximum Single Character Glyph Width, aka Capital "W" */ +/* Used to match floats with text */ +/* Header Spacing */ +/* Minimum Mobile Width */ +/* Positive / Negative Dupes */ +/* Responsive */ +/*------------------- + Exact Pixel Values +--------------------*/ +/* + These are used to specify exact pixel values in em + for things like borders that remain constantly + sized as emSize adjusts + + Since there are many more sizes than names for sizes, + these are named by their original pixel values. + +*/ +/* Columns */ +/******************************* + States +*******************************/ +/*------------------- + Disabled +--------------------*/ +/*------------------- + Hover +--------------------*/ +/*--- Shadows ---*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Focus +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Down (:active) +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Active +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/* Packaged site.variables */ +/******************************* + User Global Variables +*******************************/ +/*------------------- + Fonts +--------------------*/ +/*------------------- + Breakpoints +--------------------*/ +/* +@mobileBreakpoint : unit( (63 * @emSize), px); +@tabletBreakpoint : unit( (79 * @emSize), px); +@computerBreakpoint : unit( (91 * @emSize), px); +@largeMonitorBreakpoint : unit( (99 * @emSize), px); +@widescreenMonitorBreakpoint : unit( (119 * @emSize), px); +*/ +/******************************* + PXT Variables +*******************************/ +/*------------------- + Menu +--------------------*/ +/*------------------- + Layout +--------------------*/ +/*------------------- + Background +--------------------*/ +/*------------------- + Full screen +--------------------*/ +/*------------------- + Side Docs +--------------------*/ +/*------------------- + Editor +--------------------*/ +/* Component's site.variables */ +/******************************* + Site Settings +*******************************/ +/*------------------- + Fonts +--------------------*/ +/*------------------- + Base Sizes +--------------------*/ +/* This is the single variable that controls them all */ +/* The size of page text */ +/*------------------- + Border Radius +--------------------*/ +/* See Power-user section below + for explanation of @px variables +*/ +/*------------------- + Brand Colors +--------------------*/ +/*-------------- + Page Heading +---------------*/ +/*-------------- + Form Input +---------------*/ +/* This adjusts the default form input across all elements */ +/* Input Text Color */ +/* Line Height Default For Inputs in Browser (Descendors are 17px at 14px base em) */ +/*------------------- + Focused Input +--------------------*/ +/* Used on inputs, textarea etc */ +/* Used on dropdowns, other larger blocks */ +/*------------------- + Sizes +--------------------*/ +/* + Sizes are all expressed in terms of 14px/em (default em) + This ensures these "ratios" remain constant despite changes in EM +*/ +/*------------------- + Page +--------------------*/ +/*------------------- + Paragraph +--------------------*/ +/*------------------- + Links +--------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ +/*------------------- + Highlighted Text +--------------------*/ +/*------------------- + Loader +--------------------*/ +/*------------------- + Grid +--------------------*/ +/*------------------- + Transitions +--------------------*/ +/*------------------- + Breakpoints +--------------------*/ +/*------------------- + Site Colors +--------------------*/ +/*--- Colors ---*/ +/*--- Light Colors ---*/ +/*--- Neutrals ---*/ +/*--- Colored Backgrounds ---*/ +/*--- Colored Headers ---*/ +/*--- Colored Text ---*/ +/*--- Colored Border ---*/ +/*------------------- + Alpha Colors +--------------------*/ +/*------------------- + Accents +--------------------*/ +/* Differentiating Neutrals */ +/* Differentiating Layers */ +/******************************* + Power-User +*******************************/ +/*------------------- + Emotive Colors +--------------------*/ +/* Positive */ +/* Negative */ +/* Info */ +/* Warning */ +/*------------------- + Paths +--------------------*/ +/* For source only. Modified in gulp for dist */ +/*------------------- + Em Sizes +--------------------*/ +/* + This rounds @size values to the closest pixel then expresses that value in (r)em. + This ensures all size values round to exact pixels +*/ +/* em */ +/* rem */ +/*------------------- + Icons +--------------------*/ +/* Maximum Glyph Width of Icon */ +/*------------------- + Neutral Text +--------------------*/ +/*------------------- + Brand Colors +--------------------*/ +/*------------------- + Borders +--------------------*/ +/*------------------- + Derived Values +--------------------*/ +/* Loaders Position Offset */ +/* Rendered Scrollbar Width */ +/* Maximum Single Character Glyph Width, aka Capital "W" */ +/* Used to match floats with text */ +/* Header Spacing */ +/* Minimum Mobile Width */ +/* Positive / Negative Dupes */ +/* Responsive */ +/*------------------- + Exact Pixel Values +--------------------*/ +/* + These are used to specify exact pixel values in em + for things like borders that remain constantly + sized as emSize adjusts + + Since there are many more sizes than names for sizes, + these are named by their original pixel values. + +*/ +/* Columns */ +/******************************* + States +*******************************/ +/*------------------- + Disabled +--------------------*/ +/*------------------- + Hover +--------------------*/ +/*--- Shadows ---*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Focus +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Down (:active) +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Active +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/* Site theme site.variables */ +/******************************* + User Global Variables +*******************************/ +/*------------------- + Site Colors +--------------------*/ +/******************************* + PXT Overrides +*******************************/ +/*------------------- + Component Variables +---------------------*/ +/* Default */ +/******************************* + Item +*******************************/ +/*------------------- + View +--------------------*/ +/* Group */ +/* Item */ +/* Responsive */ +/*------------------- + Content +--------------------*/ +/* Image */ +/* Content */ +/* Header */ +/* Metadata */ +/* Icons */ +/* Actions */ +/* Links */ +/* Description */ +/* Content Image */ +/* Avatar Image */ +/* Paragraph */ +/* Additional Content */ +/*------------------- + Variations +--------------------*/ +/* Relaxed */ +/* Divided */ +/* Unstackable */ +/* Packaged Theme */ +/******************************* + Item +*******************************/ +/*------------------- + View +--------------------*/ +/* Group */ +/* Item */ +/* Responsive */ +/*------------------- + Content +--------------------*/ +/* Image */ +/* Content */ +/* Header */ +/* Metadata */ +/* Icons */ +/* Actions */ +/* Links */ +/* Description */ +/* Content Image */ +/* Avatar Image */ +/* Paragraph */ +/* Additional Content */ +/*------------------- + Variations +--------------------*/ +/* Relaxed */ +/* Divided */ +/* Unstackable */ +/* Site Theme */ +/******************************* + User Variable Overrides +*******************************/ +/******************************* + Mix-ins +*******************************/ +/*------------------ + Fonts +-------------------*/ +/*------------------ + Overrides +-------------------*/ +/* End Config */ +/******************************* + Standard +*******************************/ +/*-------------- + Item +---------------*/ +.ui.items > .item, +.play-button.items > .item, +.download-button.items > .item { + display: flex; + margin: 1em 0em; + width: 100%; + min-height: 0px; + background: transparent; + padding: 0em; + border: none; + border-radius: 0rem; + box-shadow: none; + transition: box-shadow 0.1s ease; + z-index: ''; +} +.ui.items > .item a, +.play-button.items > .item a, +.download-button.items > .item a { + cursor: pointer; +} +/*-------------- + Items +---------------*/ +.ui.items, +.play-button.items, +.download-button.items { + margin: 1.5em 0em; +} +.ui.items:first-child, +.play-button.items:first-child, +.download-button.items:first-child { + margin-top: 0em !important; +} +.ui.items:last-child, +.play-button.items:last-child, +.download-button.items:last-child { + margin-bottom: 0em !important; +} +/*-------------- + Item +---------------*/ +.ui.items > .item:after, +.play-button.items > .item:after, +.download-button.items > .item:after { + display: block; + content: ' '; + height: 0px; + clear: both; + overflow: hidden; + visibility: hidden; +} +.ui.items > .item:first-child, +.play-button.items > .item:first-child, +.download-button.items > .item:first-child { + margin-top: 0em; +} +.ui.items > .item:last-child, +.play-button.items > .item:last-child, +.download-button.items > .item:last-child { + margin-bottom: 0em; +} +/*-------------- + Images +---------------*/ +.ui.items > .item > .image, +.play-button.items > .item > .image, +.download-button.items > .item > .image { + position: relative; + flex: 0 0 auto; + display: block; + float: none; + margin: 0em; + padding: 0em; + max-height: ''; + align-self: top; +} +.ui.items > .item > .image > img, +.play-button.items > .item > .image > img, +.download-button.items > .item > .image > img { + display: block; + width: 100%; + height: auto; + border-radius: 0.125rem; + border: none; +} +.ui.items > .item > .image:only-child > img, +.play-button.items > .item > .image:only-child > img, +.download-button.items > .item > .image:only-child > img { + border-radius: 0rem; +} +/*-------------- + Content +---------------*/ +.ui.items > .item > .content, +.play-button.items > .item > .content, +.download-button.items > .item > .content { + display: block; + flex: 1 1 auto; + background: none; + margin: 0em; + padding: 0em; + box-shadow: none; + font-size: 1em; + border: none; + border-radius: 0em; +} +.ui.items > .item > .content:after, +.play-button.items > .item > .content:after, +.download-button.items > .item > .content:after { + display: block; + content: ' '; + height: 0px; + clear: both; + overflow: hidden; + visibility: hidden; +} +.ui.items > .item > .image + .content, +.play-button.items > .item > .image + .content, +.download-button.items > .item > .image + .content { + min-width: 0; + width: auto; + display: block; + margin-left: 0em; + align-self: top; + padding-left: 1.5em; +} +.ui.items > .item > .content > .header, +.play-button.items > .item > .content > .header, +.download-button.items > .item > .content > .header { + display: inline-block; + margin: -0.21425em 0em 0em; + font-family: 'Roboto Mono', 'Helvetica Neue', Arial, Helvetica, sans-serif; + font-weight: bold; + color: rgba(0, 0, 0, 0.85); +} +/* Default Header Size */ +.ui.items > .item > .content > .header:not(.ui), +.play-button.items > .item > .content > .header:not(.ui), +.download-button.items > .item > .content > .header:not(.ui) { + font-size: 1.28571429em; +} +/*-------------- + Floated +---------------*/ +.ui.items > .item [class*="left floated"], +.play-button.items > .item [class*="left floated"], +.download-button.items > .item [class*="left floated"] { + float: left; +} +.ui.items > .item [class*="right floated"], +.play-button.items > .item [class*="right floated"], +.download-button.items > .item [class*="right floated"] { + float: right; +} +/*-------------- + Content Image +---------------*/ +.ui.items > .item .content img, +.play-button.items > .item .content img, +.download-button.items > .item .content img { + align-self: middle; + width: ''; +} +.ui.items > .item img.avatar, +.ui.items > .item .avatar img, +.play-button.items > .item img.avatar, +.play-button.items > .item .avatar img, +.download-button.items > .item img.avatar, +.download-button.items > .item .avatar img { + width: ''; + height: ''; + border-radius: 500rem; +} +/*-------------- + Description +---------------*/ +.ui.items > .item > .content > .description, +.play-button.items > .item > .content > .description, +.download-button.items > .item > .content > .description { + margin-top: 0.6em; + max-width: auto; + font-size: 1em; + line-height: 1.4285em; + color: rgba(0, 0, 0, 0.87); +} +/*-------------- + Paragraph +---------------*/ +.ui.items > .item > .content p, +.play-button.items > .item > .content p, +.download-button.items > .item > .content p { + margin: 0em 0em 0.5em; +} +.ui.items > .item > .content p:last-child, +.play-button.items > .item > .content p:last-child, +.download-button.items > .item > .content p:last-child { + margin-bottom: 0em; +} +/*-------------- + Meta +---------------*/ +.ui.items > .item .meta, +.play-button.items > .item .meta, +.download-button.items > .item .meta { + margin: 0.5em 0em 0.5em; + font-size: 1em; + line-height: 1em; + color: rgba(0, 0, 0, 0.6); +} +.ui.items > .item .meta *, +.play-button.items > .item .meta *, +.download-button.items > .item .meta * { + margin-right: 0.3em; +} +.ui.items > .item .meta :last-child, +.play-button.items > .item .meta :last-child, +.download-button.items > .item .meta :last-child { + margin-right: 0em; +} +.ui.items > .item .meta [class*="right floated"], +.play-button.items > .item .meta [class*="right floated"], +.download-button.items > .item .meta [class*="right floated"] { + margin-right: 0em; + margin-left: 0.3em; +} +/*-------------- + Links +---------------*/ +/* Generic */ +.ui.items > .item > .content a:not(.ui), +.play-button.items > .item > .content a:not(.ui), +.download-button.items > .item > .content a:not(.ui) { + color: ''; + transition: color 0.1s ease; +} +.ui.items > .item > .content a:not(.ui):hover, +.play-button.items > .item > .content a:not(.ui):hover, +.download-button.items > .item > .content a:not(.ui):hover { + color: ''; +} +/* Header */ +.ui.items > .item > .content > a.header, +.play-button.items > .item > .content > a.header, +.download-button.items > .item > .content > a.header { + color: rgba(0, 0, 0, 0.85); +} +.ui.items > .item > .content > a.header:hover, +.play-button.items > .item > .content > a.header:hover, +.download-button.items > .item > .content > a.header:hover { + color: #1e70bf; +} +/* Meta */ +.ui.items > .item .meta > a:not(.ui), +.play-button.items > .item .meta > a:not(.ui), +.download-button.items > .item .meta > a:not(.ui) { + color: rgba(0, 0, 0, 0.4); +} +.ui.items > .item .meta > a:not(.ui):hover, +.play-button.items > .item .meta > a:not(.ui):hover, +.download-button.items > .item .meta > a:not(.ui):hover { + color: rgba(0, 0, 0, 0.87); +} +/*-------------- + Labels +---------------*/ +/*-----Star----- */ +/* Icon */ +.ui.items > .item > .content .favorite.icon, +.play-button.items > .item > .content .favorite.icon, +.download-button.items > .item > .content .favorite.icon { + cursor: pointer; + opacity: 0.75; + transition: color 0.1s ease; +} +.ui.items > .item > .content .favorite.icon:hover, +.play-button.items > .item > .content .favorite.icon:hover, +.download-button.items > .item > .content .favorite.icon:hover { + opacity: 1; + color: #FFB70A; +} +.ui.items > .item > .content .active.favorite.icon, +.play-button.items > .item > .content .active.favorite.icon, +.download-button.items > .item > .content .active.favorite.icon { + color: #FFE623; +} +/*-----Like----- */ +/* Icon */ +.ui.items > .item > .content .like.icon, +.play-button.items > .item > .content .like.icon, +.download-button.items > .item > .content .like.icon { + cursor: pointer; + opacity: 0.75; + transition: color 0.1s ease; +} +.ui.items > .item > .content .like.icon:hover, +.play-button.items > .item > .content .like.icon:hover, +.download-button.items > .item > .content .like.icon:hover { + opacity: 1; + color: #FF2733; +} +.ui.items > .item > .content .active.like.icon, +.play-button.items > .item > .content .active.like.icon, +.download-button.items > .item > .content .active.like.icon { + color: #FF2733; +} +/*---------------- + Extra Content +-----------------*/ +.ui.items > .item .extra, +.play-button.items > .item .extra, +.download-button.items > .item .extra { + display: block; + position: relative; + background: none; + margin: 0.5rem 0em 0em; + width: 100%; + padding: 0em 0em 0em; + top: 0em; + left: 0em; + color: rgba(0, 0, 0, 0.4); + box-shadow: none; + transition: color 0.1s ease; + border-top: none; +} +.ui.items > .item .extra > *, +.play-button.items > .item .extra > *, +.download-button.items > .item .extra > * { + margin: 0.25rem 0.5rem 0.25rem 0em; +} +.ui.items > .item .extra > [class*="right floated"], +.play-button.items > .item .extra > [class*="right floated"], +.download-button.items > .item .extra > [class*="right floated"] { + margin: 0.25rem 0em 0.25rem 0.5rem; +} +.ui.items > .item .extra:after, +.play-button.items > .item .extra:after, +.download-button.items > .item .extra:after { + display: block; + content: ' '; + height: 0px; + clear: both; + overflow: hidden; + visibility: hidden; +} +/******************************* + Responsive +*******************************/ +/* Default Image Width */ +.ui.items > .item > .image:not(.ui), +.play-button.items > .item > .image:not(.ui), +.download-button.items > .item > .image:not(.ui) { + width: 175px; +} +/* Tablet Only */ +@media only screen and (min-width: 768px) and (max-width: 991px) { + .ui.items > .item, + .play-button.items > .item, + .download-button.items > .item { + margin: 1em 0em; + } + .ui.items > .item > .image:not(.ui), + .play-button.items > .item > .image:not(.ui), + .download-button.items > .item > .image:not(.ui) { + width: 150px; + } + .ui.items > .item > .image + .content, + .play-button.items > .item > .image + .content, + .download-button.items > .item > .image + .content { + display: block; + padding: 0em 0em 0em 1em; + } +} +/* Mobile Only */ +@media only screen and (max-width: 767px) { + .ui.items:not(.unstackable) > .item, + .play-button.items:not(.unstackable) > .item, + .download-button.items:not(.unstackable) > .item { + flex-direction: column; + margin: 2em 0em; + } + .ui.items:not(.unstackable) > .item > .image, + .play-button.items:not(.unstackable) > .item > .image, + .download-button.items:not(.unstackable) > .item > .image { + display: block; + margin-left: auto; + margin-right: auto; + } + .ui.items:not(.unstackable) > .item > .image, + .ui.items:not(.unstackable) > .item > .image > img, + .play-button.items:not(.unstackable) > .item > .image, + .play-button.items:not(.unstackable) > .item > .image > img, + .download-button.items:not(.unstackable) > .item > .image, + .download-button.items:not(.unstackable) > .item > .image > img { + max-width: 100% !important; + width: auto !important; + max-height: 250px !important; + } + .ui.items:not(.unstackable) > .item > .image + .content, + .play-button.items:not(.unstackable) > .item > .image + .content, + .download-button.items:not(.unstackable) > .item > .image + .content { + display: block; + padding: 1.5em 0em 0em; + } +} +/******************************* + Variations +*******************************/ +/*------------------- + Aligned +--------------------*/ +.ui.items > .item > .image + [class*="top aligned"].content, +.play-button.items > .item > .image + [class*="top aligned"].content, +.download-button.items > .item > .image + [class*="top aligned"].content { + align-self: flex-start; +} +.ui.items > .item > .image + [class*="middle aligned"].content, +.play-button.items > .item > .image + [class*="middle aligned"].content, +.download-button.items > .item > .image + [class*="middle aligned"].content { + align-self: center; +} +.ui.items > .item > .image + [class*="bottom aligned"].content, +.play-button.items > .item > .image + [class*="bottom aligned"].content, +.download-button.items > .item > .image + [class*="bottom aligned"].content { + align-self: flex-end; +} +/*-------------- + Relaxed +---------------*/ +.ui.relaxed.items > .item, +.play-button.relaxed.items > .item, +.download-button.relaxed.items > .item { + margin: 1.5em 0em; +} +.ui[class*="very relaxed"].items > .item, +.play-button[class*="very relaxed"].items > .item, +.download-button[class*="very relaxed"].items > .item { + margin: 2em 0em; +} +/*------------------- + Divided +--------------------*/ +.ui.divided.items > .item, +.play-button.divided.items > .item, +.download-button.divided.items > .item { + border-top: 1px solid rgba(34, 36, 38, 0.15); + margin: 0em; + padding: 1em 0em; +} +.ui.divided.items > .item:first-child, +.play-button.divided.items > .item:first-child, +.download-button.divided.items > .item:first-child { + border-top: none; + margin-top: 0em !important; + padding-top: 0em !important; +} +.ui.divided.items > .item:last-child, +.play-button.divided.items > .item:last-child, +.download-button.divided.items > .item:last-child { + margin-bottom: 0em !important; + padding-bottom: 0em !important; +} +/* Relaxed Divided */ +.ui.relaxed.divided.items > .item, +.play-button.relaxed.divided.items > .item, +.download-button.relaxed.divided.items > .item { + margin: 0em; + padding: 1.5em 0em; +} +.ui[class*="very relaxed"].divided.items > .item, +.play-button[class*="very relaxed"].divided.items > .item, +.download-button[class*="very relaxed"].divided.items > .item { + margin: 0em; + padding: 2em 0em; +} +/*------------------- + Link +--------------------*/ +.ui.items a.item:hover, +.ui.link.items > .item:hover, +.play-button.items a.item:hover, +.play-button.link.items > .item:hover, +.download-button.items a.item:hover, +.download-button.link.items > .item:hover { + cursor: pointer; +} +.ui.items a.item:hover .content .header, +.ui.link.items > .item:hover .content .header, +.play-button.items a.item:hover .content .header, +.play-button.link.items > .item:hover .content .header, +.download-button.items a.item:hover .content .header, +.download-button.link.items > .item:hover .content .header { + color: #1e70bf; +} +/*-------------- + Size +---------------*/ +.ui.items > .item, +.play-button.items > .item, +.download-button.items > .item { + font-size: 1em; +} +/*--------------- + Unstackable +----------------*/ +@media only screen and (max-width: 767px) { + .ui.unstackable.items > .item > .image, + .ui.unstackable.items > .item > .image > img, + .play-button.unstackable.items > .item > .image, + .play-button.unstackable.items > .item > .image > img, + .download-button.unstackable.items > .item > .image, + .download-button.unstackable.items > .item > .image > img { + width: 125px !important; + } +} +/******************************* + Theme Overrides +*******************************/ +/******************************* + User Variable Overrides +*******************************/ +/*! + * # Semantic UI - Statistic + * http://github.com/semantic-org/semantic-ui/ + * + * + * Released under the MIT license + * http://opensource.org/licenses/MIT + * + */ +/******************************* + Theme +*******************************/ +/* + +████████╗██╗ ██╗███████╗███╗ ███╗███████╗███████╗ +╚══██╔══╝██║ ██║██╔════╝████╗ ████║██╔════╝██╔════╝ + ██║ ███████║█████╗ ██╔████╔██║█████╗ ███████╗ + ██║ ██╔══██║██╔══╝ ██║╚██╔╝██║██╔══╝ ╚════██║ + ██║ ██║ ██║███████╗██║ ╚═╝ ██║███████╗███████║ + ╚═╝ ╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝╚══════╝╚══════╝ + +*/ +/******************************* + Theme Selection +*******************************/ +/* To override a theme for an individual element + specify theme name below +*/ +/* Global */ +/* Elements */ +/* Collections */ +/* Modules */ +/* Views */ +/******************************* + Folders +*******************************/ +/* Path to theme packages */ +/* Path to site override folder */ +/******************************* + Import Theme +*******************************/ +/******************************* + Import Directives +*******************************/ +/*------------------ + Theme +-------------------*/ +/*-------------------- + Site Variables +---------------------*/ +/* Default site.variables */ +/******************************* + Site Settings +*******************************/ +/*------------------- + Fonts +--------------------*/ +/*------------------- + Base Sizes +--------------------*/ +/* This is the single variable that controls them all */ +/* The size of page text */ +/*------------------- + Border Radius +--------------------*/ +/* See Power-user section below + for explanation of @px variables +*/ +/*------------------- + Brand Colors +--------------------*/ +/*-------------- + Page Heading +---------------*/ +/*-------------- + Form Input +---------------*/ +/* This adjusts the default form input across all elements */ +/* Input Text Color */ +/* Line Height Default For Inputs in Browser (Descendors are 17px at 14px base em) */ +/*------------------- + Focused Input +--------------------*/ +/* Used on inputs, textarea etc */ +/* Used on dropdowns, other larger blocks */ +/*------------------- + Sizes +--------------------*/ +/* + Sizes are all expressed in terms of 14px/em (default em) + This ensures these "ratios" remain constant despite changes in EM +*/ +/*------------------- + Page +--------------------*/ +/*------------------- + Paragraph +--------------------*/ +/*------------------- + Links +--------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ +/*------------------- + Highlighted Text +--------------------*/ +/*------------------- + Loader +--------------------*/ +/*------------------- + Grid +--------------------*/ +/*------------------- + Transitions +--------------------*/ +/*------------------- + Breakpoints +--------------------*/ +/*------------------- + Site Colors +--------------------*/ +/*--- Colors ---*/ +/*--- Light Colors ---*/ +/*--- Neutrals ---*/ +/*--- Colored Backgrounds ---*/ +/*--- Colored Headers ---*/ +/*--- Colored Text ---*/ +/*--- Colored Border ---*/ +/*------------------- + Alpha Colors +--------------------*/ +/*------------------- + Accents +--------------------*/ +/* Differentiating Neutrals */ +/* Differentiating Layers */ +/******************************* + Power-User +*******************************/ +/*------------------- + Emotive Colors +--------------------*/ +/* Positive */ +/* Negative */ +/* Info */ +/* Warning */ +/*------------------- + Paths +--------------------*/ +/* For source only. Modified in gulp for dist */ +/*------------------- + Em Sizes +--------------------*/ +/* + This rounds @size values to the closest pixel then expresses that value in (r)em. + This ensures all size values round to exact pixels +*/ +/* em */ +/* rem */ +/*------------------- + Icons +--------------------*/ +/* Maximum Glyph Width of Icon */ +/*------------------- + Neutral Text +--------------------*/ +/*------------------- + Brand Colors +--------------------*/ +/*------------------- + Borders +--------------------*/ +/*------------------- + Derived Values +--------------------*/ +/* Loaders Position Offset */ +/* Rendered Scrollbar Width */ +/* Maximum Single Character Glyph Width, aka Capital "W" */ +/* Used to match floats with text */ +/* Header Spacing */ +/* Minimum Mobile Width */ +/* Positive / Negative Dupes */ +/* Responsive */ +/*------------------- + Exact Pixel Values +--------------------*/ +/* + These are used to specify exact pixel values in em + for things like borders that remain constantly + sized as emSize adjusts + + Since there are many more sizes than names for sizes, + these are named by their original pixel values. + +*/ +/* Columns */ +/******************************* + States +*******************************/ +/*------------------- + Disabled +--------------------*/ +/*------------------- + Hover +--------------------*/ +/*--- Shadows ---*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Focus +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Down (:active) +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Active +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/* Packaged site.variables */ +/******************************* + User Global Variables +*******************************/ +/*------------------- + Fonts +--------------------*/ +/*------------------- + Breakpoints +--------------------*/ +/* +@mobileBreakpoint : unit( (63 * @emSize), px); +@tabletBreakpoint : unit( (79 * @emSize), px); +@computerBreakpoint : unit( (91 * @emSize), px); +@largeMonitorBreakpoint : unit( (99 * @emSize), px); +@widescreenMonitorBreakpoint : unit( (119 * @emSize), px); +*/ +/******************************* + PXT Variables +*******************************/ +/*------------------- + Menu +--------------------*/ +/*------------------- + Layout +--------------------*/ +/*------------------- + Background +--------------------*/ +/*------------------- + Full screen +--------------------*/ +/*------------------- + Side Docs +--------------------*/ +/*------------------- + Editor +--------------------*/ +/* Component's site.variables */ +/******************************* + Site Settings +*******************************/ +/*------------------- + Fonts +--------------------*/ +/*------------------- + Base Sizes +--------------------*/ +/* This is the single variable that controls them all */ +/* The size of page text */ +/*------------------- + Border Radius +--------------------*/ +/* See Power-user section below + for explanation of @px variables +*/ +/*------------------- + Brand Colors +--------------------*/ +/*-------------- + Page Heading +---------------*/ +/*-------------- + Form Input +---------------*/ +/* This adjusts the default form input across all elements */ +/* Input Text Color */ +/* Line Height Default For Inputs in Browser (Descendors are 17px at 14px base em) */ +/*------------------- + Focused Input +--------------------*/ +/* Used on inputs, textarea etc */ +/* Used on dropdowns, other larger blocks */ +/*------------------- + Sizes +--------------------*/ +/* + Sizes are all expressed in terms of 14px/em (default em) + This ensures these "ratios" remain constant despite changes in EM +*/ +/*------------------- + Page +--------------------*/ +/*------------------- + Paragraph +--------------------*/ +/*------------------- + Links +--------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ +/*------------------- + Highlighted Text +--------------------*/ +/*------------------- + Loader +--------------------*/ +/*------------------- + Grid +--------------------*/ +/*------------------- + Transitions +--------------------*/ +/*------------------- + Breakpoints +--------------------*/ +/*------------------- + Site Colors +--------------------*/ +/*--- Colors ---*/ +/*--- Light Colors ---*/ +/*--- Neutrals ---*/ +/*--- Colored Backgrounds ---*/ +/*--- Colored Headers ---*/ +/*--- Colored Text ---*/ +/*--- Colored Border ---*/ +/*------------------- + Alpha Colors +--------------------*/ +/*------------------- + Accents +--------------------*/ +/* Differentiating Neutrals */ +/* Differentiating Layers */ +/******************************* + Power-User +*******************************/ +/*------------------- + Emotive Colors +--------------------*/ +/* Positive */ +/* Negative */ +/* Info */ +/* Warning */ +/*------------------- + Paths +--------------------*/ +/* For source only. Modified in gulp for dist */ +/*------------------- + Em Sizes +--------------------*/ +/* + This rounds @size values to the closest pixel then expresses that value in (r)em. + This ensures all size values round to exact pixels +*/ +/* em */ +/* rem */ +/*------------------- + Icons +--------------------*/ +/* Maximum Glyph Width of Icon */ +/*------------------- + Neutral Text +--------------------*/ +/*------------------- + Brand Colors +--------------------*/ +/*------------------- + Borders +--------------------*/ +/*------------------- + Derived Values +--------------------*/ +/* Loaders Position Offset */ +/* Rendered Scrollbar Width */ +/* Maximum Single Character Glyph Width, aka Capital "W" */ +/* Used to match floats with text */ +/* Header Spacing */ +/* Minimum Mobile Width */ +/* Positive / Negative Dupes */ +/* Responsive */ +/*------------------- + Exact Pixel Values +--------------------*/ +/* + These are used to specify exact pixel values in em + for things like borders that remain constantly + sized as emSize adjusts + + Since there are many more sizes than names for sizes, + these are named by their original pixel values. + +*/ +/* Columns */ +/******************************* + States +*******************************/ +/*------------------- + Disabled +--------------------*/ +/*------------------- + Hover +--------------------*/ +/*--- Shadows ---*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Focus +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Down (:active) +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Active +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/* Site theme site.variables */ +/******************************* + User Global Variables +*******************************/ +/*------------------- + Site Colors +--------------------*/ +/******************************* + PXT Overrides +*******************************/ +/*------------------- + Component Variables +---------------------*/ +/* Default */ +/******************************* + Statistic +*******************************/ +/*------------------- + View +--------------------*/ +/* Group */ +/* Group Element */ +/*------------------- + Content +--------------------*/ +/* Value */ +/* Label */ +/* Text */ +/* Label Image */ +/*------------------- + Types +--------------------*/ +/*------------------- + Variations +--------------------*/ +/* Floated */ +/* Inverted */ +/* Item Width */ +/* Size */ +/* Packaged Theme */ +/******************************* + Statistic +*******************************/ +/*------------------- + View +--------------------*/ +/* Group */ +/* Group Element */ +/*------------------- + Content +--------------------*/ +/* Value */ +/* Label */ +/* Text */ +/* Label Image */ +/*------------------- + Types +--------------------*/ +/*------------------- + Variations +--------------------*/ +/* Floated */ +/* Inverted */ +/* Item Width */ +/* Size */ +/* Site Theme */ +/******************************* + User Variable Overrides +*******************************/ +/******************************* + Mix-ins +*******************************/ +/*------------------ + Fonts +-------------------*/ +/*------------------ + Overrides +-------------------*/ +/* End Config */ +/******************************* + Statistic +*******************************/ +/* Standalone */ +.ui.statistic, +.play-button.statistic, +.download-button.statistic { + display: inline-flex; + flex-direction: column; + margin: 1em 0em; + max-width: auto; +} +.ui.statistic + .ui.statistic, +.play-button.statistic + .play-button.statistic, +.download-button.statistic + .download-button.statistic { + margin: 0em 0em 0em 1.5em; +} +.ui.statistic:first-child, +.play-button.statistic:first-child, +.download-button.statistic:first-child { + margin-top: 0em; +} +.ui.statistic:last-child, +.play-button.statistic:last-child, +.download-button.statistic:last-child { + margin-bottom: 0em; +} +/******************************* + Group +*******************************/ +/* Grouped */ +.ui.statistics, +.play-button.statistics, +.download-button.statistics { + display: flex; + align-items: flex-start; + flex-wrap: wrap; +} +.ui.statistics > .statistic, +.play-button.statistics > .statistic, +.download-button.statistics > .statistic { + display: inline-flex; + flex: 0 1 auto; + flex-direction: column; + margin: 0em 1.5em 2em; + max-width: auto; +} +.ui.statistics, +.play-button.statistics, +.download-button.statistics { + display: flex; + margin: 1em -1.5em -2em; +} +/* Clearing */ +.ui.statistics:after, +.play-button.statistics:after, +.download-button.statistics:after { + display: block; + content: ' '; + height: 0px; + clear: both; + overflow: hidden; + visibility: hidden; +} +.ui.statistics:first-child, +.play-button.statistics:first-child, +.download-button.statistics:first-child { + margin-top: 0em; +} +.ui.statistics:last-child, +.play-button.statistics:last-child, +.download-button.statistics:last-child { + margin-bottom: 0em; +} +/******************************* + Content +*******************************/ +/*-------------- + Value +---------------*/ +.ui.statistics .statistic > .value, +.ui.statistic > .value, +.play-button.statistics .statistic > .value, +.play-button.statistic > .value, +.download-button.statistics .statistic > .value, +.download-button.statistic > .value { + font-family: 'Roboto Mono', 'Helvetica Neue', Arial, Helvetica, sans-serif; + font-size: 4rem; + font-weight: normal; + line-height: 1em; + color: #1B1C1D; + text-transform: uppercase; + text-align: center; +} +/*-------------- + Label +---------------*/ +.ui.statistics .statistic > .label, +.ui.statistic > .label, +.play-button.statistics .statistic > .label, +.play-button.statistic > .label, +.download-button.statistics .statistic > .label, +.download-button.statistic > .label { + font-family: 'Roboto Mono', 'Helvetica Neue', Arial, Helvetica, sans-serif; + font-size: 1em; + font-weight: bold; + color: rgba(0, 0, 0, 0.87); + text-transform: uppercase; + text-align: center; +} +/* Top Label */ +.ui.statistics .statistic > .label ~ .value, +.ui.statistic > .label ~ .value, +.play-button.statistics .statistic > .label ~ .value, +.play-button.statistic > .label ~ .value, +.download-button.statistics .statistic > .label ~ .value, +.download-button.statistic > .label ~ .value { + margin-top: 0rem; +} +/* Bottom Label */ +.ui.statistics .statistic > .value ~ .label, +.ui.statistic > .value ~ .label, +.play-button.statistics .statistic > .value ~ .label, +.play-button.statistic > .value ~ .label, +.download-button.statistics .statistic > .value ~ .label, +.download-button.statistic > .value ~ .label { + margin-top: 0rem; +} +/******************************* + Types +*******************************/ +/*-------------- + Icon Value +---------------*/ +.ui.statistics .statistic > .value .icon, +.ui.statistic > .value .icon, +.play-button.statistics .statistic > .value .icon, +.play-button.statistic > .value .icon, +.download-button.statistics .statistic > .value .icon, +.download-button.statistic > .value .icon { + opacity: 1; + width: auto; + margin: 0em; +} +/*-------------- + Text Value +---------------*/ +.ui.statistics .statistic > .text.value, +.ui.statistic > .text.value, +.play-button.statistics .statistic > .text.value, +.play-button.statistic > .text.value, +.download-button.statistics .statistic > .text.value, +.download-button.statistic > .text.value { + line-height: 1em; + min-height: 2em; + font-weight: bold; + text-align: center; +} +.ui.statistics .statistic > .text.value + .label, +.ui.statistic > .text.value + .label, +.play-button.statistics .statistic > .text.value + .label, +.play-button.statistic > .text.value + .label, +.download-button.statistics .statistic > .text.value + .label, +.download-button.statistic > .text.value + .label { + text-align: center; +} +/*-------------- + Image Value +---------------*/ +.ui.statistics .statistic > .value img, +.ui.statistic > .value img, +.play-button.statistics .statistic > .value img, +.play-button.statistic > .value img, +.download-button.statistics .statistic > .value img, +.download-button.statistic > .value img { + max-height: 3rem; + vertical-align: baseline; +} +/******************************* + Variations +*******************************/ +/*-------------- + Count +---------------*/ +.ui.ten.statistics, +.play-button.ten.statistics, +.download-button.ten.statistics { + margin: 0em 0em -2em; +} +.ui.ten.statistics .statistic, +.play-button.ten.statistics .statistic, +.download-button.ten.statistics .statistic { + min-width: 10%; + margin: 0em 0em 2em; +} +.ui.nine.statistics, +.play-button.nine.statistics, +.download-button.nine.statistics { + margin: 0em 0em -2em; +} +.ui.nine.statistics .statistic, +.play-button.nine.statistics .statistic, +.download-button.nine.statistics .statistic { + min-width: 11.11111111%; + margin: 0em 0em 2em; +} +.ui.eight.statistics, +.play-button.eight.statistics, +.download-button.eight.statistics { + margin: 0em 0em -2em; +} +.ui.eight.statistics .statistic, +.play-button.eight.statistics .statistic, +.download-button.eight.statistics .statistic { + min-width: 12.5%; + margin: 0em 0em 2em; +} +.ui.seven.statistics, +.play-button.seven.statistics, +.download-button.seven.statistics { + margin: 0em 0em -2em; +} +.ui.seven.statistics .statistic, +.play-button.seven.statistics .statistic, +.download-button.seven.statistics .statistic { + min-width: 14.28571429%; + margin: 0em 0em 2em; +} +.ui.six.statistics, +.play-button.six.statistics, +.download-button.six.statistics { + margin: 0em 0em -2em; +} +.ui.six.statistics .statistic, +.play-button.six.statistics .statistic, +.download-button.six.statistics .statistic { + min-width: 16.66666667%; + margin: 0em 0em 2em; +} +.ui.five.statistics, +.play-button.five.statistics, +.download-button.five.statistics { + margin: 0em 0em -2em; +} +.ui.five.statistics .statistic, +.play-button.five.statistics .statistic, +.download-button.five.statistics .statistic { + min-width: 20%; + margin: 0em 0em 2em; +} +.ui.four.statistics, +.play-button.four.statistics, +.download-button.four.statistics { + margin: 0em 0em -2em; +} +.ui.four.statistics .statistic, +.play-button.four.statistics .statistic, +.download-button.four.statistics .statistic { + min-width: 25%; + margin: 0em 0em 2em; +} +.ui.three.statistics, +.play-button.three.statistics, +.download-button.three.statistics { + margin: 0em 0em -2em; +} +.ui.three.statistics .statistic, +.play-button.three.statistics .statistic, +.download-button.three.statistics .statistic { + min-width: 33.33333333%; + margin: 0em 0em 2em; +} +.ui.two.statistics, +.play-button.two.statistics, +.download-button.two.statistics { + margin: 0em 0em -2em; +} +.ui.two.statistics .statistic, +.play-button.two.statistics .statistic, +.download-button.two.statistics .statistic { + min-width: 50%; + margin: 0em 0em 2em; +} +.ui.one.statistics, +.play-button.one.statistics, +.download-button.one.statistics { + margin: 0em 0em -2em; +} +.ui.one.statistics .statistic, +.play-button.one.statistics .statistic, +.download-button.one.statistics .statistic { + min-width: 100%; + margin: 0em 0em 2em; +} +/*-------------- + Horizontal +---------------*/ +.ui.horizontal.statistic, +.play-button.horizontal.statistic, +.download-button.horizontal.statistic { + flex-direction: row; + align-items: center; +} +.ui.horizontal.statistics, +.play-button.horizontal.statistics, +.download-button.horizontal.statistics { + flex-direction: column; + margin: 0em; + max-width: none; +} +.ui.horizontal.statistics .statistic, +.play-button.horizontal.statistics .statistic, +.download-button.horizontal.statistics .statistic { + flex-direction: row; + align-items: center; + max-width: none; + margin: 1em 0em; +} +.ui.horizontal.statistic > .text.value, +.ui.horizontal.statistics > .statistic > .text.value, +.play-button.horizontal.statistic > .text.value, +.play-button.horizontal.statistics > .statistic > .text.value, +.download-button.horizontal.statistic > .text.value, +.download-button.horizontal.statistics > .statistic > .text.value { + min-height: 0em !important; +} +.ui.horizontal.statistics .statistic > .value .icon, +.ui.horizontal.statistic > .value .icon, +.play-button.horizontal.statistics .statistic > .value .icon, +.play-button.horizontal.statistic > .value .icon, +.download-button.horizontal.statistics .statistic > .value .icon, +.download-button.horizontal.statistic > .value .icon { + width: 1.18em; +} +.ui.horizontal.statistics .statistic > .value, +.ui.horizontal.statistic > .value, +.play-button.horizontal.statistics .statistic > .value, +.play-button.horizontal.statistic > .value, +.download-button.horizontal.statistics .statistic > .value, +.download-button.horizontal.statistic > .value { + display: inline-block; + vertical-align: middle; +} +.ui.horizontal.statistics .statistic > .label, +.ui.horizontal.statistic > .label, +.play-button.horizontal.statistics .statistic > .label, +.play-button.horizontal.statistic > .label, +.download-button.horizontal.statistics .statistic > .label, +.download-button.horizontal.statistic > .label { + display: inline-block; + vertical-align: middle; + margin: 0em 0em 0em 0.75em; +} +/*-------------- + Colors +---------------*/ +.ui.red.statistics .statistic > .value, +.ui.statistics .red.statistic > .value, +.ui.red.statistic > .value, +.play-button.red.statistics .statistic > .value, +.play-button.statistics .red.statistic > .value, +.play-button.red.statistic > .value, +.download-button.red.statistics .statistic > .value, +.download-button.statistics .red.statistic > .value, +.download-button.red.statistic > .value { + color: #E81123; +} +.ui.orange.statistics .statistic > .value, +.ui.statistics .orange.statistic > .value, +.ui.orange.statistic > .value, +.play-button.orange.statistics .statistic > .value, +.play-button.statistics .orange.statistic > .value, +.play-button.orange.statistic > .value, +.download-button.orange.statistics .statistic > .value, +.download-button.statistics .orange.statistic > .value, +.download-button.orange.statistic > .value { + color: #DF4600; +} +.ui.yellow.statistics .statistic > .value, +.ui.statistics .yellow.statistic > .value, +.ui.yellow.statistic > .value, +.play-button.yellow.statistics .statistic > .value, +.play-button.statistics .yellow.statistic > .value, +.play-button.yellow.statistic > .value, +.download-button.yellow.statistics .statistic > .value, +.download-button.statistics .yellow.statistic > .value, +.download-button.yellow.statistic > .value, +.ui.download-button.statistics .statistic > .value, +.ui.statistics .download-button.statistic > .value, +.ui.download-button.statistic > .value { + color: #F4C918; +} +.ui.olive.statistics .statistic > .value, +.ui.statistics .olive.statistic > .value, +.ui.olive.statistic > .value, +.play-button.olive.statistics .statistic > .value, +.play-button.statistics .olive.statistic > .value, +.play-button.olive.statistic > .value, +.download-button.olive.statistics .statistic > .value, +.download-button.statistics .olive.statistic > .value, +.download-button.olive.statistic > .value { + color: #B5CC18; +} +.ui.green.statistics .statistic > .value, +.ui.statistics .green.statistic > .value, +.ui.green.statistic > .value, +.ui.ui.button.getting-started-btn.statistics .statistic > .value, +.ui.statistics .ui.button.getting-started-btn.statistic > .value, +.ui.ui.button.getting-started-btn.statistic > .value, +.play-button.green.statistics .statistic > .value, +.play-button.statistics .green.statistic > .value, +.play-button.green.statistic > .value, +.download-button.green.statistics .statistic > .value, +.download-button.statistics .green.statistic > .value, +.download-button.green.statistic > .value, +.ui.play-button.button.getting-started-btn.statistics .statistic > .value, +.ui.statistics .play-button.button.getting-started-btn.statistic > .value, +.ui.play-button.button.getting-started-btn.statistic > .value, +.ui.ui.play-button.getting-started-btn.statistics .statistic > .value, +.ui.statistics .ui.play-button.getting-started-btn.statistic > .value, +.ui.ui.play-button.getting-started-btn.statistic > .value, +.ui.download-button.button.getting-started-btn.statistics .statistic > .value, +.ui.statistics .download-button.button.getting-started-btn.statistic > .value, +.ui.download-button.button.getting-started-btn.statistic > .value, +.ui.ui.download-button.getting-started-btn.statistics .statistic > .value, +.ui.statistics .ui.download-button.getting-started-btn.statistic > .value, +.ui.ui.download-button.getting-started-btn.statistic > .value { + color: #3FC863; +} +.ui.teal.statistics .statistic > .value, +.ui.statistics .teal.statistic > .value, +.ui.teal.statistic > .value, +.play-button.teal.statistics .statistic > .value, +.play-button.statistics .teal.statistic > .value, +.play-button.teal.statistic > .value, +.download-button.teal.statistics .statistic > .value, +.download-button.statistics .teal.statistic > .value, +.download-button.teal.statistic > .value { + color: #008272; +} +.ui.blue.statistics .statistic > .value, +.ui.statistics .blue.statistic > .value, +.ui.blue.statistic > .value, +.play-button.blue.statistics .statistic > .value, +.play-button.statistics .blue.statistic > .value, +.play-button.blue.statistic > .value, +.ui.play-button.statistics .statistic > .value, +.ui.statistics .play-button.statistic > .value, +.ui.play-button.statistic > .value, +.download-button.blue.statistics .statistic > .value, +.download-button.statistics .blue.statistic > .value, +.download-button.blue.statistic > .value { + color: #54C9C9; +} +.ui.violet.statistics .statistic > .value, +.ui.statistics .violet.statistic > .value, +.ui.violet.statistic > .value, +.play-button.violet.statistics .statistic > .value, +.play-button.statistics .violet.statistic > .value, +.play-button.violet.statistic > .value, +.download-button.violet.statistics .statistic > .value, +.download-button.statistics .violet.statistic > .value, +.download-button.violet.statistic > .value { + color: #C90072; +} +.ui.purple.statistics .statistic > .value, +.ui.statistics .purple.statistic > .value, +.ui.purple.statistic > .value, +.play-button.purple.statistics .statistic > .value, +.play-button.statistics .purple.statistic > .value, +.play-button.purple.statistic > .value, +.download-button.purple.statistics .statistic > .value, +.download-button.statistics .purple.statistic > .value, +.download-button.purple.statistic > .value { + color: #8169E6; +} +.ui.pink.statistics .statistic > .value, +.ui.statistics .pink.statistic > .value, +.ui.pink.statistic > .value, +.play-button.pink.statistics .statistic > .value, +.play-button.statistics .pink.statistic > .value, +.play-button.pink.statistic > .value, +.download-button.pink.statistics .statistic > .value, +.download-button.statistics .pink.statistic > .value, +.download-button.pink.statistic > .value { + color: #E2008C; +} +.ui.brown.statistics .statistic > .value, +.ui.statistics .brown.statistic > .value, +.ui.brown.statistic > .value, +.play-button.brown.statistics .statistic > .value, +.play-button.statistics .brown.statistic > .value, +.play-button.brown.statistic > .value, +.download-button.brown.statistics .statistic > .value, +.download-button.statistics .brown.statistic > .value, +.download-button.brown.statistic > .value { + color: #6B5B4C; +} +.ui.grey.statistics .statistic > .value, +.ui.statistics .grey.statistic > .value, +.ui.grey.statistic > .value, +.ui.ui.button.editortools-btn.statistics .statistic > .value, +.ui.statistics .ui.button.editortools-btn.statistic > .value, +.ui.ui.button.editortools-btn.statistic > .value, +.play-button.grey.statistics .statistic > .value, +.play-button.statistics .grey.statistic > .value, +.play-button.grey.statistic > .value, +.download-button.grey.statistics .statistic > .value, +.download-button.statistics .grey.statistic > .value, +.download-button.grey.statistic > .value, +.ui.play-button.button.editortools-btn.statistics .statistic > .value, +.ui.statistics .play-button.button.editortools-btn.statistic > .value, +.ui.play-button.button.editortools-btn.statistic > .value, +.ui.ui.play-button.editortools-btn.statistics .statistic > .value, +.ui.statistics .ui.play-button.editortools-btn.statistic > .value, +.ui.ui.play-button.editortools-btn.statistic > .value, +.ui.download-button.button.editortools-btn.statistics .statistic > .value, +.ui.statistics .download-button.button.editortools-btn.statistic > .value, +.ui.download-button.button.editortools-btn.statistic > .value, +.ui.ui.download-button.editortools-btn.statistics .statistic > .value, +.ui.statistics .ui.download-button.editortools-btn.statistic > .value, +.ui.ui.download-button.editortools-btn.statistic > .value { + color: #42495F; +} +/*-------------- + Inverted +---------------*/ +.ui.inverted.statistics .statistic > .value, +.ui.inverted.statistic .value, +.play-button.inverted.statistics .statistic > .value, +.play-button.inverted.statistic .value, +.download-button.inverted.statistics .statistic > .value, +.download-button.inverted.statistic .value { + color: #FFFFFF; +} +.ui.inverted.statistics .statistic > .label, +.ui.inverted.statistic .label, +.play-button.inverted.statistics .statistic > .label, +.play-button.inverted.statistic .label, +.download-button.inverted.statistics .statistic > .label, +.download-button.inverted.statistic .label { + color: rgba(255, 255, 255, 0.9); +} +.ui.inverted.red.statistics .statistic > .value, +.ui.statistics .inverted.red.statistic > .value, +.ui.inverted.red.statistic > .value, +.play-button.inverted.red.statistics .statistic > .value, +.play-button.statistics .inverted.red.statistic > .value, +.play-button.inverted.red.statistic > .value, +.download-button.inverted.red.statistics .statistic > .value, +.download-button.statistics .inverted.red.statistic > .value, +.download-button.inverted.red.statistic > .value { + color: #FF695E; +} +.ui.inverted.orange.statistics .statistic > .value, +.ui.statistics .inverted.orange.statistic > .value, +.ui.inverted.orange.statistic > .value, +.play-button.inverted.orange.statistics .statistic > .value, +.play-button.statistics .inverted.orange.statistic > .value, +.play-button.inverted.orange.statistic > .value, +.download-button.inverted.orange.statistics .statistic > .value, +.download-button.statistics .inverted.orange.statistic > .value, +.download-button.inverted.orange.statistic > .value { + color: #FF851B; +} +.ui.inverted.yellow.statistics .statistic > .value, +.ui.statistics .inverted.yellow.statistic > .value, +.ui.inverted.yellow.statistic > .value, +.play-button.inverted.yellow.statistics .statistic > .value, +.play-button.statistics .inverted.yellow.statistic > .value, +.play-button.inverted.yellow.statistic > .value, +.download-button.inverted.yellow.statistics .statistic > .value, +.download-button.statistics .inverted.yellow.statistic > .value, +.download-button.inverted.yellow.statistic > .value, +.ui.inverted.download-button.statistics .statistic > .value, +.ui.statistics .inverted.download-button.statistic > .value, +.ui.inverted.download-button.statistic > .value { + color: #FFE21F; +} +.ui.inverted.olive.statistics .statistic > .value, +.ui.statistics .inverted.olive.statistic > .value, +.ui.inverted.olive.statistic > .value, +.play-button.inverted.olive.statistics .statistic > .value, +.play-button.statistics .inverted.olive.statistic > .value, +.play-button.inverted.olive.statistic > .value, +.download-button.inverted.olive.statistics .statistic > .value, +.download-button.statistics .inverted.olive.statistic > .value, +.download-button.inverted.olive.statistic > .value { + color: #D9E778; +} +.ui.inverted.green.statistics .statistic > .value, +.ui.statistics .inverted.green.statistic > .value, +.ui.inverted.green.statistic > .value, +.ui.inverted.ui.button.getting-started-btn.statistics .statistic > .value, +.ui.statistics .inverted.ui.button.getting-started-btn.statistic > .value, +.ui.inverted.ui.button.getting-started-btn.statistic > .value, +.play-button.inverted.green.statistics .statistic > .value, +.play-button.statistics .inverted.green.statistic > .value, +.play-button.inverted.green.statistic > .value, +.download-button.inverted.green.statistics .statistic > .value, +.download-button.statistics .inverted.green.statistic > .value, +.download-button.inverted.green.statistic > .value, +.ui.inverted.play-button.button.getting-started-btn.statistics .statistic > .value, +.ui.statistics .inverted.play-button.button.getting-started-btn.statistic > .value, +.ui.inverted.play-button.button.getting-started-btn.statistic > .value, +.ui.inverted.ui.play-button.getting-started-btn.statistics .statistic > .value, +.ui.statistics .inverted.ui.play-button.getting-started-btn.statistic > .value, +.ui.inverted.ui.play-button.getting-started-btn.statistic > .value, +.ui.inverted.download-button.button.getting-started-btn.statistics .statistic > .value, +.ui.statistics .inverted.download-button.button.getting-started-btn.statistic > .value, +.ui.inverted.download-button.button.getting-started-btn.statistic > .value, +.ui.inverted.ui.download-button.getting-started-btn.statistics .statistic > .value, +.ui.statistics .inverted.ui.download-button.getting-started-btn.statistic > .value, +.ui.inverted.ui.download-button.getting-started-btn.statistic > .value { + color: #2ECC40; +} +.ui.inverted.teal.statistics .statistic > .value, +.ui.statistics .inverted.teal.statistic > .value, +.ui.inverted.teal.statistic > .value, +.play-button.inverted.teal.statistics .statistic > .value, +.play-button.statistics .inverted.teal.statistic > .value, +.play-button.inverted.teal.statistic > .value, +.download-button.inverted.teal.statistics .statistic > .value, +.download-button.statistics .inverted.teal.statistic > .value, +.download-button.inverted.teal.statistic > .value { + color: #6DFFFF; +} +.ui.inverted.blue.statistics .statistic > .value, +.ui.statistics .inverted.blue.statistic > .value, +.ui.inverted.blue.statistic > .value, +.play-button.inverted.blue.statistics .statistic > .value, +.play-button.statistics .inverted.blue.statistic > .value, +.play-button.inverted.blue.statistic > .value, +.ui.inverted.play-button.statistics .statistic > .value, +.ui.statistics .inverted.play-button.statistic > .value, +.ui.inverted.play-button.statistic > .value, +.download-button.inverted.blue.statistics .statistic > .value, +.download-button.statistics .inverted.blue.statistic > .value, +.download-button.inverted.blue.statistic > .value { + color: #54C8FF; +} +.ui.inverted.violet.statistics .statistic > .value, +.ui.statistics .inverted.violet.statistic > .value, +.ui.inverted.violet.statistic > .value, +.play-button.inverted.violet.statistics .statistic > .value, +.play-button.statistics .inverted.violet.statistic > .value, +.play-button.inverted.violet.statistic > .value, +.download-button.inverted.violet.statistics .statistic > .value, +.download-button.statistics .inverted.violet.statistic > .value, +.download-button.inverted.violet.statistic > .value { + color: #A291FB; +} +.ui.inverted.purple.statistics .statistic > .value, +.ui.statistics .inverted.purple.statistic > .value, +.ui.inverted.purple.statistic > .value, +.play-button.inverted.purple.statistics .statistic > .value, +.play-button.statistics .inverted.purple.statistic > .value, +.play-button.inverted.purple.statistic > .value, +.download-button.inverted.purple.statistics .statistic > .value, +.download-button.statistics .inverted.purple.statistic > .value, +.download-button.inverted.purple.statistic > .value { + color: #DC73FF; +} +.ui.inverted.pink.statistics .statistic > .value, +.ui.statistics .inverted.pink.statistic > .value, +.ui.inverted.pink.statistic > .value, +.play-button.inverted.pink.statistics .statistic > .value, +.play-button.statistics .inverted.pink.statistic > .value, +.play-button.inverted.pink.statistic > .value, +.download-button.inverted.pink.statistics .statistic > .value, +.download-button.statistics .inverted.pink.statistic > .value, +.download-button.inverted.pink.statistic > .value { + color: #FF8EDF; +} +.ui.inverted.brown.statistics .statistic > .value, +.ui.statistics .inverted.brown.statistic > .value, +.ui.inverted.brown.statistic > .value, +.play-button.inverted.brown.statistics .statistic > .value, +.play-button.statistics .inverted.brown.statistic > .value, +.play-button.inverted.brown.statistic > .value, +.download-button.inverted.brown.statistics .statistic > .value, +.download-button.statistics .inverted.brown.statistic > .value, +.download-button.inverted.brown.statistic > .value { + color: #D67C1C; +} +.ui.inverted.grey.statistics .statistic > .value, +.ui.statistics .inverted.grey.statistic > .value, +.ui.inverted.grey.statistic > .value, +.ui.inverted.ui.button.editortools-btn.statistics .statistic > .value, +.ui.statistics .inverted.ui.button.editortools-btn.statistic > .value, +.ui.inverted.ui.button.editortools-btn.statistic > .value, +.play-button.inverted.grey.statistics .statistic > .value, +.play-button.statistics .inverted.grey.statistic > .value, +.play-button.inverted.grey.statistic > .value, +.download-button.inverted.grey.statistics .statistic > .value, +.download-button.statistics .inverted.grey.statistic > .value, +.download-button.inverted.grey.statistic > .value, +.ui.inverted.play-button.button.editortools-btn.statistics .statistic > .value, +.ui.statistics .inverted.play-button.button.editortools-btn.statistic > .value, +.ui.inverted.play-button.button.editortools-btn.statistic > .value, +.ui.inverted.ui.play-button.editortools-btn.statistics .statistic > .value, +.ui.statistics .inverted.ui.play-button.editortools-btn.statistic > .value, +.ui.inverted.ui.play-button.editortools-btn.statistic > .value, +.ui.inverted.download-button.button.editortools-btn.statistics .statistic > .value, +.ui.statistics .inverted.download-button.button.editortools-btn.statistic > .value, +.ui.inverted.download-button.button.editortools-btn.statistic > .value, +.ui.inverted.ui.download-button.editortools-btn.statistics .statistic > .value, +.ui.statistics .inverted.ui.download-button.editortools-btn.statistic > .value, +.ui.inverted.ui.download-button.editortools-btn.statistic > .value { + color: #DCDDDE; +} +/*-------------- + Floated +---------------*/ +.ui[class*="left floated"].statistic, +.play-button[class*="left floated"].statistic, +.download-button[class*="left floated"].statistic { + float: left; + margin: 0em 2em 1em 0em; +} +.ui[class*="right floated"].statistic, +.play-button[class*="right floated"].statistic, +.download-button[class*="right floated"].statistic { + float: right; + margin: 0em 0em 1em 2em; +} +.ui.floated.statistic:last-child, +.play-button.floated.statistic:last-child, +.download-button.floated.statistic:last-child { + margin-bottom: 0em; +} +/*-------------- + Sizes +---------------*/ +/* Mini */ +.ui.mini.statistics .statistic > .value, +.ui.mini.statistic > .value, +.play-button.mini.statistics .statistic > .value, +.play-button.mini.statistic > .value, +.download-button.mini.statistics .statistic > .value, +.download-button.mini.statistic > .value { + font-size: 1.5rem !important; +} +.ui.mini.horizontal.statistics .statistic > .value, +.ui.mini.horizontal.statistic > .value, +.play-button.mini.horizontal.statistics .statistic > .value, +.play-button.mini.horizontal.statistic > .value, +.download-button.mini.horizontal.statistics .statistic > .value, +.download-button.mini.horizontal.statistic > .value { + font-size: 1.5rem !important; +} +.ui.mini.statistics .statistic > .text.value, +.ui.mini.statistic > .text.value, +.play-button.mini.statistics .statistic > .text.value, +.play-button.mini.statistic > .text.value, +.download-button.mini.statistics .statistic > .text.value, +.download-button.mini.statistic > .text.value { + font-size: 1rem !important; +} +/* Tiny */ +.ui.tiny.statistics .statistic > .value, +.ui.tiny.statistic > .value, +.play-button.tiny.statistics .statistic > .value, +.play-button.tiny.statistic > .value, +.download-button.tiny.statistics .statistic > .value, +.download-button.tiny.statistic > .value { + font-size: 2rem !important; +} +.ui.tiny.horizontal.statistics .statistic > .value, +.ui.tiny.horizontal.statistic > .value, +.play-button.tiny.horizontal.statistics .statistic > .value, +.play-button.tiny.horizontal.statistic > .value, +.download-button.tiny.horizontal.statistics .statistic > .value, +.download-button.tiny.horizontal.statistic > .value { + font-size: 2rem !important; +} +.ui.tiny.statistics .statistic > .text.value, +.ui.tiny.statistic > .text.value, +.play-button.tiny.statistics .statistic > .text.value, +.play-button.tiny.statistic > .text.value, +.download-button.tiny.statistics .statistic > .text.value, +.download-button.tiny.statistic > .text.value { + font-size: 1rem !important; +} +/* Small */ +.ui.small.statistics .statistic > .value, +.ui.small.statistic > .value, +.play-button.small.statistics .statistic > .value, +.play-button.small.statistic > .value, +.download-button.small.statistics .statistic > .value, +.download-button.small.statistic > .value { + font-size: 3rem !important; +} +.ui.small.horizontal.statistics .statistic > .value, +.ui.small.horizontal.statistic > .value, +.play-button.small.horizontal.statistics .statistic > .value, +.play-button.small.horizontal.statistic > .value, +.download-button.small.horizontal.statistics .statistic > .value, +.download-button.small.horizontal.statistic > .value { + font-size: 2rem !important; +} +.ui.small.statistics .statistic > .text.value, +.ui.small.statistic > .text.value, +.play-button.small.statistics .statistic > .text.value, +.play-button.small.statistic > .text.value, +.download-button.small.statistics .statistic > .text.value, +.download-button.small.statistic > .text.value { + font-size: 1rem !important; +} +/* Medium */ +.ui.statistics .statistic > .value, +.ui.statistic > .value, +.play-button.statistics .statistic > .value, +.play-button.statistic > .value, +.download-button.statistics .statistic > .value, +.download-button.statistic > .value { + font-size: 4rem !important; +} +.ui.horizontal.statistics .statistic > .value, +.ui.horizontal.statistic > .value, +.play-button.horizontal.statistics .statistic > .value, +.play-button.horizontal.statistic > .value, +.download-button.horizontal.statistics .statistic > .value, +.download-button.horizontal.statistic > .value { + font-size: 3rem !important; +} +.ui.statistics .statistic > .text.value, +.ui.statistic > .text.value, +.play-button.statistics .statistic > .text.value, +.play-button.statistic > .text.value, +.download-button.statistics .statistic > .text.value, +.download-button.statistic > .text.value { + font-size: 2rem !important; +} +/* Large */ +.ui.large.statistics .statistic > .value, +.ui.large.statistic > .value, +.play-button.large.statistics .statistic > .value, +.play-button.large.statistic > .value, +.download-button.large.statistics .statistic > .value, +.download-button.large.statistic > .value { + font-size: 5rem !important; +} +.ui.large.horizontal.statistics .statistic > .value, +.ui.large.horizontal.statistic > .value, +.play-button.large.horizontal.statistics .statistic > .value, +.play-button.large.horizontal.statistic > .value, +.download-button.large.horizontal.statistics .statistic > .value, +.download-button.large.horizontal.statistic > .value { + font-size: 4rem !important; +} +.ui.large.statistics .statistic > .text.value, +.ui.large.statistic > .text.value, +.play-button.large.statistics .statistic > .text.value, +.play-button.large.statistic > .text.value, +.download-button.large.statistics .statistic > .text.value, +.download-button.large.statistic > .text.value { + font-size: 2.5rem !important; +} +/* Huge */ +.ui.huge.statistics .statistic > .value, +.ui.huge.statistic > .value, +.play-button.huge.statistics .statistic > .value, +.play-button.huge.statistic > .value, +.download-button.huge.statistics .statistic > .value, +.download-button.huge.statistic > .value { + font-size: 6rem !important; +} +.ui.huge.horizontal.statistics .statistic > .value, +.ui.huge.horizontal.statistic > .value, +.play-button.huge.horizontal.statistics .statistic > .value, +.play-button.huge.horizontal.statistic > .value, +.download-button.huge.horizontal.statistics .statistic > .value, +.download-button.huge.horizontal.statistic > .value { + font-size: 5rem !important; +} +.ui.huge.statistics .statistic > .text.value, +.ui.huge.statistic > .text.value, +.play-button.huge.statistics .statistic > .text.value, +.play-button.huge.statistic > .text.value, +.download-button.huge.statistics .statistic > .text.value, +.download-button.huge.statistic > .text.value { + font-size: 2.5rem !important; +} +/******************************* + Theme Overrides +*******************************/ +/******************************* + User Variable Overrides +*******************************/ +/* Modules */ +/*! + * # Semantic UI - Accordion + * http://github.com/semantic-org/semantic-ui/ + * + * + * Released under the MIT license + * http://opensource.org/licenses/MIT + * + */ +/******************************* + Theme +*******************************/ +/* + +████████╗██╗ ██╗███████╗███╗ ███╗███████╗███████╗ +╚══██╔══╝██║ ██║██╔════╝████╗ ████║██╔════╝██╔════╝ + ██║ ███████║█████╗ ██╔████╔██║█████╗ ███████╗ + ██║ ██╔══██║██╔══╝ ██║╚██╔╝██║██╔══╝ ╚════██║ + ██║ ██║ ██║███████╗██║ ╚═╝ ██║███████╗███████║ + ╚═╝ ╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝╚══════╝╚══════╝ + +*/ +/******************************* + Theme Selection +*******************************/ +/* To override a theme for an individual element + specify theme name below +*/ +/* Global */ +/* Elements */ +/* Collections */ +/* Modules */ +/* Views */ +/******************************* + Folders +*******************************/ +/* Path to theme packages */ +/* Path to site override folder */ +/******************************* + Import Theme +*******************************/ +/******************************* + Import Directives +*******************************/ +/*------------------ + Theme +-------------------*/ +/*-------------------- + Site Variables +---------------------*/ +/* Default site.variables */ +/******************************* + Site Settings +*******************************/ +/*------------------- + Fonts +--------------------*/ +/*------------------- + Base Sizes +--------------------*/ +/* This is the single variable that controls them all */ +/* The size of page text */ +/*------------------- + Border Radius +--------------------*/ +/* See Power-user section below + for explanation of @px variables +*/ +/*------------------- + Brand Colors +--------------------*/ +/*-------------- + Page Heading +---------------*/ +/*-------------- + Form Input +---------------*/ +/* This adjusts the default form input across all elements */ +/* Input Text Color */ +/* Line Height Default For Inputs in Browser (Descendors are 17px at 14px base em) */ +/*------------------- + Focused Input +--------------------*/ +/* Used on inputs, textarea etc */ +/* Used on dropdowns, other larger blocks */ +/*------------------- + Sizes +--------------------*/ +/* + Sizes are all expressed in terms of 14px/em (default em) + This ensures these "ratios" remain constant despite changes in EM +*/ +/*------------------- + Page +--------------------*/ +/*------------------- + Paragraph +--------------------*/ +/*------------------- + Links +--------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ +/*------------------- + Highlighted Text +--------------------*/ +/*------------------- + Loader +--------------------*/ +/*------------------- + Grid +--------------------*/ +/*------------------- + Transitions +--------------------*/ +/*------------------- + Breakpoints +--------------------*/ +/*------------------- + Site Colors +--------------------*/ +/*--- Colors ---*/ +/*--- Light Colors ---*/ +/*--- Neutrals ---*/ +/*--- Colored Backgrounds ---*/ +/*--- Colored Headers ---*/ +/*--- Colored Text ---*/ +/*--- Colored Border ---*/ +/*------------------- + Alpha Colors +--------------------*/ +/*------------------- + Accents +--------------------*/ +/* Differentiating Neutrals */ +/* Differentiating Layers */ +/******************************* + Power-User +*******************************/ +/*------------------- + Emotive Colors +--------------------*/ +/* Positive */ +/* Negative */ +/* Info */ +/* Warning */ +/*------------------- + Paths +--------------------*/ +/* For source only. Modified in gulp for dist */ +/*------------------- + Em Sizes +--------------------*/ +/* + This rounds @size values to the closest pixel then expresses that value in (r)em. + This ensures all size values round to exact pixels +*/ +/* em */ +/* rem */ +/*------------------- + Icons +--------------------*/ +/* Maximum Glyph Width of Icon */ +/*------------------- + Neutral Text +--------------------*/ +/*------------------- + Brand Colors +--------------------*/ +/*------------------- + Borders +--------------------*/ +/*------------------- + Derived Values +--------------------*/ +/* Loaders Position Offset */ +/* Rendered Scrollbar Width */ +/* Maximum Single Character Glyph Width, aka Capital "W" */ +/* Used to match floats with text */ +/* Header Spacing */ +/* Minimum Mobile Width */ +/* Positive / Negative Dupes */ +/* Responsive */ +/*------------------- + Exact Pixel Values +--------------------*/ +/* + These are used to specify exact pixel values in em + for things like borders that remain constantly + sized as emSize adjusts + + Since there are many more sizes than names for sizes, + these are named by their original pixel values. + +*/ +/* Columns */ +/******************************* + States +*******************************/ +/*------------------- + Disabled +--------------------*/ +/*------------------- + Hover +--------------------*/ +/*--- Shadows ---*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Focus +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Down (:active) +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Active +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/* Packaged site.variables */ +/******************************* + User Global Variables +*******************************/ +/*------------------- + Fonts +--------------------*/ +/*------------------- + Breakpoints +--------------------*/ +/* +@mobileBreakpoint : unit( (63 * @emSize), px); +@tabletBreakpoint : unit( (79 * @emSize), px); +@computerBreakpoint : unit( (91 * @emSize), px); +@largeMonitorBreakpoint : unit( (99 * @emSize), px); +@widescreenMonitorBreakpoint : unit( (119 * @emSize), px); +*/ +/******************************* + PXT Variables +*******************************/ +/*------------------- + Menu +--------------------*/ +/*------------------- + Layout +--------------------*/ +/*------------------- + Background +--------------------*/ +/*------------------- + Full screen +--------------------*/ +/*------------------- + Side Docs +--------------------*/ +/*------------------- + Editor +--------------------*/ +/* Component's site.variables */ +/******************************* + Site Settings +*******************************/ +/*------------------- + Fonts +--------------------*/ +/*------------------- + Base Sizes +--------------------*/ +/* This is the single variable that controls them all */ +/* The size of page text */ +/*------------------- + Border Radius +--------------------*/ +/* See Power-user section below + for explanation of @px variables +*/ +/*------------------- + Brand Colors +--------------------*/ +/*-------------- + Page Heading +---------------*/ +/*-------------- + Form Input +---------------*/ +/* This adjusts the default form input across all elements */ +/* Input Text Color */ +/* Line Height Default For Inputs in Browser (Descendors are 17px at 14px base em) */ +/*------------------- + Focused Input +--------------------*/ +/* Used on inputs, textarea etc */ +/* Used on dropdowns, other larger blocks */ +/*------------------- + Sizes +--------------------*/ +/* + Sizes are all expressed in terms of 14px/em (default em) + This ensures these "ratios" remain constant despite changes in EM +*/ +/*------------------- + Page +--------------------*/ +/*------------------- + Paragraph +--------------------*/ +/*------------------- + Links +--------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ +/*------------------- + Highlighted Text +--------------------*/ +/*------------------- + Loader +--------------------*/ +/*------------------- + Grid +--------------------*/ +/*------------------- + Transitions +--------------------*/ +/*------------------- + Breakpoints +--------------------*/ +/*------------------- + Site Colors +--------------------*/ +/*--- Colors ---*/ +/*--- Light Colors ---*/ +/*--- Neutrals ---*/ +/*--- Colored Backgrounds ---*/ +/*--- Colored Headers ---*/ +/*--- Colored Text ---*/ +/*--- Colored Border ---*/ +/*------------------- + Alpha Colors +--------------------*/ +/*------------------- + Accents +--------------------*/ +/* Differentiating Neutrals */ +/* Differentiating Layers */ +/******************************* + Power-User +*******************************/ +/*------------------- + Emotive Colors +--------------------*/ +/* Positive */ +/* Negative */ +/* Info */ +/* Warning */ +/*------------------- + Paths +--------------------*/ +/* For source only. Modified in gulp for dist */ +/*------------------- + Em Sizes +--------------------*/ +/* + This rounds @size values to the closest pixel then expresses that value in (r)em. + This ensures all size values round to exact pixels +*/ +/* em */ +/* rem */ +/*------------------- + Icons +--------------------*/ +/* Maximum Glyph Width of Icon */ +/*------------------- + Neutral Text +--------------------*/ +/*------------------- + Brand Colors +--------------------*/ +/*------------------- + Borders +--------------------*/ +/*------------------- + Derived Values +--------------------*/ +/* Loaders Position Offset */ +/* Rendered Scrollbar Width */ +/* Maximum Single Character Glyph Width, aka Capital "W" */ +/* Used to match floats with text */ +/* Header Spacing */ +/* Minimum Mobile Width */ +/* Positive / Negative Dupes */ +/* Responsive */ +/*------------------- + Exact Pixel Values +--------------------*/ +/* + These are used to specify exact pixel values in em + for things like borders that remain constantly + sized as emSize adjusts + + Since there are many more sizes than names for sizes, + these are named by their original pixel values. + +*/ +/* Columns */ +/******************************* + States +*******************************/ +/*------------------- + Disabled +--------------------*/ +/*------------------- + Hover +--------------------*/ +/*--- Shadows ---*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Focus +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Down (:active) +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Active +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/* Site theme site.variables */ +/******************************* + User Global Variables +*******************************/ +/*------------------- + Site Colors +--------------------*/ +/******************************* + PXT Overrides +*******************************/ +/*------------------- + Component Variables +---------------------*/ +/* Default */ +/******************************* + Accordion +*******************************/ +/* Title */ +/* Icon */ +/* Child Accordion */ +/* Content */ +/*------------------- + Coupling +--------------------*/ +/*------------------- + States +--------------------*/ +/*------------------- + Variations +--------------------*/ +/* Styled */ +/* Content */ +/* Child Content */ +/* Styled Title */ +/* Styled Title States */ +/* Styled Child Title States */ +/* Inverted */ +/* Packaged Theme */ +/******************************* + Accordion +*******************************/ +/* Title */ +/* Icon */ +/* Child Accordion */ +/* Content */ +/*------------------- + Coupling +--------------------*/ +/*------------------- + States +--------------------*/ +/*------------------- + Variations +--------------------*/ +/* Styled */ +/* Content */ +/* Child Content */ +/* Styled Title */ +/* Styled Title States */ +/* Styled Child Title States */ +/* Inverted */ +/* Site Theme */ +/******************************* + User Variable Overrides +*******************************/ +/******************************* + Mix-ins +*******************************/ +/*------------------ + Fonts +-------------------*/ +/*------------------ + Overrides +-------------------*/ +/* End Config */ +/******************************* + Accordion +*******************************/ +.ui.accordion, +.ui.accordion .accordion, +.play-button.accordion, +.play-button.accordion .accordion, +.download-button.accordion, +.download-button.accordion .accordion { + max-width: 100%; +} +.ui.accordion .accordion, +.play-button.accordion .accordion, +.download-button.accordion .accordion { + margin: 1em 0em 0em; + padding: 0em; +} +/* Title */ +.ui.accordion .title, +.ui.accordion .accordion .title, +.play-button.accordion .title, +.play-button.accordion .accordion .title, +.download-button.accordion .title, +.download-button.accordion .accordion .title { + cursor: pointer; +} +/* Default Styling */ +.ui.accordion .title:not(.ui), +.play-button.accordion .title:not(.ui), +.download-button.accordion .title:not(.ui) { + padding: 0.5em 0em; + font-family: 'Roboto Mono', 'Helvetica Neue', Arial, Helvetica, sans-serif; + font-size: 1em; + color: rgba(0, 0, 0, 0.87); +} +/* Content */ +.ui.accordion .title ~ .content, +.ui.accordion .accordion .title ~ .content, +.play-button.accordion .title ~ .content, +.play-button.accordion .accordion .title ~ .content, +.download-button.accordion .title ~ .content, +.download-button.accordion .accordion .title ~ .content { + display: none; +} +/* Default Styling */ +.ui.accordion:not(.styled) .title ~ .content:not(.ui), +.ui.accordion:not(.styled) .accordion .title ~ .content:not(.ui), +.play-button.accordion:not(.styled) .title ~ .content:not(.ui), +.play-button.accordion:not(.styled) .accordion .title ~ .content:not(.ui), +.download-button.accordion:not(.styled) .title ~ .content:not(.ui), +.download-button.accordion:not(.styled) .accordion .title ~ .content:not(.ui) { + margin: ''; + padding: 0.5em 0em 1em; +} +.ui.accordion:not(.styled) .title ~ .content:not(.ui):last-child, +.play-button.accordion:not(.styled) .title ~ .content:not(.ui):last-child, +.download-button.accordion:not(.styled) .title ~ .content:not(.ui):last-child { + padding-bottom: 0em; +} +/* Arrow */ +.ui.accordion .title .dropdown.icon, +.ui.accordion .accordion .title .dropdown.icon, +.play-button.accordion .title .dropdown.icon, +.play-button.accordion .accordion .title .dropdown.icon, +.download-button.accordion .title .dropdown.icon, +.download-button.accordion .accordion .title .dropdown.icon { + display: inline-block; + float: none; + opacity: 1; + width: 1.25em; + height: 1em; + margin: 0em 0.25rem 0em 0rem; + padding: 0em; + font-size: 1em; + transition: transform 0.1s ease, opacity 0.1s ease; + vertical-align: baseline; + transform: none; +} +/*-------------- + Coupling +---------------*/ +/* Menu */ +.ui.accordion.menu .item .title, +.play-button.accordion.menu .item .title, +.download-button.accordion.menu .item .title { + display: block; + padding: 0em; +} +.ui.accordion.menu .item .title > .dropdown.icon, +.play-button.accordion.menu .item .title > .dropdown.icon, +.download-button.accordion.menu .item .title > .dropdown.icon { + float: right; + margin: 0.21425em 0em 0em 1em; + transform: rotate(180deg); +} +/* Header */ +.ui.accordion .ui.header .dropdown.icon, +.play-button.accordion .play-button.header .dropdown.icon, +.download-button.accordion .download-button.header .dropdown.icon { + font-size: 1em; + margin: 0em 0.25rem 0em 0rem; +} +/******************************* + States +*******************************/ +.ui.accordion .active.title .dropdown.icon, +.ui.accordion .accordion .active.title .dropdown.icon, +.play-button.accordion .active.title .dropdown.icon, +.play-button.accordion .accordion .active.title .dropdown.icon, +.download-button.accordion .active.title .dropdown.icon, +.download-button.accordion .accordion .active.title .dropdown.icon { + transform: rotate(90deg); +} +.ui.accordion.menu .item .active.title > .dropdown.icon, +.play-button.accordion.menu .item .active.title > .dropdown.icon, +.download-button.accordion.menu .item .active.title > .dropdown.icon { + transform: rotate(90deg); +} +/******************************* + Types +*******************************/ +/*-------------- + Styled +---------------*/ +.ui.styled.accordion, +.play-button.styled.accordion, +.download-button.styled.accordion { + width: 600px; +} +.ui.styled.accordion, +.ui.styled.accordion .accordion, +.play-button.styled.accordion, +.play-button.styled.accordion .accordion, +.download-button.styled.accordion, +.download-button.styled.accordion .accordion { + border-radius: 0.28571429rem; + background: #FFFFFF; + box-shadow: 0px 1px 2px 0 rgba(34, 36, 38, 0.15), 0px 0px 0px 1px rgba(34, 36, 38, 0.15); +} +.ui.styled.accordion .title, +.ui.styled.accordion .accordion .title, +.play-button.styled.accordion .title, +.play-button.styled.accordion .accordion .title, +.download-button.styled.accordion .title, +.download-button.styled.accordion .accordion .title { + margin: 0em; + padding: 0.75em 1em; + color: rgba(0, 0, 0, 0.4); + font-weight: bold; + border-top: 1px solid rgba(34, 36, 38, 0.15); + transition: background 0.1s ease, color 0.1s ease; +} +.ui.styled.accordion > .title:first-child, +.ui.styled.accordion .accordion .title:first-child, +.play-button.styled.accordion > .title:first-child, +.play-button.styled.accordion .accordion .title:first-child, +.download-button.styled.accordion > .title:first-child, +.download-button.styled.accordion .accordion .title:first-child { + border-top: none; +} +/* Content */ +.ui.styled.accordion .content, +.ui.styled.accordion .accordion .content, +.play-button.styled.accordion .content, +.play-button.styled.accordion .accordion .content, +.download-button.styled.accordion .content, +.download-button.styled.accordion .accordion .content { + margin: 0em; + padding: 0.5em 1em 1.5em; +} +.ui.styled.accordion .accordion .content, +.play-button.styled.accordion .accordion .content, +.download-button.styled.accordion .accordion .content { + padding: 0em; + padding: 0.5em 1em 1.5em; +} +/* Hover */ +.ui.styled.accordion .title:hover, +.ui.styled.accordion .active.title, +.ui.styled.accordion .accordion .title:hover, +.ui.styled.accordion .accordion .active.title, +.play-button.styled.accordion .title:hover, +.play-button.styled.accordion .active.title, +.play-button.styled.accordion .accordion .title:hover, +.play-button.styled.accordion .accordion .active.title, +.download-button.styled.accordion .title:hover, +.download-button.styled.accordion .active.title, +.download-button.styled.accordion .accordion .title:hover, +.download-button.styled.accordion .accordion .active.title { + background: transparent; + color: rgba(0, 0, 0, 0.87); +} +.ui.styled.accordion .accordion .title:hover, +.ui.styled.accordion .accordion .active.title, +.play-button.styled.accordion .accordion .title:hover, +.play-button.styled.accordion .accordion .active.title, +.download-button.styled.accordion .accordion .title:hover, +.download-button.styled.accordion .accordion .active.title { + background: transparent; + color: rgba(0, 0, 0, 0.87); +} +/* Active */ +.ui.styled.accordion .active.title, +.play-button.styled.accordion .active.title, +.download-button.styled.accordion .active.title { + background: transparent; + color: rgba(0, 0, 0, 0.95); +} +.ui.styled.accordion .accordion .active.title, +.play-button.styled.accordion .accordion .active.title, +.download-button.styled.accordion .accordion .active.title { + background: transparent; + color: rgba(0, 0, 0, 0.95); +} +/******************************* + States +*******************************/ +/*-------------- + Active +---------------*/ +.ui.accordion .active.content, +.ui.accordion .accordion .active.content, +.play-button.accordion .active.content, +.play-button.accordion .accordion .active.content, +.download-button.accordion .active.content, +.download-button.accordion .accordion .active.content { + display: block; +} +/******************************* + Variations +*******************************/ +/*-------------- + Fluid +---------------*/ +.ui.fluid.accordion, +.ui.fluid.accordion .accordion, +.play-button.fluid.accordion, +.play-button.fluid.accordion .accordion, +.download-button.fluid.accordion, +.download-button.fluid.accordion .accordion { + width: 100%; +} +/*-------------- + Inverted +---------------*/ +.ui.inverted.accordion .title:not(.ui), +.play-button.inverted.accordion .title:not(.ui), +.download-button.inverted.accordion .title:not(.ui) { + color: rgba(255, 255, 255, 0.9); +} +/******************************* + Theme Overrides +*******************************/ +@font-face { + font-family: 'Accordion'; + src: url(data:application/x-font-ttf;charset=utf-8;base64,AAEAAAALAIAAAwAwT1MvMggjB5AAAAC8AAAAYGNtYXAPfOIKAAABHAAAAExnYXNwAAAAEAAAAWgAAAAIZ2x5Zryj6HgAAAFwAAAAyGhlYWT/0IhHAAACOAAAADZoaGVhApkB5wAAAnAAAAAkaG10eAJuABIAAAKUAAAAGGxvY2EAjABWAAACrAAAAA5tYXhwAAgAFgAAArwAAAAgbmFtZfC1n04AAALcAAABPHBvc3QAAwAAAAAEGAAAACAAAwIAAZAABQAAAUwBZgAAAEcBTAFmAAAA9QAZAIQAAAAAAAAAAAAAAAAAAAABEAAAAAAAAAAAAAAAAAAAAABAAADw2gHg/+D/4AHgACAAAAABAAAAAAAAAAAAAAAgAAAAAAACAAAAAwAAABQAAwABAAAAFAAEADgAAAAKAAgAAgACAAEAIPDa//3//wAAAAAAIPDZ//3//wAB/+MPKwADAAEAAAAAAAAAAAAAAAEAAf//AA8AAQAAAAAAAAAAAAIAADc5AQAAAAABAAAAAAAAAAAAAgAANzkBAAAAAAEAAAAAAAAAAAACAAA3OQEAAAAAAQASAEkAtwFuABMAADc0PwE2FzYXFh0BFAcGJwYvASY1EgaABQgHBQYGBQcIBYAG2wcGfwcBAQcECf8IBAcBAQd/BgYAAAAAAQAAAEkApQFuABMAADcRNDc2MzIfARYVFA8BBiMiJyY1AAUGBwgFgAYGgAUIBwYFWwEACAUGBoAFCAcFgAYGBQcAAAABAAAAAQAAqWYls18PPPUACwIAAAAAAM/9o+4AAAAAz/2j7gAAAAAAtwFuAAAACAACAAAAAAAAAAEAAAHg/+AAAAIAAAAAAAC3AAEAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAAAAQAAAAC3ABIAtwAAAAAAAAAKABQAHgBCAGQAAAABAAAABgAUAAEAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAADgCuAAEAAAAAAAEADAAAAAEAAAAAAAIADgBAAAEAAAAAAAMADAAiAAEAAAAAAAQADABOAAEAAAAAAAUAFgAMAAEAAAAAAAYABgAuAAEAAAAAAAoANABaAAMAAQQJAAEADAAAAAMAAQQJAAIADgBAAAMAAQQJAAMADAAiAAMAAQQJAAQADABOAAMAAQQJAAUAFgAMAAMAAQQJAAYADAA0AAMAAQQJAAoANABaAHIAYQB0AGkAbgBnAFYAZQByAHMAaQBvAG4AIAAxAC4AMAByAGEAdABpAG4AZ3JhdGluZwByAGEAdABpAG4AZwBSAGUAZwB1AGwAYQByAHIAYQB0AGkAbgBnAEYAbwBuAHQAIABnAGUAbgBlAHIAYQB0AGUAZAAgAGIAeQAgAEkAYwBvAE0AbwBvAG4ALgADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA) format('truetype'), url(data:application/font-woff;charset=utf-8;base64,d09GRk9UVE8AAASwAAoAAAAABGgAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABDRkYgAAAA9AAAAS0AAAEtFpovuE9TLzIAAAIkAAAAYAAAAGAIIweQY21hcAAAAoQAAABMAAAATA984gpnYXNwAAAC0AAAAAgAAAAIAAAAEGhlYWQAAALYAAAANgAAADb/0IhHaGhlYQAAAxAAAAAkAAAAJAKZAedobXR4AAADNAAAABgAAAAYAm4AEm1heHAAAANMAAAABgAAAAYABlAAbmFtZQAAA1QAAAE8AAABPPC1n05wb3N0AAAEkAAAACAAAAAgAAMAAAEABAQAAQEBB3JhdGluZwABAgABADr4HAL4GwP4GAQeCgAZU/+Lix4KABlT/4uLDAeLa/iU+HQFHQAAAHkPHQAAAH4RHQAAAAkdAAABJBIABwEBBw0PERQZHnJhdGluZ3JhdGluZ3UwdTF1MjB1RjBEOXVGMERBAAACAYkABAAGAQEEBwoNVp38lA78lA78lA77lA773Z33bxWLkI2Qj44I9xT3FAWOj5CNkIuQi4+JjoePiI2Gi4YIi/uUBYuGiYeHiIiHh4mGi4aLho2Ijwj7FPcUBYeOiY+LkAgO+92L5hWL95QFi5CNkI6Oj4+PjZCLkIuQiY6HCPcU+xQFj4iNhouGi4aJh4eICPsU+xQFiIeGiYaLhouHjYePiI6Jj4uQCA74lBT4lBWLDAoAAAAAAwIAAZAABQAAAUwBZgAAAEcBTAFmAAAA9QAZAIQAAAAAAAAAAAAAAAAAAAABEAAAAAAAAAAAAAAAAAAAAABAAADw2gHg/+D/4AHgACAAAAABAAAAAAAAAAAAAAAgAAAAAAACAAAAAwAAABQAAwABAAAAFAAEADgAAAAKAAgAAgACAAEAIPDa//3//wAAAAAAIPDZ//3//wAB/+MPKwADAAEAAAAAAAAAAAAAAAEAAf//AA8AAQAAAAEAADfYOJZfDzz1AAsCAAAAAADP/aPuAAAAAM/9o+4AAAAAALcBbgAAAAgAAgAAAAAAAAABAAAB4P/gAAACAAAAAAAAtwABAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAEAAAAAtwASALcAAAAAUAAABgAAAAAADgCuAAEAAAAAAAEADAAAAAEAAAAAAAIADgBAAAEAAAAAAAMADAAiAAEAAAAAAAQADABOAAEAAAAAAAUAFgAMAAEAAAAAAAYABgAuAAEAAAAAAAoANABaAAMAAQQJAAEADAAAAAMAAQQJAAIADgBAAAMAAQQJAAMADAAiAAMAAQQJAAQADABOAAMAAQQJAAUAFgAMAAMAAQQJAAYADAA0AAMAAQQJAAoANABaAHIAYQB0AGkAbgBnAFYAZQByAHMAaQBvAG4AIAAxAC4AMAByAGEAdABpAG4AZ3JhdGluZwByAGEAdABpAG4AZwBSAGUAZwB1AGwAYQByAHIAYQB0AGkAbgBnAEYAbwBuAHQAIABnAGUAbgBlAHIAYQB0AGUAZAAgAGIAeQAgAEkAYwBvAE0AbwBvAG4ALgADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA) format('woff'); + font-weight: normal; + font-style: normal; +} +/* Dropdown Icon */ +.ui.accordion .title .dropdown.icon, +.ui.accordion .accordion .title .dropdown.icon, +.play-button.accordion .title .dropdown.icon, +.play-button.accordion .accordion .title .dropdown.icon, +.download-button.accordion .title .dropdown.icon, +.download-button.accordion .accordion .title .dropdown.icon { + font-family: Accordion; + line-height: 1; + backface-visibility: hidden; + font-weight: normal; + font-style: normal; + text-align: center; +} +.ui.accordion .title .dropdown.icon:before, +.ui.accordion .accordion .title .dropdown.icon:before, +.play-button.accordion .title .dropdown.icon:before, +.play-button.accordion .accordion .title .dropdown.icon:before, +.download-button.accordion .title .dropdown.icon:before, +.download-button.accordion .accordion .title .dropdown.icon:before { + content: '\f0da' /*rtl:'\f0d9'*/; +} +/******************************* + User Overrides +*******************************/ +/*! + * # Semantic UI - Checkbox + * http://github.com/semantic-org/semantic-ui/ + * + * + * Released under the MIT license + * http://opensource.org/licenses/MIT + * + */ +/******************************* + Theme +*******************************/ +/* + +████████╗██╗ ██╗███████╗███╗ ███╗███████╗███████╗ +╚══██╔══╝██║ ██║██╔════╝████╗ ████║██╔════╝██╔════╝ + ██║ ███████║█████╗ ██╔████╔██║█████╗ ███████╗ + ██║ ██╔══██║██╔══╝ ██║╚██╔╝██║██╔══╝ ╚════██║ + ██║ ██║ ██║███████╗██║ ╚═╝ ██║███████╗███████║ + ╚═╝ ╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝╚══════╝╚══════╝ + +*/ +/******************************* + Theme Selection +*******************************/ +/* To override a theme for an individual element + specify theme name below +*/ +/* Global */ +/* Elements */ +/* Collections */ +/* Modules */ +/* Views */ +/******************************* + Folders +*******************************/ +/* Path to theme packages */ +/* Path to site override folder */ +/******************************* + Import Theme +*******************************/ +/******************************* + Import Directives +*******************************/ +/*------------------ + Theme +-------------------*/ +/*-------------------- + Site Variables +---------------------*/ +/* Default site.variables */ +/******************************* + Site Settings +*******************************/ +/*------------------- + Fonts +--------------------*/ +/*------------------- + Base Sizes +--------------------*/ +/* This is the single variable that controls them all */ +/* The size of page text */ +/*------------------- + Border Radius +--------------------*/ +/* See Power-user section below + for explanation of @px variables +*/ +/*------------------- + Brand Colors +--------------------*/ +/*-------------- + Page Heading +---------------*/ +/*-------------- + Form Input +---------------*/ +/* This adjusts the default form input across all elements */ +/* Input Text Color */ +/* Line Height Default For Inputs in Browser (Descendors are 17px at 14px base em) */ +/*------------------- + Focused Input +--------------------*/ +/* Used on inputs, textarea etc */ +/* Used on dropdowns, other larger blocks */ +/*------------------- + Sizes +--------------------*/ +/* + Sizes are all expressed in terms of 14px/em (default em) + This ensures these "ratios" remain constant despite changes in EM +*/ +/*------------------- + Page +--------------------*/ +/*------------------- + Paragraph +--------------------*/ +/*------------------- + Links +--------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ +/*------------------- + Highlighted Text +--------------------*/ +/*------------------- + Loader +--------------------*/ +/*------------------- + Grid +--------------------*/ +/*------------------- + Transitions +--------------------*/ +/*------------------- + Breakpoints +--------------------*/ +/*------------------- + Site Colors +--------------------*/ +/*--- Colors ---*/ +/*--- Light Colors ---*/ +/*--- Neutrals ---*/ +/*--- Colored Backgrounds ---*/ +/*--- Colored Headers ---*/ +/*--- Colored Text ---*/ +/*--- Colored Border ---*/ +/*------------------- + Alpha Colors +--------------------*/ +/*------------------- + Accents +--------------------*/ +/* Differentiating Neutrals */ +/* Differentiating Layers */ +/******************************* + Power-User +*******************************/ +/*------------------- + Emotive Colors +--------------------*/ +/* Positive */ +/* Negative */ +/* Info */ +/* Warning */ +/*------------------- + Paths +--------------------*/ +/* For source only. Modified in gulp for dist */ +/*------------------- + Em Sizes +--------------------*/ +/* + This rounds @size values to the closest pixel then expresses that value in (r)em. + This ensures all size values round to exact pixels +*/ +/* em */ +/* rem */ +/*------------------- + Icons +--------------------*/ +/* Maximum Glyph Width of Icon */ +/*------------------- + Neutral Text +--------------------*/ +/*------------------- + Brand Colors +--------------------*/ +/*------------------- + Borders +--------------------*/ +/*------------------- + Derived Values +--------------------*/ +/* Loaders Position Offset */ +/* Rendered Scrollbar Width */ +/* Maximum Single Character Glyph Width, aka Capital "W" */ +/* Used to match floats with text */ +/* Header Spacing */ +/* Minimum Mobile Width */ +/* Positive / Negative Dupes */ +/* Responsive */ +/*------------------- + Exact Pixel Values +--------------------*/ +/* + These are used to specify exact pixel values in em + for things like borders that remain constantly + sized as emSize adjusts + + Since there are many more sizes than names for sizes, + these are named by their original pixel values. + +*/ +/* Columns */ +/******************************* + States +*******************************/ +/*------------------- + Disabled +--------------------*/ +/*------------------- + Hover +--------------------*/ +/*--- Shadows ---*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Focus +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Down (:active) +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Active +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/* Packaged site.variables */ +/******************************* + User Global Variables +*******************************/ +/*------------------- + Fonts +--------------------*/ +/*------------------- + Breakpoints +--------------------*/ +/* +@mobileBreakpoint : unit( (63 * @emSize), px); +@tabletBreakpoint : unit( (79 * @emSize), px); +@computerBreakpoint : unit( (91 * @emSize), px); +@largeMonitorBreakpoint : unit( (99 * @emSize), px); +@widescreenMonitorBreakpoint : unit( (119 * @emSize), px); +*/ +/******************************* + PXT Variables +*******************************/ +/*------------------- + Menu +--------------------*/ +/*------------------- + Layout +--------------------*/ +/*------------------- + Background +--------------------*/ +/*------------------- + Full screen +--------------------*/ +/*------------------- + Side Docs +--------------------*/ +/*------------------- + Editor +--------------------*/ +/* Component's site.variables */ +/******************************* + Site Settings +*******************************/ +/*------------------- + Fonts +--------------------*/ +/*------------------- + Base Sizes +--------------------*/ +/* This is the single variable that controls them all */ +/* The size of page text */ +/*------------------- + Border Radius +--------------------*/ +/* See Power-user section below + for explanation of @px variables +*/ +/*------------------- + Brand Colors +--------------------*/ +/*-------------- + Page Heading +---------------*/ +/*-------------- + Form Input +---------------*/ +/* This adjusts the default form input across all elements */ +/* Input Text Color */ +/* Line Height Default For Inputs in Browser (Descendors are 17px at 14px base em) */ +/*------------------- + Focused Input +--------------------*/ +/* Used on inputs, textarea etc */ +/* Used on dropdowns, other larger blocks */ +/*------------------- + Sizes +--------------------*/ +/* + Sizes are all expressed in terms of 14px/em (default em) + This ensures these "ratios" remain constant despite changes in EM +*/ +/*------------------- + Page +--------------------*/ +/*------------------- + Paragraph +--------------------*/ +/*------------------- + Links +--------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ +/*------------------- + Highlighted Text +--------------------*/ +/*------------------- + Loader +--------------------*/ +/*------------------- + Grid +--------------------*/ +/*------------------- + Transitions +--------------------*/ +/*------------------- + Breakpoints +--------------------*/ +/*------------------- + Site Colors +--------------------*/ +/*--- Colors ---*/ +/*--- Light Colors ---*/ +/*--- Neutrals ---*/ +/*--- Colored Backgrounds ---*/ +/*--- Colored Headers ---*/ +/*--- Colored Text ---*/ +/*--- Colored Border ---*/ +/*------------------- + Alpha Colors +--------------------*/ +/*------------------- + Accents +--------------------*/ +/* Differentiating Neutrals */ +/* Differentiating Layers */ +/******************************* + Power-User +*******************************/ +/*------------------- + Emotive Colors +--------------------*/ +/* Positive */ +/* Negative */ +/* Info */ +/* Warning */ +/*------------------- + Paths +--------------------*/ +/* For source only. Modified in gulp for dist */ +/*------------------- + Em Sizes +--------------------*/ +/* + This rounds @size values to the closest pixel then expresses that value in (r)em. + This ensures all size values round to exact pixels +*/ +/* em */ +/* rem */ +/*------------------- + Icons +--------------------*/ +/* Maximum Glyph Width of Icon */ +/*------------------- + Neutral Text +--------------------*/ +/*------------------- + Brand Colors +--------------------*/ +/*------------------- + Borders +--------------------*/ +/*------------------- + Derived Values +--------------------*/ +/* Loaders Position Offset */ +/* Rendered Scrollbar Width */ +/* Maximum Single Character Glyph Width, aka Capital "W" */ +/* Used to match floats with text */ +/* Header Spacing */ +/* Minimum Mobile Width */ +/* Positive / Negative Dupes */ +/* Responsive */ +/*------------------- + Exact Pixel Values +--------------------*/ +/* + These are used to specify exact pixel values in em + for things like borders that remain constantly + sized as emSize adjusts + + Since there are many more sizes than names for sizes, + these are named by their original pixel values. + +*/ +/* Columns */ +/******************************* + States +*******************************/ +/*------------------- + Disabled +--------------------*/ +/*------------------- + Hover +--------------------*/ +/*--- Shadows ---*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Focus +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Down (:active) +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Active +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/* Site theme site.variables */ +/******************************* + User Global Variables +*******************************/ +/*------------------- + Site Colors +--------------------*/ +/******************************* + PXT Overrides +*******************************/ +/*------------------- + Component Variables +---------------------*/ +/* Default */ +/******************************* + Checkbox +*******************************/ +/* Label */ +/* 26px @ 14/em */ +/* Checkbox */ +/* Checkmark */ +/* Label */ +/*------------------- + States +--------------------*/ +/* Hover */ +/* Pressed */ +/* Focus */ +/* Active */ +/* Active Focus */ +/* Indeterminate */ +/* Disabled */ +/*------------------- + Types +--------------------*/ +/* Radio */ +/* Uses px to avoid rounding issues with circles */ +/* 7px as unitless value from radio size */ +/* Slider & Toggle Handle */ +/* Slider */ +/* Slider States */ +/* Toggle */ +/*------------------- + Variations +--------------------*/ +/* Packaged Theme */ +/******************************* + Checkbox +*******************************/ +/* Label */ +/* 26px @ 14/em */ +/* Checkbox */ +/* Checkmark */ +/* Label */ +/*------------------- + States +--------------------*/ +/* Hover */ +/* Pressed */ +/* Focus */ +/* Active */ +/* Active Focus */ +/* Indeterminate */ +/* Disabled */ +/*------------------- + Types +--------------------*/ +/* Radio */ +/* Uses px to avoid rounding issues with circles */ +/* 7px as unitless value from radio size */ +/* Slider & Toggle Handle */ +/* Slider */ +/* Slider States */ +/* Toggle */ +/*------------------- + Variations +--------------------*/ +/* Site Theme */ +/******************************* + User Variable Overrides +*******************************/ +/******************************* + Mix-ins +*******************************/ +/*------------------ + Fonts +-------------------*/ +/*------------------ + Overrides +-------------------*/ +/* End Config */ +/******************************* + Checkbox +*******************************/ +/*-------------- + Content +---------------*/ +.ui.checkbox, +.play-button.checkbox, +.download-button.checkbox { + position: relative; + display: inline-block; + backface-visibility: hidden; + outline: none; + vertical-align: baseline; + font-style: normal; + min-height: 17px; + font-size: 1rem; + line-height: 17px; + min-width: 17px; +} +/* HTML Checkbox */ +.ui.checkbox input[type="checkbox"], +.ui.checkbox input[type="radio"], +.play-button.checkbox input[type="checkbox"], +.play-button.checkbox input[type="radio"], +.download-button.checkbox input[type="checkbox"], +.download-button.checkbox input[type="radio"] { + cursor: pointer; + position: absolute; + top: 0px; + left: 0px; + opacity: 0 !important; + outline: none; + z-index: 3; + width: 17px; + height: 17px; +} +/*-------------- + Box +---------------*/ +.ui.checkbox .box, +.ui.checkbox label, +.play-button.checkbox .box, +.play-button.checkbox label, +.download-button.checkbox .box, +.download-button.checkbox label { + cursor: auto; + position: relative; + display: block; + padding-left: 1.85714em; + outline: none; + font-size: 1em; +} +.ui.checkbox .box:before, +.ui.checkbox label:before, +.play-button.checkbox .box:before, +.play-button.checkbox label:before, +.download-button.checkbox .box:before, +.download-button.checkbox label:before { + position: absolute; + top: 0px; + left: 0px; + width: 17px; + height: 17px; + content: ''; + background: #FFFFFF; + border-radius: 0.21428571rem; + transition: border 0.1s ease, opacity 0.1s ease, transform 0.1s ease, box-shadow 0.1s ease; + border: 1px solid #D4D4D5; +} +/*-------------- + Checkmark +---------------*/ +.ui.checkbox .box:after, +.ui.checkbox label:after, +.play-button.checkbox .box:after, +.play-button.checkbox label:after, +.download-button.checkbox .box:after, +.download-button.checkbox label:after { + position: absolute; + font-size: 14px; + top: 0px; + left: 0px; + width: 17px; + height: 17px; + text-align: center; + opacity: 0; + color: rgba(0, 0, 0, 0.87); + transition: border 0.1s ease, opacity 0.1s ease, transform 0.1s ease, box-shadow 0.1s ease; +} +/*-------------- + Label +---------------*/ +/* Inside */ +.ui.checkbox label, +.ui.checkbox + label, +.play-button.checkbox label, +.play-button.checkbox + label, +.download-button.checkbox label, +.download-button.checkbox + label { + color: rgba(0, 0, 0, 0.87); + transition: color 0.1s ease; +} +/* Outside */ +.ui.checkbox + label, +.play-button.checkbox + label, +.download-button.checkbox + label { + vertical-align: middle; +} +/******************************* + States +*******************************/ +/*-------------- + Hover +---------------*/ +.ui.checkbox .box:hover::before, +.ui.checkbox label:hover::before, +.play-button.checkbox .box:hover::before, +.play-button.checkbox label:hover::before, +.download-button.checkbox .box:hover::before, +.download-button.checkbox label:hover::before { + background: #FFFFFF; + border-color: rgba(34, 36, 38, 0.35); +} +.ui.checkbox label:hover, +.ui.checkbox + label:hover, +.play-button.checkbox label:hover, +.play-button.checkbox + label:hover, +.download-button.checkbox label:hover, +.download-button.checkbox + label:hover { + color: rgba(0, 0, 0, 0.8); +} +/*-------------- + Down +---------------*/ +.ui.checkbox .box:active::before, +.ui.checkbox label:active::before, +.play-button.checkbox .box:active::before, +.play-button.checkbox label:active::before, +.download-button.checkbox .box:active::before, +.download-button.checkbox label:active::before { + background: #F9FAFB; + border-color: rgba(34, 36, 38, 0.35); +} +.ui.checkbox .box:active::after, +.ui.checkbox label:active::after, +.play-button.checkbox .box:active::after, +.play-button.checkbox label:active::after, +.download-button.checkbox .box:active::after, +.download-button.checkbox label:active::after { + color: rgba(0, 0, 0, 0.95); +} +.ui.checkbox input:active ~ label, +.play-button.checkbox input:active ~ label, +.download-button.checkbox input:active ~ label { + color: rgba(0, 0, 0, 0.95); +} +/*-------------- + Focus +---------------*/ +.ui.checkbox input:focus ~ .box:before, +.ui.checkbox input:focus ~ label:before, +.play-button.checkbox input:focus ~ .box:before, +.play-button.checkbox input:focus ~ label:before, +.download-button.checkbox input:focus ~ .box:before, +.download-button.checkbox input:focus ~ label:before { + background: #FFFFFF; + border-color: #96C8DA; +} +.ui.checkbox input:focus ~ .box:after, +.ui.checkbox input:focus ~ label:after, +.play-button.checkbox input:focus ~ .box:after, +.play-button.checkbox input:focus ~ label:after, +.download-button.checkbox input:focus ~ .box:after, +.download-button.checkbox input:focus ~ label:after { + color: rgba(0, 0, 0, 0.95); +} +.ui.checkbox input:focus ~ label, +.play-button.checkbox input:focus ~ label, +.download-button.checkbox input:focus ~ label { + color: rgba(0, 0, 0, 0.95); +} +/*-------------- + Active +---------------*/ +.ui.checkbox input:checked ~ .box:before, +.ui.checkbox input:checked ~ label:before, +.play-button.checkbox input:checked ~ .box:before, +.play-button.checkbox input:checked ~ label:before, +.download-button.checkbox input:checked ~ .box:before, +.download-button.checkbox input:checked ~ label:before { + background: #FFFFFF; + border-color: rgba(34, 36, 38, 0.35); +} +.ui.checkbox input:checked ~ .box:after, +.ui.checkbox input:checked ~ label:after, +.play-button.checkbox input:checked ~ .box:after, +.play-button.checkbox input:checked ~ label:after, +.download-button.checkbox input:checked ~ .box:after, +.download-button.checkbox input:checked ~ label:after { + opacity: 1; + color: rgba(0, 0, 0, 0.95); +} +/*-------------- + Indeterminate +---------------*/ +.ui.checkbox input:not([type=radio]):indeterminate ~ .box:before, +.ui.checkbox input:not([type=radio]):indeterminate ~ label:before, +.play-button.checkbox input:not([type=radio]):indeterminate ~ .box:before, +.play-button.checkbox input:not([type=radio]):indeterminate ~ label:before, +.download-button.checkbox input:not([type=radio]):indeterminate ~ .box:before, +.download-button.checkbox input:not([type=radio]):indeterminate ~ label:before { + background: #FFFFFF; + border-color: rgba(34, 36, 38, 0.35); +} +.ui.checkbox input:not([type=radio]):indeterminate ~ .box:after, +.ui.checkbox input:not([type=radio]):indeterminate ~ label:after, +.play-button.checkbox input:not([type=radio]):indeterminate ~ .box:after, +.play-button.checkbox input:not([type=radio]):indeterminate ~ label:after, +.download-button.checkbox input:not([type=radio]):indeterminate ~ .box:after, +.download-button.checkbox input:not([type=radio]):indeterminate ~ label:after { + opacity: 1; + color: rgba(0, 0, 0, 0.95); +} +/*-------------- + Active Focus +---------------*/ +.ui.checkbox input:not([type=radio]):indeterminate:focus ~ .box:before, +.ui.checkbox input:not([type=radio]):indeterminate:focus ~ label:before, +.ui.checkbox input:checked:focus ~ .box:before, +.ui.checkbox input:checked:focus ~ label:before, +.play-button.checkbox input:not([type=radio]):indeterminate:focus ~ .box:before, +.play-button.checkbox input:not([type=radio]):indeterminate:focus ~ label:before, +.play-button.checkbox input:checked:focus ~ .box:before, +.play-button.checkbox input:checked:focus ~ label:before, +.download-button.checkbox input:not([type=radio]):indeterminate:focus ~ .box:before, +.download-button.checkbox input:not([type=radio]):indeterminate:focus ~ label:before, +.download-button.checkbox input:checked:focus ~ .box:before, +.download-button.checkbox input:checked:focus ~ label:before { + background: #FFFFFF; + border-color: #96C8DA; +} +.ui.checkbox input:not([type=radio]):indeterminate:focus ~ .box:after, +.ui.checkbox input:not([type=radio]):indeterminate:focus ~ label:after, +.ui.checkbox input:checked:focus ~ .box:after, +.ui.checkbox input:checked:focus ~ label:after, +.play-button.checkbox input:not([type=radio]):indeterminate:focus ~ .box:after, +.play-button.checkbox input:not([type=radio]):indeterminate:focus ~ label:after, +.play-button.checkbox input:checked:focus ~ .box:after, +.play-button.checkbox input:checked:focus ~ label:after, +.download-button.checkbox input:not([type=radio]):indeterminate:focus ~ .box:after, +.download-button.checkbox input:not([type=radio]):indeterminate:focus ~ label:after, +.download-button.checkbox input:checked:focus ~ .box:after, +.download-button.checkbox input:checked:focus ~ label:after { + color: rgba(0, 0, 0, 0.95); +} +/*-------------- + Read-Only +---------------*/ +.ui.read-only.checkbox, +.ui.read-only.checkbox label, +.play-button.read-only.checkbox, +.play-button.read-only.checkbox label, +.download-button.read-only.checkbox, +.download-button.read-only.checkbox label { + cursor: default; +} +/*-------------- + Disabled +---------------*/ +.ui.disabled.checkbox .box:after, +.ui.disabled.checkbox label, +.ui.checkbox input[disabled] ~ .box:after, +.ui.checkbox input[disabled] ~ label, +.play-button.disabled.checkbox .box:after, +.play-button.disabled.checkbox label, +.play-button.checkbox input[disabled] ~ .box:after, +.play-button.checkbox input[disabled] ~ label, +.download-button.disabled.checkbox .box:after, +.download-button.disabled.checkbox label, +.download-button.checkbox input[disabled] ~ .box:after, +.download-button.checkbox input[disabled] ~ label { + cursor: default !important; + opacity: 0.5; + color: #000000; +} +/*-------------- + Hidden +---------------*/ +/* Initialized checkbox moves input below element + to prevent manually triggering */ +.ui.checkbox input.hidden, +.play-button.checkbox input.hidden, +.download-button.checkbox input.hidden { + z-index: -1; +} +/* Selectable Label */ +.ui.checkbox input.hidden + label, +.play-button.checkbox input.hidden + label, +.download-button.checkbox input.hidden + label { + cursor: pointer; + user-select: none; +} +/******************************* + Types +*******************************/ +/*-------------- + Radio +---------------*/ +.ui.radio.checkbox, +.play-button.radio.checkbox, +.download-button.radio.checkbox { + min-height: 15px; +} +.ui.radio.checkbox .box, +.ui.radio.checkbox label, +.play-button.radio.checkbox .box, +.play-button.radio.checkbox label, +.download-button.radio.checkbox .box, +.download-button.radio.checkbox label { + padding-left: 1.85714em; +} +/* Box */ +.ui.radio.checkbox .box:before, +.ui.radio.checkbox label:before, +.play-button.radio.checkbox .box:before, +.play-button.radio.checkbox label:before, +.download-button.radio.checkbox .box:before, +.download-button.radio.checkbox label:before { + content: ''; + transform: none; + width: 15px; + height: 15px; + border-radius: 500rem; + top: 1px; + left: 0px; +} +/* Bullet */ +.ui.radio.checkbox .box:after, +.ui.radio.checkbox label:after, +.play-button.radio.checkbox .box:after, +.play-button.radio.checkbox label:after, +.download-button.radio.checkbox .box:after, +.download-button.radio.checkbox label:after { + border: none; + content: '' !important; + width: 15px; + height: 15px; + line-height: 15px; +} +/* Radio Checkbox */ +.ui.radio.checkbox .box:after, +.ui.radio.checkbox label:after, +.play-button.radio.checkbox .box:after, +.play-button.radio.checkbox label:after, +.download-button.radio.checkbox .box:after, +.download-button.radio.checkbox label:after { + top: 1px; + left: 0px; + width: 15px; + height: 15px; + border-radius: 500rem; + transform: scale(0.46666667); + background-color: rgba(0, 0, 0, 0.87); +} +/* Focus */ +.ui.radio.checkbox input:focus ~ .box:before, +.ui.radio.checkbox input:focus ~ label:before, +.play-button.radio.checkbox input:focus ~ .box:before, +.play-button.radio.checkbox input:focus ~ label:before, +.download-button.radio.checkbox input:focus ~ .box:before, +.download-button.radio.checkbox input:focus ~ label:before { + background-color: #FFFFFF; +} +.ui.radio.checkbox input:focus ~ .box:after, +.ui.radio.checkbox input:focus ~ label:after, +.play-button.radio.checkbox input:focus ~ .box:after, +.play-button.radio.checkbox input:focus ~ label:after, +.download-button.radio.checkbox input:focus ~ .box:after, +.download-button.radio.checkbox input:focus ~ label:after { + background-color: rgba(0, 0, 0, 0.95); +} +/* Indeterminate */ +.ui.radio.checkbox input:indeterminate ~ .box:after, +.ui.radio.checkbox input:indeterminate ~ label:after, +.play-button.radio.checkbox input:indeterminate ~ .box:after, +.play-button.radio.checkbox input:indeterminate ~ label:after, +.download-button.radio.checkbox input:indeterminate ~ .box:after, +.download-button.radio.checkbox input:indeterminate ~ label:after { + opacity: 0; +} +/* Active */ +.ui.radio.checkbox input:checked ~ .box:before, +.ui.radio.checkbox input:checked ~ label:before, +.play-button.radio.checkbox input:checked ~ .box:before, +.play-button.radio.checkbox input:checked ~ label:before, +.download-button.radio.checkbox input:checked ~ .box:before, +.download-button.radio.checkbox input:checked ~ label:before { + background-color: #FFFFFF; +} +.ui.radio.checkbox input:checked ~ .box:after, +.ui.radio.checkbox input:checked ~ label:after, +.play-button.radio.checkbox input:checked ~ .box:after, +.play-button.radio.checkbox input:checked ~ label:after, +.download-button.radio.checkbox input:checked ~ .box:after, +.download-button.radio.checkbox input:checked ~ label:after { + background-color: rgba(0, 0, 0, 0.95); +} +/* Active Focus */ +.ui.radio.checkbox input:focus:checked ~ .box:before, +.ui.radio.checkbox input:focus:checked ~ label:before, +.play-button.radio.checkbox input:focus:checked ~ .box:before, +.play-button.radio.checkbox input:focus:checked ~ label:before, +.download-button.radio.checkbox input:focus:checked ~ .box:before, +.download-button.radio.checkbox input:focus:checked ~ label:before { + background-color: #FFFFFF; +} +.ui.radio.checkbox input:focus:checked ~ .box:after, +.ui.radio.checkbox input:focus:checked ~ label:after, +.play-button.radio.checkbox input:focus:checked ~ .box:after, +.play-button.radio.checkbox input:focus:checked ~ label:after, +.download-button.radio.checkbox input:focus:checked ~ .box:after, +.download-button.radio.checkbox input:focus:checked ~ label:after { + background-color: rgba(0, 0, 0, 0.95); +} +/*-------------- + Slider +---------------*/ +.ui.slider.checkbox, +.play-button.slider.checkbox, +.download-button.slider.checkbox { + min-height: 1.25rem; +} +/* Input */ +.ui.slider.checkbox input, +.play-button.slider.checkbox input, +.download-button.slider.checkbox input { + width: 3.5rem; + height: 1.25rem; +} +/* Label */ +.ui.slider.checkbox .box, +.ui.slider.checkbox label, +.play-button.slider.checkbox .box, +.play-button.slider.checkbox label, +.download-button.slider.checkbox .box, +.download-button.slider.checkbox label { + padding-left: 4.5rem; + line-height: 1rem; + color: rgba(0, 0, 0, 0.4); +} +/* Line */ +.ui.slider.checkbox .box:before, +.ui.slider.checkbox label:before, +.play-button.slider.checkbox .box:before, +.play-button.slider.checkbox label:before, +.download-button.slider.checkbox .box:before, +.download-button.slider.checkbox label:before { + display: block; + position: absolute; + content: ''; + border: none !important; + left: 0em; + z-index: 1; + top: 0.4rem; + background-color: rgba(0, 0, 0, 0.05); + width: 3.5rem; + height: 0.21428571rem; + transform: none; + border-radius: 500rem; + transition: background 0.3s ease; +} +/* Handle */ +.ui.slider.checkbox .box:after, +.ui.slider.checkbox label:after, +.play-button.slider.checkbox .box:after, +.play-button.slider.checkbox label:after, +.download-button.slider.checkbox .box:after, +.download-button.slider.checkbox label:after { + background: #FFFFFF linear-gradient(transparent, rgba(0, 0, 0, 0.05)); + position: absolute; + content: '' !important; + opacity: 1; + z-index: 2; + border: none; + box-shadow: 0px 1px 2px 0 rgba(34, 36, 38, 0.15), 0px 0px 0px 1px rgba(34, 36, 38, 0.15) inset; + width: 1.5rem; + height: 1.5rem; + top: -0.25rem; + left: 0em; + transform: none; + border-radius: 500rem; + transition: left 0.3s ease; +} +/* Focus */ +.ui.slider.checkbox input:focus ~ .box:before, +.ui.slider.checkbox input:focus ~ label:before, +.play-button.slider.checkbox input:focus ~ .box:before, +.play-button.slider.checkbox input:focus ~ label:before, +.download-button.slider.checkbox input:focus ~ .box:before, +.download-button.slider.checkbox input:focus ~ label:before { + background-color: rgba(0, 0, 0, 0.15); + border: none; +} +/* Hover */ +.ui.slider.checkbox .box:hover, +.ui.slider.checkbox label:hover, +.play-button.slider.checkbox .box:hover, +.play-button.slider.checkbox label:hover, +.download-button.slider.checkbox .box:hover, +.download-button.slider.checkbox label:hover { + color: rgba(0, 0, 0, 0.8); +} +.ui.slider.checkbox .box:hover::before, +.ui.slider.checkbox label:hover::before, +.play-button.slider.checkbox .box:hover::before, +.play-button.slider.checkbox label:hover::before, +.download-button.slider.checkbox .box:hover::before, +.download-button.slider.checkbox label:hover::before { + background: rgba(0, 0, 0, 0.15); +} +/* Active */ +.ui.slider.checkbox input:checked ~ .box, +.ui.slider.checkbox input:checked ~ label, +.play-button.slider.checkbox input:checked ~ .box, +.play-button.slider.checkbox input:checked ~ label, +.download-button.slider.checkbox input:checked ~ .box, +.download-button.slider.checkbox input:checked ~ label { + color: rgba(0, 0, 0, 0.95) !important; +} +.ui.slider.checkbox input:checked ~ .box:before, +.ui.slider.checkbox input:checked ~ label:before, +.play-button.slider.checkbox input:checked ~ .box:before, +.play-button.slider.checkbox input:checked ~ label:before, +.download-button.slider.checkbox input:checked ~ .box:before, +.download-button.slider.checkbox input:checked ~ label:before { + background-color: #545454 !important; +} +.ui.slider.checkbox input:checked ~ .box:after, +.ui.slider.checkbox input:checked ~ label:after, +.play-button.slider.checkbox input:checked ~ .box:after, +.play-button.slider.checkbox input:checked ~ label:after, +.download-button.slider.checkbox input:checked ~ .box:after, +.download-button.slider.checkbox input:checked ~ label:after { + left: 2rem; +} +/* Active Focus */ +.ui.slider.checkbox input:focus:checked ~ .box, +.ui.slider.checkbox input:focus:checked ~ label, +.play-button.slider.checkbox input:focus:checked ~ .box, +.play-button.slider.checkbox input:focus:checked ~ label, +.download-button.slider.checkbox input:focus:checked ~ .box, +.download-button.slider.checkbox input:focus:checked ~ label { + color: rgba(0, 0, 0, 0.95) !important; +} +.ui.slider.checkbox input:focus:checked ~ .box:before, +.ui.slider.checkbox input:focus:checked ~ label:before, +.play-button.slider.checkbox input:focus:checked ~ .box:before, +.play-button.slider.checkbox input:focus:checked ~ label:before, +.download-button.slider.checkbox input:focus:checked ~ .box:before, +.download-button.slider.checkbox input:focus:checked ~ label:before { + background-color: #000000 !important; +} +/*-------------- + Toggle +---------------*/ +.ui.toggle.checkbox, +.play-button.toggle.checkbox, +.download-button.toggle.checkbox { + min-height: 1.5rem; +} +/* Input */ +.ui.toggle.checkbox input, +.play-button.toggle.checkbox input, +.download-button.toggle.checkbox input { + width: 3.5rem; + height: 1.5rem; +} +/* Label */ +.ui.toggle.checkbox .box, +.ui.toggle.checkbox label, +.play-button.toggle.checkbox .box, +.play-button.toggle.checkbox label, +.download-button.toggle.checkbox .box, +.download-button.toggle.checkbox label { + min-height: 1.5rem; + padding-left: 4.5rem; + color: rgba(0, 0, 0, 0.87); +} +.ui.toggle.checkbox label, +.play-button.toggle.checkbox label, +.download-button.toggle.checkbox label { + padding-top: 0.15em; +} +/* Switch */ +.ui.toggle.checkbox .box:before, +.ui.toggle.checkbox label:before, +.play-button.toggle.checkbox .box:before, +.play-button.toggle.checkbox label:before, +.download-button.toggle.checkbox .box:before, +.download-button.toggle.checkbox label:before { + display: block; + position: absolute; + content: ''; + z-index: 1; + transform: none; + border: none; + top: 0rem; + background: rgba(0, 0, 0, 0.05); + box-shadow: none; + width: 3.5rem; + height: 1.5rem; + border-radius: 500rem; +} +/* Handle */ +.ui.toggle.checkbox .box:after, +.ui.toggle.checkbox label:after, +.play-button.toggle.checkbox .box:after, +.play-button.toggle.checkbox label:after, +.download-button.toggle.checkbox .box:after, +.download-button.toggle.checkbox label:after { + background: #FFFFFF linear-gradient(transparent, rgba(0, 0, 0, 0.05)); + position: absolute; + content: '' !important; + opacity: 1; + z-index: 2; + border: none; + box-shadow: 0px 1px 2px 0 rgba(34, 36, 38, 0.15), 0px 0px 0px 1px rgba(34, 36, 38, 0.15) inset; + width: 1.5rem; + height: 1.5rem; + top: 0rem; + left: 0em; + border-radius: 500rem; + transition: background 0.3s ease, left 0.3s ease; +} +.ui.toggle.checkbox input ~ .box:after, +.ui.toggle.checkbox input ~ label:after, +.play-button.toggle.checkbox input ~ .box:after, +.play-button.toggle.checkbox input ~ label:after, +.download-button.toggle.checkbox input ~ .box:after, +.download-button.toggle.checkbox input ~ label:after { + left: -0.05rem; + box-shadow: none; +} +/* Focus */ +.ui.toggle.checkbox input:focus ~ .box:before, +.ui.toggle.checkbox input:focus ~ label:before, +.play-button.toggle.checkbox input:focus ~ .box:before, +.play-button.toggle.checkbox input:focus ~ label:before, +.download-button.toggle.checkbox input:focus ~ .box:before, +.download-button.toggle.checkbox input:focus ~ label:before { + background-color: rgba(0, 0, 0, 0.15); + border: none; +} +/* Hover */ +.ui.toggle.checkbox .box:hover::before, +.ui.toggle.checkbox label:hover::before, +.play-button.toggle.checkbox .box:hover::before, +.play-button.toggle.checkbox label:hover::before, +.download-button.toggle.checkbox .box:hover::before, +.download-button.toggle.checkbox label:hover::before { + background-color: rgba(0, 0, 0, 0.15); + border: none; +} +/* Active */ +.ui.toggle.checkbox input:checked ~ .box, +.ui.toggle.checkbox input:checked ~ label, +.play-button.toggle.checkbox input:checked ~ .box, +.play-button.toggle.checkbox input:checked ~ label, +.download-button.toggle.checkbox input:checked ~ .box, +.download-button.toggle.checkbox input:checked ~ label { + color: rgba(0, 0, 0, 0.95) !important; +} +.ui.toggle.checkbox input:checked ~ .box:before, +.ui.toggle.checkbox input:checked ~ label:before, +.play-button.toggle.checkbox input:checked ~ .box:before, +.play-button.toggle.checkbox input:checked ~ label:before, +.download-button.toggle.checkbox input:checked ~ .box:before, +.download-button.toggle.checkbox input:checked ~ label:before { + background-color: #3CB5B5 !important; +} +.ui.toggle.checkbox input:checked ~ .box:after, +.ui.toggle.checkbox input:checked ~ label:after, +.play-button.toggle.checkbox input:checked ~ .box:after, +.play-button.toggle.checkbox input:checked ~ label:after, +.download-button.toggle.checkbox input:checked ~ .box:after, +.download-button.toggle.checkbox input:checked ~ label:after { + left: 2.15rem; + box-shadow: none; +} +/* Active Focus */ +.ui.toggle.checkbox input:focus:checked ~ .box, +.ui.toggle.checkbox input:focus:checked ~ label, +.play-button.toggle.checkbox input:focus:checked ~ .box, +.play-button.toggle.checkbox input:focus:checked ~ label, +.download-button.toggle.checkbox input:focus:checked ~ .box, +.download-button.toggle.checkbox input:focus:checked ~ label { + color: rgba(0, 0, 0, 0.95) !important; +} +.ui.toggle.checkbox input:focus:checked ~ .box:before, +.ui.toggle.checkbox input:focus:checked ~ label:before, +.play-button.toggle.checkbox input:focus:checked ~ .box:before, +.play-button.toggle.checkbox input:focus:checked ~ label:before, +.download-button.toggle.checkbox input:focus:checked ~ .box:before, +.download-button.toggle.checkbox input:focus:checked ~ label:before { + background-color: #28a0a0 !important; +} +/******************************* + Variations +*******************************/ +/*-------------- + Fitted +---------------*/ +.ui.fitted.checkbox .box, +.ui.fitted.checkbox label, +.play-button.fitted.checkbox .box, +.play-button.fitted.checkbox label, +.download-button.fitted.checkbox .box, +.download-button.fitted.checkbox label { + padding-left: 0em !important; +} +.ui.fitted.toggle.checkbox, +.ui.fitted.toggle.checkbox, +.play-button.fitted.toggle.checkbox, +.play-button.fitted.toggle.checkbox, +.download-button.fitted.toggle.checkbox, +.download-button.fitted.toggle.checkbox { + width: 3.5rem; +} +.ui.fitted.slider.checkbox, +.ui.fitted.slider.checkbox, +.play-button.fitted.slider.checkbox, +.play-button.fitted.slider.checkbox, +.download-button.fitted.slider.checkbox, +.download-button.fitted.slider.checkbox { + width: 3.5rem; +} +/******************************* + Theme Overrides +*******************************/ +@font-face { + font-family: 'Checkbox'; + src: url(data:application/x-font-ttf;charset=utf-8;base64,AAEAAAALAIAAAwAwT1MvMg8SBD8AAAC8AAAAYGNtYXAYVtCJAAABHAAAAFRnYXNwAAAAEAAAAXAAAAAIZ2x5Zn4huwUAAAF4AAABYGhlYWQGPe1ZAAAC2AAAADZoaGVhB30DyAAAAxAAAAAkaG10eBBKAEUAAAM0AAAAHGxvY2EAmgESAAADUAAAABBtYXhwAAkALwAAA2AAAAAgbmFtZSC8IugAAAOAAAABknBvc3QAAwAAAAAFFAAAACAAAwMTAZAABQAAApkCzAAAAI8CmQLMAAAB6wAzAQkAAAAAAAAAAAAAAAAAAAABEAAAAAAAAAAAAAAAAAAAAABAAADoAgPA/8AAQAPAAEAAAAABAAAAAAAAAAAAAAAgAAAAAAADAAAAAwAAABwAAQADAAAAHAADAAEAAAAcAAQAOAAAAAoACAACAAIAAQAg6AL//f//AAAAAAAg6AD//f//AAH/4xgEAAMAAQAAAAAAAAAAAAAAAQAB//8ADwABAAAAAAAAAAAAAgAANzkBAAAAAAEAAAAAAAAAAAACAAA3OQEAAAAAAQAAAAAAAAAAAAIAADc5AQAAAAABAEUAUQO7AvgAGgAAARQHAQYjIicBJjU0PwE2MzIfAQE2MzIfARYVA7sQ/hQQFhcQ/uMQEE4QFxcQqAF2EBcXEE4QAnMWEP4UEBABHRAXFhBOEBCoAXcQEE4QFwAAAAABAAABbgMlAkkAFAAAARUUBwYjISInJj0BNDc2MyEyFxYVAyUQEBf9SRcQEBAQFwK3FxAQAhJtFxAQEBAXbRcQEBAQFwAAAAABAAAASQMlA24ALAAAARUUBwYrARUUBwYrASInJj0BIyInJj0BNDc2OwE1NDc2OwEyFxYdATMyFxYVAyUQEBfuEBAXbhYQEO4XEBAQEBfuEBAWbhcQEO4XEBACEm0XEBDuFxAQEBAX7hAQF20XEBDuFxAQEBAX7hAQFwAAAQAAAAIAAHRSzT9fDzz1AAsEAAAAAADRsdR3AAAAANGx1HcAAAAAA7sDbgAAAAgAAgAAAAAAAAABAAADwP/AAAAEAAAAAAADuwABAAAAAAAAAAAAAAAAAAAABwQAAAAAAAAAAAAAAAIAAAAEAABFAyUAAAMlAAAAAAAAAAoAFAAeAE4AcgCwAAEAAAAHAC0AAQAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAOAK4AAQAAAAAAAQAIAAAAAQAAAAAAAgAHAGkAAQAAAAAAAwAIADkAAQAAAAAABAAIAH4AAQAAAAAABQALABgAAQAAAAAABgAIAFEAAQAAAAAACgAaAJYAAwABBAkAAQAQAAgAAwABBAkAAgAOAHAAAwABBAkAAwAQAEEAAwABBAkABAAQAIYAAwABBAkABQAWACMAAwABBAkABgAQAFkAAwABBAkACgA0ALBDaGVja2JveABDAGgAZQBjAGsAYgBvAHhWZXJzaW9uIDIuMABWAGUAcgBzAGkAbwBuACAAMgAuADBDaGVja2JveABDAGgAZQBjAGsAYgBvAHhDaGVja2JveABDAGgAZQBjAGsAYgBvAHhSZWd1bGFyAFIAZQBnAHUAbABhAHJDaGVja2JveABDAGgAZQBjAGsAYgBvAHhGb250IGdlbmVyYXRlZCBieSBJY29Nb29uLgBGAG8AbgB0ACAAZwBlAG4AZQByAGEAdABlAGQAIABiAHkAIABJAGMAbwBNAG8AbwBuAC4AAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA) format('truetype'); +} +/* Checkmark */ +.ui.checkbox label:after, +.ui.checkbox .box:after, +.play-button.checkbox label:after, +.play-button.checkbox .box:after, +.download-button.checkbox label:after, +.download-button.checkbox .box:after { + font-family: 'Checkbox'; +} +/* Checked */ +.ui.checkbox input:checked ~ .box:after, +.ui.checkbox input:checked ~ label:after, +.play-button.checkbox input:checked ~ .box:after, +.play-button.checkbox input:checked ~ label:after, +.download-button.checkbox input:checked ~ .box:after, +.download-button.checkbox input:checked ~ label:after { + content: '\e800'; +} +/* Indeterminate */ +.ui.checkbox input:indeterminate ~ .box:after, +.ui.checkbox input:indeterminate ~ label:after, +.play-button.checkbox input:indeterminate ~ .box:after, +.play-button.checkbox input:indeterminate ~ label:after, +.download-button.checkbox input:indeterminate ~ .box:after, +.download-button.checkbox input:indeterminate ~ label:after { + font-size: 12px; + content: '\e801'; +} +/* UTF Reference +.check:before { content: '\e800'; } +.dash:before { content: '\e801'; } +.plus:before { content: '\e802'; } +*/ +/******************************* + Site Overrides +*******************************/ +/*! + * # Semantic UI - Dimmer + * http://github.com/semantic-org/semantic-ui/ + * + * + * Released under the MIT license + * http://opensource.org/licenses/MIT + * + */ +/******************************* + Theme +*******************************/ +/* + +████████╗██╗ ██╗███████╗███╗ ███╗███████╗███████╗ +╚══██╔══╝██║ ██║██╔════╝████╗ ████║██╔════╝██╔════╝ + ██║ ███████║█████╗ ██╔████╔██║█████╗ ███████╗ + ██║ ██╔══██║██╔══╝ ██║╚██╔╝██║██╔══╝ ╚════██║ + ██║ ██║ ██║███████╗██║ ╚═╝ ██║███████╗███████║ + ╚═╝ ╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝╚══════╝╚══════╝ + +*/ +/******************************* + Theme Selection +*******************************/ +/* To override a theme for an individual element + specify theme name below +*/ +/* Global */ +/* Elements */ +/* Collections */ +/* Modules */ +/* Views */ +/******************************* + Folders +*******************************/ +/* Path to theme packages */ +/* Path to site override folder */ +/******************************* + Import Theme +*******************************/ +/******************************* + Import Directives +*******************************/ +/*------------------ + Theme +-------------------*/ +/*-------------------- + Site Variables +---------------------*/ +/* Default site.variables */ +/******************************* + Site Settings +*******************************/ +/*------------------- + Fonts +--------------------*/ +/*------------------- + Base Sizes +--------------------*/ +/* This is the single variable that controls them all */ +/* The size of page text */ +/*------------------- + Border Radius +--------------------*/ +/* See Power-user section below + for explanation of @px variables +*/ +/*------------------- + Brand Colors +--------------------*/ +/*-------------- + Page Heading +---------------*/ +/*-------------- + Form Input +---------------*/ +/* This adjusts the default form input across all elements */ +/* Input Text Color */ +/* Line Height Default For Inputs in Browser (Descendors are 17px at 14px base em) */ +/*------------------- + Focused Input +--------------------*/ +/* Used on inputs, textarea etc */ +/* Used on dropdowns, other larger blocks */ +/*------------------- + Sizes +--------------------*/ +/* + Sizes are all expressed in terms of 14px/em (default em) + This ensures these "ratios" remain constant despite changes in EM +*/ +/*------------------- + Page +--------------------*/ +/*------------------- + Paragraph +--------------------*/ +/*------------------- + Links +--------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ +/*------------------- + Highlighted Text +--------------------*/ +/*------------------- + Loader +--------------------*/ +/*------------------- + Grid +--------------------*/ +/*------------------- + Transitions +--------------------*/ +/*------------------- + Breakpoints +--------------------*/ +/*------------------- + Site Colors +--------------------*/ +/*--- Colors ---*/ +/*--- Light Colors ---*/ +/*--- Neutrals ---*/ +/*--- Colored Backgrounds ---*/ +/*--- Colored Headers ---*/ +/*--- Colored Text ---*/ +/*--- Colored Border ---*/ +/*------------------- + Alpha Colors +--------------------*/ +/*------------------- + Accents +--------------------*/ +/* Differentiating Neutrals */ +/* Differentiating Layers */ +/******************************* + Power-User +*******************************/ +/*------------------- + Emotive Colors +--------------------*/ +/* Positive */ +/* Negative */ +/* Info */ +/* Warning */ +/*------------------- + Paths +--------------------*/ +/* For source only. Modified in gulp for dist */ +/*------------------- + Em Sizes +--------------------*/ +/* + This rounds @size values to the closest pixel then expresses that value in (r)em. + This ensures all size values round to exact pixels +*/ +/* em */ +/* rem */ +/*------------------- + Icons +--------------------*/ +/* Maximum Glyph Width of Icon */ +/*------------------- + Neutral Text +--------------------*/ +/*------------------- + Brand Colors +--------------------*/ +/*------------------- + Borders +--------------------*/ +/*------------------- + Derived Values +--------------------*/ +/* Loaders Position Offset */ +/* Rendered Scrollbar Width */ +/* Maximum Single Character Glyph Width, aka Capital "W" */ +/* Used to match floats with text */ +/* Header Spacing */ +/* Minimum Mobile Width */ +/* Positive / Negative Dupes */ +/* Responsive */ +/*------------------- + Exact Pixel Values +--------------------*/ +/* + These are used to specify exact pixel values in em + for things like borders that remain constantly + sized as emSize adjusts + + Since there are many more sizes than names for sizes, + these are named by their original pixel values. + +*/ +/* Columns */ +/******************************* + States +*******************************/ +/*------------------- + Disabled +--------------------*/ +/*------------------- + Hover +--------------------*/ +/*--- Shadows ---*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Focus +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Down (:active) +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Active +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/* Packaged site.variables */ +/******************************* + User Global Variables +*******************************/ +/*------------------- + Fonts +--------------------*/ +/*------------------- + Breakpoints +--------------------*/ +/* +@mobileBreakpoint : unit( (63 * @emSize), px); +@tabletBreakpoint : unit( (79 * @emSize), px); +@computerBreakpoint : unit( (91 * @emSize), px); +@largeMonitorBreakpoint : unit( (99 * @emSize), px); +@widescreenMonitorBreakpoint : unit( (119 * @emSize), px); +*/ +/******************************* + PXT Variables +*******************************/ +/*------------------- + Menu +--------------------*/ +/*------------------- + Layout +--------------------*/ +/*------------------- + Background +--------------------*/ +/*------------------- + Full screen +--------------------*/ +/*------------------- + Side Docs +--------------------*/ +/*------------------- + Editor +--------------------*/ +/* Component's site.variables */ +/******************************* + Site Settings +*******************************/ +/*------------------- + Fonts +--------------------*/ +/*------------------- + Base Sizes +--------------------*/ +/* This is the single variable that controls them all */ +/* The size of page text */ +/*------------------- + Border Radius +--------------------*/ +/* See Power-user section below + for explanation of @px variables +*/ +/*------------------- + Brand Colors +--------------------*/ +/*-------------- + Page Heading +---------------*/ +/*-------------- + Form Input +---------------*/ +/* This adjusts the default form input across all elements */ +/* Input Text Color */ +/* Line Height Default For Inputs in Browser (Descendors are 17px at 14px base em) */ +/*------------------- + Focused Input +--------------------*/ +/* Used on inputs, textarea etc */ +/* Used on dropdowns, other larger blocks */ +/*------------------- + Sizes +--------------------*/ +/* + Sizes are all expressed in terms of 14px/em (default em) + This ensures these "ratios" remain constant despite changes in EM +*/ +/*------------------- + Page +--------------------*/ +/*------------------- + Paragraph +--------------------*/ +/*------------------- + Links +--------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ +/*------------------- + Highlighted Text +--------------------*/ +/*------------------- + Loader +--------------------*/ +/*------------------- + Grid +--------------------*/ +/*------------------- + Transitions +--------------------*/ +/*------------------- + Breakpoints +--------------------*/ +/*------------------- + Site Colors +--------------------*/ +/*--- Colors ---*/ +/*--- Light Colors ---*/ +/*--- Neutrals ---*/ +/*--- Colored Backgrounds ---*/ +/*--- Colored Headers ---*/ +/*--- Colored Text ---*/ +/*--- Colored Border ---*/ +/*------------------- + Alpha Colors +--------------------*/ +/*------------------- + Accents +--------------------*/ +/* Differentiating Neutrals */ +/* Differentiating Layers */ +/******************************* + Power-User +*******************************/ +/*------------------- + Emotive Colors +--------------------*/ +/* Positive */ +/* Negative */ +/* Info */ +/* Warning */ +/*------------------- + Paths +--------------------*/ +/* For source only. Modified in gulp for dist */ +/*------------------- + Em Sizes +--------------------*/ +/* + This rounds @size values to the closest pixel then expresses that value in (r)em. + This ensures all size values round to exact pixels +*/ +/* em */ +/* rem */ +/*------------------- + Icons +--------------------*/ +/* Maximum Glyph Width of Icon */ +/*------------------- + Neutral Text +--------------------*/ +/*------------------- + Brand Colors +--------------------*/ +/*------------------- + Borders +--------------------*/ +/*------------------- + Derived Values +--------------------*/ +/* Loaders Position Offset */ +/* Rendered Scrollbar Width */ +/* Maximum Single Character Glyph Width, aka Capital "W" */ +/* Used to match floats with text */ +/* Header Spacing */ +/* Minimum Mobile Width */ +/* Positive / Negative Dupes */ +/* Responsive */ +/*------------------- + Exact Pixel Values +--------------------*/ +/* + These are used to specify exact pixel values in em + for things like borders that remain constantly + sized as emSize adjusts + + Since there are many more sizes than names for sizes, + these are named by their original pixel values. + +*/ +/* Columns */ +/******************************* + States +*******************************/ +/*------------------- + Disabled +--------------------*/ +/*------------------- + Hover +--------------------*/ +/*--- Shadows ---*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Focus +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Down (:active) +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Active +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/* Site theme site.variables */ +/******************************* + User Global Variables +*******************************/ +/*------------------- + Site Colors +--------------------*/ +/******************************* + PXT Overrides +*******************************/ +/*------------------- + Component Variables +---------------------*/ +/* Default */ +/******************************* + Dimmer +*******************************/ +/* Hidden (Default) */ +/* Content */ +/* Visible */ +/*------------------- + Types +--------------------*/ +/* Page Dimmer*/ +/*------------------- + Variations +--------------------*/ +/* Inverted */ +/* Simple */ +/* Packaged Theme */ +/******************************* + Dimmer +*******************************/ +/* Hidden (Default) */ +/* Content */ +/* Visible */ +/*------------------- + Types +--------------------*/ +/* Page Dimmer*/ +/*------------------- + Variations +--------------------*/ +/* Inverted */ +/* Simple */ +/* Site Theme */ +/******************************* + User Variable Overrides +*******************************/ +/******************************* + Mix-ins +*******************************/ +/*------------------ + Fonts +-------------------*/ +/*------------------ + Overrides +-------------------*/ +/* End Config */ +/******************************* + Dimmer +*******************************/ +.dimmable:not(body) { + position: relative; +} +.ui.dimmer, +.play-button.dimmer, +.download-button.dimmer { + display: none; + position: absolute; + top: 0em !important; + left: 0em !important; + width: 100%; + height: 100%; + text-align: center; + vertical-align: middle; + background-color: rgba(0, 0, 0, 0.85); + opacity: 0; + line-height: 1; + animation-fill-mode: both; + animation-duration: 0.5s; + transition: background-color 0.5s linear; + user-select: none; + will-change: opacity; + z-index: 1000; +} +/* Dimmer Content */ +.ui.dimmer > .content, +.play-button.dimmer > .content, +.download-button.dimmer > .content { + width: 100%; + height: 100%; + display: table; + user-select: text; +} +.ui.dimmer > .content > *, +.play-button.dimmer > .content > *, +.download-button.dimmer > .content > * { + display: table-cell; + vertical-align: middle; + color: #FFFFFF; +} +/* Loose Coupling */ +.ui.segment > .ui.dimmer, +.play-button.segment > .play-button.dimmer, +.download-button.segment > .download-button.dimmer { + border-radius: inherit !important; +} +/* Scrollbars */ +.ui.dimmer:not(.inverted)::-webkit-scrollbar-track, +.play-button.dimmer:not(.inverted)::-webkit-scrollbar-track, +.download-button.dimmer:not(.inverted)::-webkit-scrollbar-track { + background: rgba(255, 255, 255, 0.1); +} +.ui.dimmer:not(.inverted)::-webkit-scrollbar-thumb, +.play-button.dimmer:not(.inverted)::-webkit-scrollbar-thumb, +.download-button.dimmer:not(.inverted)::-webkit-scrollbar-thumb { + background: rgba(255, 255, 255, 0.25); +} +.ui.dimmer:not(.inverted)::-webkit-scrollbar-thumb:window-inactive, +.play-button.dimmer:not(.inverted)::-webkit-scrollbar-thumb:window-inactive, +.download-button.dimmer:not(.inverted)::-webkit-scrollbar-thumb:window-inactive { + background: rgba(255, 255, 255, 0.15); +} +.ui.dimmer:not(.inverted)::-webkit-scrollbar-thumb:hover, +.play-button.dimmer:not(.inverted)::-webkit-scrollbar-thumb:hover, +.download-button.dimmer:not(.inverted)::-webkit-scrollbar-thumb:hover { + background: rgba(255, 255, 255, 0.35); +} +/******************************* + States +*******************************/ +.animating.dimmable:not(body), +.dimmed.dimmable:not(body) { + overflow: hidden; +} +.dimmed.dimmable > .ui.animating.dimmer, +.dimmed.dimmable > .ui.visible.dimmer, +.ui.active.dimmer, +.dimmed.dimmable > .play-button.animating.dimmer, +.dimmed.dimmable > .play-button.visible.dimmer, +.play-button.active.dimmer, +.dimmed.dimmable > .download-button.animating.dimmer, +.dimmed.dimmable > .download-button.visible.dimmer, +.download-button.active.dimmer { + display: block; + opacity: 1; +} +.ui.disabled.dimmer, +.play-button.disabled.dimmer, +.download-button.disabled.dimmer { + width: 0 !important; + height: 0 !important; +} +/******************************* + Variations +*******************************/ +/*-------------- + Page +---------------*/ +.ui.page.dimmer, +.play-button.page.dimmer, +.download-button.page.dimmer { + position: fixed; + transform-style: ''; + perspective: 2000px; + transform-origin: center center; +} +body.animating.in.dimmable, +body.dimmed.dimmable { + overflow: hidden; +} +body.dimmable > .dimmer { + position: fixed; +} +/*-------------- + Blurring +---------------*/ +.blurring.dimmable > :not(.dimmer) { + filter: blur(0px) grayscale(0); + transition: 800ms filter ease; +} +.blurring.dimmed.dimmable > :not(.dimmer) { + filter: blur(5px) grayscale(0.7); +} +/* Dimmer Color */ +.blurring.dimmable > .dimmer { + background-color: rgba(0, 0, 0, 0.6); +} +.blurring.dimmable > .inverted.dimmer { + background-color: rgba(255, 255, 255, 0.6); +} +/*-------------- + Aligned +---------------*/ +.ui.dimmer > .top.aligned.content > *, +.play-button.dimmer > .top.aligned.content > *, +.download-button.dimmer > .top.aligned.content > * { + vertical-align: top; +} +.ui.dimmer > .bottom.aligned.content > *, +.play-button.dimmer > .bottom.aligned.content > *, +.download-button.dimmer > .bottom.aligned.content > * { + vertical-align: bottom; +} +/*-------------- + Inverted +---------------*/ +.ui.inverted.dimmer, +.play-button.inverted.dimmer, +.download-button.inverted.dimmer { + background-color: rgba(255, 255, 255, 0.85); +} +.ui.inverted.dimmer > .content > *, +.play-button.inverted.dimmer > .content > *, +.download-button.inverted.dimmer > .content > * { + color: #FFFFFF; +} +/*-------------- + Simple +---------------*/ +/* Displays without javascript */ +.ui.simple.dimmer, +.play-button.simple.dimmer, +.download-button.simple.dimmer { + display: block; + overflow: hidden; + opacity: 1; + width: 0%; + height: 0%; + z-index: -100; + background-color: rgba(0, 0, 0, 0); +} +.dimmed.dimmable > .ui.simple.dimmer, +.dimmed.dimmable > .play-button.simple.dimmer, +.dimmed.dimmable > .download-button.simple.dimmer { + overflow: visible; + opacity: 1; + width: 100%; + height: 100%; + background-color: rgba(0, 0, 0, 0.85); + z-index: 1; +} +.ui.simple.inverted.dimmer, +.play-button.simple.inverted.dimmer, +.download-button.simple.inverted.dimmer { + background-color: rgba(255, 255, 255, 0); +} +.dimmed.dimmable > .ui.simple.inverted.dimmer, +.dimmed.dimmable > .play-button.simple.inverted.dimmer, +.dimmed.dimmable > .download-button.simple.inverted.dimmer { + background-color: rgba(255, 255, 255, 0.85); +} +/******************************* + Theme Overrides +*******************************/ +/******************************* + User Overrides +*******************************/ +/*! + * # Semantic UI - Dropdown + * http://github.com/semantic-org/semantic-ui/ + * + * + * Released under the MIT license + * http://opensource.org/licenses/MIT + * + */ +/******************************* + Theme +*******************************/ +/* + +████████╗██╗ ██╗███████╗███╗ ███╗███████╗███████╗ +╚══██╔══╝██║ ██║██╔════╝████╗ ████║██╔════╝██╔════╝ + ██║ ███████║█████╗ ██╔████╔██║█████╗ ███████╗ + ██║ ██╔══██║██╔══╝ ██║╚██╔╝██║██╔══╝ ╚════██║ + ██║ ██║ ██║███████╗██║ ╚═╝ ██║███████╗███████║ + ╚═╝ ╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝╚══════╝╚══════╝ + +*/ +/******************************* + Theme Selection +*******************************/ +/* To override a theme for an individual element + specify theme name below +*/ +/* Global */ +/* Elements */ +/* Collections */ +/* Modules */ +/* Views */ +/******************************* + Folders +*******************************/ +/* Path to theme packages */ +/* Path to site override folder */ +/******************************* + Import Theme +*******************************/ +/******************************* + Import Directives +*******************************/ +/*------------------ + Theme +-------------------*/ +/*-------------------- + Site Variables +---------------------*/ +/* Default site.variables */ +/******************************* + Site Settings +*******************************/ +/*------------------- + Fonts +--------------------*/ +/*------------------- + Base Sizes +--------------------*/ +/* This is the single variable that controls them all */ +/* The size of page text */ +/*------------------- + Border Radius +--------------------*/ +/* See Power-user section below + for explanation of @px variables +*/ +/*------------------- + Brand Colors +--------------------*/ +/*-------------- + Page Heading +---------------*/ +/*-------------- + Form Input +---------------*/ +/* This adjusts the default form input across all elements */ +/* Input Text Color */ +/* Line Height Default For Inputs in Browser (Descendors are 17px at 14px base em) */ +/*------------------- + Focused Input +--------------------*/ +/* Used on inputs, textarea etc */ +/* Used on dropdowns, other larger blocks */ +/*------------------- + Sizes +--------------------*/ +/* + Sizes are all expressed in terms of 14px/em (default em) + This ensures these "ratios" remain constant despite changes in EM +*/ +/*------------------- + Page +--------------------*/ +/*------------------- + Paragraph +--------------------*/ +/*------------------- + Links +--------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ +/*------------------- + Highlighted Text +--------------------*/ +/*------------------- + Loader +--------------------*/ +/*------------------- + Grid +--------------------*/ +/*------------------- + Transitions +--------------------*/ +/*------------------- + Breakpoints +--------------------*/ +/*------------------- + Site Colors +--------------------*/ +/*--- Colors ---*/ +/*--- Light Colors ---*/ +/*--- Neutrals ---*/ +/*--- Colored Backgrounds ---*/ +/*--- Colored Headers ---*/ +/*--- Colored Text ---*/ +/*--- Colored Border ---*/ +/*------------------- + Alpha Colors +--------------------*/ +/*------------------- + Accents +--------------------*/ +/* Differentiating Neutrals */ +/* Differentiating Layers */ +/******************************* + Power-User +*******************************/ +/*------------------- + Emotive Colors +--------------------*/ +/* Positive */ +/* Negative */ +/* Info */ +/* Warning */ +/*------------------- + Paths +--------------------*/ +/* For source only. Modified in gulp for dist */ +/*------------------- + Em Sizes +--------------------*/ +/* + This rounds @size values to the closest pixel then expresses that value in (r)em. + This ensures all size values round to exact pixels +*/ +/* em */ +/* rem */ +/*------------------- + Icons +--------------------*/ +/* Maximum Glyph Width of Icon */ +/*------------------- + Neutral Text +--------------------*/ +/*------------------- + Brand Colors +--------------------*/ +/*------------------- + Borders +--------------------*/ +/*------------------- + Derived Values +--------------------*/ +/* Loaders Position Offset */ +/* Rendered Scrollbar Width */ +/* Maximum Single Character Glyph Width, aka Capital "W" */ +/* Used to match floats with text */ +/* Header Spacing */ +/* Minimum Mobile Width */ +/* Positive / Negative Dupes */ +/* Responsive */ +/*------------------- + Exact Pixel Values +--------------------*/ +/* + These are used to specify exact pixel values in em + for things like borders that remain constantly + sized as emSize adjusts + + Since there are many more sizes than names for sizes, + these are named by their original pixel values. + +*/ +/* Columns */ +/******************************* + States +*******************************/ +/*------------------- + Disabled +--------------------*/ +/*------------------- + Hover +--------------------*/ +/*--- Shadows ---*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Focus +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Down (:active) +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Active +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/* Packaged site.variables */ +/******************************* + User Global Variables +*******************************/ +/*------------------- + Fonts +--------------------*/ +/*------------------- + Breakpoints +--------------------*/ +/* +@mobileBreakpoint : unit( (63 * @emSize), px); +@tabletBreakpoint : unit( (79 * @emSize), px); +@computerBreakpoint : unit( (91 * @emSize), px); +@largeMonitorBreakpoint : unit( (99 * @emSize), px); +@widescreenMonitorBreakpoint : unit( (119 * @emSize), px); +*/ +/******************************* + PXT Variables +*******************************/ +/*------------------- + Menu +--------------------*/ +/*------------------- + Layout +--------------------*/ +/*------------------- + Background +--------------------*/ +/*------------------- + Full screen +--------------------*/ +/*------------------- + Side Docs +--------------------*/ +/*------------------- + Editor +--------------------*/ +/* Component's site.variables */ +/******************************* + Site Settings +*******************************/ +/*------------------- + Fonts +--------------------*/ +/*------------------- + Base Sizes +--------------------*/ +/* This is the single variable that controls them all */ +/* The size of page text */ +/*------------------- + Border Radius +--------------------*/ +/* See Power-user section below + for explanation of @px variables +*/ +/*------------------- + Brand Colors +--------------------*/ +/*-------------- + Page Heading +---------------*/ +/*-------------- + Form Input +---------------*/ +/* This adjusts the default form input across all elements */ +/* Input Text Color */ +/* Line Height Default For Inputs in Browser (Descendors are 17px at 14px base em) */ +/*------------------- + Focused Input +--------------------*/ +/* Used on inputs, textarea etc */ +/* Used on dropdowns, other larger blocks */ +/*------------------- + Sizes +--------------------*/ +/* + Sizes are all expressed in terms of 14px/em (default em) + This ensures these "ratios" remain constant despite changes in EM +*/ +/*------------------- + Page +--------------------*/ +/*------------------- + Paragraph +--------------------*/ +/*------------------- + Links +--------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ +/*------------------- + Highlighted Text +--------------------*/ +/*------------------- + Loader +--------------------*/ +/*------------------- + Grid +--------------------*/ +/*------------------- + Transitions +--------------------*/ +/*------------------- + Breakpoints +--------------------*/ +/*------------------- + Site Colors +--------------------*/ +/*--- Colors ---*/ +/*--- Light Colors ---*/ +/*--- Neutrals ---*/ +/*--- Colored Backgrounds ---*/ +/*--- Colored Headers ---*/ +/*--- Colored Text ---*/ +/*--- Colored Border ---*/ +/*------------------- + Alpha Colors +--------------------*/ +/*------------------- + Accents +--------------------*/ +/* Differentiating Neutrals */ +/* Differentiating Layers */ +/******************************* + Power-User +*******************************/ +/*------------------- + Emotive Colors +--------------------*/ +/* Positive */ +/* Negative */ +/* Info */ +/* Warning */ +/*------------------- + Paths +--------------------*/ +/* For source only. Modified in gulp for dist */ +/*------------------- + Em Sizes +--------------------*/ +/* + This rounds @size values to the closest pixel then expresses that value in (r)em. + This ensures all size values round to exact pixels +*/ +/* em */ +/* rem */ +/*------------------- + Icons +--------------------*/ +/* Maximum Glyph Width of Icon */ +/*------------------- + Neutral Text +--------------------*/ +/*------------------- + Brand Colors +--------------------*/ +/*------------------- + Borders +--------------------*/ +/*------------------- + Derived Values +--------------------*/ +/* Loaders Position Offset */ +/* Rendered Scrollbar Width */ +/* Maximum Single Character Glyph Width, aka Capital "W" */ +/* Used to match floats with text */ +/* Header Spacing */ +/* Minimum Mobile Width */ +/* Positive / Negative Dupes */ +/* Responsive */ +/*------------------- + Exact Pixel Values +--------------------*/ +/* + These are used to specify exact pixel values in em + for things like borders that remain constantly + sized as emSize adjusts + + Since there are many more sizes than names for sizes, + these are named by their original pixel values. + +*/ +/* Columns */ +/******************************* + States +*******************************/ +/*------------------- + Disabled +--------------------*/ +/*------------------- + Hover +--------------------*/ +/*--- Shadows ---*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Focus +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Down (:active) +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Active +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/* Site theme site.variables */ +/******************************* + User Global Variables +*******************************/ +/*------------------- + Site Colors +--------------------*/ +/******************************* + PXT Overrides +*******************************/ +/*------------------- + Component Variables +---------------------*/ +/* Default */ +/******************************* + Dropdown +*******************************/ +/*------------------- + Element +--------------------*/ +/*------------------- + Content +--------------------*/ +/* Icon */ +/* Current Text */ +/* Menu */ +/* Text */ +/* Menu Item */ +/* Sub Menu */ +/* Menu Header */ +/* Menu Divider */ +/* Menu Input */ +/* Menu Image */ +/* Item Sub-Element */ +/* Sub-Menu Dropdown Icon */ +/* Description */ +/* Message */ +/* Floated Content */ +/*------------------- + Types +--------------------*/ +/*------------ + Selection +--------------*/ +/* */ +/* Responsive */ +/* Derived */ +/* 1px / em size */ +/* Hover */ +/* Focus */ +/* Visible */ +/* Visible Hover */ +/*-------------- + Search +--------------*/ +/* Search Selection */ +/* Inline */ +/*-------------- + Multiple +--------------*/ +/* Split Actual Padding Between Child and Parent (allows for label spacing) */ +/* Child Elements */ +/* Dropdown Icon */ +/* Selection Label */ +/*------------------- + States +--------------------*/ +/* Hovered */ +/* Default Text */ +/* Loading */ +/* Active Menu Item */ +/* Selected */ +/* Error */ +/*------------------- + Variations +--------------------*/ +/* Scrolling */ +/* 0px / em size */ +/* Upward */ +/* Flyout Direction */ +/* Left */ +/* Simple */ +/* Floating */ +/* Pointing */ +/* Pointing Upward */ +/* Site Theme */ +/******************************* + User Variable Overrides +*******************************/ +/******************************* + Mix-ins +*******************************/ +/*------------------ + Fonts +-------------------*/ +/*------------------ + Overrides +-------------------*/ +/* End Config */ +/******************************* + Dropdown +*******************************/ +.ui.dropdown, +.play-button.dropdown, +.download-button.dropdown { + cursor: pointer; + position: relative; + display: inline-block; + outline: none; + text-align: left; + transition: box-shadow 0.1s ease, width 0.1s ease; + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); +} +/******************************* + Content +*******************************/ +/*-------------- + Menu +---------------*/ +.ui.dropdown .menu, +.play-button.dropdown .menu, +.download-button.dropdown .menu { + cursor: auto; + position: absolute; + display: none; + outline: none; + top: 100%; + min-width: max-content; + margin: 0em; + padding: 0em 0em; + background: #FFFFFF; + font-size: 1em; + text-shadow: none; + text-align: left; + box-shadow: 0px 2px 3px 0px rgba(34, 36, 38, 0.15); + border: 1px solid rgba(34, 36, 38, 0.15); + border-radius: 0.28571429rem; + transition: opacity 0.1s ease; + z-index: 11; + will-change: transform, opacity; +} +.ui.dropdown .menu > *, +.play-button.dropdown .menu > *, +.download-button.dropdown .menu > * { + white-space: nowrap; +} +/*-------------- + Hidden Input +---------------*/ +.ui.dropdown > input:not(.search):first-child, +.ui.dropdown > select, +.play-button.dropdown > input:not(.search):first-child, +.play-button.dropdown > select, +.download-button.dropdown > input:not(.search):first-child, +.download-button.dropdown > select { + display: none !important; +} +/*-------------- + Dropdown Icon +---------------*/ +.ui.dropdown > .dropdown.icon, +.play-button.dropdown > .dropdown.icon, +.download-button.dropdown > .dropdown.icon { + position: relative; + width: auto; + font-size: 0.85714286em; + margin: 0em 0em 0em 1em; +} +.ui.dropdown .menu > .item .dropdown.icon, +.play-button.dropdown .menu > .item .dropdown.icon, +.download-button.dropdown .menu > .item .dropdown.icon { + width: auto; + float: right; + margin: 0em 0em 0em 1em; +} +.ui.dropdown .menu > .item .dropdown.icon + .text, +.play-button.dropdown .menu > .item .dropdown.icon + .text, +.download-button.dropdown .menu > .item .dropdown.icon + .text { + margin-right: 1em; +} +/*-------------- + Text +---------------*/ +.ui.dropdown > .text, +.play-button.dropdown > .text, +.download-button.dropdown > .text { + display: inline-block; + transition: none; +} +/*-------------- + Menu Item +---------------*/ +.ui.dropdown .menu > .item, +.play-button.dropdown .menu > .item, +.download-button.dropdown .menu > .item { + position: relative; + cursor: pointer; + display: block; + border: none; + height: auto; + text-align: left; + border-top: none; + line-height: 1em; + color: rgba(0, 0, 0, 0.87); + padding: 0.78571429rem 1.14285714rem !important; + font-size: 1rem; + text-transform: none; + font-weight: normal; + box-shadow: none; + -webkit-touch-callout: none; +} +.ui.dropdown .menu > .item:first-child, +.play-button.dropdown .menu > .item:first-child, +.download-button.dropdown .menu > .item:first-child { + border-top-width: 0px; +} +/*-------------- + Floated Content +---------------*/ +.ui.dropdown > .text > [class*="right floated"], +.ui.dropdown .menu .item > [class*="right floated"], +.play-button.dropdown > .text > [class*="right floated"], +.play-button.dropdown .menu .item > [class*="right floated"], +.download-button.dropdown > .text > [class*="right floated"], +.download-button.dropdown .menu .item > [class*="right floated"] { + float: right !important; + margin-right: 0em !important; + margin-left: 1em !important; +} +.ui.dropdown > .text > [class*="left floated"], +.ui.dropdown .menu .item > [class*="left floated"], +.play-button.dropdown > .text > [class*="left floated"], +.play-button.dropdown .menu .item > [class*="left floated"], +.download-button.dropdown > .text > [class*="left floated"], +.download-button.dropdown .menu .item > [class*="left floated"] { + float: left !important; + margin-left: 0em !important; + margin-right: 1em !important; +} +.ui.dropdown .menu .item > .icon.floated, +.ui.dropdown .menu .item > .flag.floated, +.ui.dropdown .menu .item > .image.floated, +.ui.dropdown .menu .item > img.floated, +.play-button.dropdown .menu .item > .icon.floated, +.play-button.dropdown .menu .item > .flag.floated, +.play-button.dropdown .menu .item > .image.floated, +.play-button.dropdown .menu .item > img.floated, +.download-button.dropdown .menu .item > .icon.floated, +.download-button.dropdown .menu .item > .flag.floated, +.download-button.dropdown .menu .item > .image.floated, +.download-button.dropdown .menu .item > img.floated { + margin-top: 0em; +} +/*-------------- + Menu Divider +---------------*/ +.ui.dropdown .menu > .header, +.play-button.dropdown .menu > .header, +.download-button.dropdown .menu > .header { + margin: 1rem 0rem 0.75rem; + padding: 0em 1.14285714rem; + color: rgba(0, 0, 0, 0.85); + font-size: 0.78571429em; + font-weight: bold; + text-transform: uppercase; +} +.ui.dropdown .menu > .divider, +.play-button.dropdown .menu > .divider, +.download-button.dropdown .menu > .divider { + border-top: 1px solid rgba(34, 36, 38, 0.1); + height: 0em; + margin: 0.5em 0em; +} +.ui.dropdown .menu > .input, +.play-button.dropdown .menu > .input, +.download-button.dropdown .menu > .input { + width: auto; + display: flex; + margin: 1.14285714rem 0.78571429rem; + min-width: 10rem; +} +.ui.dropdown .menu > .header + .input, +.play-button.dropdown .menu > .header + .input, +.download-button.dropdown .menu > .header + .input { + margin-top: 0em; +} +.ui.dropdown .menu > .input:not(.transparent) input, +.play-button.dropdown .menu > .input:not(.transparent) input, +.download-button.dropdown .menu > .input:not(.transparent) input { + padding: 0.5em 1em; +} +.ui.dropdown .menu > .input:not(.transparent) .button, +.ui.dropdown .menu > .input:not(.transparent) .icon, +.ui.dropdown .menu > .input:not(.transparent) .label, +.play-button.dropdown .menu > .input:not(.transparent) .button, +.play-button.dropdown .menu > .input:not(.transparent) .icon, +.play-button.dropdown .menu > .input:not(.transparent) .label, +.ui.dropdown .menu > .input:not(.transparent) .play-button, +.download-button.dropdown .menu > .input:not(.transparent) .button, +.download-button.dropdown .menu > .input:not(.transparent) .icon, +.download-button.dropdown .menu > .input:not(.transparent) .label, +.ui.dropdown .menu > .input:not(.transparent) .download-button { + padding-top: 0.5em; + padding-bottom: 0.5em; +} +/*----------------- + Item Description +-------------------*/ +.ui.dropdown > .text > .description, +.ui.dropdown .menu > .item > .description, +.play-button.dropdown > .text > .description, +.play-button.dropdown .menu > .item > .description, +.download-button.dropdown > .text > .description, +.download-button.dropdown .menu > .item > .description { + float: right; + margin: 0em 0em 0em 1em; + color: rgba(0, 0, 0, 0.4); +} +/*----------------- + Message +-------------------*/ +.ui.dropdown .menu > .message, +.play-button.dropdown .menu > .message, +.download-button.dropdown .menu > .message { + padding: 0.78571429rem 1.14285714rem; + font-weight: normal; +} +.ui.dropdown .menu > .message:not(.ui), +.play-button.dropdown .menu > .message:not(.ui), +.download-button.dropdown .menu > .message:not(.ui) { + color: rgba(0, 0, 0, 0.4); +} +/*-------------- + Sub Menu +---------------*/ +.ui.dropdown .menu .menu, +.play-button.dropdown .menu .menu, +.download-button.dropdown .menu .menu { + top: 0% !important; + left: 100%; + right: auto; + margin: 0em 0em 0em -0.5em !important; + border-radius: 0.28571429rem !important; + z-index: 21 !important; +} +/* Hide Arrow */ +.ui.dropdown .menu .menu:after, +.play-button.dropdown .menu .menu:after, +.download-button.dropdown .menu .menu:after { + display: none; +} +/*-------------- + Sub Elements +---------------*/ +/* Icons / Flags / Labels / Image */ +.ui.dropdown > .text > .icon, +.ui.dropdown > .text > .label, +.ui.dropdown > .text > .flag, +.ui.dropdown > .text > img, +.ui.dropdown > .text > .image, +.play-button.dropdown > .text > .icon, +.play-button.dropdown > .text > .label, +.play-button.dropdown > .text > .flag, +.play-button.dropdown > .text > img, +.play-button.dropdown > .text > .image, +.download-button.dropdown > .text > .icon, +.download-button.dropdown > .text > .label, +.download-button.dropdown > .text > .flag, +.download-button.dropdown > .text > img, +.download-button.dropdown > .text > .image { + margin-top: 0em; +} +.ui.dropdown .menu > .item > .icon, +.ui.dropdown .menu > .item > .label, +.ui.dropdown .menu > .item > .flag, +.ui.dropdown .menu > .item > .image, +.ui.dropdown .menu > .item > img, +.play-button.dropdown .menu > .item > .icon, +.play-button.dropdown .menu > .item > .label, +.play-button.dropdown .menu > .item > .flag, +.play-button.dropdown .menu > .item > .image, +.play-button.dropdown .menu > .item > img, +.download-button.dropdown .menu > .item > .icon, +.download-button.dropdown .menu > .item > .label, +.download-button.dropdown .menu > .item > .flag, +.download-button.dropdown .menu > .item > .image, +.download-button.dropdown .menu > .item > img { + margin-top: 0em; +} +.ui.dropdown > .text > .icon, +.ui.dropdown > .text > .label, +.ui.dropdown > .text > .flag, +.ui.dropdown > .text > img, +.ui.dropdown > .text > .image, +.ui.dropdown .menu > .item > .icon, +.ui.dropdown .menu > .item > .label, +.ui.dropdown .menu > .item > .flag, +.ui.dropdown .menu > .item > .image, +.ui.dropdown .menu > .item > img, +.play-button.dropdown > .text > .icon, +.play-button.dropdown > .text > .label, +.play-button.dropdown > .text > .flag, +.play-button.dropdown > .text > img, +.play-button.dropdown > .text > .image, +.play-button.dropdown .menu > .item > .icon, +.play-button.dropdown .menu > .item > .label, +.play-button.dropdown .menu > .item > .flag, +.play-button.dropdown .menu > .item > .image, +.play-button.dropdown .menu > .item > img, +.download-button.dropdown > .text > .icon, +.download-button.dropdown > .text > .label, +.download-button.dropdown > .text > .flag, +.download-button.dropdown > .text > img, +.download-button.dropdown > .text > .image, +.download-button.dropdown .menu > .item > .icon, +.download-button.dropdown .menu > .item > .label, +.download-button.dropdown .menu > .item > .flag, +.download-button.dropdown .menu > .item > .image, +.download-button.dropdown .menu > .item > img { + margin-left: 0em; + float: none; + margin-right: 0.78571429rem; +} +/*-------------- + Image +---------------*/ +.ui.dropdown > .text > img, +.ui.dropdown > .text > .image, +.ui.dropdown .menu > .item > .image, +.ui.dropdown .menu > .item > img, +.play-button.dropdown > .text > img, +.play-button.dropdown > .text > .image, +.play-button.dropdown .menu > .item > .image, +.play-button.dropdown .menu > .item > img, +.download-button.dropdown > .text > img, +.download-button.dropdown > .text > .image, +.download-button.dropdown .menu > .item > .image, +.download-button.dropdown .menu > .item > img { + display: inline-block; + vertical-align: top; + width: auto; + margin-top: -0.5em; + margin-bottom: -0.5em; + max-height: 2em; +} +/******************************* + Coupling +*******************************/ +/*-------------- + Menu +---------------*/ +/* Remove Menu Item Divider */ +.ui.dropdown .ui.menu > .item:before, +.ui.menu .ui.dropdown .menu > .item:before, +.play-button.dropdown .play-button.menu > .item:before, +.play-button.menu .play-button.dropdown .menu > .item:before, +.download-button.dropdown .download-button.menu > .item:before, +.download-button.menu .download-button.dropdown .menu > .item:before { + display: none; +} +/* Prevent Menu Item Border */ +.ui.menu .ui.dropdown .menu .active.item, +.play-button.menu .play-button.dropdown .menu .active.item, +.download-button.menu .download-button.dropdown .menu .active.item { + border-left: none; +} +/* Automatically float dropdown menu right on last menu item */ +.ui.menu .right.menu .dropdown:last-child .menu, +.ui.menu .right.dropdown.item .menu, +.ui.buttons > .ui.dropdown:last-child .menu, +.play-button.menu .right.menu .dropdown:last-child .menu, +.play-button.menu .right.dropdown.item .menu, +.play-button.buttons > .play-button.dropdown:last-child .menu, +.download-button.menu .right.menu .dropdown:last-child .menu, +.download-button.menu .right.dropdown.item .menu, +.download-button.buttons > .download-button.dropdown:last-child .menu { + left: auto; + right: 0em; +} +/*-------------- + Label +---------------*/ +/* Dropdown Menu */ +.ui.label.dropdown .menu, +.play-button.label.dropdown .menu, +.download-button.label.dropdown .menu { + min-width: 100%; +} +/*-------------- + Button +---------------*/ +/* No Margin On Icon Button */ +.ui.dropdown.icon.button > .dropdown.icon, +.play-button.dropdown.icon.button > .dropdown.icon, +.ui.dropdown.icon.play-button > .dropdown.icon, +.download-button.dropdown.icon.button > .dropdown.icon, +.ui.dropdown.icon.download-button > .dropdown.icon { + margin: 0em; +} +.ui.button.dropdown .menu, +.play-button.button.dropdown .menu, +.ui.play-button.dropdown .menu, +.download-button.button.dropdown .menu, +.ui.download-button.dropdown .menu { + min-width: 100%; +} +/******************************* + Types +*******************************/ +/*-------------- + Selection +---------------*/ +/* Displays like a select box */ +.ui.selection.dropdown, +.play-button.selection.dropdown, +.download-button.selection.dropdown { + cursor: pointer; + word-wrap: break-word; + line-height: 1em; + white-space: normal; + outline: 0; + transform: rotateZ(0deg); + min-width: 14em; + min-height: 2.71428571em; + background: #FFFFFF; + display: inline-block; + padding: 0.78571429em 2.1em 0.78571429em 1em; + color: rgba(0, 0, 0, 0.87); + box-shadow: none; + border: 1px solid rgba(34, 36, 38, 0.15); + border-radius: 0.28571429rem; + transition: box-shadow 0.1s ease, width 0.1s ease; +} +.ui.selection.dropdown.visible, +.ui.selection.dropdown.active, +.play-button.selection.dropdown.visible, +.play-button.selection.dropdown.active, +.download-button.selection.dropdown.visible, +.download-button.selection.dropdown.active { + z-index: 10; +} +select.ui.dropdown, +select.play-button.dropdown, +select.download-button.dropdown { + height: 38px; + padding: 0.5em; + border: 1px solid rgba(34, 36, 38, 0.15); + visibility: visible; +} +.ui.selection.dropdown > .search.icon, +.ui.selection.dropdown > .delete.icon, +.ui.selection.dropdown > .dropdown.icon, +.play-button.selection.dropdown > .search.icon, +.play-button.selection.dropdown > .delete.icon, +.play-button.selection.dropdown > .dropdown.icon, +.download-button.selection.dropdown > .search.icon, +.download-button.selection.dropdown > .delete.icon, +.download-button.selection.dropdown > .dropdown.icon { + cursor: pointer; + position: absolute; + width: auto; + height: auto; + line-height: 1.21428571em; + top: 0.78571429em; + right: 1em; + z-index: 3; + margin: -0.78571429em; + padding: 0.91666667em; + opacity: 0.8; + transition: opacity 0.1s ease; +} +/* Compact */ +.ui.compact.selection.dropdown, +.play-button.compact.selection.dropdown, +.download-button.compact.selection.dropdown { + min-width: 0px; +} +/* Selection Menu */ +.ui.selection.dropdown .menu, +.play-button.selection.dropdown .menu, +.download-button.selection.dropdown .menu { + overflow-x: hidden; + overflow-y: auto; + backface-visibility: hidden; + -webkit-overflow-scrolling: touch; + border-top-width: 0px !important; + width: auto; + outline: none; + margin: 0px -1px; + min-width: calc(100% + 2px ); + width: calc(100% + 2px ); + border-radius: 0em 0em 0.28571429rem 0.28571429rem; + box-shadow: 0px 2px 3px 0px rgba(34, 36, 38, 0.15); + transition: opacity 0.1s ease; +} +.ui.selection.dropdown .menu:after, +.ui.selection.dropdown .menu:before, +.play-button.selection.dropdown .menu:after, +.play-button.selection.dropdown .menu:before, +.download-button.selection.dropdown .menu:after, +.download-button.selection.dropdown .menu:before { + display: none; +} +/*-------------- + Message +---------------*/ +.ui.selection.dropdown .menu > .message, +.play-button.selection.dropdown .menu > .message, +.download-button.selection.dropdown .menu > .message { + padding: 0.78571429rem 1.14285714rem; +} +@media only screen and (max-width: 767px) { + .ui.selection.dropdown .menu, + .play-button.selection.dropdown .menu, + .download-button.selection.dropdown .menu { + max-height: 8.01428571rem; + } +} +@media only screen and (min-width: 768px) { + .ui.selection.dropdown .menu, + .play-button.selection.dropdown .menu, + .download-button.selection.dropdown .menu { + max-height: 10.68571429rem; + } +} +@media only screen and (min-width: 992px) { + .ui.selection.dropdown .menu, + .play-button.selection.dropdown .menu, + .download-button.selection.dropdown .menu { + max-height: 16.02857143rem; + } +} +@media only screen and (min-width: 1920px) { + .ui.selection.dropdown .menu, + .play-button.selection.dropdown .menu, + .download-button.selection.dropdown .menu { + max-height: 21.37142857rem; + } +} +/* Menu Item */ +.ui.selection.dropdown .menu > .item, +.play-button.selection.dropdown .menu > .item, +.download-button.selection.dropdown .menu > .item { + border-top: 1px solid #FAFAFA; + padding: 0.78571429rem 1.14285714rem !important; + white-space: normal; + word-wrap: normal; +} +/* User Item */ +.ui.selection.dropdown .menu > .hidden.addition.item, +.play-button.selection.dropdown .menu > .hidden.addition.item, +.download-button.selection.dropdown .menu > .hidden.addition.item { + display: none; +} +/* Hover */ +.ui.selection.dropdown:hover, +.play-button.selection.dropdown:hover, +.download-button.selection.dropdown:hover { + border-color: rgba(34, 36, 38, 0.35); + box-shadow: none; +} +/* Active */ +.ui.selection.active.dropdown, +.play-button.selection.active.dropdown, +.download-button.selection.active.dropdown { + border-color: #96C8DA; + box-shadow: 0px 2px 3px 0px rgba(34, 36, 38, 0.15); +} +.ui.selection.active.dropdown .menu, +.play-button.selection.active.dropdown .menu, +.download-button.selection.active.dropdown .menu { + border-color: #96C8DA; + box-shadow: 0px 2px 3px 0px rgba(34, 36, 38, 0.15); +} +/* Focus */ +.ui.selection.dropdown:focus, +.play-button.selection.dropdown:focus, +.download-button.selection.dropdown:focus { + border-color: #96C8DA; + box-shadow: none; +} +.ui.selection.dropdown:focus .menu, +.play-button.selection.dropdown:focus .menu, +.download-button.selection.dropdown:focus .menu { + border-color: #96C8DA; + box-shadow: 0px 2px 3px 0px rgba(34, 36, 38, 0.15); +} +/* Visible */ +.ui.selection.visible.dropdown > .text:not(.default), +.play-button.selection.visible.dropdown > .text:not(.default), +.download-button.selection.visible.dropdown > .text:not(.default) { + font-weight: normal; + color: rgba(0, 0, 0, 0.8); +} +/* Visible Hover */ +.ui.selection.active.dropdown:hover, +.play-button.selection.active.dropdown:hover, +.download-button.selection.active.dropdown:hover { + border-color: #96C8DA; + box-shadow: 0px 2px 3px 0px rgba(34, 36, 38, 0.15); +} +.ui.selection.active.dropdown:hover .menu, +.play-button.selection.active.dropdown:hover .menu, +.download-button.selection.active.dropdown:hover .menu { + border-color: #96C8DA; + box-shadow: 0px 2px 3px 0px rgba(34, 36, 38, 0.15); +} +/* Dropdown Icon */ +.ui.active.selection.dropdown > .dropdown.icon, +.ui.visible.selection.dropdown > .dropdown.icon, +.play-button.active.selection.dropdown > .dropdown.icon, +.play-button.visible.selection.dropdown > .dropdown.icon, +.download-button.active.selection.dropdown > .dropdown.icon, +.download-button.visible.selection.dropdown > .dropdown.icon { + opacity: 1; + z-index: 3; +} +/* Connecting Border */ +.ui.active.selection.dropdown, +.play-button.active.selection.dropdown, +.download-button.active.selection.dropdown { + border-bottom-left-radius: 0em !important; + border-bottom-right-radius: 0em !important; +} +/* Empty Connecting Border */ +.ui.active.empty.selection.dropdown, +.play-button.active.empty.selection.dropdown, +.download-button.active.empty.selection.dropdown { + border-radius: 0.28571429rem !important; + box-shadow: none !important; +} +.ui.active.empty.selection.dropdown .menu, +.play-button.active.empty.selection.dropdown .menu, +.download-button.active.empty.selection.dropdown .menu { + border: none !important; + box-shadow: none !important; +} +/*-------------- + Searchable +---------------*/ +/* Search Selection */ +.ui.search.dropdown, +.play-button.search.dropdown, +.download-button.search.dropdown { + min-width: ''; +} +/* Search Dropdown */ +.ui.search.dropdown > input.search, +.play-button.search.dropdown > input.search, +.download-button.search.dropdown > input.search { + background: none transparent !important; + border: none !important; + box-shadow: none !important; + cursor: text; + top: 0em; + left: 1px; + width: 100%; + outline: none; + -webkit-tap-highlight-color: rgba(255, 255, 255, 0); + padding: inherit; +} +/* Text Layering */ +.ui.search.dropdown > input.search, +.play-button.search.dropdown > input.search, +.download-button.search.dropdown > input.search { + position: absolute; + z-index: 2; +} +.ui.search.dropdown > .text, +.play-button.search.dropdown > .text, +.download-button.search.dropdown > .text { + cursor: text; + position: relative; + left: 1px; + z-index: 3; +} +/* Search Selection */ +.ui.search.selection.dropdown > input.search, +.play-button.search.selection.dropdown > input.search, +.download-button.search.selection.dropdown > input.search { + line-height: 1.21428571em; + padding: 0.67857143em 2.1em 0.67857143em 1em; +} +/* Used to size multi select input to character width */ +.ui.search.selection.dropdown > span.sizer, +.play-button.search.selection.dropdown > span.sizer, +.download-button.search.selection.dropdown > span.sizer { + line-height: 1.21428571em; + padding: 0.67857143em 2.1em 0.67857143em 1em; + display: none; + white-space: pre; +} +/* Active/Visible Search */ +.ui.search.dropdown.active > input.search, +.ui.search.dropdown.visible > input.search, +.play-button.search.dropdown.active > input.search, +.play-button.search.dropdown.visible > input.search, +.download-button.search.dropdown.active > input.search, +.download-button.search.dropdown.visible > input.search { + cursor: auto; +} +.ui.search.dropdown.active > .text, +.ui.search.dropdown.visible > .text, +.play-button.search.dropdown.active > .text, +.play-button.search.dropdown.visible > .text, +.download-button.search.dropdown.active > .text, +.download-button.search.dropdown.visible > .text { + pointer-events: none; +} +/* Filtered Text */ +.ui.active.search.dropdown input.search:focus + .text .icon, +.ui.active.search.dropdown input.search:focus + .text .flag, +.play-button.active.search.dropdown input.search:focus + .text .icon, +.play-button.active.search.dropdown input.search:focus + .text .flag, +.download-button.active.search.dropdown input.search:focus + .text .icon, +.download-button.active.search.dropdown input.search:focus + .text .flag { + opacity: 0.45; +} +.ui.active.search.dropdown input.search:focus + .text, +.play-button.active.search.dropdown input.search:focus + .text, +.download-button.active.search.dropdown input.search:focus + .text { + color: rgba(115, 115, 115, 0.87) !important; +} +/* Search Menu */ +.ui.search.dropdown .menu, +.play-button.search.dropdown .menu, +.download-button.search.dropdown .menu { + overflow-x: hidden; + overflow-y: auto; + backface-visibility: hidden; + -webkit-overflow-scrolling: touch; +} +@media only screen and (max-width: 767px) { + .ui.search.dropdown .menu, + .play-button.search.dropdown .menu, + .download-button.search.dropdown .menu { + max-height: 8.01428571rem; + } +} +@media only screen and (min-width: 768px) { + .ui.search.dropdown .menu, + .play-button.search.dropdown .menu, + .download-button.search.dropdown .menu { + max-height: 10.68571429rem; + } +} +@media only screen and (min-width: 992px) { + .ui.search.dropdown .menu, + .play-button.search.dropdown .menu, + .download-button.search.dropdown .menu { + max-height: 16.02857143rem; + } +} +@media only screen and (min-width: 1920px) { + .ui.search.dropdown .menu, + .play-button.search.dropdown .menu, + .download-button.search.dropdown .menu { + max-height: 21.37142857rem; + } +} +/*-------------- + Multiple +---------------*/ +/* Multiple Selection */ +.ui.multiple.dropdown, +.play-button.multiple.dropdown, +.download-button.multiple.dropdown { + padding: 0.22619048em 2.1em 0.22619048em 0.35714286em; +} +.ui.multiple.dropdown .menu, +.play-button.multiple.dropdown .menu, +.download-button.multiple.dropdown .menu { + cursor: auto; +} +/* Multiple Search Selection */ +.ui.multiple.search.dropdown, +.ui.multiple.search.dropdown > input.search, +.play-button.multiple.search.dropdown, +.play-button.multiple.search.dropdown > input.search, +.download-button.multiple.search.dropdown, +.download-button.multiple.search.dropdown > input.search { + cursor: text; +} +/* Selection Label */ +.ui.multiple.dropdown > .label, +.play-button.multiple.dropdown > .label, +.download-button.multiple.dropdown > .label { + user-select: none; + display: inline-block; + vertical-align: top; + white-space: normal; + font-size: 1em; + padding: 0.35714286em 0.78571429em; + margin: 0.14285714rem 0.28571429rem 0.14285714rem 0em; + box-shadow: 0px 0px 0px 1px rgba(34, 36, 38, 0.15) inset; +} +/* Dropdown Icon */ +.ui.multiple.dropdown .dropdown.icon, +.play-button.multiple.dropdown .dropdown.icon, +.download-button.multiple.dropdown .dropdown.icon { + margin: ''; + padding: ''; +} +/* Text */ +.ui.multiple.dropdown > .text, +.play-button.multiple.dropdown > .text, +.download-button.multiple.dropdown > .text { + position: static; + padding: 0; + max-width: 100%; + margin: 0.45238095em 0em 0.45238095em 0.64285714em; + line-height: 1.21428571em; +} +.ui.multiple.dropdown > .label ~ input.search, +.play-button.multiple.dropdown > .label ~ input.search, +.download-button.multiple.dropdown > .label ~ input.search { + margin-left: 0.14285714em !important; +} +.ui.multiple.dropdown > .label ~ .text, +.play-button.multiple.dropdown > .label ~ .text, +.download-button.multiple.dropdown > .label ~ .text { + display: none; +} +/*----------------- + Multiple Search +-----------------*/ +/* Prompt Text */ +.ui.multiple.search.dropdown > .text, +.play-button.multiple.search.dropdown > .text, +.download-button.multiple.search.dropdown > .text { + display: inline-block; + position: absolute; + top: 0; + left: 0; + padding: inherit; + margin: 0.45238095em 0em 0.45238095em 0.64285714em; + line-height: 1.21428571em; +} +.ui.multiple.search.dropdown > .label ~ .text, +.play-button.multiple.search.dropdown > .label ~ .text, +.download-button.multiple.search.dropdown > .label ~ .text { + display: none; +} +/* Search */ +.ui.multiple.search.dropdown > input.search, +.play-button.multiple.search.dropdown > input.search, +.download-button.multiple.search.dropdown > input.search { + position: static; + padding: 0; + max-width: 100%; + margin: 0.45238095em 0em 0.45238095em 0.64285714em; + width: 2.2em; + line-height: 1.21428571em; +} +/*-------------- + Inline +---------------*/ +.ui.inline.dropdown, +.play-button.inline.dropdown, +.download-button.inline.dropdown { + cursor: pointer; + display: inline-block; + color: inherit; +} +.ui.inline.dropdown .dropdown.icon, +.play-button.inline.dropdown .dropdown.icon, +.download-button.inline.dropdown .dropdown.icon { + margin: 0em 0.5em 0em 0.21428571em; + vertical-align: baseline; +} +.ui.inline.dropdown > .text, +.play-button.inline.dropdown > .text, +.download-button.inline.dropdown > .text { + font-weight: bold; +} +.ui.inline.dropdown .menu, +.play-button.inline.dropdown .menu, +.download-button.inline.dropdown .menu { + cursor: auto; + margin-top: 0.21428571em; + border-radius: 0.28571429rem; +} +/******************************* + States +*******************************/ +/*-------------------- + Active +----------------------*/ +/* Menu Item Active */ +.ui.dropdown .menu .active.item, +.play-button.dropdown .menu .active.item, +.download-button.dropdown .menu .active.item { + background: transparent; + font-weight: bold; + color: rgba(0, 0, 0, 0.95); + box-shadow: none; + z-index: 12; +} +/*-------------------- + Hover +----------------------*/ +/* Menu Item Hover */ +.ui.dropdown .menu > .item:hover, +.play-button.dropdown .menu > .item:hover, +.download-button.dropdown .menu > .item:hover { + background: rgba(0, 0, 0, 0.05); + color: rgba(0, 0, 0, 0.95); + z-index: 13; +} +/*-------------------- + Loading +---------------------*/ +.ui.loading.dropdown > i.icon, +.play-button.loading.dropdown > i.icon, +.download-button.loading.dropdown > i.icon { + height: 1em !important; +} +.ui.loading.selection.dropdown > i.icon, +.play-button.loading.selection.dropdown > i.icon, +.download-button.loading.selection.dropdown > i.icon { + padding: 1.5em 1.28571429em !important; +} +.ui.loading.dropdown > i.icon:before, +.play-button.loading.dropdown > i.icon:before, +.download-button.loading.dropdown > i.icon:before { + position: absolute; + content: ''; + top: 50%; + left: 50%; + margin: -0.64285714em 0em 0em -0.64285714em; + width: 1.28571429em; + height: 1.28571429em; + border-radius: 500rem; + border: 0.2em solid rgba(0, 0, 0, 0.1); +} +.ui.loading.dropdown > i.icon:after, +.play-button.loading.dropdown > i.icon:after, +.download-button.loading.dropdown > i.icon:after { + position: absolute; + content: ''; + top: 50%; + left: 50%; + box-shadow: 0px 0px 0px 1px transparent; + margin: -0.64285714em 0em 0em -0.64285714em; + width: 1.28571429em; + height: 1.28571429em; + animation: dropdown-spin 0.6s linear; + animation-iteration-count: infinite; + border-radius: 500rem; + border-color: #42495F transparent transparent; + border-style: solid; + border-width: 0.2em; +} +/* Coupling */ +.ui.loading.dropdown.button > i.icon:before, +.ui.loading.dropdown.button > i.icon:after, +.play-button.loading.dropdown.button > i.icon:before, +.play-button.loading.dropdown.button > i.icon:after, +.ui.loading.dropdown.play-button > i.icon:before, +.ui.loading.dropdown.play-button > i.icon:after, +.download-button.loading.dropdown.button > i.icon:before, +.download-button.loading.dropdown.button > i.icon:after, +.ui.loading.dropdown.download-button > i.icon:before, +.ui.loading.dropdown.download-button > i.icon:after { + display: none; +} +@keyframes dropdown-spin { + from { + transform: rotate(0deg); + } + to { + transform: rotate(360deg); + } +} +/*-------------------- + Default Text +----------------------*/ +.ui.dropdown:not(.button) > .default.text, +.ui.default.dropdown:not(.button) > .text, +.play-button.dropdown:not(.button) > .default.text, +.play-button.default.dropdown:not(.button) > .text, +.download-button.dropdown:not(.button) > .default.text, +.download-button.default.dropdown:not(.button) > .text { + color: rgba(191, 191, 191, 0.87); +} +.ui.dropdown:not(.button) > input:focus ~ .default.text, +.ui.default.dropdown:not(.button) > input:focus ~ .text, +.play-button.dropdown:not(.button) > input:focus ~ .default.text, +.play-button.default.dropdown:not(.button) > input:focus ~ .text, +.download-button.dropdown:not(.button) > input:focus ~ .default.text, +.download-button.default.dropdown:not(.button) > input:focus ~ .text { + color: rgba(115, 115, 115, 0.87); +} +/*-------------------- + Loading +----------------------*/ +.ui.loading.dropdown > .text, +.play-button.loading.dropdown > .text, +.download-button.loading.dropdown > .text { + transition: none; +} +/* Used To Check Position */ +.ui.dropdown .loading.menu, +.play-button.dropdown .loading.menu, +.download-button.dropdown .loading.menu { + display: block; + visibility: hidden; + z-index: -1; +} +.ui.dropdown > .loading.menu, +.play-button.dropdown > .loading.menu, +.download-button.dropdown > .loading.menu { + left: 0px !important; + right: auto !important; +} +.ui.dropdown > .menu .loading.menu, +.play-button.dropdown > .menu .loading.menu, +.download-button.dropdown > .menu .loading.menu { + left: 100% !important; + right: auto !important; +} +/*-------------------- + Keyboard Select +----------------------*/ +/* Selected Item */ +.ui.dropdown.selected, +.ui.dropdown .menu .selected.item, +.play-button.dropdown.selected, +.play-button.dropdown .menu .selected.item, +.download-button.dropdown.selected, +.download-button.dropdown .menu .selected.item { + background: rgba(0, 0, 0, 0.03); + color: rgba(0, 0, 0, 0.95); +} +/*-------------------- + Search Filtered +----------------------*/ +/* Filtered Item */ +.ui.dropdown > .filtered.text, +.play-button.dropdown > .filtered.text, +.download-button.dropdown > .filtered.text { + visibility: hidden; +} +.ui.dropdown .filtered.item, +.play-button.dropdown .filtered.item, +.download-button.dropdown .filtered.item { + display: none !important; +} +/*-------------------- + Error +----------------------*/ +.ui.dropdown.error, +.ui.dropdown.error > .text, +.ui.dropdown.error > .default.text, +.play-button.dropdown.error, +.play-button.dropdown.error > .text, +.play-button.dropdown.error > .default.text, +.download-button.dropdown.error, +.download-button.dropdown.error > .text, +.download-button.dropdown.error > .default.text { + color: #9F3A38; +} +.ui.selection.dropdown.error, +.play-button.selection.dropdown.error, +.download-button.selection.dropdown.error { + background: #FFF6F6; + border-color: #E0B4B4; +} +.ui.selection.dropdown.error:hover, +.play-button.selection.dropdown.error:hover, +.download-button.selection.dropdown.error:hover { + border-color: #E0B4B4; +} +.ui.dropdown.error > .menu, +.ui.dropdown.error > .menu .menu, +.play-button.dropdown.error > .menu, +.play-button.dropdown.error > .menu .menu, +.download-button.dropdown.error > .menu, +.download-button.dropdown.error > .menu .menu { + border-color: #E0B4B4; +} +.ui.dropdown.error > .menu > .item, +.play-button.dropdown.error > .menu > .item, +.download-button.dropdown.error > .menu > .item { + color: #9F3A38; +} +.ui.multiple.selection.error.dropdown > .label, +.play-button.multiple.selection.error.dropdown > .label, +.download-button.multiple.selection.error.dropdown > .label { + border-color: #E0B4B4; +} +/* Item Hover */ +.ui.dropdown.error > .menu > .item:hover, +.play-button.dropdown.error > .menu > .item:hover, +.download-button.dropdown.error > .menu > .item:hover { + background-color: #FFF2F2; +} +/* Item Active */ +.ui.dropdown.error > .menu .active.item, +.play-button.dropdown.error > .menu .active.item, +.download-button.dropdown.error > .menu .active.item { + background-color: #FDCFCF; +} +/*-------------------- + Disabled +----------------------*/ +/* Disabled */ +.ui.disabled.dropdown, +.ui.dropdown .menu > .disabled.item, +.play-button.disabled.dropdown, +.play-button.dropdown .menu > .disabled.item, +.download-button.disabled.dropdown, +.download-button.dropdown .menu > .disabled.item { + cursor: default; + pointer-events: none; + opacity: 0.45; +} +/******************************* + Variations +*******************************/ +/*-------------- + Direction +---------------*/ +/* Flyout Direction */ +.ui.dropdown .menu, +.play-button.dropdown .menu, +.download-button.dropdown .menu { + left: 0px; +} +/* Default Side (Right) */ +.ui.dropdown .right.menu > .menu, +.ui.dropdown .menu .right.menu, +.play-button.dropdown .right.menu > .menu, +.play-button.dropdown .menu .right.menu, +.download-button.dropdown .right.menu > .menu, +.download-button.dropdown .menu .right.menu { + left: 100% !important; + right: auto !important; + border-radius: 0.28571429rem !important; +} +/* Leftward Opening Menu */ +.ui.dropdown > .left.menu, +.play-button.dropdown > .left.menu, +.download-button.dropdown > .left.menu { + left: auto !important; + right: 0px !important; +} +.ui.dropdown > .left.menu .menu, +.ui.dropdown .menu .left.menu, +.play-button.dropdown > .left.menu .menu, +.play-button.dropdown .menu .left.menu, +.download-button.dropdown > .left.menu .menu, +.download-button.dropdown .menu .left.menu { + left: auto; + right: 100%; + margin: 0em -0.5em 0em 0em !important; + border-radius: 0.28571429rem !important; +} +.ui.dropdown .item .left.dropdown.icon, +.ui.dropdown .left.menu .item .dropdown.icon, +.play-button.dropdown .item .left.dropdown.icon, +.play-button.dropdown .left.menu .item .dropdown.icon, +.download-button.dropdown .item .left.dropdown.icon, +.download-button.dropdown .left.menu .item .dropdown.icon { + width: auto; + float: left; + margin: 0em 0em 0em 0em; +} +.ui.dropdown .item .left.dropdown.icon, +.ui.dropdown .left.menu .item .dropdown.icon, +.play-button.dropdown .item .left.dropdown.icon, +.play-button.dropdown .left.menu .item .dropdown.icon, +.download-button.dropdown .item .left.dropdown.icon, +.download-button.dropdown .left.menu .item .dropdown.icon { + width: auto; + float: left; + margin: 0em 0em 0em 0em; +} +.ui.dropdown .item .left.dropdown.icon + .text, +.ui.dropdown .left.menu .item .dropdown.icon + .text, +.play-button.dropdown .item .left.dropdown.icon + .text, +.play-button.dropdown .left.menu .item .dropdown.icon + .text, +.download-button.dropdown .item .left.dropdown.icon + .text, +.download-button.dropdown .left.menu .item .dropdown.icon + .text { + margin-left: 1em; + margin-right: 0em; +} +/*-------------- + Upward +---------------*/ +/* Upward Main Menu */ +.ui.upward.dropdown > .menu, +.play-button.upward.dropdown > .menu, +.download-button.upward.dropdown > .menu { + top: auto; + bottom: 100%; + box-shadow: 0px 0px 3px 0px rgba(0, 0, 0, 0.08); + border-radius: 0.28571429rem 0.28571429rem 0em 0em; +} +/* Upward Sub Menu */ +.ui.dropdown .upward.menu, +.play-button.dropdown .upward.menu, +.download-button.dropdown .upward.menu { + top: auto !important; + bottom: 0 !important; +} +/* Active Upward */ +.ui.simple.upward.active.dropdown, +.ui.simple.upward.dropdown:hover, +.play-button.simple.upward.active.dropdown, +.play-button.simple.upward.dropdown:hover, +.download-button.simple.upward.active.dropdown, +.download-button.simple.upward.dropdown:hover { + border-radius: 0.28571429rem 0.28571429rem 0em 0em !important; +} +.ui.upward.dropdown.button:not(.pointing):not(.floating).active, +.play-button.upward.dropdown.button:not(.pointing):not(.floating).active, +.ui.upward.dropdown.play-button:not(.pointing):not(.floating).active, +.download-button.upward.dropdown.button:not(.pointing):not(.floating).active, +.ui.upward.dropdown.download-button:not(.pointing):not(.floating).active { + border-radius: 0.28571429rem 0.28571429rem 0em 0em; +} +/* Selection */ +.ui.upward.selection.dropdown .menu, +.play-button.upward.selection.dropdown .menu, +.download-button.upward.selection.dropdown .menu { + border-top-width: 1px !important; + border-bottom-width: 0px !important; + box-shadow: 0px -2px 3px 0px rgba(0, 0, 0, 0.08); +} +.ui.upward.selection.dropdown:hover, +.play-button.upward.selection.dropdown:hover, +.download-button.upward.selection.dropdown:hover { + box-shadow: 0px 0px 2px 0px rgba(0, 0, 0, 0.05); +} +/* Active Upward */ +.ui.active.upward.selection.dropdown, +.play-button.active.upward.selection.dropdown, +.download-button.active.upward.selection.dropdown { + border-radius: 0em 0em 0.28571429rem 0.28571429rem !important; +} +/* Visible Upward */ +.ui.upward.selection.dropdown.visible, +.play-button.upward.selection.dropdown.visible, +.download-button.upward.selection.dropdown.visible { + box-shadow: 0px 0px 3px 0px rgba(0, 0, 0, 0.08); + border-radius: 0em 0em 0.28571429rem 0.28571429rem !important; +} +/* Visible Hover Upward */ +.ui.upward.active.selection.dropdown:hover, +.play-button.upward.active.selection.dropdown:hover, +.download-button.upward.active.selection.dropdown:hover { + box-shadow: 0px 0px 3px 0px rgba(0, 0, 0, 0.05); +} +.ui.upward.active.selection.dropdown:hover .menu, +.play-button.upward.active.selection.dropdown:hover .menu, +.download-button.upward.active.selection.dropdown:hover .menu { + box-shadow: 0px -2px 3px 0px rgba(0, 0, 0, 0.08); +} +/*-------------- + Simple +---------------*/ +/* Selection Menu */ +.ui.scrolling.dropdown .menu, +.ui.dropdown .scrolling.menu, +.play-button.scrolling.dropdown .menu, +.play-button.dropdown .scrolling.menu, +.download-button.scrolling.dropdown .menu, +.download-button.dropdown .scrolling.menu { + overflow-x: hidden; + overflow-y: auto; +} +.ui.scrolling.dropdown .menu, +.play-button.scrolling.dropdown .menu, +.download-button.scrolling.dropdown .menu { + overflow-x: hidden; + overflow-y: auto; + backface-visibility: hidden; + -webkit-overflow-scrolling: touch; + min-width: 100% !important; + width: auto !important; +} +.ui.dropdown .scrolling.menu, +.play-button.dropdown .scrolling.menu, +.download-button.dropdown .scrolling.menu { + position: static; + overflow-y: auto; + border: none; + box-shadow: none !important; + border-radius: 0 !important; + margin: 0 !important; + min-width: 100% !important; + width: auto !important; + border-top: 1px solid rgba(34, 36, 38, 0.15); +} +.ui.scrolling.dropdown .menu .item.item.item, +.ui.dropdown .scrolling.menu > .item.item.item, +.play-button.scrolling.dropdown .menu .item.item.item, +.play-button.dropdown .scrolling.menu > .item.item.item, +.download-button.scrolling.dropdown .menu .item.item.item, +.download-button.dropdown .scrolling.menu > .item.item.item { + border-top: none; +} +.ui.scrolling.dropdown .menu .item:first-child, +.ui.dropdown .scrolling.menu .item:first-child, +.play-button.scrolling.dropdown .menu .item:first-child, +.play-button.dropdown .scrolling.menu .item:first-child, +.download-button.scrolling.dropdown .menu .item:first-child, +.download-button.dropdown .scrolling.menu .item:first-child { + border-top: none; +} +.ui.dropdown > .animating.menu .scrolling.menu, +.ui.dropdown > .visible.menu .scrolling.menu, +.play-button.dropdown > .animating.menu .scrolling.menu, +.play-button.dropdown > .visible.menu .scrolling.menu, +.download-button.dropdown > .animating.menu .scrolling.menu, +.download-button.dropdown > .visible.menu .scrolling.menu { + display: block; +} +/* Scrollbar in IE */ +@media all and (-ms-high-contrast: none) { + .ui.scrolling.dropdown .menu, + .ui.dropdown .scrolling.menu, + .play-button.scrolling.dropdown .menu, + .play-button.dropdown .scrolling.menu, + .download-button.scrolling.dropdown .menu, + .download-button.dropdown .scrolling.menu { + min-width: calc(100% - 17px ); + } +} +@media only screen and (max-width: 767px) { + .ui.scrolling.dropdown .menu, + .ui.dropdown .scrolling.menu, + .play-button.scrolling.dropdown .menu, + .play-button.dropdown .scrolling.menu, + .download-button.scrolling.dropdown .menu, + .download-button.dropdown .scrolling.menu { + max-height: 10.28571429rem; + } +} +@media only screen and (min-width: 768px) { + .ui.scrolling.dropdown .menu, + .ui.dropdown .scrolling.menu, + .play-button.scrolling.dropdown .menu, + .play-button.dropdown .scrolling.menu, + .download-button.scrolling.dropdown .menu, + .download-button.dropdown .scrolling.menu { + max-height: 15.42857143rem; + } +} +@media only screen and (min-width: 992px) { + .ui.scrolling.dropdown .menu, + .ui.dropdown .scrolling.menu, + .play-button.scrolling.dropdown .menu, + .play-button.dropdown .scrolling.menu, + .download-button.scrolling.dropdown .menu, + .download-button.dropdown .scrolling.menu { + max-height: 20.57142857rem; + } +} +@media only screen and (min-width: 1920px) { + .ui.scrolling.dropdown .menu, + .ui.dropdown .scrolling.menu, + .play-button.scrolling.dropdown .menu, + .play-button.dropdown .scrolling.menu, + .download-button.scrolling.dropdown .menu, + .download-button.dropdown .scrolling.menu { + max-height: 20.57142857rem; + } +} +/*-------------- + Simple +---------------*/ +/* Displays without javascript */ +.ui.simple.dropdown .menu:before, +.ui.simple.dropdown .menu:after, +.play-button.simple.dropdown .menu:before, +.play-button.simple.dropdown .menu:after, +.download-button.simple.dropdown .menu:before, +.download-button.simple.dropdown .menu:after { + display: none; +} +.ui.simple.dropdown .menu, +.play-button.simple.dropdown .menu, +.download-button.simple.dropdown .menu { + position: absolute; + display: block; + overflow: hidden; + top: -9999px !important; + opacity: 0; + width: 0; + height: 0; + transition: opacity 0.1s ease; +} +.ui.simple.active.dropdown, +.ui.simple.dropdown:hover, +.play-button.simple.active.dropdown, +.play-button.simple.dropdown:hover, +.download-button.simple.active.dropdown, +.download-button.simple.dropdown:hover { + border-bottom-left-radius: 0em !important; + border-bottom-right-radius: 0em !important; +} +.ui.simple.active.dropdown > .menu, +.ui.simple.dropdown:hover > .menu, +.play-button.simple.active.dropdown > .menu, +.play-button.simple.dropdown:hover > .menu, +.download-button.simple.active.dropdown > .menu, +.download-button.simple.dropdown:hover > .menu { + overflow: visible; + width: auto; + height: auto; + top: 100% !important; + opacity: 1; +} +.ui.simple.dropdown > .menu > .item:active > .menu, +.ui.simple.dropdown:hover > .menu > .item:hover > .menu, +.play-button.simple.dropdown > .menu > .item:active > .menu, +.play-button.simple.dropdown:hover > .menu > .item:hover > .menu, +.download-button.simple.dropdown > .menu > .item:active > .menu, +.download-button.simple.dropdown:hover > .menu > .item:hover > .menu { + overflow: visible; + width: auto; + height: auto; + top: 0% !important; + left: 100% !important; + opacity: 1; +} +.ui.simple.disabled.dropdown:hover .menu, +.play-button.simple.disabled.dropdown:hover .menu, +.download-button.simple.disabled.dropdown:hover .menu { + display: none; + height: 0px; + width: 0px; + overflow: hidden; +} +/* Visible */ +.ui.simple.visible.dropdown > .menu, +.play-button.simple.visible.dropdown > .menu, +.download-button.simple.visible.dropdown > .menu { + display: block; +} +/*-------------- + Fluid +---------------*/ +.ui.fluid.dropdown, +.play-button.fluid.dropdown, +.download-button.fluid.dropdown { + display: block; + width: 100%; + min-width: 0em; +} +.ui.fluid.dropdown > .dropdown.icon, +.play-button.fluid.dropdown > .dropdown.icon, +.download-button.fluid.dropdown > .dropdown.icon { + float: right; +} +/*-------------- + Floating +---------------*/ +.ui.floating.dropdown .menu, +.play-button.floating.dropdown .menu, +.download-button.floating.dropdown .menu { + left: 0; + right: auto; + box-shadow: 0px 2px 4px 0px rgba(34, 36, 38, 0.12), 0px 2px 10px 0px rgba(34, 36, 38, 0.15) !important; + border-radius: 0.28571429rem !important; +} +.ui.floating.dropdown > .menu, +.play-button.floating.dropdown > .menu, +.download-button.floating.dropdown > .menu { + margin-top: 0.5em !important; + border-radius: 0.28571429rem !important; +} +/*-------------- + Pointing +---------------*/ +.ui.pointing.dropdown > .menu, +.play-button.pointing.dropdown > .menu, +.download-button.pointing.dropdown > .menu { + top: 100%; + margin-top: 0.78571429rem; + border-radius: 0.28571429rem; +} +.ui.pointing.dropdown > .menu:after, +.play-button.pointing.dropdown > .menu:after, +.download-button.pointing.dropdown > .menu:after { + display: block; + position: absolute; + pointer-events: none; + content: ''; + visibility: visible; + transform: rotate(45deg); + width: 0.5em; + height: 0.5em; + box-shadow: -1px -1px 0px 0px rgba(34, 36, 38, 0.15); + background: #FFFFFF; + z-index: 2; +} +.ui.pointing.dropdown > .menu:after, +.play-button.pointing.dropdown > .menu:after, +.download-button.pointing.dropdown > .menu:after { + top: -0.25em; + left: 50%; + margin: 0em 0em 0em -0.25em; +} +/* Top Left Pointing */ +.ui.top.left.pointing.dropdown > .menu, +.play-button.top.left.pointing.dropdown > .menu, +.download-button.top.left.pointing.dropdown > .menu { + top: 100%; + bottom: auto; + left: 0%; + right: auto; + margin: 1em 0em 0em; +} +.ui.top.left.pointing.dropdown > .menu, +.play-button.top.left.pointing.dropdown > .menu, +.download-button.top.left.pointing.dropdown > .menu { + top: 100%; + bottom: auto; + left: 0%; + right: auto; + margin: 1em 0em 0em; +} +.ui.top.left.pointing.dropdown > .menu:after, +.play-button.top.left.pointing.dropdown > .menu:after, +.download-button.top.left.pointing.dropdown > .menu:after { + top: -0.25em; + left: 1em; + right: auto; + margin: 0em; + transform: rotate(45deg); +} +/* Top Right Pointing */ +.ui.top.right.pointing.dropdown > .menu, +.play-button.top.right.pointing.dropdown > .menu, +.download-button.top.right.pointing.dropdown > .menu { + top: 100%; + bottom: auto; + right: 0%; + left: auto; + margin: 1em 0em 0em; +} +.ui.top.pointing.dropdown > .left.menu:after, +.ui.top.right.pointing.dropdown > .menu:after, +.play-button.top.pointing.dropdown > .left.menu:after, +.play-button.top.right.pointing.dropdown > .menu:after, +.download-button.top.pointing.dropdown > .left.menu:after, +.download-button.top.right.pointing.dropdown > .menu:after { + top: -0.25em; + left: auto !important; + right: 1em !important; + margin: 0em; + transform: rotate(45deg); +} +/* Left Pointing */ +.ui.left.pointing.dropdown > .menu, +.play-button.left.pointing.dropdown > .menu, +.download-button.left.pointing.dropdown > .menu { + top: 0%; + left: 100%; + right: auto; + margin: 0em 0em 0em 1em; +} +.ui.left.pointing.dropdown > .menu:after, +.play-button.left.pointing.dropdown > .menu:after, +.download-button.left.pointing.dropdown > .menu:after { + top: 1em; + left: -0.25em; + margin: 0em 0em 0em 0em; + transform: rotate(-45deg); +} +.ui.left:not(.top):not(.bottom).pointing.dropdown > .left.menu, +.play-button.left:not(.top):not(.bottom).pointing.dropdown > .left.menu, +.download-button.left:not(.top):not(.bottom).pointing.dropdown > .left.menu { + left: auto !important; + right: 100% !important; + margin: 0em 1em 0em 0em; +} +.ui.left:not(.top):not(.bottom).pointing.dropdown > .left.menu:after, +.play-button.left:not(.top):not(.bottom).pointing.dropdown > .left.menu:after, +.download-button.left:not(.top):not(.bottom).pointing.dropdown > .left.menu:after { + top: 1em; + left: auto; + right: -0.25em; + margin: 0em 0em 0em 0em; + transform: rotate(135deg); +} +/* Right Pointing */ +.ui.right.pointing.dropdown > .menu, +.play-button.right.pointing.dropdown > .menu, +.download-button.right.pointing.dropdown > .menu { + top: 0%; + left: auto; + right: 100%; + margin: 0em 1em 0em 0em; +} +.ui.right.pointing.dropdown > .menu:after, +.play-button.right.pointing.dropdown > .menu:after, +.download-button.right.pointing.dropdown > .menu:after { + top: 1em; + left: auto; + right: -0.25em; + margin: 0em 0em 0em 0em; + transform: rotate(135deg); +} +/* Bottom Pointing */ +.ui.bottom.pointing.dropdown > .menu, +.play-button.bottom.pointing.dropdown > .menu, +.download-button.bottom.pointing.dropdown > .menu { + top: auto; + bottom: 100%; + left: 0%; + right: auto; + margin: 0em 0em 1em; +} +.ui.bottom.pointing.dropdown > .menu:after, +.play-button.bottom.pointing.dropdown > .menu:after, +.download-button.bottom.pointing.dropdown > .menu:after { + top: auto; + bottom: -0.25em; + right: auto; + margin: 0em; + transform: rotate(-135deg); +} +/* Reverse Sub-Menu Direction */ +.ui.bottom.pointing.dropdown > .menu .menu, +.play-button.bottom.pointing.dropdown > .menu .menu, +.download-button.bottom.pointing.dropdown > .menu .menu { + top: auto !important; + bottom: 0px !important; +} +/* Bottom Left */ +.ui.bottom.left.pointing.dropdown > .menu, +.play-button.bottom.left.pointing.dropdown > .menu, +.download-button.bottom.left.pointing.dropdown > .menu { + left: 0%; + right: auto; +} +.ui.bottom.left.pointing.dropdown > .menu:after, +.play-button.bottom.left.pointing.dropdown > .menu:after, +.download-button.bottom.left.pointing.dropdown > .menu:after { + left: 1em; + right: auto; +} +/* Bottom Right */ +.ui.bottom.right.pointing.dropdown > .menu, +.play-button.bottom.right.pointing.dropdown > .menu, +.download-button.bottom.right.pointing.dropdown > .menu { + right: 0%; + left: auto; +} +.ui.bottom.right.pointing.dropdown > .menu:after, +.play-button.bottom.right.pointing.dropdown > .menu:after, +.download-button.bottom.right.pointing.dropdown > .menu:after { + left: auto; + right: 1em; +} +/* Upward pointing */ +.ui.pointing.upward.dropdown .menu, +.ui.top.pointing.upward.dropdown .menu, +.play-button.pointing.upward.dropdown .menu, +.play-button.top.pointing.upward.dropdown .menu, +.download-button.pointing.upward.dropdown .menu, +.download-button.top.pointing.upward.dropdown .menu { + top: auto !important; + bottom: 100% !important; + margin: 0em 0em 0.78571429rem; + border-radius: 0.28571429rem; +} +.ui.pointing.upward.dropdown .menu:after, +.ui.top.pointing.upward.dropdown .menu:after, +.play-button.pointing.upward.dropdown .menu:after, +.play-button.top.pointing.upward.dropdown .menu:after, +.download-button.pointing.upward.dropdown .menu:after, +.download-button.top.pointing.upward.dropdown .menu:after { + top: 100% !important; + bottom: auto !important; + box-shadow: 1px 1px 0px 0px rgba(34, 36, 38, 0.15); + margin: -0.25em 0em 0em; +} +/* Right Pointing Upward */ +.ui.right.pointing.upward.dropdown:not(.top):not(.bottom) .menu, +.play-button.right.pointing.upward.dropdown:not(.top):not(.bottom) .menu, +.download-button.right.pointing.upward.dropdown:not(.top):not(.bottom) .menu { + top: auto !important; + bottom: 0 !important; + margin: 0em 1em 0em 0em; +} +.ui.right.pointing.upward.dropdown:not(.top):not(.bottom) .menu:after, +.play-button.right.pointing.upward.dropdown:not(.top):not(.bottom) .menu:after, +.download-button.right.pointing.upward.dropdown:not(.top):not(.bottom) .menu:after { + top: auto !important; + bottom: 0 !important; + margin: 0em 0em 1em 0em; + box-shadow: -1px -1px 0px 0px rgba(34, 36, 38, 0.15); +} +/* Left Pointing Upward */ +.ui.left.pointing.upward.dropdown:not(.top):not(.bottom) .menu, +.play-button.left.pointing.upward.dropdown:not(.top):not(.bottom) .menu, +.download-button.left.pointing.upward.dropdown:not(.top):not(.bottom) .menu { + top: auto !important; + bottom: 0 !important; + margin: 0em 0em 0em 1em; +} +.ui.left.pointing.upward.dropdown:not(.top):not(.bottom) .menu:after, +.play-button.left.pointing.upward.dropdown:not(.top):not(.bottom) .menu:after, +.download-button.left.pointing.upward.dropdown:not(.top):not(.bottom) .menu:after { + top: auto !important; + bottom: 0 !important; + margin: 0em 0em 1em 0em; + box-shadow: -1px -1px 0px 0px rgba(34, 36, 38, 0.15); +} +/******************************* + Theme Overrides +*******************************/ +/* Dropdown Carets */ +@font-face { + font-family: 'Dropdown'; + src: url(data:application/x-font-ttf;charset=utf-8;base64,AAEAAAALAIAAAwAwT1MvMggjB5AAAAC8AAAAYGNtYXAPfuIIAAABHAAAAExnYXNwAAAAEAAAAWgAAAAIZ2x5Zjo82LgAAAFwAAABVGhlYWQAQ88bAAACxAAAADZoaGVhAwcB6QAAAvwAAAAkaG10eAS4ABIAAAMgAAAAIGxvY2EBNgDeAAADQAAAABJtYXhwAAoAFgAAA1QAAAAgbmFtZVcZpu4AAAN0AAABRXBvc3QAAwAAAAAEvAAAACAAAwIAAZAABQAAAUwBZgAAAEcBTAFmAAAA9QAZAIQAAAAAAAAAAAAAAAAAAAABEAAAAAAAAAAAAAAAAAAAAABAAADw2gHg/+D/4AHgACAAAAABAAAAAAAAAAAAAAAgAAAAAAACAAAAAwAAABQAAwABAAAAFAAEADgAAAAKAAgAAgACAAEAIPDa//3//wAAAAAAIPDX//3//wAB/+MPLQADAAEAAAAAAAAAAAAAAAEAAf//AA8AAQAAAAAAAAAAAAIAADc5AQAAAAABAAAAAAAAAAAAAgAANzkBAAAAAAEAAAAAAAAAAAACAAA3OQEAAAAAAQAAAIABJQElABMAABM0NzY3BTYXFhUUDwEGJwYvASY1AAUGBwEACAUGBoAFCAcGgAUBEgcGBQEBAQcECQYHfwYBAQZ/BwYAAQAAAG4BJQESABMAADc0PwE2MzIfARYVFAcGIyEiJyY1AAWABgcIBYAGBgUI/wAHBgWABwaABQWABgcHBgUFBgcAAAABABIASQC3AW4AEwAANzQ/ATYXNhcWHQEUBwYnBi8BJjUSBoAFCAcFBgYFBwgFgAbbBwZ/BwEBBwQJ/wgEBwEBB38GBgAAAAABAAAASQClAW4AEwAANxE0NzYzMh8BFhUUDwEGIyInJjUABQYHCAWABgaABQgHBgVbAQAIBQYGgAUIBwWABgYFBwAAAAEAAAABAADZuaKOXw889QALAgAAAAAA0ABHWAAAAADQAEdYAAAAAAElAW4AAAAIAAIAAAAAAAAAAQAAAeD/4AAAAgAAAAAAASUAAQAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAABAAAAASUAAAElAAAAtwASALcAAAAAAAAACgAUAB4AQgBkAIgAqgAAAAEAAAAIABQAAQAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAOAK4AAQAAAAAAAQAOAAAAAQAAAAAAAgAOAEcAAQAAAAAAAwAOACQAAQAAAAAABAAOAFUAAQAAAAAABQAWAA4AAQAAAAAABgAHADIAAQAAAAAACgA0AGMAAwABBAkAAQAOAAAAAwABBAkAAgAOAEcAAwABBAkAAwAOACQAAwABBAkABAAOAFUAAwABBAkABQAWAA4AAwABBAkABgAOADkAAwABBAkACgA0AGMAaQBjAG8AbQBvAG8AbgBWAGUAcgBzAGkAbwBuACAAMQAuADAAaQBjAG8AbQBvAG8Abmljb21vb24AaQBjAG8AbQBvAG8AbgBSAGUAZwB1AGwAYQByAGkAYwBvAG0AbwBvAG4ARgBvAG4AdAAgAGcAZQBuAGUAcgBhAHQAZQBkACAAYgB5ACAASQBjAG8ATQBvAG8AbgAuAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=) format('truetype'), url(data:application/font-woff;charset=utf-8;base64,d09GRk9UVE8AAAVwAAoAAAAABSgAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABDRkYgAAAA9AAAAdkAAAHZLDXE/09TLzIAAALQAAAAYAAAAGAIIweQY21hcAAAAzAAAABMAAAATA9+4ghnYXNwAAADfAAAAAgAAAAIAAAAEGhlYWQAAAOEAAAANgAAADYAQ88baGhlYQAAA7wAAAAkAAAAJAMHAelobXR4AAAD4AAAACAAAAAgBLgAEm1heHAAAAQAAAAABgAAAAYACFAAbmFtZQAABAgAAAFFAAABRVcZpu5wb3N0AAAFUAAAACAAAAAgAAMAAAEABAQAAQEBCGljb21vb24AAQIAAQA6+BwC+BsD+BgEHgoAGVP/i4seCgAZU/+LiwwHi2v4lPh0BR0AAACIDx0AAACNER0AAAAJHQAAAdASAAkBAQgPERMWGyAlKmljb21vb25pY29tb29udTB1MXUyMHVGMEQ3dUYwRDh1RjBEOXVGMERBAAACAYkABgAIAgABAAQABwAKAA0AVgCfAOgBL/yUDvyUDvyUDvuUDvtvi/emFYuQjZCOjo+Pj42Qiwj3lIsFkIuQiY6Hj4iNhouGi4aJh4eHCPsU+xQFiIiGiYaLhouHjYeOCPsU9xQFiI+Jj4uQCA77b4v3FBWLkI2Pjo8I9xT3FAWPjo+NkIuQi5CJjogI9xT7FAWPh42Hi4aLhomHh4eIiIaJhosI+5SLBYaLh42HjoiPiY+LkAgO+92d928Vi5CNkI+OCPcU9xQFjo+QjZCLkIuPiY6Hj4iNhouGCIv7lAWLhomHh4iIh4eJhouGi4aNiI8I+xT3FAWHjomPi5AIDvvdi+YVi/eUBYuQjZCOjo+Pj42Qi5CLkImOhwj3FPsUBY+IjYaLhouGiYeHiAj7FPsUBYiHhomGi4aLh42Hj4iOiY+LkAgO+JQU+JQViwwKAAAAAAMCAAGQAAUAAAFMAWYAAABHAUwBZgAAAPUAGQCEAAAAAAAAAAAAAAAAAAAAARAAAAAAAAAAAAAAAAAAAAAAQAAA8NoB4P/g/+AB4AAgAAAAAQAAAAAAAAAAAAAAIAAAAAAAAgAAAAMAAAAUAAMAAQAAABQABAA4AAAACgAIAAIAAgABACDw2v/9//8AAAAAACDw1//9//8AAf/jDy0AAwABAAAAAAAAAAAAAAABAAH//wAPAAEAAAABAAA5emozXw889QALAgAAAAAA0ABHWAAAAADQAEdYAAAAAAElAW4AAAAIAAIAAAAAAAAAAQAAAeD/4AAAAgAAAAAAASUAAQAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAABAAAAASUAAAElAAAAtwASALcAAAAAUAAACAAAAAAADgCuAAEAAAAAAAEADgAAAAEAAAAAAAIADgBHAAEAAAAAAAMADgAkAAEAAAAAAAQADgBVAAEAAAAAAAUAFgAOAAEAAAAAAAYABwAyAAEAAAAAAAoANABjAAMAAQQJAAEADgAAAAMAAQQJAAIADgBHAAMAAQQJAAMADgAkAAMAAQQJAAQADgBVAAMAAQQJAAUAFgAOAAMAAQQJAAYADgA5AAMAAQQJAAoANABjAGkAYwBvAG0AbwBvAG4AVgBlAHIAcwBpAG8AbgAgADEALgAwAGkAYwBvAG0AbwBvAG5pY29tb29uAGkAYwBvAG0AbwBvAG4AUgBlAGcAdQBsAGEAcgBpAGMAbwBtAG8AbwBuAEYAbwBuAHQAIABnAGUAbgBlAHIAYQB0AGUAZAAgAGIAeQAgAEkAYwBvAE0AbwBvAG4ALgAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA) format('woff'); + font-weight: normal; + font-style: normal; +} +.ui.dropdown > .dropdown.icon, +.play-button.dropdown > .dropdown.icon, +.download-button.dropdown > .dropdown.icon { + font-family: 'Dropdown'; + line-height: 1; + height: 1em; + width: 1.23em; + backface-visibility: hidden; + font-weight: normal; + font-style: normal; + text-align: center; +} +.ui.dropdown > .dropdown.icon, +.play-button.dropdown > .dropdown.icon, +.download-button.dropdown > .dropdown.icon { + width: auto; +} +.ui.dropdown > .dropdown.icon:before, +.play-button.dropdown > .dropdown.icon:before, +.download-button.dropdown > .dropdown.icon:before { + content: '\f0d7'; +} +/* Sub Menu */ +.ui.dropdown .menu .item .dropdown.icon:before, +.play-button.dropdown .menu .item .dropdown.icon:before, +.download-button.dropdown .menu .item .dropdown.icon:before { + content: '\f0da' /*rtl:'\f0d9'*/; +} +.ui.dropdown .item .left.dropdown.icon:before, +.ui.dropdown .left.menu .item .dropdown.icon:before, +.play-button.dropdown .item .left.dropdown.icon:before, +.play-button.dropdown .left.menu .item .dropdown.icon:before, +.download-button.dropdown .item .left.dropdown.icon:before, +.download-button.dropdown .left.menu .item .dropdown.icon:before { + content: "\f0d9" /*rtl:"\f0da"*/; +} +/* Vertical Menu Dropdown */ +.ui.vertical.menu .dropdown.item > .dropdown.icon:before, +.play-button.vertical.menu .dropdown.item > .dropdown.icon:before, +.download-button.vertical.menu .dropdown.item > .dropdown.icon:before { + content: "\f0da" /*rtl:"\f0d9"*/; +} +/* Icons for Reference +.dropdown.down.icon { + content: "\f0d7"; +} +.dropdown.up.icon { + content: "\f0d8"; +} +.dropdown.left.icon { + content: "\f0d9"; +} +.dropdown.icon.icon { + content: "\f0da"; +} +*/ +/******************************* + User Overrides +*******************************/ +/*! + * # Semantic UI - Video + * http://github.com/semantic-org/semantic-ui/ + * + * + * Released under the MIT license + * http://opensource.org/licenses/MIT + * + */ +/******************************* + Theme +*******************************/ +/* + +████████╗██╗ ██╗███████╗███╗ ███╗███████╗███████╗ +╚══██╔══╝██║ ██║██╔════╝████╗ ████║██╔════╝██╔════╝ + ██║ ███████║█████╗ ██╔████╔██║█████╗ ███████╗ + ██║ ██╔══██║██╔══╝ ██║╚██╔╝██║██╔══╝ ╚════██║ + ██║ ██║ ██║███████╗██║ ╚═╝ ██║███████╗███████║ + ╚═╝ ╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝╚══════╝╚══════╝ + +*/ +/******************************* + Theme Selection +*******************************/ +/* To override a theme for an individual element + specify theme name below +*/ +/* Global */ +/* Elements */ +/* Collections */ +/* Modules */ +/* Views */ +/******************************* + Folders +*******************************/ +/* Path to theme packages */ +/* Path to site override folder */ +/******************************* + Import Theme +*******************************/ +/******************************* + Import Directives +*******************************/ +/*------------------ + Theme +-------------------*/ +/*-------------------- + Site Variables +---------------------*/ +/* Default site.variables */ +/******************************* + Site Settings +*******************************/ +/*------------------- + Fonts +--------------------*/ +/*------------------- + Base Sizes +--------------------*/ +/* This is the single variable that controls them all */ +/* The size of page text */ +/*------------------- + Border Radius +--------------------*/ +/* See Power-user section below + for explanation of @px variables +*/ +/*------------------- + Brand Colors +--------------------*/ +/*-------------- + Page Heading +---------------*/ +/*-------------- + Form Input +---------------*/ +/* This adjusts the default form input across all elements */ +/* Input Text Color */ +/* Line Height Default For Inputs in Browser (Descendors are 17px at 14px base em) */ +/*------------------- + Focused Input +--------------------*/ +/* Used on inputs, textarea etc */ +/* Used on dropdowns, other larger blocks */ +/*------------------- + Sizes +--------------------*/ +/* + Sizes are all expressed in terms of 14px/em (default em) + This ensures these "ratios" remain constant despite changes in EM +*/ +/*------------------- + Page +--------------------*/ +/*------------------- + Paragraph +--------------------*/ +/*------------------- + Links +--------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ +/*------------------- + Highlighted Text +--------------------*/ +/*------------------- + Loader +--------------------*/ +/*------------------- + Grid +--------------------*/ +/*------------------- + Transitions +--------------------*/ +/*------------------- + Breakpoints +--------------------*/ +/*------------------- + Site Colors +--------------------*/ +/*--- Colors ---*/ +/*--- Light Colors ---*/ +/*--- Neutrals ---*/ +/*--- Colored Backgrounds ---*/ +/*--- Colored Headers ---*/ +/*--- Colored Text ---*/ +/*--- Colored Border ---*/ +/*------------------- + Alpha Colors +--------------------*/ +/*------------------- + Accents +--------------------*/ +/* Differentiating Neutrals */ +/* Differentiating Layers */ +/******************************* + Power-User +*******************************/ +/*------------------- + Emotive Colors +--------------------*/ +/* Positive */ +/* Negative */ +/* Info */ +/* Warning */ +/*------------------- + Paths +--------------------*/ +/* For source only. Modified in gulp for dist */ +/*------------------- + Em Sizes +--------------------*/ +/* + This rounds @size values to the closest pixel then expresses that value in (r)em. + This ensures all size values round to exact pixels +*/ +/* em */ +/* rem */ +/*------------------- + Icons +--------------------*/ +/* Maximum Glyph Width of Icon */ +/*------------------- + Neutral Text +--------------------*/ +/*------------------- + Brand Colors +--------------------*/ +/*------------------- + Borders +--------------------*/ +/*------------------- + Derived Values +--------------------*/ +/* Loaders Position Offset */ +/* Rendered Scrollbar Width */ +/* Maximum Single Character Glyph Width, aka Capital "W" */ +/* Used to match floats with text */ +/* Header Spacing */ +/* Minimum Mobile Width */ +/* Positive / Negative Dupes */ +/* Responsive */ +/*------------------- + Exact Pixel Values +--------------------*/ +/* + These are used to specify exact pixel values in em + for things like borders that remain constantly + sized as emSize adjusts + + Since there are many more sizes than names for sizes, + these are named by their original pixel values. + +*/ +/* Columns */ +/******************************* + States +*******************************/ +/*------------------- + Disabled +--------------------*/ +/*------------------- + Hover +--------------------*/ +/*--- Shadows ---*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Focus +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Down (:active) +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Active +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/* Packaged site.variables */ +/******************************* + User Global Variables +*******************************/ +/*------------------- + Fonts +--------------------*/ +/*------------------- + Breakpoints +--------------------*/ +/* +@mobileBreakpoint : unit( (63 * @emSize), px); +@tabletBreakpoint : unit( (79 * @emSize), px); +@computerBreakpoint : unit( (91 * @emSize), px); +@largeMonitorBreakpoint : unit( (99 * @emSize), px); +@widescreenMonitorBreakpoint : unit( (119 * @emSize), px); +*/ +/******************************* + PXT Variables +*******************************/ +/*------------------- + Menu +--------------------*/ +/*------------------- + Layout +--------------------*/ +/*------------------- + Background +--------------------*/ +/*------------------- + Full screen +--------------------*/ +/*------------------- + Side Docs +--------------------*/ +/*------------------- + Editor +--------------------*/ +/* Component's site.variables */ +/******************************* + Site Settings +*******************************/ +/*------------------- + Fonts +--------------------*/ +/*------------------- + Base Sizes +--------------------*/ +/* This is the single variable that controls them all */ +/* The size of page text */ +/*------------------- + Border Radius +--------------------*/ +/* See Power-user section below + for explanation of @px variables +*/ +/*------------------- + Brand Colors +--------------------*/ +/*-------------- + Page Heading +---------------*/ +/*-------------- + Form Input +---------------*/ +/* This adjusts the default form input across all elements */ +/* Input Text Color */ +/* Line Height Default For Inputs in Browser (Descendors are 17px at 14px base em) */ +/*------------------- + Focused Input +--------------------*/ +/* Used on inputs, textarea etc */ +/* Used on dropdowns, other larger blocks */ +/*------------------- + Sizes +--------------------*/ +/* + Sizes are all expressed in terms of 14px/em (default em) + This ensures these "ratios" remain constant despite changes in EM +*/ +/*------------------- + Page +--------------------*/ +/*------------------- + Paragraph +--------------------*/ +/*------------------- + Links +--------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ +/*------------------- + Highlighted Text +--------------------*/ +/*------------------- + Loader +--------------------*/ +/*------------------- + Grid +--------------------*/ +/*------------------- + Transitions +--------------------*/ +/*------------------- + Breakpoints +--------------------*/ +/*------------------- + Site Colors +--------------------*/ +/*--- Colors ---*/ +/*--- Light Colors ---*/ +/*--- Neutrals ---*/ +/*--- Colored Backgrounds ---*/ +/*--- Colored Headers ---*/ +/*--- Colored Text ---*/ +/*--- Colored Border ---*/ +/*------------------- + Alpha Colors +--------------------*/ +/*------------------- + Accents +--------------------*/ +/* Differentiating Neutrals */ +/* Differentiating Layers */ +/******************************* + Power-User +*******************************/ +/*------------------- + Emotive Colors +--------------------*/ +/* Positive */ +/* Negative */ +/* Info */ +/* Warning */ +/*------------------- + Paths +--------------------*/ +/* For source only. Modified in gulp for dist */ +/*------------------- + Em Sizes +--------------------*/ +/* + This rounds @size values to the closest pixel then expresses that value in (r)em. + This ensures all size values round to exact pixels +*/ +/* em */ +/* rem */ +/*------------------- + Icons +--------------------*/ +/* Maximum Glyph Width of Icon */ +/*------------------- + Neutral Text +--------------------*/ +/*------------------- + Brand Colors +--------------------*/ +/*------------------- + Borders +--------------------*/ +/*------------------- + Derived Values +--------------------*/ +/* Loaders Position Offset */ +/* Rendered Scrollbar Width */ +/* Maximum Single Character Glyph Width, aka Capital "W" */ +/* Used to match floats with text */ +/* Header Spacing */ +/* Minimum Mobile Width */ +/* Positive / Negative Dupes */ +/* Responsive */ +/*------------------- + Exact Pixel Values +--------------------*/ +/* + These are used to specify exact pixel values in em + for things like borders that remain constantly + sized as emSize adjusts + + Since there are many more sizes than names for sizes, + these are named by their original pixel values. + +*/ +/* Columns */ +/******************************* + States +*******************************/ +/*------------------- + Disabled +--------------------*/ +/*------------------- + Hover +--------------------*/ +/*--- Shadows ---*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Focus +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Down (:active) +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Active +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/* Site theme site.variables */ +/******************************* + User Global Variables +*******************************/ +/*------------------- + Site Colors +--------------------*/ +/******************************* + PXT Overrides +*******************************/ +/*------------------- + Component Variables +---------------------*/ +/* Default */ +/******************************* + Video +*******************************/ +/*------------------- + Element +--------------------*/ +/* Simple */ +/* Placeholder */ +/* Placeholder Overlayed Background */ +/* Icon */ +/*------------------- + States +--------------------*/ +/* Hover */ +/*------------------- + Variations +--------------------*/ +/* Aspect Ratios */ +/* Packaged Theme */ +/******************************* + Video +*******************************/ +/*------------------- + Element +--------------------*/ +/* Simple */ +/* Placeholder */ +/* Placeholder Overlayed Background */ +/* Icon */ +/*------------------- + States +--------------------*/ +/* Hover */ +/*------------------- + Variations +--------------------*/ +/* Aspect Ratios */ +/* Site Theme */ +/******************************* + Mix-ins +*******************************/ +/*------------------ + Fonts +-------------------*/ +/*------------------ + Overrides +-------------------*/ +/* End Config */ +/******************************* + Types +*******************************/ +.ui.embed, +.play-button.embed, +.download-button.embed { + position: relative; + max-width: 100%; + height: 0px; + overflow: hidden; + background: #DCDDDE; + padding-bottom: 56.25%; +} +/*----------------- + Embedded Content +------------------*/ +.ui.embed iframe, +.ui.embed embed, +.ui.embed object, +.play-button.embed iframe, +.play-button.embed embed, +.play-button.embed object, +.download-button.embed iframe, +.download-button.embed embed, +.download-button.embed object { + position: absolute; + border: none; + width: 100%; + height: 100%; + top: 0px; + left: 0px; + margin: 0em; + padding: 0em; +} +/*----------------- + Embed +------------------*/ +.ui.embed > .embed, +.play-button.embed > .embed, +.download-button.embed > .embed { + display: none; +} +/*-------------- + Placeholder +---------------*/ +.ui.embed > .placeholder, +.play-button.embed > .placeholder, +.download-button.embed > .placeholder { + position: absolute; + cursor: pointer; + top: 0px; + left: 0px; + display: block; + width: 100%; + height: 100%; + background-color: radial-gradient(transparent 45%, rgba(0, 0, 0, 0.3)); +} +/*-------------- + Icon +---------------*/ +.ui.embed > .icon, +.play-button.embed > .icon, +.download-button.embed > .icon { + cursor: pointer; + position: absolute; + top: 0px; + left: 0px; + width: 100%; + height: 100%; + z-index: 2; +} +.ui.embed > .icon:after, +.play-button.embed > .icon:after, +.download-button.embed > .icon:after { + position: absolute; + top: 0%; + left: 0%; + width: 100%; + height: 100%; + z-index: 3; + content: ''; + background: radial-gradient(transparent 45%, rgba(0, 0, 0, 0.3)); + opacity: 0.5; + transition: opacity 0.5s ease; +} +.ui.embed > .icon:before, +.play-button.embed > .icon:before, +.download-button.embed > .icon:before { + position: absolute; + top: 50%; + left: 50%; + z-index: 4; + transform: translateX(-50%) translateY(-50%); + color: #FFFFFF; + font-size: 6rem; + text-shadow: 0px 2px 10px rgba(34, 36, 38, 0.2); + transition: opacity 0.5s ease, color 0.5s ease; + z-index: 10; +} +/******************************* + States +*******************************/ +/*-------------- + Hover +---------------*/ +.ui.embed .icon:hover:after, +.play-button.embed .icon:hover:after, +.download-button.embed .icon:hover:after { + background: radial-gradient(transparent 45%, rgba(0, 0, 0, 0.3)); + opacity: 1; +} +.ui.embed .icon:hover:before, +.play-button.embed .icon:hover:before, +.download-button.embed .icon:hover:before { + color: #FFFFFF; +} +/*-------------- + Active +---------------*/ +.ui.active.embed > .icon, +.ui.active.embed > .placeholder, +.play-button.active.embed > .icon, +.play-button.active.embed > .placeholder, +.download-button.active.embed > .icon, +.download-button.active.embed > .placeholder { + display: none; +} +.ui.active.embed > .embed, +.play-button.active.embed > .embed, +.download-button.active.embed > .embed { + display: block; +} +/******************************* + Video Overrides +*******************************/ +/******************************* + Site Overrides +*******************************/ +/******************************* + Variations +*******************************/ +.ui.square.embed, +.play-button.square.embed, +.download-button.square.embed { + padding-bottom: 100%; +} +.ui[class*="4:3"].embed, +.play-button[class*="4:3"].embed, +.download-button[class*="4:3"].embed { + padding-bottom: 75%; +} +.ui[class*="16:9"].embed, +.play-button[class*="16:9"].embed, +.download-button[class*="16:9"].embed { + padding-bottom: 56.25%; +} +.ui[class*="21:9"].embed, +.play-button[class*="21:9"].embed, +.download-button[class*="21:9"].embed { + padding-bottom: 42.85714286%; +} +/*! + * # Semantic UI - Modal + * http://github.com/semantic-org/semantic-ui/ + * + * + * Released under the MIT license + * http://opensource.org/licenses/MIT + * + */ +/******************************* + Theme +*******************************/ +/* + +████████╗██╗ ██╗███████╗███╗ ███╗███████╗███████╗ +╚══██╔══╝██║ ██║██╔════╝████╗ ████║██╔════╝██╔════╝ + ██║ ███████║█████╗ ██╔████╔██║█████╗ ███████╗ + ██║ ██╔══██║██╔══╝ ██║╚██╔╝██║██╔══╝ ╚════██║ + ██║ ██║ ██║███████╗██║ ╚═╝ ██║███████╗███████║ + ╚═╝ ╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝╚══════╝╚══════╝ + +*/ +/******************************* + Theme Selection +*******************************/ +/* To override a theme for an individual element + specify theme name below +*/ +/* Global */ +/* Elements */ +/* Collections */ +/* Modules */ +/* Views */ +/******************************* + Folders +*******************************/ +/* Path to theme packages */ +/* Path to site override folder */ +/******************************* + Import Theme +*******************************/ +/******************************* + Import Directives +*******************************/ +/*------------------ + Theme +-------------------*/ +/*-------------------- + Site Variables +---------------------*/ +/* Default site.variables */ +/******************************* + Site Settings +*******************************/ +/*------------------- + Fonts +--------------------*/ +/*------------------- + Base Sizes +--------------------*/ +/* This is the single variable that controls them all */ +/* The size of page text */ +/*------------------- + Border Radius +--------------------*/ +/* See Power-user section below + for explanation of @px variables +*/ +/*------------------- + Brand Colors +--------------------*/ +/*-------------- + Page Heading +---------------*/ +/*-------------- + Form Input +---------------*/ +/* This adjusts the default form input across all elements */ +/* Input Text Color */ +/* Line Height Default For Inputs in Browser (Descendors are 17px at 14px base em) */ +/*------------------- + Focused Input +--------------------*/ +/* Used on inputs, textarea etc */ +/* Used on dropdowns, other larger blocks */ +/*------------------- + Sizes +--------------------*/ +/* + Sizes are all expressed in terms of 14px/em (default em) + This ensures these "ratios" remain constant despite changes in EM +*/ +/*------------------- + Page +--------------------*/ +/*------------------- + Paragraph +--------------------*/ +/*------------------- + Links +--------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ +/*------------------- + Highlighted Text +--------------------*/ +/*------------------- + Loader +--------------------*/ +/*------------------- + Grid +--------------------*/ +/*------------------- + Transitions +--------------------*/ +/*------------------- + Breakpoints +--------------------*/ +/*------------------- + Site Colors +--------------------*/ +/*--- Colors ---*/ +/*--- Light Colors ---*/ +/*--- Neutrals ---*/ +/*--- Colored Backgrounds ---*/ +/*--- Colored Headers ---*/ +/*--- Colored Text ---*/ +/*--- Colored Border ---*/ +/*------------------- + Alpha Colors +--------------------*/ +/*------------------- + Accents +--------------------*/ +/* Differentiating Neutrals */ +/* Differentiating Layers */ +/******************************* + Power-User +*******************************/ +/*------------------- + Emotive Colors +--------------------*/ +/* Positive */ +/* Negative */ +/* Info */ +/* Warning */ +/*------------------- + Paths +--------------------*/ +/* For source only. Modified in gulp for dist */ +/*------------------- + Em Sizes +--------------------*/ +/* + This rounds @size values to the closest pixel then expresses that value in (r)em. + This ensures all size values round to exact pixels +*/ +/* em */ +/* rem */ +/*------------------- + Icons +--------------------*/ +/* Maximum Glyph Width of Icon */ +/*------------------- + Neutral Text +--------------------*/ +/*------------------- + Brand Colors +--------------------*/ +/*------------------- + Borders +--------------------*/ +/*------------------- + Derived Values +--------------------*/ +/* Loaders Position Offset */ +/* Rendered Scrollbar Width */ +/* Maximum Single Character Glyph Width, aka Capital "W" */ +/* Used to match floats with text */ +/* Header Spacing */ +/* Minimum Mobile Width */ +/* Positive / Negative Dupes */ +/* Responsive */ +/*------------------- + Exact Pixel Values +--------------------*/ +/* + These are used to specify exact pixel values in em + for things like borders that remain constantly + sized as emSize adjusts + + Since there are many more sizes than names for sizes, + these are named by their original pixel values. + +*/ +/* Columns */ +/******************************* + States +*******************************/ +/*------------------- + Disabled +--------------------*/ +/*------------------- + Hover +--------------------*/ +/*--- Shadows ---*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Focus +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Down (:active) +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Active +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/* Packaged site.variables */ +/******************************* + User Global Variables +*******************************/ +/*------------------- + Fonts +--------------------*/ +/*------------------- + Breakpoints +--------------------*/ +/* +@mobileBreakpoint : unit( (63 * @emSize), px); +@tabletBreakpoint : unit( (79 * @emSize), px); +@computerBreakpoint : unit( (91 * @emSize), px); +@largeMonitorBreakpoint : unit( (99 * @emSize), px); +@widescreenMonitorBreakpoint : unit( (119 * @emSize), px); +*/ +/******************************* + PXT Variables +*******************************/ +/*------------------- + Menu +--------------------*/ +/*------------------- + Layout +--------------------*/ +/*------------------- + Background +--------------------*/ +/*------------------- + Full screen +--------------------*/ +/*------------------- + Side Docs +--------------------*/ +/*------------------- + Editor +--------------------*/ +/* Component's site.variables */ +/******************************* + Site Settings +*******************************/ +/*------------------- + Fonts +--------------------*/ +/*------------------- + Base Sizes +--------------------*/ +/* This is the single variable that controls them all */ +/* The size of page text */ +/*------------------- + Border Radius +--------------------*/ +/* See Power-user section below + for explanation of @px variables +*/ +/*------------------- + Brand Colors +--------------------*/ +/*-------------- + Page Heading +---------------*/ +/*-------------- + Form Input +---------------*/ +/* This adjusts the default form input across all elements */ +/* Input Text Color */ +/* Line Height Default For Inputs in Browser (Descendors are 17px at 14px base em) */ +/*------------------- + Focused Input +--------------------*/ +/* Used on inputs, textarea etc */ +/* Used on dropdowns, other larger blocks */ +/*------------------- + Sizes +--------------------*/ +/* + Sizes are all expressed in terms of 14px/em (default em) + This ensures these "ratios" remain constant despite changes in EM +*/ +/*------------------- + Page +--------------------*/ +/*------------------- + Paragraph +--------------------*/ +/*------------------- + Links +--------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ +/*------------------- + Highlighted Text +--------------------*/ +/*------------------- + Loader +--------------------*/ +/*------------------- + Grid +--------------------*/ +/*------------------- + Transitions +--------------------*/ +/*------------------- + Breakpoints +--------------------*/ +/*------------------- + Site Colors +--------------------*/ +/*--- Colors ---*/ +/*--- Light Colors ---*/ +/*--- Neutrals ---*/ +/*--- Colored Backgrounds ---*/ +/*--- Colored Headers ---*/ +/*--- Colored Text ---*/ +/*--- Colored Border ---*/ +/*------------------- + Alpha Colors +--------------------*/ +/*------------------- + Accents +--------------------*/ +/* Differentiating Neutrals */ +/* Differentiating Layers */ +/******************************* + Power-User +*******************************/ +/*------------------- + Emotive Colors +--------------------*/ +/* Positive */ +/* Negative */ +/* Info */ +/* Warning */ +/*------------------- + Paths +--------------------*/ +/* For source only. Modified in gulp for dist */ +/*------------------- + Em Sizes +--------------------*/ +/* + This rounds @size values to the closest pixel then expresses that value in (r)em. + This ensures all size values round to exact pixels +*/ +/* em */ +/* rem */ +/*------------------- + Icons +--------------------*/ +/* Maximum Glyph Width of Icon */ +/*------------------- + Neutral Text +--------------------*/ +/*------------------- + Brand Colors +--------------------*/ +/*------------------- + Borders +--------------------*/ +/*------------------- + Derived Values +--------------------*/ +/* Loaders Position Offset */ +/* Rendered Scrollbar Width */ +/* Maximum Single Character Glyph Width, aka Capital "W" */ +/* Used to match floats with text */ +/* Header Spacing */ +/* Minimum Mobile Width */ +/* Positive / Negative Dupes */ +/* Responsive */ +/*------------------- + Exact Pixel Values +--------------------*/ +/* + These are used to specify exact pixel values in em + for things like borders that remain constantly + sized as emSize adjusts + + Since there are many more sizes than names for sizes, + these are named by their original pixel values. + +*/ +/* Columns */ +/******************************* + States +*******************************/ +/*------------------- + Disabled +--------------------*/ +/*------------------- + Hover +--------------------*/ +/*--- Shadows ---*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Focus +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Down (:active) +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Active +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/* Site theme site.variables */ +/******************************* + User Global Variables +*******************************/ +/*------------------- + Site Colors +--------------------*/ +/******************************* + PXT Overrides +*******************************/ +/*------------------- + Component Variables +---------------------*/ +/* Default */ +/******************************* + Modal +*******************************/ +/* Close Icon */ +/* Header */ +/* Content */ +/* Image / Description */ +/* Modal Actions */ +/* Inner Close Position (Tablet/Mobile) */ +/* Mobile Positions */ +/* Responsive Widths */ +/* Coupling */ +/*------------------- + States +--------------------*/ +/*------------------- + Types +--------------------*/ +/* Basic */ +/* Scrolling Margin */ +/* Scrolling Content */ +/*------------------- + Variations +--------------------*/ +/* Size Widths */ +/* Derived Responsive Sizes */ +/* Packaged Theme */ +/******************************* + Modal +*******************************/ +/* Close Icon */ +/* Header */ +/* Content */ +/* Image / Description */ +/* Modal Actions */ +/* Inner Close Position (Tablet/Mobile) */ +/* Mobile Positions */ +/* Responsive Widths */ +/* Coupling */ +/*------------------- + States +--------------------*/ +/*------------------- + Types +--------------------*/ +/* Basic */ +/* Scrolling Margin */ +/* Scrolling Content */ +/*------------------- + Variations +--------------------*/ +/* Size Widths */ +/* Derived Responsive Sizes */ +/* Site Theme */ +/******************************* + Site Overrides +*******************************/ +/******************************* + Mix-ins +*******************************/ +/*------------------ + Fonts +-------------------*/ +/*------------------ + Overrides +-------------------*/ +/* End Config */ +/******************************* + Modal +*******************************/ +.ui.modal, +.play-button.modal, +.download-button.modal { + display: none; + position: fixed; + z-index: 1001; + top: 50%; + left: 50%; + text-align: left; + background: #FFFFFF; + border: none; + box-shadow: 1px 3px 3px 0px rgba(0, 0, 0, 0.2), 1px 3px 15px 2px rgba(0, 0, 0, 0.2); + transform-origin: 50% 25%; + border-radius: 0.28571429rem; + user-select: text; + will-change: top, left, margin, transform, opacity; +} +.ui.modal > :first-child:not(.icon), +.ui.modal > .icon:first-child + *, +.play-button.modal > :first-child:not(.icon), +.play-button.modal > .icon:first-child + *, +.download-button.modal > :first-child:not(.icon), +.download-button.modal > .icon:first-child + * { + border-top-left-radius: 0.28571429rem; + border-top-right-radius: 0.28571429rem; +} +.ui.modal > :last-child, +.play-button.modal > :last-child, +.download-button.modal > :last-child { + border-bottom-left-radius: 0.28571429rem; + border-bottom-right-radius: 0.28571429rem; +} +/******************************* + Content +*******************************/ +/*-------------- + Close +---------------*/ +.ui.modal > .close, +.play-button.modal > .close, +.download-button.modal > .close { + cursor: pointer; + position: absolute; + top: -2.5rem; + right: -2.5rem; + z-index: 1; + opacity: 0.8; + font-size: 1.25em; + color: #FFFFFF; + width: 2.25rem; + height: 2.25rem; + padding: 0.625rem 0rem 0rem 0rem; +} +.ui.modal > .close:hover, +.play-button.modal > .close:hover, +.download-button.modal > .close:hover { + opacity: 1; +} +/*-------------- + Header +---------------*/ +.ui.modal > .header, +.play-button.modal > .header, +.download-button.modal > .header { + display: block; + font-family: 'Roboto Mono', 'Helvetica Neue', Arial, Helvetica, sans-serif; + background: #FFFFFF; + margin: 0em; + padding: 1.25rem 1.5rem; + box-shadow: none; + color: rgba(0, 0, 0, 0.85); + border-bottom: 1px solid rgba(34, 36, 38, 0.15); +} +.ui.modal > .header:not(.ui), +.play-button.modal > .header:not(.ui), +.download-button.modal > .header:not(.ui) { + font-size: 1.42857143rem; + line-height: 1.28571429em; + font-weight: bold; +} +/*-------------- + Content +---------------*/ +.ui.modal > .content, +.play-button.modal > .content, +.download-button.modal > .content { + display: block; + width: 100%; + font-size: 1em; + line-height: 1.4; + padding: 1.5rem; + background: #FFFFFF; +} +.ui.modal > .image.content, +.play-button.modal > .image.content, +.download-button.modal > .image.content { + display: flex; + flex-direction: row; +} +/* Image */ +.ui.modal > .content > .image, +.play-button.modal > .content > .image, +.download-button.modal > .content > .image { + display: block; + flex: 0 1 auto; + width: ''; + align-self: top; +} +.ui.modal > [class*="top aligned"], +.play-button.modal > [class*="top aligned"], +.download-button.modal > [class*="top aligned"] { + align-self: top; +} +.ui.modal > [class*="middle aligned"], +.play-button.modal > [class*="middle aligned"], +.download-button.modal > [class*="middle aligned"] { + align-self: middle; +} +.ui.modal > [class*="stretched"], +.play-button.modal > [class*="stretched"], +.download-button.modal > [class*="stretched"] { + align-self: stretch; +} +/* Description */ +.ui.modal > .content > .description, +.play-button.modal > .content > .description, +.download-button.modal > .content > .description { + display: block; + flex: 1 0 auto; + min-width: 0px; + align-self: top; +} +.ui.modal > .content > .icon + .description, +.ui.modal > .content > .image + .description, +.play-button.modal > .content > .icon + .description, +.play-button.modal > .content > .image + .description, +.download-button.modal > .content > .icon + .description, +.download-button.modal > .content > .image + .description { + flex: 0 1 auto; + min-width: ''; + width: auto; + padding-left: 2em; +} +/*rtl:ignore*/ +.ui.modal > .content > .image > i.icon, +.play-button.modal > .content > .image > i.icon, +.download-button.modal > .content > .image > i.icon { + margin: 0em; + opacity: 1; + width: auto; + line-height: 1; + font-size: 8rem; +} +/*-------------- + Actions +---------------*/ +.ui.modal > .actions, +.play-button.modal > .actions, +.download-button.modal > .actions { + background: #F9FAFB; + padding: 1rem 1rem; + border-top: 1px solid rgba(34, 36, 38, 0.15); + text-align: right; +} +.ui.modal .actions > .button, +.play-button.modal .actions > .button, +.ui.modal .actions > .play-button, +.download-button.modal .actions > .button, +.ui.modal .actions > .download-button { + margin-left: 0.75em; +} +/*------------------- + Responsive +--------------------*/ +/* Modal Width */ +@media only screen and (max-width: 767px) { + .ui.modal, + .play-button.modal, + .download-button.modal { + width: 95%; + margin: 0em 0em 0em -47.5%; + } +} +@media only screen and (min-width: 768px) { + .ui.modal, + .play-button.modal, + .download-button.modal { + width: 88%; + margin: 0em 0em 0em -44%; + } +} +@media only screen and (min-width: 992px) { + .ui.modal, + .play-button.modal, + .download-button.modal { + width: 850px; + margin: 0em 0em 0em -425px; + } +} +@media only screen and (min-width: 1200px) { + .ui.modal, + .play-button.modal, + .download-button.modal { + width: 900px; + margin: 0em 0em 0em -450px; + } +} +@media only screen and (min-width: 1920px) { + .ui.modal, + .play-button.modal, + .download-button.modal { + width: 950px; + margin: 0em 0em 0em -475px; + } +} +/* Tablet and Mobile */ +@media only screen and (max-width: 991px) { + .ui.modal > .header, + .play-button.modal > .header, + .download-button.modal > .header { + padding-right: 2.25rem; + } + .ui.modal > .close, + .play-button.modal > .close, + .download-button.modal > .close { + top: 1.0535rem; + right: 1rem; + color: rgba(0, 0, 0, 0.87); + } +} +/* Mobile */ +@media only screen and (max-width: 767px) { + .ui.modal > .header, + .play-button.modal > .header, + .download-button.modal > .header { + padding: 0.75rem 1rem !important; + padding-right: 2.25rem !important; + } + .ui.modal > .content, + .play-button.modal > .content, + .download-button.modal > .content { + display: block; + padding: 1rem !important; + } + .ui.modal > .close, + .play-button.modal > .close, + .download-button.modal > .close { + top: 0.5rem !important; + right: 0.5rem !important; + } + /*rtl:ignore*/ + .ui.modal .image.content, + .play-button.modal .image.content, + .download-button.modal .image.content { + flex-direction: column; + } + .ui.modal .content > .image, + .play-button.modal .content > .image, + .download-button.modal .content > .image { + display: block; + max-width: 100%; + margin: 0em auto !important; + text-align: center; + padding: 0rem 0rem 1rem !important; + } + .ui.modal > .content > .image > i.icon, + .play-button.modal > .content > .image > i.icon, + .download-button.modal > .content > .image > i.icon { + font-size: 5rem; + text-align: center; + } + /*rtl:ignore*/ + .ui.modal .content > .description, + .play-button.modal .content > .description, + .download-button.modal .content > .description { + display: block; + width: 100% !important; + margin: 0em !important; + padding: 1rem 0rem !important; + box-shadow: none; + } + /* Let Buttons Stack */ + .ui.modal > .actions, + .play-button.modal > .actions, + .download-button.modal > .actions { + padding: 1rem 1rem 0rem !important; + } + .ui.modal .actions > .buttons, + .ui.modal .actions > .button, + .play-button.modal .actions > .buttons, + .play-button.modal .actions > .button, + .ui.modal .actions > .play-button, + .download-button.modal .actions > .buttons, + .download-button.modal .actions > .button, + .ui.modal .actions > .download-button { + margin-bottom: 1rem; + } +} +/*-------------- + Coupling +---------------*/ +.ui.inverted.dimmer > .ui.modal, +.play-button.inverted.dimmer > .play-button.modal, +.download-button.inverted.dimmer > .download-button.modal { + box-shadow: 1px 3px 10px 2px rgba(0, 0, 0, 0.2); +} +/******************************* + Types +*******************************/ +.ui.basic.modal, +.play-button.basic.modal, +.download-button.basic.modal { + background-color: transparent; + border: none; + border-radius: 0em; + box-shadow: none !important; + color: #FFFFFF; +} +.ui.basic.modal > .header, +.ui.basic.modal > .content, +.ui.basic.modal > .actions, +.play-button.basic.modal > .header, +.play-button.basic.modal > .content, +.play-button.basic.modal > .actions, +.download-button.basic.modal > .header, +.download-button.basic.modal > .content, +.download-button.basic.modal > .actions { + background-color: transparent; +} +.ui.basic.modal > .header, +.play-button.basic.modal > .header, +.download-button.basic.modal > .header { + color: #FFFFFF; +} +.ui.basic.modal > .close, +.play-button.basic.modal > .close, +.download-button.basic.modal > .close { + top: 1rem; + right: 1.5rem; +} +.ui.inverted.dimmer > .basic.modal, +.play-button.inverted.dimmer > .basic.modal, +.download-button.inverted.dimmer > .basic.modal { + color: rgba(0, 0, 0, 0.87); +} +.ui.inverted.dimmer > .ui.basic.modal > .header, +.play-button.inverted.dimmer > .play-button.basic.modal > .header, +.download-button.inverted.dimmer > .download-button.basic.modal > .header { + color: rgba(0, 0, 0, 0.85); +} +/* Tablet and Mobile */ +@media only screen and (max-width: 991px) { + .ui.basic.modal > .close, + .play-button.basic.modal > .close, + .download-button.basic.modal > .close { + color: #FFFFFF; + } +} +/******************************* + States +*******************************/ +.ui.loading.modal, +.play-button.loading.modal, +.download-button.loading.modal { + display: block; + visibility: hidden; + z-index: -1; +} +.ui.active.modal, +.play-button.active.modal, +.download-button.active.modal { + display: block; +} +/******************************* + Variations +*******************************/ +/*-------------- + Scrolling +---------------*/ +/* A modal that cannot fit on the page */ +.scrolling.dimmable.dimmed { + overflow: hidden; +} +.scrolling.dimmable.dimmed > .dimmer { + overflow: auto; + -webkit-overflow-scrolling: touch; +} +.scrolling.dimmable > .dimmer { + position: fixed; +} +.modals.dimmer .ui.scrolling.modal, +.modals.dimmer .play-button.scrolling.modal, +.modals.dimmer .download-button.scrolling.modal { + position: static !important; + margin: 3.5rem auto !important; +} +/* undetached scrolling */ +.scrolling.undetached.dimmable.dimmed { + overflow: auto; + -webkit-overflow-scrolling: touch; +} +.scrolling.undetached.dimmable.dimmed > .dimmer { + overflow: hidden; +} +.scrolling.undetached.dimmable .ui.scrolling.modal, +.scrolling.undetached.dimmable .play-button.scrolling.modal, +.scrolling.undetached.dimmable .download-button.scrolling.modal { + position: absolute; + left: 50%; + margin-top: 3.5rem !important; +} +/* Coupling with Sidebar */ +.undetached.dimmable.dimmed > .pusher { + z-index: auto; +} +@media only screen and (max-width: 991px) { + .modals.dimmer .ui.scrolling.modal, + .modals.dimmer .play-button.scrolling.modal, + .modals.dimmer .download-button.scrolling.modal { + margin-top: 1rem !important; + margin-bottom: 1rem !important; + } +} +/* Scrolling Content */ +.ui.modal .scrolling.content, +.play-button.modal .scrolling.content, +.download-button.modal .scrolling.content { + max-height: calc(70vh); + overflow: auto; +} +/*-------------- + Full Screen +---------------*/ +.ui.fullscreen.modal, +.play-button.fullscreen.modal, +.download-button.fullscreen.modal { + width: 95% !important; + left: 2.5% !important; + margin: 1em auto; +} +.ui.fullscreen.scrolling.modal, +.play-button.fullscreen.scrolling.modal, +.download-button.fullscreen.scrolling.modal { + left: 0em !important; +} +.ui.fullscreen.modal > .header, +.play-button.fullscreen.modal > .header, +.download-button.fullscreen.modal > .header { + padding-right: 2.25rem; +} +.ui.fullscreen.modal > .close, +.play-button.fullscreen.modal > .close, +.download-button.fullscreen.modal > .close { + top: 1.0535rem; + right: 1rem; + color: rgba(0, 0, 0, 0.87); +} +/*-------------- + Size +---------------*/ +.ui.modal, +.play-button.modal, +.download-button.modal { + font-size: 1rem; +} +/* Mini */ +.ui.mini.modal > .header:not(.ui), +.play-button.mini.modal > .header:not(.ui), +.download-button.mini.modal > .header:not(.ui) { + font-size: 1.3em; +} +/* Mini Modal Width */ +@media only screen and (max-width: 767px) { + .ui.mini.modal, + .play-button.mini.modal, + .download-button.mini.modal { + width: 95%; + margin: 0em 0em 0em -47.5%; + } +} +@media only screen and (min-width: 768px) { + .ui.mini.modal, + .play-button.mini.modal, + .download-button.mini.modal { + width: 35.2%; + margin: 0em 0em 0em -17.6%; + } +} +@media only screen and (min-width: 992px) { + .ui.mini.modal, + .play-button.mini.modal, + .download-button.mini.modal { + width: 340px; + margin: 0em 0em 0em -170px; + } +} +@media only screen and (min-width: 1200px) { + .ui.mini.modal, + .play-button.mini.modal, + .download-button.mini.modal { + width: 360px; + margin: 0em 0em 0em -180px; + } +} +@media only screen and (min-width: 1920px) { + .ui.mini.modal, + .play-button.mini.modal, + .download-button.mini.modal { + width: 380px; + margin: 0em 0em 0em -190px; + } +} +/* mini */ +.ui.small.modal > .header:not(.ui), +.play-button.small.modal > .header:not(.ui), +.download-button.small.modal > .header:not(.ui) { + font-size: 1.3em; +} +/* Tiny Modal Width */ +@media only screen and (max-width: 767px) { + .ui.tiny.modal, + .play-button.tiny.modal, + .download-button.tiny.modal { + width: 95%; + margin: 0em 0em 0em -47.5%; + } +} +@media only screen and (min-width: 768px) { + .ui.tiny.modal, + .play-button.tiny.modal, + .download-button.tiny.modal { + width: 52.8%; + margin: 0em 0em 0em -26.4%; + } +} +@media only screen and (min-width: 992px) { + .ui.tiny.modal, + .play-button.tiny.modal, + .download-button.tiny.modal { + width: 510px; + margin: 0em 0em 0em -255px; + } +} +@media only screen and (min-width: 1200px) { + .ui.tiny.modal, + .play-button.tiny.modal, + .download-button.tiny.modal { + width: 540px; + margin: 0em 0em 0em -270px; + } +} +@media only screen and (min-width: 1920px) { + .ui.tiny.modal, + .play-button.tiny.modal, + .download-button.tiny.modal { + width: 570px; + margin: 0em 0em 0em -285px; + } +} +/* Small */ +.ui.small.modal > .header:not(.ui), +.play-button.small.modal > .header:not(.ui), +.download-button.small.modal > .header:not(.ui) { + font-size: 1.3em; +} +/* Small Modal Width */ +@media only screen and (max-width: 767px) { + .ui.small.modal, + .play-button.small.modal, + .download-button.small.modal { + width: 95%; + margin: 0em 0em 0em -47.5%; + } +} +@media only screen and (min-width: 768px) { + .ui.small.modal, + .play-button.small.modal, + .download-button.small.modal { + width: 70.4%; + margin: 0em 0em 0em -35.2%; + } +} +@media only screen and (min-width: 992px) { + .ui.small.modal, + .play-button.small.modal, + .download-button.small.modal { + width: 680px; + margin: 0em 0em 0em -340px; + } +} +@media only screen and (min-width: 1200px) { + .ui.small.modal, + .play-button.small.modal, + .download-button.small.modal { + width: 720px; + margin: 0em 0em 0em -360px; + } +} +@media only screen and (min-width: 1920px) { + .ui.small.modal, + .play-button.small.modal, + .download-button.small.modal { + width: 760px; + margin: 0em 0em 0em -380px; + } +} +/* Large Modal Width */ +.ui.large.modal > .header, +.play-button.large.modal > .header, +.download-button.large.modal > .header { + font-size: 1.6em; +} +@media only screen and (max-width: 767px) { + .ui.large.modal, + .play-button.large.modal, + .download-button.large.modal { + width: 95%; + margin: 0em 0em 0em -47.5%; + } +} +@media only screen and (min-width: 768px) { + .ui.large.modal, + .play-button.large.modal, + .download-button.large.modal { + width: 88%; + margin: 0em 0em 0em -44%; + } +} +@media only screen and (min-width: 992px) { + .ui.large.modal, + .play-button.large.modal, + .download-button.large.modal { + width: 1020px; + margin: 0em 0em 0em -510px; + } +} +@media only screen and (min-width: 1200px) { + .ui.large.modal, + .play-button.large.modal, + .download-button.large.modal { + width: 1080px; + margin: 0em 0em 0em -540px; + } +} +@media only screen and (min-width: 1920px) { + .ui.large.modal, + .play-button.large.modal, + .download-button.large.modal { + width: 1140px; + margin: 0em 0em 0em -570px; + } +} +/******************************* + Theme Overrides +*******************************/ +/******************************* + Site Overrides +*******************************/ +/*! + * # Semantic UI - Nag + * http://github.com/semantic-org/semantic-ui/ + * + * + * Released under the MIT license + * http://opensource.org/licenses/MIT + * + */ +/******************************* + Theme +*******************************/ +/* + +████████╗██╗ ██╗███████╗███╗ ███╗███████╗███████╗ +╚══██╔══╝██║ ██║██╔════╝████╗ ████║██╔════╝██╔════╝ + ██║ ███████║█████╗ ██╔████╔██║█████╗ ███████╗ + ██║ ██╔══██║██╔══╝ ██║╚██╔╝██║██╔══╝ ╚════██║ + ██║ ██║ ██║███████╗██║ ╚═╝ ██║███████╗███████║ + ╚═╝ ╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝╚══════╝╚══════╝ + +*/ +/******************************* + Theme Selection +*******************************/ +/* To override a theme for an individual element + specify theme name below +*/ +/* Global */ +/* Elements */ +/* Collections */ +/* Modules */ +/* Views */ +/******************************* + Folders +*******************************/ +/* Path to theme packages */ +/* Path to site override folder */ +/******************************* + Import Theme +*******************************/ +/******************************* + Import Directives +*******************************/ +/*------------------ + Theme +-------------------*/ +/*-------------------- + Site Variables +---------------------*/ +/* Default site.variables */ +/******************************* + Site Settings +*******************************/ +/*------------------- + Fonts +--------------------*/ +/*------------------- + Base Sizes +--------------------*/ +/* This is the single variable that controls them all */ +/* The size of page text */ +/*------------------- + Border Radius +--------------------*/ +/* See Power-user section below + for explanation of @px variables +*/ +/*------------------- + Brand Colors +--------------------*/ +/*-------------- + Page Heading +---------------*/ +/*-------------- + Form Input +---------------*/ +/* This adjusts the default form input across all elements */ +/* Input Text Color */ +/* Line Height Default For Inputs in Browser (Descendors are 17px at 14px base em) */ +/*------------------- + Focused Input +--------------------*/ +/* Used on inputs, textarea etc */ +/* Used on dropdowns, other larger blocks */ +/*------------------- + Sizes +--------------------*/ +/* + Sizes are all expressed in terms of 14px/em (default em) + This ensures these "ratios" remain constant despite changes in EM +*/ +/*------------------- + Page +--------------------*/ +/*------------------- + Paragraph +--------------------*/ +/*------------------- + Links +--------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ +/*------------------- + Highlighted Text +--------------------*/ +/*------------------- + Loader +--------------------*/ +/*------------------- + Grid +--------------------*/ +/*------------------- + Transitions +--------------------*/ +/*------------------- + Breakpoints +--------------------*/ +/*------------------- + Site Colors +--------------------*/ +/*--- Colors ---*/ +/*--- Light Colors ---*/ +/*--- Neutrals ---*/ +/*--- Colored Backgrounds ---*/ +/*--- Colored Headers ---*/ +/*--- Colored Text ---*/ +/*--- Colored Border ---*/ +/*------------------- + Alpha Colors +--------------------*/ +/*------------------- + Accents +--------------------*/ +/* Differentiating Neutrals */ +/* Differentiating Layers */ +/******************************* + Power-User +*******************************/ +/*------------------- + Emotive Colors +--------------------*/ +/* Positive */ +/* Negative */ +/* Info */ +/* Warning */ +/*------------------- + Paths +--------------------*/ +/* For source only. Modified in gulp for dist */ +/*------------------- + Em Sizes +--------------------*/ +/* + This rounds @size values to the closest pixel then expresses that value in (r)em. + This ensures all size values round to exact pixels +*/ +/* em */ +/* rem */ +/*------------------- + Icons +--------------------*/ +/* Maximum Glyph Width of Icon */ +/*------------------- + Neutral Text +--------------------*/ +/*------------------- + Brand Colors +--------------------*/ +/*------------------- + Borders +--------------------*/ +/*------------------- + Derived Values +--------------------*/ +/* Loaders Position Offset */ +/* Rendered Scrollbar Width */ +/* Maximum Single Character Glyph Width, aka Capital "W" */ +/* Used to match floats with text */ +/* Header Spacing */ +/* Minimum Mobile Width */ +/* Positive / Negative Dupes */ +/* Responsive */ +/*------------------- + Exact Pixel Values +--------------------*/ +/* + These are used to specify exact pixel values in em + for things like borders that remain constantly + sized as emSize adjusts + + Since there are many more sizes than names for sizes, + these are named by their original pixel values. + +*/ +/* Columns */ +/******************************* + States +*******************************/ +/*------------------- + Disabled +--------------------*/ +/*------------------- + Hover +--------------------*/ +/*--- Shadows ---*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Focus +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Down (:active) +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Active +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/* Packaged site.variables */ +/******************************* + User Global Variables +*******************************/ +/*------------------- + Fonts +--------------------*/ +/*------------------- + Breakpoints +--------------------*/ +/* +@mobileBreakpoint : unit( (63 * @emSize), px); +@tabletBreakpoint : unit( (79 * @emSize), px); +@computerBreakpoint : unit( (91 * @emSize), px); +@largeMonitorBreakpoint : unit( (99 * @emSize), px); +@widescreenMonitorBreakpoint : unit( (119 * @emSize), px); +*/ +/******************************* + PXT Variables +*******************************/ +/*------------------- + Menu +--------------------*/ +/*------------------- + Layout +--------------------*/ +/*------------------- + Background +--------------------*/ +/*------------------- + Full screen +--------------------*/ +/*------------------- + Side Docs +--------------------*/ +/*------------------- + Editor +--------------------*/ +/* Component's site.variables */ +/******************************* + Site Settings +*******************************/ +/*------------------- + Fonts +--------------------*/ +/*------------------- + Base Sizes +--------------------*/ +/* This is the single variable that controls them all */ +/* The size of page text */ +/*------------------- + Border Radius +--------------------*/ +/* See Power-user section below + for explanation of @px variables +*/ +/*------------------- + Brand Colors +--------------------*/ +/*-------------- + Page Heading +---------------*/ +/*-------------- + Form Input +---------------*/ +/* This adjusts the default form input across all elements */ +/* Input Text Color */ +/* Line Height Default For Inputs in Browser (Descendors are 17px at 14px base em) */ +/*------------------- + Focused Input +--------------------*/ +/* Used on inputs, textarea etc */ +/* Used on dropdowns, other larger blocks */ +/*------------------- + Sizes +--------------------*/ +/* + Sizes are all expressed in terms of 14px/em (default em) + This ensures these "ratios" remain constant despite changes in EM +*/ +/*------------------- + Page +--------------------*/ +/*------------------- + Paragraph +--------------------*/ +/*------------------- + Links +--------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ +/*------------------- + Highlighted Text +--------------------*/ +/*------------------- + Loader +--------------------*/ +/*------------------- + Grid +--------------------*/ +/*------------------- + Transitions +--------------------*/ +/*------------------- + Breakpoints +--------------------*/ +/*------------------- + Site Colors +--------------------*/ +/*--- Colors ---*/ +/*--- Light Colors ---*/ +/*--- Neutrals ---*/ +/*--- Colored Backgrounds ---*/ +/*--- Colored Headers ---*/ +/*--- Colored Text ---*/ +/*--- Colored Border ---*/ +/*------------------- + Alpha Colors +--------------------*/ +/*------------------- + Accents +--------------------*/ +/* Differentiating Neutrals */ +/* Differentiating Layers */ +/******************************* + Power-User +*******************************/ +/*------------------- + Emotive Colors +--------------------*/ +/* Positive */ +/* Negative */ +/* Info */ +/* Warning */ +/*------------------- + Paths +--------------------*/ +/* For source only. Modified in gulp for dist */ +/*------------------- + Em Sizes +--------------------*/ +/* + This rounds @size values to the closest pixel then expresses that value in (r)em. + This ensures all size values round to exact pixels +*/ +/* em */ +/* rem */ +/*------------------- + Icons +--------------------*/ +/* Maximum Glyph Width of Icon */ +/*------------------- + Neutral Text +--------------------*/ +/*------------------- + Brand Colors +--------------------*/ +/*------------------- + Borders +--------------------*/ +/*------------------- + Derived Values +--------------------*/ +/* Loaders Position Offset */ +/* Rendered Scrollbar Width */ +/* Maximum Single Character Glyph Width, aka Capital "W" */ +/* Used to match floats with text */ +/* Header Spacing */ +/* Minimum Mobile Width */ +/* Positive / Negative Dupes */ +/* Responsive */ +/*------------------- + Exact Pixel Values +--------------------*/ +/* + These are used to specify exact pixel values in em + for things like borders that remain constantly + sized as emSize adjusts + + Since there are many more sizes than names for sizes, + these are named by their original pixel values. + +*/ +/* Columns */ +/******************************* + States +*******************************/ +/*------------------- + Disabled +--------------------*/ +/*------------------- + Hover +--------------------*/ +/*--- Shadows ---*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Focus +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Down (:active) +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Active +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/* Site theme site.variables */ +/******************************* + User Global Variables +*******************************/ +/*------------------- + Site Colors +--------------------*/ +/******************************* + PXT Overrides +*******************************/ +/*------------------- + Component Variables +---------------------*/ +/* Default */ +/******************************* + Nag +*******************************/ +/*-------------- + Collection +---------------*/ +/*-------------- + Elements +---------------*/ +/* Title */ +/*-------------- + States +---------------*/ +/* Hover */ +/*-------------- + Variations +---------------*/ +/* Top / Bottom */ +/* Inverted */ +/*-------------- + Plural +---------------*/ +/* Packaged Theme */ +/******************************* + Nag +*******************************/ +/*-------------- + Collection +---------------*/ +/*-------------- + Elements +---------------*/ +/* Title */ +/*-------------- + States +---------------*/ +/* Hover */ +/*-------------- + Variations +---------------*/ +/* Top / Bottom */ +/* Inverted */ +/*-------------- + Plural +---------------*/ +/* Site Theme */ +/******************************* + User Variable Overrides +*******************************/ +/******************************* + Mix-ins +*******************************/ +/*------------------ + Fonts +-------------------*/ +/*------------------ + Overrides +-------------------*/ +/* End Config */ +/******************************* + Nag +*******************************/ +.ui.nag, +.play-button.nag, +.download-button.nag { + display: none; + opacity: 0.95; + position: relative; + top: 0em; + left: 0px; + z-index: 999; + min-height: 0em; + width: 100%; + margin: 0em; + padding: 0.75em 1em; + background: #555555; + box-shadow: 0px 1px 2px 0px rgba(0, 0, 0, 0.2); + font-size: 1rem; + text-align: center; + color: rgba(0, 0, 0, 0.87); + border-radius: 0em 0em 0.28571429rem 0.28571429rem; + transition: 0.2s background ease; +} +a.ui.nag, +a.play-button.nag, +a.download-button.nag { + cursor: pointer; +} +.ui.nag > .title, +.play-button.nag > .title, +.download-button.nag > .title { + display: inline-block; + margin: 0em 0.5em; + color: #FFFFFF; +} +.ui.nag > .close.icon, +.play-button.nag > .close.icon, +.download-button.nag > .close.icon { + cursor: pointer; + opacity: 0.4; + position: absolute; + top: 50%; + right: 1em; + font-size: 1em; + margin: -0.5em 0em 0em; + color: #FFFFFF; + transition: opacity 0.2s ease; +} +/******************************* + States +*******************************/ +/* Hover */ +.ui.nag:hover, +.play-button.nag:hover, +.download-button.nag:hover { + background: #555555; + opacity: 1; +} +.ui.nag .close:hover, +.play-button.nag .close:hover, +.download-button.nag .close:hover { + opacity: 1; +} +/******************************* + Variations +*******************************/ +/*-------------- + Static +---------------*/ +.ui.overlay.nag, +.play-button.overlay.nag, +.download-button.overlay.nag { + position: absolute; + display: block; +} +/*-------------- + Fixed +---------------*/ +.ui.fixed.nag, +.play-button.fixed.nag, +.download-button.fixed.nag { + position: fixed; +} +/*-------------- + Bottom +---------------*/ +.ui.bottom.nags, +.ui.bottom.nag, +.play-button.bottom.nags, +.play-button.bottom.nag, +.download-button.bottom.nags, +.download-button.bottom.nag { + border-radius: 0.28571429rem 0.28571429rem 0em 0em; + top: auto; + bottom: 0em; +} +/*-------------- + White +---------------*/ +.ui.inverted.nags .nag, +.ui.inverted.nag, +.play-button.inverted.nags .nag, +.play-button.inverted.nag, +.download-button.inverted.nags .nag, +.download-button.inverted.nag { + background-color: #F3F4F5; + color: rgba(0, 0, 0, 0.85); +} +.ui.inverted.nags .nag .close, +.ui.inverted.nags .nag .title, +.ui.inverted.nag .close, +.ui.inverted.nag .title, +.play-button.inverted.nags .nag .close, +.play-button.inverted.nags .nag .title, +.play-button.inverted.nag .close, +.play-button.inverted.nag .title, +.download-button.inverted.nags .nag .close, +.download-button.inverted.nags .nag .title, +.download-button.inverted.nag .close, +.download-button.inverted.nag .title { + color: rgba(0, 0, 0, 0.4); +} +/******************************* + Groups +*******************************/ +.ui.nags .nag, +.play-button.nags .nag, +.download-button.nags .nag { + border-radius: 0em !important; +} +.ui.nags .nag:last-child, +.play-button.nags .nag:last-child, +.download-button.nags .nag:last-child { + border-radius: 0em 0em 0.28571429rem 0.28571429rem; +} +.ui.bottom.nags .nag:last-child, +.play-button.bottom.nags .nag:last-child, +.download-button.bottom.nags .nag:last-child { + border-radius: 0.28571429rem 0.28571429rem 0em 0em; +} +/******************************* + Theme Overrides +*******************************/ +/******************************* + User Overrides +*******************************/ +/*! + * # Semantic UI - Popup + * http://github.com/semantic-org/semantic-ui/ + * + * + * Released under the MIT license + * http://opensource.org/licenses/MIT + * + */ +/******************************* + Theme +*******************************/ +/* + +████████╗██╗ ██╗███████╗███╗ ███╗███████╗███████╗ +╚══██╔══╝██║ ██║██╔════╝████╗ ████║██╔════╝██╔════╝ + ██║ ███████║█████╗ ██╔████╔██║█████╗ ███████╗ + ██║ ██╔══██║██╔══╝ ██║╚██╔╝██║██╔══╝ ╚════██║ + ██║ ██║ ██║███████╗██║ ╚═╝ ██║███████╗███████║ + ╚═╝ ╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝╚══════╝╚══════╝ + +*/ +/******************************* + Theme Selection +*******************************/ +/* To override a theme for an individual element + specify theme name below +*/ +/* Global */ +/* Elements */ +/* Collections */ +/* Modules */ +/* Views */ +/******************************* + Folders +*******************************/ +/* Path to theme packages */ +/* Path to site override folder */ +/******************************* + Import Theme +*******************************/ +/******************************* + Import Directives +*******************************/ +/*------------------ + Theme +-------------------*/ +/*-------------------- + Site Variables +---------------------*/ +/* Default site.variables */ +/******************************* + Site Settings +*******************************/ +/*------------------- + Fonts +--------------------*/ +/*------------------- + Base Sizes +--------------------*/ +/* This is the single variable that controls them all */ +/* The size of page text */ +/*------------------- + Border Radius +--------------------*/ +/* See Power-user section below + for explanation of @px variables +*/ +/*------------------- + Brand Colors +--------------------*/ +/*-------------- + Page Heading +---------------*/ +/*-------------- + Form Input +---------------*/ +/* This adjusts the default form input across all elements */ +/* Input Text Color */ +/* Line Height Default For Inputs in Browser (Descendors are 17px at 14px base em) */ +/*------------------- + Focused Input +--------------------*/ +/* Used on inputs, textarea etc */ +/* Used on dropdowns, other larger blocks */ +/*------------------- + Sizes +--------------------*/ +/* + Sizes are all expressed in terms of 14px/em (default em) + This ensures these "ratios" remain constant despite changes in EM +*/ +/*------------------- + Page +--------------------*/ +/*------------------- + Paragraph +--------------------*/ +/*------------------- + Links +--------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ +/*------------------- + Highlighted Text +--------------------*/ +/*------------------- + Loader +--------------------*/ +/*------------------- + Grid +--------------------*/ +/*------------------- + Transitions +--------------------*/ +/*------------------- + Breakpoints +--------------------*/ +/*------------------- + Site Colors +--------------------*/ +/*--- Colors ---*/ +/*--- Light Colors ---*/ +/*--- Neutrals ---*/ +/*--- Colored Backgrounds ---*/ +/*--- Colored Headers ---*/ +/*--- Colored Text ---*/ +/*--- Colored Border ---*/ +/*------------------- + Alpha Colors +--------------------*/ +/*------------------- + Accents +--------------------*/ +/* Differentiating Neutrals */ +/* Differentiating Layers */ +/******************************* + Power-User +*******************************/ +/*------------------- + Emotive Colors +--------------------*/ +/* Positive */ +/* Negative */ +/* Info */ +/* Warning */ +/*------------------- + Paths +--------------------*/ +/* For source only. Modified in gulp for dist */ +/*------------------- + Em Sizes +--------------------*/ +/* + This rounds @size values to the closest pixel then expresses that value in (r)em. + This ensures all size values round to exact pixels +*/ +/* em */ +/* rem */ +/*------------------- + Icons +--------------------*/ +/* Maximum Glyph Width of Icon */ +/*------------------- + Neutral Text +--------------------*/ +/*------------------- + Brand Colors +--------------------*/ +/*------------------- + Borders +--------------------*/ +/*------------------- + Derived Values +--------------------*/ +/* Loaders Position Offset */ +/* Rendered Scrollbar Width */ +/* Maximum Single Character Glyph Width, aka Capital "W" */ +/* Used to match floats with text */ +/* Header Spacing */ +/* Minimum Mobile Width */ +/* Positive / Negative Dupes */ +/* Responsive */ +/*------------------- + Exact Pixel Values +--------------------*/ +/* + These are used to specify exact pixel values in em + for things like borders that remain constantly + sized as emSize adjusts + + Since there are many more sizes than names for sizes, + these are named by their original pixel values. + +*/ +/* Columns */ +/******************************* + States +*******************************/ +/*------------------- + Disabled +--------------------*/ +/*------------------- + Hover +--------------------*/ +/*--- Shadows ---*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Focus +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Down (:active) +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Active +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/* Packaged site.variables */ +/******************************* + User Global Variables +*******************************/ +/*------------------- + Fonts +--------------------*/ +/*------------------- + Breakpoints +--------------------*/ +/* +@mobileBreakpoint : unit( (63 * @emSize), px); +@tabletBreakpoint : unit( (79 * @emSize), px); +@computerBreakpoint : unit( (91 * @emSize), px); +@largeMonitorBreakpoint : unit( (99 * @emSize), px); +@widescreenMonitorBreakpoint : unit( (119 * @emSize), px); +*/ +/******************************* + PXT Variables +*******************************/ +/*------------------- + Menu +--------------------*/ +/*------------------- + Layout +--------------------*/ +/*------------------- + Background +--------------------*/ +/*------------------- + Full screen +--------------------*/ +/*------------------- + Side Docs +--------------------*/ +/*------------------- + Editor +--------------------*/ +/* Component's site.variables */ +/******************************* + Site Settings +*******************************/ +/*------------------- + Fonts +--------------------*/ +/*------------------- + Base Sizes +--------------------*/ +/* This is the single variable that controls them all */ +/* The size of page text */ +/*------------------- + Border Radius +--------------------*/ +/* See Power-user section below + for explanation of @px variables +*/ +/*------------------- + Brand Colors +--------------------*/ +/*-------------- + Page Heading +---------------*/ +/*-------------- + Form Input +---------------*/ +/* This adjusts the default form input across all elements */ +/* Input Text Color */ +/* Line Height Default For Inputs in Browser (Descendors are 17px at 14px base em) */ +/*------------------- + Focused Input +--------------------*/ +/* Used on inputs, textarea etc */ +/* Used on dropdowns, other larger blocks */ +/*------------------- + Sizes +--------------------*/ +/* + Sizes are all expressed in terms of 14px/em (default em) + This ensures these "ratios" remain constant despite changes in EM +*/ +/*------------------- + Page +--------------------*/ +/*------------------- + Paragraph +--------------------*/ +/*------------------- + Links +--------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ +/*------------------- + Highlighted Text +--------------------*/ +/*------------------- + Loader +--------------------*/ +/*------------------- + Grid +--------------------*/ +/*------------------- + Transitions +--------------------*/ +/*------------------- + Breakpoints +--------------------*/ +/*------------------- + Site Colors +--------------------*/ +/*--- Colors ---*/ +/*--- Light Colors ---*/ +/*--- Neutrals ---*/ +/*--- Colored Backgrounds ---*/ +/*--- Colored Headers ---*/ +/*--- Colored Text ---*/ +/*--- Colored Border ---*/ +/*------------------- + Alpha Colors +--------------------*/ +/*------------------- + Accents +--------------------*/ +/* Differentiating Neutrals */ +/* Differentiating Layers */ +/******************************* + Power-User +*******************************/ +/*------------------- + Emotive Colors +--------------------*/ +/* Positive */ +/* Negative */ +/* Info */ +/* Warning */ +/*------------------- + Paths +--------------------*/ +/* For source only. Modified in gulp for dist */ +/*------------------- + Em Sizes +--------------------*/ +/* + This rounds @size values to the closest pixel then expresses that value in (r)em. + This ensures all size values round to exact pixels +*/ +/* em */ +/* rem */ +/*------------------- + Icons +--------------------*/ +/* Maximum Glyph Width of Icon */ +/*------------------- + Neutral Text +--------------------*/ +/*------------------- + Brand Colors +--------------------*/ +/*------------------- + Borders +--------------------*/ +/*------------------- + Derived Values +--------------------*/ +/* Loaders Position Offset */ +/* Rendered Scrollbar Width */ +/* Maximum Single Character Glyph Width, aka Capital "W" */ +/* Used to match floats with text */ +/* Header Spacing */ +/* Minimum Mobile Width */ +/* Positive / Negative Dupes */ +/* Responsive */ +/*------------------- + Exact Pixel Values +--------------------*/ +/* + These are used to specify exact pixel values in em + for things like borders that remain constantly + sized as emSize adjusts + + Since there are many more sizes than names for sizes, + these are named by their original pixel values. + +*/ +/* Columns */ +/******************************* + States +*******************************/ +/*------------------- + Disabled +--------------------*/ +/*------------------- + Hover +--------------------*/ +/*--- Shadows ---*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Focus +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Down (:active) +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Active +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/* Site theme site.variables */ +/******************************* + User Global Variables +*******************************/ +/*------------------- + Site Colors +--------------------*/ +/******************************* + PXT Overrides +*******************************/ +/*------------------- + Component Variables +---------------------*/ +/* Default */ +/******************************* + Popup +*******************************/ +/*------------------- + Element +--------------------*/ +/*------------------- + Parts +--------------------*/ +/* Placement */ +/* Header */ +/* Content Border */ +/* Arrow */ +/* Arrow color by position */ +/*------------------- + Types +--------------------*/ +/* Tooltip */ +/* Inverted */ +/* Arrow */ +/*------------------- + Coupling +--------------------*/ +/* Grid Inside Popup */ +/* (padding * @medium) */ +/*------------------- + States +--------------------*/ +/*------------------- + Variations +--------------------*/ +/* Wide */ +/* Inverted */ +/* Arrow color by position */ +/* Packaged Theme */ +/******************************* + Popup +*******************************/ +/*------------------- + Element +--------------------*/ +/*------------------- + Parts +--------------------*/ +/* Placement */ +/* Header */ +/* Content Border */ +/* Arrow */ +/* Arrow color by position */ +/*------------------- + Types +--------------------*/ +/* Tooltip */ +/* Inverted */ +/* Arrow */ +/*------------------- + Coupling +--------------------*/ +/* Grid Inside Popup */ +/* (padding * @medium) */ +/*------------------- + States +--------------------*/ +/*------------------- + Variations +--------------------*/ +/* Wide */ +/* Inverted */ +/* Arrow color by position */ +/* Site Theme */ +/******************************* + User Variable Overrides +*******************************/ +/******************************* + Mix-ins +*******************************/ +/*------------------ + Fonts +-------------------*/ +/*------------------ + Overrides +-------------------*/ +/* End Config */ +/******************************* + Popup +*******************************/ +.ui.popup, +.play-button.popup, +.download-button.popup { + display: none; + position: absolute; + top: 0px; + right: 0px; + /* Fixes content being squished when inline (moz only) */ + min-width: min-content; + z-index: 1900; + border: 1px solid #D4D4D5; + line-height: 1.4285em; + max-width: 250px; + background: #FFFFFF; + padding: 0.833em 1em; + font-weight: normal; + font-style: normal; + color: rgba(0, 0, 0, 0.87); + border-radius: 0.28571429rem; + box-shadow: 0px 2px 4px 0px rgba(34, 36, 38, 0.12), 0px 2px 10px 0px rgba(34, 36, 38, 0.15); +} +.ui.popup > .header, +.play-button.popup > .header, +.download-button.popup > .header { + padding: 0em; + font-family: 'Roboto Mono', 'Helvetica Neue', Arial, Helvetica, sans-serif; + font-size: 1.14285714em; + line-height: 1.2; + font-weight: bold; +} +.ui.popup > .header + .content, +.play-button.popup > .header + .content, +.download-button.popup > .header + .content { + padding-top: 0.5em; +} +.ui.popup:before, +.play-button.popup:before, +.download-button.popup:before { + position: absolute; + content: ''; + width: 0.71428571em; + height: 0.71428571em; + background: #FFFFFF; + transform: rotate(45deg); + z-index: 2; + box-shadow: 1px 1px 0px 0px #bababc; +} +/******************************* + Types +*******************************/ +/*-------------- + Tooltip +---------------*/ +/* Content */ +[data-tooltip] { + position: relative; +} +/* Arrow */ +[data-tooltip]:before { + pointer-events: none; + position: absolute; + content: ''; + font-size: 1rem; + width: 0.71428571em; + height: 0.71428571em; + background: #FFFFFF; + transform: rotate(45deg); + z-index: 2; + box-shadow: 1px 1px 0px 0px #bababc; +} +/* Popup */ +[data-tooltip]:after { + pointer-events: none; + content: attr(data-tooltip); + position: absolute; + text-transform: none; + text-align: left; + white-space: nowrap; + font-size: 1rem; + border: 1px solid #D4D4D5; + line-height: 1.4285em; + max-width: none; + background: #FFFFFF; + padding: 0.833em 1em; + font-weight: normal; + font-style: normal; + color: rgba(0, 0, 0, 0.87); + border-radius: 0.28571429rem; + box-shadow: 0px 2px 4px 0px rgba(34, 36, 38, 0.12), 0px 2px 10px 0px rgba(34, 36, 38, 0.15); + z-index: 1; +} +/* Default Position (Top Center) */ +[data-tooltip]:not([data-position]):before { + top: auto; + right: auto; + bottom: 100%; + left: 50%; + background: #FFFFFF; + margin-left: -0.07142857rem; + margin-bottom: 0.14285714rem; +} +[data-tooltip]:not([data-position]):after { + left: 50%; + transform: translateX(-50%); + bottom: 100%; + margin-bottom: 0.5em; +} +/* Animation */ +[data-tooltip]:before, +[data-tooltip]:after { + pointer-events: none; + visibility: hidden; +} +[data-tooltip]:before { + opacity: 0; + transform: rotate(45deg) scale(0) !important; + transform-origin: center top; + transition: all 0.1s ease; +} +[data-tooltip]:after { + opacity: 1; + transform-origin: center bottom; + transition: all 0.1s ease; +} +[data-tooltip]:hover:before, +[data-tooltip]:hover:after { + visibility: visible; + pointer-events: auto; +} +[data-tooltip]:hover:before { + transform: rotate(45deg) scale(1) !important; + opacity: 1; +} +/* Animation Position */ +[data-tooltip]:after, +[data-tooltip][data-position="top center"]:after, +[data-tooltip][data-position="bottom center"]:after { + transform: translateX(-50%) scale(0) !important; +} +[data-tooltip]:hover:after, +[data-tooltip][data-position="bottom center"]:hover:after { + transform: translateX(-50%) scale(1) !important; +} +[data-tooltip][data-position="left center"]:after, +[data-tooltip][data-position="right center"]:after { + transform: translateY(-50%) scale(0) !important; +} +[data-tooltip][data-position="left center"]:hover:after, +[data-tooltip][data-position="right center"]:hover:after { + transform: translateY(-50%) scale(1) !important; +} +[data-tooltip][data-position="top left"]:after, +[data-tooltip][data-position="top right"]:after, +[data-tooltip][data-position="bottom left"]:after, +[data-tooltip][data-position="bottom right"]:after { + transform: scale(0) !important; +} +[data-tooltip][data-position="top left"]:hover:after, +[data-tooltip][data-position="top right"]:hover:after, +[data-tooltip][data-position="bottom left"]:hover:after, +[data-tooltip][data-position="bottom right"]:hover:after { + transform: scale(1) !important; +} +/*-------------- + Inverted +---------------*/ +/* Arrow */ +[data-tooltip][data-inverted]:before { + box-shadow: none !important; +} +/* Arrow Position */ +[data-tooltip][data-inverted]:before { + background: #1B1C1D; +} +/* Popup */ +[data-tooltip][data-inverted]:after { + background: #1B1C1D; + color: #FFFFFF; + border: none; + box-shadow: none; +} +[data-tooltip][data-inverted]:after .header { + background-color: none; + color: #FFFFFF; +} +/*-------------- + Position +---------------*/ +/* Top Center */ +[data-position="top center"][data-tooltip]:after { + top: auto; + right: auto; + left: 50%; + bottom: 100%; + transform: translateX(-50%); + margin-bottom: 0.5em; +} +[data-position="top center"][data-tooltip]:before { + top: auto; + right: auto; + bottom: 100%; + left: 50%; + background: #FFFFFF; + margin-left: -0.07142857rem; + margin-bottom: 0.14285714rem; +} +/* Top Left */ +[data-position="top left"][data-tooltip]:after { + top: auto; + right: auto; + left: 0; + bottom: 100%; + margin-bottom: 0.5em; +} +[data-position="top left"][data-tooltip]:before { + top: auto; + right: auto; + bottom: 100%; + left: 1em; + margin-left: -0.07142857rem; + margin-bottom: 0.14285714rem; +} +/* Top Right */ +[data-position="top right"][data-tooltip]:after { + top: auto; + left: auto; + right: 0; + bottom: 100%; + margin-bottom: 0.5em; +} +[data-position="top right"][data-tooltip]:before { + top: auto; + left: auto; + bottom: 100%; + right: 1em; + margin-left: -0.07142857rem; + margin-bottom: 0.14285714rem; +} +/* Bottom Center */ +[data-position="bottom center"][data-tooltip]:after { + bottom: auto; + right: auto; + left: 50%; + top: 100%; + transform: translateX(-50%); + margin-top: 0.5em; +} +[data-position="bottom center"][data-tooltip]:before { + bottom: auto; + right: auto; + top: 100%; + left: 50%; + margin-left: -0.07142857rem; + margin-top: 0.14285714rem; +} +/* Bottom Left */ +[data-position="bottom left"][data-tooltip]:after { + left: 0; + top: 100%; + margin-top: 0.5em; +} +[data-position="bottom left"][data-tooltip]:before { + bottom: auto; + right: auto; + top: 100%; + left: 1em; + margin-left: -0.07142857rem; + margin-top: 0.14285714rem; +} +/* Bottom Right */ +[data-position="bottom right"][data-tooltip]:after { + right: 0; + top: 100%; + margin-top: 0.5em; +} +[data-position="bottom right"][data-tooltip]:before { + bottom: auto; + left: auto; + top: 100%; + right: 1em; + margin-left: -0.14285714rem; + margin-top: 0.07142857rem; +} +/* Left Center */ +[data-position="left center"][data-tooltip]:after { + right: 100%; + top: 50%; + margin-right: 0.5em; + transform: translateY(-50%); +} +[data-position="left center"][data-tooltip]:before { + right: 100%; + top: 50%; + margin-top: -0.14285714rem; + margin-right: -0.07142857rem; +} +/* Right Center */ +[data-position="right center"][data-tooltip]:after { + left: 100%; + top: 50%; + margin-left: 0.5em; + transform: translateY(-50%); +} +[data-position="right center"][data-tooltip]:before { + left: 100%; + top: 50%; + margin-top: -0.07142857rem; + margin-left: 0.14285714rem; +} +/* Arrow */ +[data-position~="bottom"][data-tooltip]:before { + background: #FFFFFF; + box-shadow: -1px -1px 0px 0px #bababc; +} +[data-position="left center"][data-tooltip]:before { + background: #FFFFFF; + box-shadow: 1px -1px 0px 0px #bababc; +} +[data-position="right center"][data-tooltip]:before { + background: #FFFFFF; + box-shadow: -1px 1px 0px 0px #bababc; +} +[data-position~="top"][data-tooltip]:before { + background: #FFFFFF; +} +/* Inverted Arrow Color */ +[data-inverted][data-position~="bottom"][data-tooltip]:before { + background: #1B1C1D; + box-shadow: -1px -1px 0px 0px #bababc; +} +[data-inverted][data-position="left center"][data-tooltip]:before { + background: #1B1C1D; + box-shadow: 1px -1px 0px 0px #bababc; +} +[data-inverted][data-position="right center"][data-tooltip]:before { + background: #1B1C1D; + box-shadow: -1px 1px 0px 0px #bababc; +} +[data-inverted][data-position~="top"][data-tooltip]:before { + background: #1B1C1D; +} +[data-position~="bottom"][data-tooltip]:before { + transform-origin: center bottom; +} +[data-position~="bottom"][data-tooltip]:after { + transform-origin: center top; +} +[data-position="left center"][data-tooltip]:before { + transform-origin: top center; +} +[data-position="left center"][data-tooltip]:after { + transform-origin: right center; +} +[data-position="right center"][data-tooltip]:before { + transform-origin: right center; +} +[data-position="right center"][data-tooltip]:after { + transform-origin: left center; +} +/*-------------- + Spacing +---------------*/ +.ui.popup, +.play-button.popup, +.download-button.popup { + margin: 0em; +} +/* Extending from Top */ +.ui.top.popup, +.play-button.top.popup, +.download-button.top.popup { + margin: 0em 0em 0.71428571em; +} +.ui.top.left.popup, +.play-button.top.left.popup, +.download-button.top.left.popup { + transform-origin: left bottom; +} +.ui.top.center.popup, +.play-button.top.center.popup, +.download-button.top.center.popup { + transform-origin: center bottom; +} +.ui.top.right.popup, +.play-button.top.right.popup, +.download-button.top.right.popup { + transform-origin: right bottom; +} +/* Extending from Vertical Center */ +.ui.left.center.popup, +.play-button.left.center.popup, +.download-button.left.center.popup { + margin: 0em 0.71428571em 0em 0em; + transform-origin: right 50%; +} +.ui.right.center.popup, +.play-button.right.center.popup, +.download-button.right.center.popup { + margin: 0em 0em 0em 0.71428571em; + transform-origin: left 50%; +} +/* Extending from Bottom */ +.ui.bottom.popup, +.play-button.bottom.popup, +.download-button.bottom.popup { + margin: 0.71428571em 0em 0em; +} +.ui.bottom.left.popup, +.play-button.bottom.left.popup, +.download-button.bottom.left.popup { + transform-origin: left top; +} +.ui.bottom.center.popup, +.play-button.bottom.center.popup, +.download-button.bottom.center.popup { + transform-origin: center top; +} +.ui.bottom.right.popup, +.play-button.bottom.right.popup, +.download-button.bottom.right.popup { + transform-origin: right top; +} +/*-------------- + Pointer +---------------*/ +/*--- Below ---*/ +.ui.bottom.center.popup:before, +.play-button.bottom.center.popup:before, +.download-button.bottom.center.popup:before { + margin-left: -0.30714286em; + top: -0.30714286em; + left: 50%; + right: auto; + bottom: auto; + box-shadow: -1px -1px 0px 0px #bababc; +} +.ui.bottom.left.popup, +.play-button.bottom.left.popup, +.download-button.bottom.left.popup { + margin-left: 0em; +} +/*rtl:rename*/ +.ui.bottom.left.popup:before, +.play-button.bottom.left.popup:before, +.download-button.bottom.left.popup:before { + top: -0.30714286em; + left: 1em; + right: auto; + bottom: auto; + margin-left: 0em; + box-shadow: -1px -1px 0px 0px #bababc; +} +.ui.bottom.right.popup, +.play-button.bottom.right.popup, +.download-button.bottom.right.popup { + margin-right: 0em; +} +/*rtl:rename*/ +.ui.bottom.right.popup:before, +.play-button.bottom.right.popup:before, +.download-button.bottom.right.popup:before { + top: -0.30714286em; + right: 1em; + bottom: auto; + left: auto; + margin-left: 0em; + box-shadow: -1px -1px 0px 0px #bababc; +} +/*--- Above ---*/ +.ui.top.center.popup:before, +.play-button.top.center.popup:before, +.download-button.top.center.popup:before { + top: auto; + right: auto; + bottom: -0.30714286em; + left: 50%; + margin-left: -0.30714286em; +} +.ui.top.left.popup, +.play-button.top.left.popup, +.download-button.top.left.popup { + margin-left: 0em; +} +/*rtl:rename*/ +.ui.top.left.popup:before, +.play-button.top.left.popup:before, +.download-button.top.left.popup:before { + bottom: -0.30714286em; + left: 1em; + top: auto; + right: auto; + margin-left: 0em; +} +.ui.top.right.popup, +.play-button.top.right.popup, +.download-button.top.right.popup { + margin-right: 0em; +} +/*rtl:rename*/ +.ui.top.right.popup:before, +.play-button.top.right.popup:before, +.download-button.top.right.popup:before { + bottom: -0.30714286em; + right: 1em; + top: auto; + left: auto; + margin-left: 0em; +} +/*--- Left Center ---*/ +/*rtl:rename*/ +.ui.left.center.popup:before, +.play-button.left.center.popup:before, +.download-button.left.center.popup:before { + top: 50%; + right: -0.30714286em; + bottom: auto; + left: auto; + margin-top: -0.30714286em; + box-shadow: 1px -1px 0px 0px #bababc; +} +/*--- Right Center ---*/ +/*rtl:rename*/ +.ui.right.center.popup:before, +.play-button.right.center.popup:before, +.download-button.right.center.popup:before { + top: 50%; + left: -0.30714286em; + bottom: auto; + right: auto; + margin-top: -0.30714286em; + box-shadow: -1px 1px 0px 0px #bababc; +} +/* Arrow Color By Location */ +.ui.bottom.popup:before, +.play-button.bottom.popup:before, +.download-button.bottom.popup:before { + background: #FFFFFF; +} +.ui.right.center.popup:before, +.ui.left.center.popup:before, +.play-button.right.center.popup:before, +.play-button.left.center.popup:before, +.download-button.right.center.popup:before, +.download-button.left.center.popup:before { + background: #FFFFFF; +} +.ui.top.popup:before, +.play-button.top.popup:before, +.download-button.top.popup:before { + background: #FFFFFF; +} +/* Inverted Arrow Color */ +.ui.inverted.bottom.popup:before, +.play-button.inverted.bottom.popup:before, +.download-button.inverted.bottom.popup:before { + background: #1B1C1D; +} +.ui.inverted.right.center.popup:before, +.ui.inverted.left.center.popup:before, +.play-button.inverted.right.center.popup:before, +.play-button.inverted.left.center.popup:before, +.download-button.inverted.right.center.popup:before, +.download-button.inverted.left.center.popup:before { + background: #1B1C1D; +} +.ui.inverted.top.popup:before, +.play-button.inverted.top.popup:before, +.download-button.inverted.top.popup:before { + background: #1B1C1D; +} +/******************************* + Coupling +*******************************/ +/* Immediate Nested Grid */ +.ui.popup > .ui.grid:not(.padded), +.play-button.popup > .play-button.grid:not(.padded), +.download-button.popup > .download-button.grid:not(.padded) { + width: calc(100% + 1.75rem); + margin: -0.7rem -0.875rem; +} +/******************************* + States +*******************************/ +.ui.loading.popup, +.play-button.loading.popup, +.download-button.loading.popup { + display: block; + visibility: hidden; + z-index: -1; +} +.ui.animating.popup, +.ui.visible.popup, +.play-button.animating.popup, +.play-button.visible.popup, +.download-button.animating.popup, +.download-button.visible.popup { + display: block; +} +.ui.visible.popup, +.play-button.visible.popup, +.download-button.visible.popup { + transform: translateZ(0px); + backface-visibility: hidden; +} +/******************************* + Variations +*******************************/ +/*-------------- + Basic +---------------*/ +.ui.basic.popup:before, +.play-button.basic.popup:before, +.download-button.basic.popup:before { + display: none; +} +/*-------------- + Wide +---------------*/ +.ui.wide.popup, +.play-button.wide.popup, +.download-button.wide.popup { + max-width: 350px; +} +.ui[class*="very wide"].popup, +.play-button[class*="very wide"].popup, +.download-button[class*="very wide"].popup { + max-width: 550px; +} +@media only screen and (max-width: 767px) { + .ui.wide.popup, + .ui[class*="very wide"].popup, + .play-button.wide.popup, + .play-button[class*="very wide"].popup, + .download-button.wide.popup, + .download-button[class*="very wide"].popup { + max-width: 250px; + } +} +/*-------------- + Fluid +---------------*/ +.ui.fluid.popup, +.play-button.fluid.popup, +.download-button.fluid.popup { + width: 100%; + max-width: none; +} +/*-------------- + Colors +---------------*/ +/* Inverted colors */ +.ui.inverted.popup, +.play-button.inverted.popup, +.download-button.inverted.popup { + background: #1B1C1D; + color: #FFFFFF; + border: none; + box-shadow: none; +} +.ui.inverted.popup .header, +.play-button.inverted.popup .header, +.download-button.inverted.popup .header { + background-color: none; + color: #FFFFFF; +} +.ui.inverted.popup:before, +.play-button.inverted.popup:before, +.download-button.inverted.popup:before { + background-color: #1B1C1D; + box-shadow: none !important; +} +/*-------------- + Flowing +---------------*/ +.ui.flowing.popup, +.play-button.flowing.popup, +.download-button.flowing.popup { + max-width: none; +} +/*-------------- + Sizes +---------------*/ +.ui.mini.popup, +.play-button.mini.popup, +.download-button.mini.popup { + font-size: 0.78571429rem; +} +.ui.tiny.popup, +.play-button.tiny.popup, +.download-button.tiny.popup { + font-size: 0.85714286rem; +} +.ui.small.popup, +.play-button.small.popup, +.download-button.small.popup { + font-size: 0.92857143rem; +} +.ui.popup, +.play-button.popup, +.download-button.popup { + font-size: 1rem; +} +.ui.large.popup, +.play-button.large.popup, +.download-button.large.popup { + font-size: 1.14285714rem; +} +.ui.huge.popup, +.play-button.huge.popup, +.download-button.huge.popup { + font-size: 1.42857143rem; +} +/******************************* + Theme Overrides +*******************************/ +/******************************* + User Overrides +*******************************/ +/*! + * # Semantic UI - Progress Bar + * http://github.com/semantic-org/semantic-ui/ + * + * + * Released under the MIT license + * http://opensource.org/licenses/MIT + * + */ +/******************************* + Theme +*******************************/ +/* + +████████╗██╗ ██╗███████╗███╗ ███╗███████╗███████╗ +╚══██╔══╝██║ ██║██╔════╝████╗ ████║██╔════╝██╔════╝ + ██║ ███████║█████╗ ██╔████╔██║█████╗ ███████╗ + ██║ ██╔══██║██╔══╝ ██║╚██╔╝██║██╔══╝ ╚════██║ + ██║ ██║ ██║███████╗██║ ╚═╝ ██║███████╗███████║ + ╚═╝ ╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝╚══════╝╚══════╝ + +*/ +/******************************* + Theme Selection +*******************************/ +/* To override a theme for an individual element + specify theme name below +*/ +/* Global */ +/* Elements */ +/* Collections */ +/* Modules */ +/* Views */ +/******************************* + Folders +*******************************/ +/* Path to theme packages */ +/* Path to site override folder */ +/******************************* + Import Theme +*******************************/ +/******************************* + Import Directives +*******************************/ +/*------------------ + Theme +-------------------*/ +/*-------------------- + Site Variables +---------------------*/ +/* Default site.variables */ +/******************************* + Site Settings +*******************************/ +/*------------------- + Fonts +--------------------*/ +/*------------------- + Base Sizes +--------------------*/ +/* This is the single variable that controls them all */ +/* The size of page text */ +/*------------------- + Border Radius +--------------------*/ +/* See Power-user section below + for explanation of @px variables +*/ +/*------------------- + Brand Colors +--------------------*/ +/*-------------- + Page Heading +---------------*/ +/*-------------- + Form Input +---------------*/ +/* This adjusts the default form input across all elements */ +/* Input Text Color */ +/* Line Height Default For Inputs in Browser (Descendors are 17px at 14px base em) */ +/*------------------- + Focused Input +--------------------*/ +/* Used on inputs, textarea etc */ +/* Used on dropdowns, other larger blocks */ +/*------------------- + Sizes +--------------------*/ +/* + Sizes are all expressed in terms of 14px/em (default em) + This ensures these "ratios" remain constant despite changes in EM +*/ +/*------------------- + Page +--------------------*/ +/*------------------- + Paragraph +--------------------*/ +/*------------------- + Links +--------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ +/*------------------- + Highlighted Text +--------------------*/ +/*------------------- + Loader +--------------------*/ +/*------------------- + Grid +--------------------*/ +/*------------------- + Transitions +--------------------*/ +/*------------------- + Breakpoints +--------------------*/ +/*------------------- + Site Colors +--------------------*/ +/*--- Colors ---*/ +/*--- Light Colors ---*/ +/*--- Neutrals ---*/ +/*--- Colored Backgrounds ---*/ +/*--- Colored Headers ---*/ +/*--- Colored Text ---*/ +/*--- Colored Border ---*/ +/*------------------- + Alpha Colors +--------------------*/ +/*------------------- + Accents +--------------------*/ +/* Differentiating Neutrals */ +/* Differentiating Layers */ +/******************************* + Power-User +*******************************/ +/*------------------- + Emotive Colors +--------------------*/ +/* Positive */ +/* Negative */ +/* Info */ +/* Warning */ +/*------------------- + Paths +--------------------*/ +/* For source only. Modified in gulp for dist */ +/*------------------- + Em Sizes +--------------------*/ +/* + This rounds @size values to the closest pixel then expresses that value in (r)em. + This ensures all size values round to exact pixels +*/ +/* em */ +/* rem */ +/*------------------- + Icons +--------------------*/ +/* Maximum Glyph Width of Icon */ +/*------------------- + Neutral Text +--------------------*/ +/*------------------- + Brand Colors +--------------------*/ +/*------------------- + Borders +--------------------*/ +/*------------------- + Derived Values +--------------------*/ +/* Loaders Position Offset */ +/* Rendered Scrollbar Width */ +/* Maximum Single Character Glyph Width, aka Capital "W" */ +/* Used to match floats with text */ +/* Header Spacing */ +/* Minimum Mobile Width */ +/* Positive / Negative Dupes */ +/* Responsive */ +/*------------------- + Exact Pixel Values +--------------------*/ +/* + These are used to specify exact pixel values in em + for things like borders that remain constantly + sized as emSize adjusts + + Since there are many more sizes than names for sizes, + these are named by their original pixel values. + +*/ +/* Columns */ +/******************************* + States +*******************************/ +/*------------------- + Disabled +--------------------*/ +/*------------------- + Hover +--------------------*/ +/*--- Shadows ---*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Focus +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Down (:active) +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Active +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/* Packaged site.variables */ +/******************************* + User Global Variables +*******************************/ +/*------------------- + Fonts +--------------------*/ +/*------------------- + Breakpoints +--------------------*/ +/* +@mobileBreakpoint : unit( (63 * @emSize), px); +@tabletBreakpoint : unit( (79 * @emSize), px); +@computerBreakpoint : unit( (91 * @emSize), px); +@largeMonitorBreakpoint : unit( (99 * @emSize), px); +@widescreenMonitorBreakpoint : unit( (119 * @emSize), px); +*/ +/******************************* + PXT Variables +*******************************/ +/*------------------- + Menu +--------------------*/ +/*------------------- + Layout +--------------------*/ +/*------------------- + Background +--------------------*/ +/*------------------- + Full screen +--------------------*/ +/*------------------- + Side Docs +--------------------*/ +/*------------------- + Editor +--------------------*/ +/* Component's site.variables */ +/******************************* + Site Settings +*******************************/ +/*------------------- + Fonts +--------------------*/ +/*------------------- + Base Sizes +--------------------*/ +/* This is the single variable that controls them all */ +/* The size of page text */ +/*------------------- + Border Radius +--------------------*/ +/* See Power-user section below + for explanation of @px variables +*/ +/*------------------- + Brand Colors +--------------------*/ +/*-------------- + Page Heading +---------------*/ +/*-------------- + Form Input +---------------*/ +/* This adjusts the default form input across all elements */ +/* Input Text Color */ +/* Line Height Default For Inputs in Browser (Descendors are 17px at 14px base em) */ +/*------------------- + Focused Input +--------------------*/ +/* Used on inputs, textarea etc */ +/* Used on dropdowns, other larger blocks */ +/*------------------- + Sizes +--------------------*/ +/* + Sizes are all expressed in terms of 14px/em (default em) + This ensures these "ratios" remain constant despite changes in EM +*/ +/*------------------- + Page +--------------------*/ +/*------------------- + Paragraph +--------------------*/ +/*------------------- + Links +--------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ +/*------------------- + Highlighted Text +--------------------*/ +/*------------------- + Loader +--------------------*/ +/*------------------- + Grid +--------------------*/ +/*------------------- + Transitions +--------------------*/ +/*------------------- + Breakpoints +--------------------*/ +/*------------------- + Site Colors +--------------------*/ +/*--- Colors ---*/ +/*--- Light Colors ---*/ +/*--- Neutrals ---*/ +/*--- Colored Backgrounds ---*/ +/*--- Colored Headers ---*/ +/*--- Colored Text ---*/ +/*--- Colored Border ---*/ +/*------------------- + Alpha Colors +--------------------*/ +/*------------------- + Accents +--------------------*/ +/* Differentiating Neutrals */ +/* Differentiating Layers */ +/******************************* + Power-User +*******************************/ +/*------------------- + Emotive Colors +--------------------*/ +/* Positive */ +/* Negative */ +/* Info */ +/* Warning */ +/*------------------- + Paths +--------------------*/ +/* For source only. Modified in gulp for dist */ +/*------------------- + Em Sizes +--------------------*/ +/* + This rounds @size values to the closest pixel then expresses that value in (r)em. + This ensures all size values round to exact pixels +*/ +/* em */ +/* rem */ +/*------------------- + Icons +--------------------*/ +/* Maximum Glyph Width of Icon */ +/*------------------- + Neutral Text +--------------------*/ +/*------------------- + Brand Colors +--------------------*/ +/*------------------- + Borders +--------------------*/ +/*------------------- + Derived Values +--------------------*/ +/* Loaders Position Offset */ +/* Rendered Scrollbar Width */ +/* Maximum Single Character Glyph Width, aka Capital "W" */ +/* Used to match floats with text */ +/* Header Spacing */ +/* Minimum Mobile Width */ +/* Positive / Negative Dupes */ +/* Responsive */ +/*------------------- + Exact Pixel Values +--------------------*/ +/* + These are used to specify exact pixel values in em + for things like borders that remain constantly + sized as emSize adjusts + + Since there are many more sizes than names for sizes, + these are named by their original pixel values. + +*/ +/* Columns */ +/******************************* + States +*******************************/ +/*------------------- + Disabled +--------------------*/ +/*------------------- + Hover +--------------------*/ +/*--- Shadows ---*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Focus +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Down (:active) +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Active +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/* Site theme site.variables */ +/******************************* + User Global Variables +*******************************/ +/*------------------- + Site Colors +--------------------*/ +/******************************* + PXT Overrides +*******************************/ +/*------------------- + Component Variables +---------------------*/ +/* Default */ +/******************************* + Progress +*******************************/ +/*------------------- + Element +--------------------*/ +/* Bar */ +/* Progress Bar Label */ +/* Label */ +/*------------------- + Types +--------------------*/ +/*------------------- + States +--------------------*/ +/* Active */ +/*------------------- + Variations +--------------------*/ +/* Attached */ +/* Inverted */ +/* Sizing */ +/* Packaged Theme */ +/******************************* + Progress +*******************************/ +/*------------------- + Element +--------------------*/ +/* Bar */ +/* Progress Bar Label */ +/* Label */ +/*------------------- + Types +--------------------*/ +/*------------------- + States +--------------------*/ +/* Active */ +/*------------------- + Variations +--------------------*/ +/* Attached */ +/* Inverted */ +/* Sizing */ +/* Site Theme */ +/******************************* + User Variable Overrides +*******************************/ +/******************************* + Mix-ins +*******************************/ +/*------------------ + Fonts +-------------------*/ +/*------------------ + Overrides +-------------------*/ +/* End Config */ +/******************************* + Progress +*******************************/ +.ui.progress, +.play-button.progress, +.download-button.progress { + position: relative; + display: block; + max-width: 100%; + border: none; + margin: 1em 0em 2.5em; + box-shadow: none; + background: rgba(0, 0, 0, 0.1); + padding: 0em; + border-radius: 0.28571429rem; +} +.ui.progress:first-child, +.play-button.progress:first-child, +.download-button.progress:first-child { + margin: 0em 0em 2.5em; +} +.ui.progress:last-child, +.play-button.progress:last-child, +.download-button.progress:last-child { + margin: 0em 0em 1.5em; +} +/******************************* + Content +*******************************/ +/* Activity Bar */ +.ui.progress .bar, +.play-button.progress .bar, +.download-button.progress .bar { + display: block; + line-height: 1; + position: relative; + width: 0%; + min-width: 2em; + background: #888888; + border-radius: 0.28571429rem; + transition: width 0.1s ease, background-color 0.1s ease; +} +/* Percent Complete */ +.ui.progress .bar > .progress, +.play-button.progress .bar > .progress, +.download-button.progress .bar > .progress { + white-space: nowrap; + position: absolute; + width: auto; + font-size: 0.92857143em; + top: 50%; + right: 0.5em; + left: auto; + bottom: auto; + color: rgba(255, 255, 255, 0.7); + text-shadow: none; + margin-top: -0.5em; + font-weight: bold; + text-align: left; +} +/* Label */ +.ui.progress > .label, +.play-button.progress > .label, +.download-button.progress > .label { + position: absolute; + width: 100%; + font-size: 1em; + top: 100%; + right: auto; + left: 0%; + bottom: auto; + color: rgba(0, 0, 0, 0.87); + font-weight: bold; + text-shadow: none; + margin-top: 0.2em; + text-align: center; + transition: color 0.4s ease; +} +/******************************* + Types +*******************************/ +/* Indicating */ +.ui.indicating.progress[data-percent^="1"] .bar, +.ui.indicating.progress[data-percent^="2"] .bar, +.play-button.indicating.progress[data-percent^="1"] .bar, +.play-button.indicating.progress[data-percent^="2"] .bar, +.download-button.indicating.progress[data-percent^="1"] .bar, +.download-button.indicating.progress[data-percent^="2"] .bar { + background-color: #D95C5C; +} +.ui.indicating.progress[data-percent^="3"] .bar, +.play-button.indicating.progress[data-percent^="3"] .bar, +.download-button.indicating.progress[data-percent^="3"] .bar { + background-color: #EFBC72; +} +.ui.indicating.progress[data-percent^="4"] .bar, +.ui.indicating.progress[data-percent^="5"] .bar, +.play-button.indicating.progress[data-percent^="4"] .bar, +.play-button.indicating.progress[data-percent^="5"] .bar, +.download-button.indicating.progress[data-percent^="4"] .bar, +.download-button.indicating.progress[data-percent^="5"] .bar { + background-color: #E6BB48; +} +.ui.indicating.progress[data-percent^="6"] .bar, +.play-button.indicating.progress[data-percent^="6"] .bar, +.download-button.indicating.progress[data-percent^="6"] .bar { + background-color: #DDC928; +} +.ui.indicating.progress[data-percent^="7"] .bar, +.ui.indicating.progress[data-percent^="8"] .bar, +.play-button.indicating.progress[data-percent^="7"] .bar, +.play-button.indicating.progress[data-percent^="8"] .bar, +.download-button.indicating.progress[data-percent^="7"] .bar, +.download-button.indicating.progress[data-percent^="8"] .bar { + background-color: #B4D95C; +} +.ui.indicating.progress[data-percent^="9"] .bar, +.ui.indicating.progress[data-percent^="100"] .bar, +.play-button.indicating.progress[data-percent^="9"] .bar, +.play-button.indicating.progress[data-percent^="100"] .bar, +.download-button.indicating.progress[data-percent^="9"] .bar, +.download-button.indicating.progress[data-percent^="100"] .bar { + background-color: #66DA81; +} +/* Indicating Label */ +.ui.indicating.progress[data-percent^="1"] .label, +.ui.indicating.progress[data-percent^="2"] .label, +.play-button.indicating.progress[data-percent^="1"] .label, +.play-button.indicating.progress[data-percent^="2"] .label, +.download-button.indicating.progress[data-percent^="1"] .label, +.download-button.indicating.progress[data-percent^="2"] .label { + color: rgba(0, 0, 0, 0.87); +} +.ui.indicating.progress[data-percent^="3"] .label, +.play-button.indicating.progress[data-percent^="3"] .label, +.download-button.indicating.progress[data-percent^="3"] .label { + color: rgba(0, 0, 0, 0.87); +} +.ui.indicating.progress[data-percent^="4"] .label, +.ui.indicating.progress[data-percent^="5"] .label, +.play-button.indicating.progress[data-percent^="4"] .label, +.play-button.indicating.progress[data-percent^="5"] .label, +.download-button.indicating.progress[data-percent^="4"] .label, +.download-button.indicating.progress[data-percent^="5"] .label { + color: rgba(0, 0, 0, 0.87); +} +.ui.indicating.progress[data-percent^="6"] .label, +.play-button.indicating.progress[data-percent^="6"] .label, +.download-button.indicating.progress[data-percent^="6"] .label { + color: rgba(0, 0, 0, 0.87); +} +.ui.indicating.progress[data-percent^="7"] .label, +.ui.indicating.progress[data-percent^="8"] .label, +.play-button.indicating.progress[data-percent^="7"] .label, +.play-button.indicating.progress[data-percent^="8"] .label, +.download-button.indicating.progress[data-percent^="7"] .label, +.download-button.indicating.progress[data-percent^="8"] .label { + color: rgba(0, 0, 0, 0.87); +} +.ui.indicating.progress[data-percent^="9"] .label, +.ui.indicating.progress[data-percent^="100"] .label, +.play-button.indicating.progress[data-percent^="9"] .label, +.play-button.indicating.progress[data-percent^="100"] .label, +.download-button.indicating.progress[data-percent^="9"] .label, +.download-button.indicating.progress[data-percent^="100"] .label { + color: rgba(0, 0, 0, 0.87); +} +/* Single Digits */ +.ui.indicating.progress[data-percent="1"] .bar, +.ui.indicating.progress[data-percent="2"] .bar, +.ui.indicating.progress[data-percent="3"] .bar, +.ui.indicating.progress[data-percent="4"] .bar, +.ui.indicating.progress[data-percent="5"] .bar, +.ui.indicating.progress[data-percent="6"] .bar, +.ui.indicating.progress[data-percent="7"] .bar, +.ui.indicating.progress[data-percent="8"] .bar, +.ui.indicating.progress[data-percent="9"] .bar, +.play-button.indicating.progress[data-percent="1"] .bar, +.play-button.indicating.progress[data-percent="2"] .bar, +.play-button.indicating.progress[data-percent="3"] .bar, +.play-button.indicating.progress[data-percent="4"] .bar, +.play-button.indicating.progress[data-percent="5"] .bar, +.play-button.indicating.progress[data-percent="6"] .bar, +.play-button.indicating.progress[data-percent="7"] .bar, +.play-button.indicating.progress[data-percent="8"] .bar, +.play-button.indicating.progress[data-percent="9"] .bar, +.download-button.indicating.progress[data-percent="1"] .bar, +.download-button.indicating.progress[data-percent="2"] .bar, +.download-button.indicating.progress[data-percent="3"] .bar, +.download-button.indicating.progress[data-percent="4"] .bar, +.download-button.indicating.progress[data-percent="5"] .bar, +.download-button.indicating.progress[data-percent="6"] .bar, +.download-button.indicating.progress[data-percent="7"] .bar, +.download-button.indicating.progress[data-percent="8"] .bar, +.download-button.indicating.progress[data-percent="9"] .bar { + background-color: #D95C5C; +} +.ui.indicating.progress[data-percent="1"] .label, +.ui.indicating.progress[data-percent="2"] .label, +.ui.indicating.progress[data-percent="3"] .label, +.ui.indicating.progress[data-percent="4"] .label, +.ui.indicating.progress[data-percent="5"] .label, +.ui.indicating.progress[data-percent="6"] .label, +.ui.indicating.progress[data-percent="7"] .label, +.ui.indicating.progress[data-percent="8"] .label, +.ui.indicating.progress[data-percent="9"] .label, +.play-button.indicating.progress[data-percent="1"] .label, +.play-button.indicating.progress[data-percent="2"] .label, +.play-button.indicating.progress[data-percent="3"] .label, +.play-button.indicating.progress[data-percent="4"] .label, +.play-button.indicating.progress[data-percent="5"] .label, +.play-button.indicating.progress[data-percent="6"] .label, +.play-button.indicating.progress[data-percent="7"] .label, +.play-button.indicating.progress[data-percent="8"] .label, +.play-button.indicating.progress[data-percent="9"] .label, +.download-button.indicating.progress[data-percent="1"] .label, +.download-button.indicating.progress[data-percent="2"] .label, +.download-button.indicating.progress[data-percent="3"] .label, +.download-button.indicating.progress[data-percent="4"] .label, +.download-button.indicating.progress[data-percent="5"] .label, +.download-button.indicating.progress[data-percent="6"] .label, +.download-button.indicating.progress[data-percent="7"] .label, +.download-button.indicating.progress[data-percent="8"] .label, +.download-button.indicating.progress[data-percent="9"] .label { + color: rgba(0, 0, 0, 0.87); +} +/* Indicating Success */ +.ui.indicating.progress.success .label, +.play-button.indicating.progress.success .label, +.download-button.indicating.progress.success .label { + color: #1A531B; +} +/******************************* + States +*******************************/ +/*-------------- + Success +---------------*/ +.ui.progress.success .bar, +.play-button.progress.success .bar, +.download-button.progress.success .bar { + background-color: #3FC863 !important; +} +.ui.progress.success .bar, +.ui.progress.success .bar::after, +.play-button.progress.success .bar, +.play-button.progress.success .bar::after, +.download-button.progress.success .bar, +.download-button.progress.success .bar::after { + animation: none !important; +} +.ui.progress.success > .label, +.play-button.progress.success > .label, +.download-button.progress.success > .label { + color: #1A531B; +} +/*-------------- + Warning +---------------*/ +.ui.progress.warning .bar, +.play-button.progress.warning .bar, +.download-button.progress.warning .bar { + background-color: #F2C037 !important; +} +.ui.progress.warning .bar, +.ui.progress.warning .bar::after, +.play-button.progress.warning .bar, +.play-button.progress.warning .bar::after, +.download-button.progress.warning .bar, +.download-button.progress.warning .bar::after { + animation: none !important; +} +.ui.progress.warning > .label, +.play-button.progress.warning > .label, +.download-button.progress.warning > .label { + color: #794B02; +} +/*-------------- + Error +---------------*/ +.ui.progress.error .bar, +.play-button.progress.error .bar, +.download-button.progress.error .bar { + background-color: #E81123 !important; +} +.ui.progress.error .bar, +.ui.progress.error .bar::after, +.play-button.progress.error .bar, +.play-button.progress.error .bar::after, +.download-button.progress.error .bar, +.download-button.progress.error .bar::after { + animation: none !important; +} +.ui.progress.error > .label, +.play-button.progress.error > .label, +.download-button.progress.error > .label { + color: #912D2B; +} +/*-------------- + Active +---------------*/ +.ui.active.progress .bar, +.play-button.active.progress .bar, +.download-button.active.progress .bar { + position: relative; + min-width: 2em; +} +.ui.active.progress .bar::after, +.play-button.active.progress .bar::after, +.download-button.active.progress .bar::after { + content: ''; + opacity: 0; + position: absolute; + top: 0px; + left: 0px; + right: 0px; + bottom: 0px; + background: #FFFFFF; + border-radius: 0.28571429rem; + animation: progress-active 2s ease infinite; +} +@keyframes progress-active { + 0% { + opacity: 0.3; + width: 0; + } + 100% { + opacity: 0; + width: 100%; + } +} +/*-------------- + Disabled +---------------*/ +.ui.disabled.progress, +.play-button.disabled.progress, +.download-button.disabled.progress { + opacity: 0.35; +} +.ui.disabled.progress .bar, +.ui.disabled.progress .bar::after, +.play-button.disabled.progress .bar, +.play-button.disabled.progress .bar::after, +.download-button.disabled.progress .bar, +.download-button.disabled.progress .bar::after { + animation: none !important; +} +/******************************* + Variations +*******************************/ +/*-------------- + Inverted +---------------*/ +.ui.inverted.progress, +.play-button.inverted.progress, +.download-button.inverted.progress { + background: rgba(255, 255, 255, 0.08); + border: none; +} +.ui.inverted.progress .bar, +.play-button.inverted.progress .bar, +.download-button.inverted.progress .bar { + background: #888888; +} +.ui.inverted.progress .bar > .progress, +.play-button.inverted.progress .bar > .progress, +.download-button.inverted.progress .bar > .progress { + color: #F9FAFB; +} +.ui.inverted.progress > .label, +.play-button.inverted.progress > .label, +.download-button.inverted.progress > .label { + color: #FFFFFF; +} +.ui.inverted.progress.success > .label, +.play-button.inverted.progress.success > .label, +.download-button.inverted.progress.success > .label { + color: #3FC863; +} +.ui.inverted.progress.warning > .label, +.play-button.inverted.progress.warning > .label, +.download-button.inverted.progress.warning > .label { + color: #F2C037; +} +.ui.inverted.progress.error > .label, +.play-button.inverted.progress.error > .label, +.download-button.inverted.progress.error > .label { + color: #E81123; +} +/*-------------- + Attached +---------------*/ +/* bottom attached */ +.ui.progress.attached, +.play-button.progress.attached, +.download-button.progress.attached { + background: transparent; + position: relative; + border: none; + margin: 0em; +} +.ui.progress.attached, +.ui.progress.attached .bar, +.play-button.progress.attached, +.play-button.progress.attached .bar, +.download-button.progress.attached, +.download-button.progress.attached .bar { + display: block; + height: 0.2rem; + padding: 0px; + overflow: hidden; + border-radius: 0em 0em 0.28571429rem 0.28571429rem; +} +.ui.progress.attached .bar, +.play-button.progress.attached .bar, +.download-button.progress.attached .bar { + border-radius: 0em; +} +/* top attached */ +.ui.progress.top.attached, +.ui.progress.top.attached .bar, +.play-button.progress.top.attached, +.play-button.progress.top.attached .bar, +.download-button.progress.top.attached, +.download-button.progress.top.attached .bar { + top: 0px; + border-radius: 0.28571429rem 0.28571429rem 0em 0em; +} +.ui.progress.top.attached .bar, +.play-button.progress.top.attached .bar, +.download-button.progress.top.attached .bar { + border-radius: 0em; +} +/* Coupling */ +.ui.segment > .ui.attached.progress, +.ui.card > .ui.attached.progress, +.play-button.segment > .play-button.attached.progress, +.play-button.card > .play-button.attached.progress, +.download-button.segment > .download-button.attached.progress, +.download-button.card > .download-button.attached.progress { + position: absolute; + top: auto; + left: 0; + bottom: 100%; + width: 100%; +} +.ui.segment > .ui.bottom.attached.progress, +.ui.card > .ui.bottom.attached.progress, +.play-button.segment > .play-button.bottom.attached.progress, +.play-button.card > .play-button.bottom.attached.progress, +.download-button.segment > .download-button.bottom.attached.progress, +.download-button.card > .download-button.bottom.attached.progress { + top: 100%; + bottom: auto; +} +/*-------------- + Colors +---------------*/ +/* Red */ +.ui.red.progress .bar, +.play-button.red.progress .bar, +.download-button.red.progress .bar { + background-color: #E81123; +} +.ui.red.inverted.progress .bar, +.play-button.red.inverted.progress .bar, +.download-button.red.inverted.progress .bar { + background-color: #FF695E; +} +/* Orange */ +.ui.orange.progress .bar, +.play-button.orange.progress .bar, +.download-button.orange.progress .bar { + background-color: #DF4600; +} +.ui.orange.inverted.progress .bar, +.play-button.orange.inverted.progress .bar, +.download-button.orange.inverted.progress .bar { + background-color: #FF851B; +} +/* Yellow */ +.ui.yellow.progress .bar, +.play-button.yellow.progress .bar, +.download-button.yellow.progress .bar, +.ui.download-button.progress .bar { + background-color: #F4C918; +} +.ui.yellow.inverted.progress .bar, +.play-button.yellow.inverted.progress .bar, +.download-button.yellow.inverted.progress .bar, +.ui.download-button.inverted.progress .bar { + background-color: #FFE21F; +} +/* Olive */ +.ui.olive.progress .bar, +.play-button.olive.progress .bar, +.download-button.olive.progress .bar { + background-color: #B5CC18; +} +.ui.olive.inverted.progress .bar, +.play-button.olive.inverted.progress .bar, +.download-button.olive.inverted.progress .bar { + background-color: #D9E778; +} +/* Green */ +.ui.green.progress .bar, +.ui.ui.button.getting-started-btn.progress .bar, +.play-button.green.progress .bar, +.download-button.green.progress .bar, +.ui.play-button.button.getting-started-btn.progress .bar, +.ui.ui.play-button.getting-started-btn.progress .bar, +.ui.download-button.button.getting-started-btn.progress .bar, +.ui.ui.download-button.getting-started-btn.progress .bar { + background-color: #3FC863; +} +.ui.green.inverted.progress .bar, +.ui.ui.button.getting-started-btn.inverted.progress .bar, +.play-button.green.inverted.progress .bar, +.download-button.green.inverted.progress .bar, +.ui.play-button.button.getting-started-btn.inverted.progress .bar, +.ui.ui.play-button.getting-started-btn.inverted.progress .bar, +.ui.download-button.button.getting-started-btn.inverted.progress .bar, +.ui.ui.download-button.getting-started-btn.inverted.progress .bar { + background-color: #2ECC40; +} +/* Teal */ +.ui.teal.progress .bar, +.play-button.teal.progress .bar, +.download-button.teal.progress .bar { + background-color: #008272; +} +.ui.teal.inverted.progress .bar, +.play-button.teal.inverted.progress .bar, +.download-button.teal.inverted.progress .bar { + background-color: #6DFFFF; +} +/* Blue */ +.ui.blue.progress .bar, +.play-button.blue.progress .bar, +.ui.play-button.progress .bar, +.download-button.blue.progress .bar { + background-color: #54C9C9; +} +.ui.blue.inverted.progress .bar, +.play-button.blue.inverted.progress .bar, +.ui.play-button.inverted.progress .bar, +.download-button.blue.inverted.progress .bar { + background-color: #54C8FF; +} +/* Violet */ +.ui.violet.progress .bar, +.play-button.violet.progress .bar, +.download-button.violet.progress .bar { + background-color: #C90072; +} +.ui.violet.inverted.progress .bar, +.play-button.violet.inverted.progress .bar, +.download-button.violet.inverted.progress .bar { + background-color: #A291FB; +} +/* Purple */ +.ui.purple.progress .bar, +.play-button.purple.progress .bar, +.download-button.purple.progress .bar { + background-color: #8169E6; +} +.ui.purple.inverted.progress .bar, +.play-button.purple.inverted.progress .bar, +.download-button.purple.inverted.progress .bar { + background-color: #DC73FF; +} +/* Pink */ +.ui.pink.progress .bar, +.play-button.pink.progress .bar, +.download-button.pink.progress .bar { + background-color: #E2008C; +} +.ui.pink.inverted.progress .bar, +.play-button.pink.inverted.progress .bar, +.download-button.pink.inverted.progress .bar { + background-color: #FF8EDF; +} +/* Brown */ +.ui.brown.progress .bar, +.play-button.brown.progress .bar, +.download-button.brown.progress .bar { + background-color: #6B5B4C; +} +.ui.brown.inverted.progress .bar, +.play-button.brown.inverted.progress .bar, +.download-button.brown.inverted.progress .bar { + background-color: #D67C1C; +} +/* Grey */ +.ui.grey.progress .bar, +.ui.ui.button.editortools-btn.progress .bar, +.play-button.grey.progress .bar, +.download-button.grey.progress .bar, +.ui.play-button.button.editortools-btn.progress .bar, +.ui.ui.play-button.editortools-btn.progress .bar, +.ui.download-button.button.editortools-btn.progress .bar, +.ui.ui.download-button.editortools-btn.progress .bar { + background-color: #42495F; +} +.ui.grey.inverted.progress .bar, +.ui.ui.button.editortools-btn.inverted.progress .bar, +.play-button.grey.inverted.progress .bar, +.download-button.grey.inverted.progress .bar, +.ui.play-button.button.editortools-btn.inverted.progress .bar, +.ui.ui.play-button.editortools-btn.inverted.progress .bar, +.ui.download-button.button.editortools-btn.inverted.progress .bar, +.ui.ui.download-button.editortools-btn.inverted.progress .bar { + background-color: #DCDDDE; +} +/* Black */ +.ui.black.progress .bar, +.play-button.black.progress .bar, +.download-button.black.progress .bar { + background-color: #1B1C1D; +} +.ui.black.inverted.progress .bar, +.play-button.black.inverted.progress .bar, +.download-button.black.inverted.progress .bar { + background-color: #545454; +} +/*-------------- + Sizes +---------------*/ +.ui.tiny.progress, +.play-button.tiny.progress, +.download-button.tiny.progress { + font-size: 0.85714286rem; +} +.ui.tiny.progress .bar, +.play-button.tiny.progress .bar, +.download-button.tiny.progress .bar { + height: 0.5em; +} +.ui.small.progress, +.play-button.small.progress, +.download-button.small.progress { + font-size: 0.92857143rem; +} +.ui.small.progress .bar, +.play-button.small.progress .bar, +.download-button.small.progress .bar { + height: 1em; +} +.ui.progress, +.play-button.progress, +.download-button.progress { + font-size: 1rem; +} +.ui.progress .bar, +.play-button.progress .bar, +.download-button.progress .bar { + height: 1.75em; +} +.ui.large.progress, +.play-button.large.progress, +.download-button.large.progress { + font-size: 1.14285714rem; +} +.ui.large.progress .bar, +.play-button.large.progress .bar, +.download-button.large.progress .bar { + height: 2.5em; +} +.ui.big.progress, +.play-button.big.progress, +.download-button.big.progress { + font-size: 1.28571429rem; +} +.ui.big.progress .bar, +.play-button.big.progress .bar, +.download-button.big.progress .bar { + height: 3.5em; +} +/******************************* + Progress +*******************************/ +/******************************* + Site Overrides +*******************************/ +/*! + * # Semantic UI - Rating + * http://github.com/semantic-org/semantic-ui/ + * + * + * Released under the MIT license + * http://opensource.org/licenses/MIT + * + */ +/******************************* + Theme +*******************************/ +/* + +████████╗██╗ ██╗███████╗███╗ ███╗███████╗███████╗ +╚══██╔══╝██║ ██║██╔════╝████╗ ████║██╔════╝██╔════╝ + ██║ ███████║█████╗ ██╔████╔██║█████╗ ███████╗ + ██║ ██╔══██║██╔══╝ ██║╚██╔╝██║██╔══╝ ╚════██║ + ██║ ██║ ██║███████╗██║ ╚═╝ ██║███████╗███████║ + ╚═╝ ╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝╚══════╝╚══════╝ + +*/ +/******************************* + Theme Selection +*******************************/ +/* To override a theme for an individual element + specify theme name below +*/ +/* Global */ +/* Elements */ +/* Collections */ +/* Modules */ +/* Views */ +/******************************* + Folders +*******************************/ +/* Path to theme packages */ +/* Path to site override folder */ +/******************************* + Import Theme +*******************************/ +/******************************* + Import Directives +*******************************/ +/*------------------ + Theme +-------------------*/ +/*-------------------- + Site Variables +---------------------*/ +/* Default site.variables */ +/******************************* + Site Settings +*******************************/ +/*------------------- + Fonts +--------------------*/ +/*------------------- + Base Sizes +--------------------*/ +/* This is the single variable that controls them all */ +/* The size of page text */ +/*------------------- + Border Radius +--------------------*/ +/* See Power-user section below + for explanation of @px variables +*/ +/*------------------- + Brand Colors +--------------------*/ +/*-------------- + Page Heading +---------------*/ +/*-------------- + Form Input +---------------*/ +/* This adjusts the default form input across all elements */ +/* Input Text Color */ +/* Line Height Default For Inputs in Browser (Descendors are 17px at 14px base em) */ +/*------------------- + Focused Input +--------------------*/ +/* Used on inputs, textarea etc */ +/* Used on dropdowns, other larger blocks */ +/*------------------- + Sizes +--------------------*/ +/* + Sizes are all expressed in terms of 14px/em (default em) + This ensures these "ratios" remain constant despite changes in EM +*/ +/*------------------- + Page +--------------------*/ +/*------------------- + Paragraph +--------------------*/ +/*------------------- + Links +--------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ +/*------------------- + Highlighted Text +--------------------*/ +/*------------------- + Loader +--------------------*/ +/*------------------- + Grid +--------------------*/ +/*------------------- + Transitions +--------------------*/ +/*------------------- + Breakpoints +--------------------*/ +/*------------------- + Site Colors +--------------------*/ +/*--- Colors ---*/ +/*--- Light Colors ---*/ +/*--- Neutrals ---*/ +/*--- Colored Backgrounds ---*/ +/*--- Colored Headers ---*/ +/*--- Colored Text ---*/ +/*--- Colored Border ---*/ +/*------------------- + Alpha Colors +--------------------*/ +/*------------------- + Accents +--------------------*/ +/* Differentiating Neutrals */ +/* Differentiating Layers */ +/******************************* + Power-User +*******************************/ +/*------------------- + Emotive Colors +--------------------*/ +/* Positive */ +/* Negative */ +/* Info */ +/* Warning */ +/*------------------- + Paths +--------------------*/ +/* For source only. Modified in gulp for dist */ +/*------------------- + Em Sizes +--------------------*/ +/* + This rounds @size values to the closest pixel then expresses that value in (r)em. + This ensures all size values round to exact pixels +*/ +/* em */ +/* rem */ +/*------------------- + Icons +--------------------*/ +/* Maximum Glyph Width of Icon */ +/*------------------- + Neutral Text +--------------------*/ +/*------------------- + Brand Colors +--------------------*/ +/*------------------- + Borders +--------------------*/ +/*------------------- + Derived Values +--------------------*/ +/* Loaders Position Offset */ +/* Rendered Scrollbar Width */ +/* Maximum Single Character Glyph Width, aka Capital "W" */ +/* Used to match floats with text */ +/* Header Spacing */ +/* Minimum Mobile Width */ +/* Positive / Negative Dupes */ +/* Responsive */ +/*------------------- + Exact Pixel Values +--------------------*/ +/* + These are used to specify exact pixel values in em + for things like borders that remain constantly + sized as emSize adjusts + + Since there are many more sizes than names for sizes, + these are named by their original pixel values. + +*/ +/* Columns */ +/******************************* + States +*******************************/ +/*------------------- + Disabled +--------------------*/ +/*------------------- + Hover +--------------------*/ +/*--- Shadows ---*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Focus +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Down (:active) +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Active +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/* Packaged site.variables */ +/******************************* + User Global Variables +*******************************/ +/*------------------- + Fonts +--------------------*/ +/*------------------- + Breakpoints +--------------------*/ +/* +@mobileBreakpoint : unit( (63 * @emSize), px); +@tabletBreakpoint : unit( (79 * @emSize), px); +@computerBreakpoint : unit( (91 * @emSize), px); +@largeMonitorBreakpoint : unit( (99 * @emSize), px); +@widescreenMonitorBreakpoint : unit( (119 * @emSize), px); +*/ +/******************************* + PXT Variables +*******************************/ +/*------------------- + Menu +--------------------*/ +/*------------------- + Layout +--------------------*/ +/*------------------- + Background +--------------------*/ +/*------------------- + Full screen +--------------------*/ +/*------------------- + Side Docs +--------------------*/ +/*------------------- + Editor +--------------------*/ +/* Component's site.variables */ +/******************************* + Site Settings +*******************************/ +/*------------------- + Fonts +--------------------*/ +/*------------------- + Base Sizes +--------------------*/ +/* This is the single variable that controls them all */ +/* The size of page text */ +/*------------------- + Border Radius +--------------------*/ +/* See Power-user section below + for explanation of @px variables +*/ +/*------------------- + Brand Colors +--------------------*/ +/*-------------- + Page Heading +---------------*/ +/*-------------- + Form Input +---------------*/ +/* This adjusts the default form input across all elements */ +/* Input Text Color */ +/* Line Height Default For Inputs in Browser (Descendors are 17px at 14px base em) */ +/*------------------- + Focused Input +--------------------*/ +/* Used on inputs, textarea etc */ +/* Used on dropdowns, other larger blocks */ +/*------------------- + Sizes +--------------------*/ +/* + Sizes are all expressed in terms of 14px/em (default em) + This ensures these "ratios" remain constant despite changes in EM +*/ +/*------------------- + Page +--------------------*/ +/*------------------- + Paragraph +--------------------*/ +/*------------------- + Links +--------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ +/*------------------- + Highlighted Text +--------------------*/ +/*------------------- + Loader +--------------------*/ +/*------------------- + Grid +--------------------*/ +/*------------------- + Transitions +--------------------*/ +/*------------------- + Breakpoints +--------------------*/ +/*------------------- + Site Colors +--------------------*/ +/*--- Colors ---*/ +/*--- Light Colors ---*/ +/*--- Neutrals ---*/ +/*--- Colored Backgrounds ---*/ +/*--- Colored Headers ---*/ +/*--- Colored Text ---*/ +/*--- Colored Border ---*/ +/*------------------- + Alpha Colors +--------------------*/ +/*------------------- + Accents +--------------------*/ +/* Differentiating Neutrals */ +/* Differentiating Layers */ +/******************************* + Power-User +*******************************/ +/*------------------- + Emotive Colors +--------------------*/ +/* Positive */ +/* Negative */ +/* Info */ +/* Warning */ +/*------------------- + Paths +--------------------*/ +/* For source only. Modified in gulp for dist */ +/*------------------- + Em Sizes +--------------------*/ +/* + This rounds @size values to the closest pixel then expresses that value in (r)em. + This ensures all size values round to exact pixels +*/ +/* em */ +/* rem */ +/*------------------- + Icons +--------------------*/ +/* Maximum Glyph Width of Icon */ +/*------------------- + Neutral Text +--------------------*/ +/*------------------- + Brand Colors +--------------------*/ +/*------------------- + Borders +--------------------*/ +/*------------------- + Derived Values +--------------------*/ +/* Loaders Position Offset */ +/* Rendered Scrollbar Width */ +/* Maximum Single Character Glyph Width, aka Capital "W" */ +/* Used to match floats with text */ +/* Header Spacing */ +/* Minimum Mobile Width */ +/* Positive / Negative Dupes */ +/* Responsive */ +/*------------------- + Exact Pixel Values +--------------------*/ +/* + These are used to specify exact pixel values in em + for things like borders that remain constantly + sized as emSize adjusts + + Since there are many more sizes than names for sizes, + these are named by their original pixel values. + +*/ +/* Columns */ +/******************************* + States +*******************************/ +/*------------------- + Disabled +--------------------*/ +/*------------------- + Hover +--------------------*/ +/*--- Shadows ---*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Focus +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Down (:active) +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Active +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/* Site theme site.variables */ +/******************************* + User Global Variables +*******************************/ +/*------------------- + Site Colors +--------------------*/ +/******************************* + PXT Overrides +*******************************/ +/*------------------- + Component Variables +---------------------*/ +/* Default */ +/******************************* + Rating +*******************************/ +/*------------------- + Types +--------------------*/ +/* Standard */ +/* Star */ +/* Heart */ +/*------------------- + States +--------------------*/ +/*------------------- + Variations +--------------------*/ +/* Packaged Theme */ +/******************************* + Rating +*******************************/ +/*------------------- + Types +--------------------*/ +/* Standard */ +/* Star */ +/* Heart */ +/*------------------- + States +--------------------*/ +/*------------------- + Variations +--------------------*/ +/* Site Theme */ +/******************************* + Site Overrides +*******************************/ +/******************************* + Mix-ins +*******************************/ +/*------------------ + Fonts +-------------------*/ +/*------------------ + Overrides +-------------------*/ +/* End Config */ +/******************************* + Rating +*******************************/ +.ui.rating, +.play-button.rating, +.download-button.rating { + display: inline-flex; + white-space: nowrap; + vertical-align: baseline; +} +.ui.rating:last-child, +.play-button.rating:last-child, +.download-button.rating:last-child { + margin-right: 0em; +} +/* Icon */ +.ui.rating .icon, +.play-button.rating .icon, +.download-button.rating .icon { + padding: 0em; + margin: 0em; + text-align: center; + font-weight: normal; + font-style: normal; + flex: 1 0 auto; + cursor: pointer; + width: 1.25em; + height: auto; + transition: opacity 0.1s ease, background 0.1s ease, text-shadow 0.1s ease, color 0.1s ease; +} +/******************************* + Types +*******************************/ +/*------------------- + Standard +--------------------*/ +/* Inactive Icon */ +.ui.rating .icon, +.play-button.rating .icon, +.download-button.rating .icon { + background: transparent; + color: rgba(0, 0, 0, 0.15); +} +/* Active Icon */ +.ui.rating .active.icon, +.play-button.rating .active.icon, +.download-button.rating .active.icon { + background: transparent; + color: rgba(0, 0, 0, 0.85); +} +/* Selected Icon */ +.ui.rating .icon.selected, +.ui.rating .icon.selected.active, +.play-button.rating .icon.selected, +.play-button.rating .icon.selected.active, +.download-button.rating .icon.selected, +.download-button.rating .icon.selected.active { + background: transparent; + color: rgba(0, 0, 0, 0.87); +} +/*------------------- + Star +--------------------*/ +/* Inactive */ +.ui.star.rating .icon, +.play-button.star.rating .icon, +.download-button.star.rating .icon { + width: 1.25em; + height: auto; + background: transparent; + color: rgba(0, 0, 0, 0.15); + text-shadow: none; +} +/* Active Star */ +.ui.star.rating .active.icon, +.play-button.star.rating .active.icon, +.download-button.star.rating .active.icon { + background: transparent !important; + color: #FFE623 !important; + text-shadow: 0px -1px 0px #DDC507, -1px 0px 0px #DDC507, 0px 1px 0px #DDC507, 1px 0px 0px #DDC507 !important; +} +/* Selected Star */ +.ui.star.rating .icon.selected, +.ui.star.rating .icon.selected.active, +.play-button.star.rating .icon.selected, +.play-button.star.rating .icon.selected.active, +.download-button.star.rating .icon.selected, +.download-button.star.rating .icon.selected.active { + background: transparent !important; + color: #FFCC00 !important; + text-shadow: 0px -1px 0px #E6A200, -1px 0px 0px #E6A200, 0px 1px 0px #E6A200, 1px 0px 0px #E6A200 !important; +} +/*------------------- + Heart +--------------------*/ +.ui.heart.rating .icon, +.play-button.heart.rating .icon, +.download-button.heart.rating .icon { + width: 1.4em; + height: auto; + background: transparent; + color: rgba(0, 0, 0, 0.15); + text-shadow: none !important; +} +/* Active Heart */ +.ui.heart.rating .active.icon, +.play-button.heart.rating .active.icon, +.download-button.heart.rating .active.icon { + background: transparent !important; + color: #FF6D75 !important; + text-shadow: 0px -1px 0px #CD0707, -1px 0px 0px #CD0707, 0px 1px 0px #CD0707, 1px 0px 0px #CD0707 !important; +} +/* Selected Heart */ +.ui.heart.rating .icon.selected, +.ui.heart.rating .icon.selected.active, +.play-button.heart.rating .icon.selected, +.play-button.heart.rating .icon.selected.active, +.download-button.heart.rating .icon.selected, +.download-button.heart.rating .icon.selected.active { + background: transparent !important; + color: #FF3000 !important; + text-shadow: 0px -1px 0px #AA0101, -1px 0px 0px #AA0101, 0px 1px 0px #AA0101, 1px 0px 0px #AA0101 !important; +} +/******************************* + States +*******************************/ +/*------------------- + Disabled +--------------------*/ +/* disabled rating */ +.ui.disabled.rating .icon, +.play-button.disabled.rating .icon, +.download-button.disabled.rating .icon { + cursor: default; +} +/*------------------- + User Interactive +--------------------*/ +/* Selected Rating */ +.ui.rating.selected .active.icon, +.play-button.rating.selected .active.icon, +.download-button.rating.selected .active.icon { + opacity: 1; +} +.ui.rating.selected .icon.selected, +.ui.rating .icon.selected, +.play-button.rating.selected .icon.selected, +.play-button.rating .icon.selected, +.download-button.rating.selected .icon.selected, +.download-button.rating .icon.selected { + opacity: 1; +} +/******************************* + Variations +*******************************/ +.ui.mini.rating, +.play-button.mini.rating, +.download-button.mini.rating { + font-size: 0.78571429rem; +} +.ui.tiny.rating, +.play-button.tiny.rating, +.download-button.tiny.rating { + font-size: 0.85714286rem; +} +.ui.small.rating, +.play-button.small.rating, +.download-button.small.rating { + font-size: 0.92857143rem; +} +.ui.rating, +.play-button.rating, +.download-button.rating { + font-size: 1rem; +} +.ui.large.rating, +.play-button.large.rating, +.download-button.large.rating { + font-size: 1.14285714rem; +} +.ui.huge.rating, +.play-button.huge.rating, +.download-button.huge.rating { + font-size: 1.42857143rem; +} +.ui.massive.rating, +.play-button.massive.rating, +.download-button.massive.rating { + font-size: 2rem; +} +/******************************* + Theme Overrides +*******************************/ +@font-face { + font-family: 'Rating'; + src: url(data:application/x-font-ttf;charset=utf-8;base64,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) format('truetype'), url(data:application/font-woff;charset=utf-8;base64,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kIiRi5MI5vdUFfcni4vCBYufhJx8mn2ZepJ3i3aLeoR9fX18g3qLdwiLVAUO+yaLshWL+AQFi5GNkY+RjpCQj5KNj42PjI+LCPfAiwWPi4+Kj4mRiZCHj4aPhY2Fi4UIi/wEBYuEiYWHhoeGhoeFiIiKhoqHi4GLhI6EkQj7EvcN+xL7DQWEhYOIgouHi4eLh42EjoaPiJCHkImRi5IIDov3XRWLko2Rj5Kltq+vuKW4pbuZvYu9i7t9uHG4ca9npWCPhI2Fi4SLhYmEh4RxYGdoXnAIXnFbflmLWYtbmF6lXqZnrnG2h5KJkouRCLCLFaRkq2yxdLF0tH+4i7iLtJexorGiq6qksm64Z61goZZ3kXaLdItnfm1ycnJybX9oiwhoi22XcqRypH6pi6+LopGglp9gdWdpbl4I9xiwFYuHjIiOiI6IjoqPi4+LjoyOjo2OjY6Lj4ubkJmXl5eWmZGbi4+LjoyOjo2OjY6LjwiLj4mOiY6IjYiNh4tzi3eCenp6eoJ3i3MIDov3XRWLko2Sj5GouK+utqW3pbqYvouci5yJnIgIm6cFjY6NjI+LjIuNi42JjYqOio+JjomOiY6KjomOiY6JjoqNioyKjomMiYuHi4qLiouLCHdnbVVjQ2NDbVV3Zwh9cgWJiIiJiIuJi36SdJiIjYmOi46LjY+UlJlvl3KcdJ90oHeie6WHkYmSi5IIsIsVqlq0Z711CKGzBXqXfpqCnoKdhp6LoIuikaCWn2B1Z2luXgj3GLAVi4eMiI6IjoiOio+Lj4uOjI6OjY6NjouPi5uQmZeXl5aZkZuLj4uOjI6OjY6NjouPCIuPiY6JjoiNiI2Hi3OLd4J6enp6gneLcwji+10VoLAFtI+wmK2hrqKnqKKvdq1wp2uhCJ2rBZ1/nHycepx6mHqWeY+EjYWLhIuEiYWHhIR/gH1+fG9qaXJmeWV5Y4Jhiwi53BXb9yQFjIKMg4uEi3CDc3x1fHV3fHOBCA6L1BWL90sFi5WPlJKSkpKTj5aLCNmLBZKPmJqepJaZlZeVlY+Qj5ONl42WjpeOmI+YkZWTk5OSk46Vi5uLmYiYhZiFlIGSfgiSfo55i3WLeYd5gXgIvosFn4uchJl8mn2Seot3i3qGfIJ9jYSLhYuEi3yIfoR+i4eLh4uHi3eGen99i3CDdnt8CHt8dYNwiwhmiwV5i3mNeY95kHeRc5N1k36Ph4sIOYsFgIuDjoSShJKHlIuVCLCdFYuGjIePiI+Hj4mQi5CLj42Pj46OjY+LkIuQiZCIjoePh42Gi4aLh4mHh4eIioaLhgjUeRWUiwWNi46Lj4qOi4+KjYqOi4+Kj4mQio6KjYqNio+Kj4mQio6KjIqzfquEpIsIrosFr4uemouri5CKkYqQkY6QkI6SjpKNkouSi5KJkoiRlZWQlouYi5CKkImRiZGJj4iOCJGMkI+PlI+UjZKLkouViJODk4SSgo+CiwgmiwWLlpCalJ6UnpCbi5aLnoiYhJSFlH+QeYuGhoeDiYCJf4h/h3+IfoWBg4KHh4SCgH4Ii4qIiYiGh4aIh4mIiIiIh4eGh4aHh4eHiIiHiIeHiIiHiIeKh4mIioiLCIKLi/tLBQ6L90sVi/dLBYuVj5OSk5KSk46WiwjdiwWPi5iPoZOkk6CRnZCdj56Nn4sIq4sFpougg5x8m3yTd4txCIuJBZd8kHuLd4uHi4eLh5J+jn6LfIuEi4SJhZR9kHyLeot3hHp8fH19eoR3iwhYiwWVeI95i3mLdIh6hH6EfoKBfoV+hX2He4uBi4OPg5KFkYaTh5SHlYiTipOKk4qTiJMIiZSIkYiPgZSBl4CaeKR+moSPCD2LBYCLg4+EkoSSh5SLlQiw9zgVi4aMh4+Ij4ePiZCLkIuPjY+Pjo6Nj4uQi5CJkIiOh4+HjYaLhouHiYeHh4iKhouGCNT7OBWUiwWOi46Kj4mPio+IjoiPh4+IjoePiI+Hj4aPho6HjoiNiI6Hj4aOho6Ii4qWfpKDj4YIk4ORgY5+j36OgI1/jYCPg5CGnYuXj5GUkpSOmYuei5aGmoKfgp6GmouWCPCLBZSLlI+SkpOTjpOLlYuSiZKHlIeUho+Fi46PjY+NkY2RjJCLkIuYhpaBlY6RjZKLkgiLkomSiJKIkoaQhY6MkIyRi5CLm4aXgpOBkn6Pe4sIZosFcotrhGN9iouIioaJh4qHiomKiYqIioaKh4mHioiKiYuHioiLh4qIi4mLCIKLi/tLBQ77lIv3txWLkpCPlo0I9yOgzPcWBY6SkI+RiwiL/BL7FUcFh4mHioiLh4uIjImOiY6KjouPi4yLjYyOCKP3IyPwBYaQiZCLjwgOi/fFFYu1l6yjoqOjrZe2i5aLl4mYh5eHloWWhJaElIWShZOE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) format('woff'); + font-weight: normal; + font-style: normal; +} +.ui.rating .icon, +.play-button.rating .icon, +.download-button.rating .icon { + font-family: 'Rating'; + line-height: 1; + backface-visibility: hidden; + font-weight: normal; + font-style: normal; + text-align: center; +} +/* Empty Star */ +.ui.rating .icon:before, +.play-button.rating .icon:before, +.download-button.rating .icon:before { + content: '\f005'; +} +/* Active Star */ +.ui.rating .active.icon:before, +.play-button.rating .active.icon:before, +.download-button.rating .active.icon:before { + content: '\f005'; +} +/*------------------- + Star +--------------------*/ +/* Unfilled Star */ +.ui.star.rating .icon:before, +.play-button.star.rating .icon:before, +.download-button.star.rating .icon:before { + content: '\f005'; +} +/* Active Star */ +.ui.star.rating .active.icon:before, +.play-button.star.rating .active.icon:before, +.download-button.star.rating .active.icon:before { + content: '\f005'; +} +/* Partial */ +.ui.star.rating .partial.icon:before, +.play-button.star.rating .partial.icon:before, +.download-button.star.rating .partial.icon:before { + content: '\f006'; +} +.ui.star.rating .partial.icon, +.play-button.star.rating .partial.icon, +.download-button.star.rating .partial.icon { + content: '\f005'; +} +/*------------------- + Heart +--------------------*/ +/* Empty Heart +.ui.heart.rating .icon:before { + content: '\f08a'; +} +*/ +.ui.heart.rating .icon:before, +.play-button.heart.rating .icon:before, +.download-button.heart.rating .icon:before { + content: '\f004'; +} +/* Active */ +.ui.heart.rating .active.icon:before, +.play-button.heart.rating .active.icon:before, +.download-button.heart.rating .active.icon:before { + content: '\f004'; +} +/******************************* + Site Overrides +*******************************/ +/*! + * # Semantic UI - Search + * http://github.com/semantic-org/semantic-ui/ + * + * + * Released under the MIT license + * http://opensource.org/licenses/MIT + * + */ +/******************************* + Theme +*******************************/ +/* + +████████╗██╗ ██╗███████╗███╗ ███╗███████╗███████╗ +╚══██╔══╝██║ ██║██╔════╝████╗ ████║██╔════╝██╔════╝ + ██║ ███████║█████╗ ██╔████╔██║█████╗ ███████╗ + ██║ ██╔══██║██╔══╝ ██║╚██╔╝██║██╔══╝ ╚════██║ + ██║ ██║ ██║███████╗██║ ╚═╝ ██║███████╗███████║ + ╚═╝ ╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝╚══════╝╚══════╝ + +*/ +/******************************* + Theme Selection +*******************************/ +/* To override a theme for an individual element + specify theme name below +*/ +/* Global */ +/* Elements */ +/* Collections */ +/* Modules */ +/* Views */ +/******************************* + Folders +*******************************/ +/* Path to theme packages */ +/* Path to site override folder */ +/******************************* + Import Theme +*******************************/ +/******************************* + Import Directives +*******************************/ +/*------------------ + Theme +-------------------*/ +/*-------------------- + Site Variables +---------------------*/ +/* Default site.variables */ +/******************************* + Site Settings +*******************************/ +/*------------------- + Fonts +--------------------*/ +/*------------------- + Base Sizes +--------------------*/ +/* This is the single variable that controls them all */ +/* The size of page text */ +/*------------------- + Border Radius +--------------------*/ +/* See Power-user section below + for explanation of @px variables +*/ +/*------------------- + Brand Colors +--------------------*/ +/*-------------- + Page Heading +---------------*/ +/*-------------- + Form Input +---------------*/ +/* This adjusts the default form input across all elements */ +/* Input Text Color */ +/* Line Height Default For Inputs in Browser (Descendors are 17px at 14px base em) */ +/*------------------- + Focused Input +--------------------*/ +/* Used on inputs, textarea etc */ +/* Used on dropdowns, other larger blocks */ +/*------------------- + Sizes +--------------------*/ +/* + Sizes are all expressed in terms of 14px/em (default em) + This ensures these "ratios" remain constant despite changes in EM +*/ +/*------------------- + Page +--------------------*/ +/*------------------- + Paragraph +--------------------*/ +/*------------------- + Links +--------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ +/*------------------- + Highlighted Text +--------------------*/ +/*------------------- + Loader +--------------------*/ +/*------------------- + Grid +--------------------*/ +/*------------------- + Transitions +--------------------*/ +/*------------------- + Breakpoints +--------------------*/ +/*------------------- + Site Colors +--------------------*/ +/*--- Colors ---*/ +/*--- Light Colors ---*/ +/*--- Neutrals ---*/ +/*--- Colored Backgrounds ---*/ +/*--- Colored Headers ---*/ +/*--- Colored Text ---*/ +/*--- Colored Border ---*/ +/*------------------- + Alpha Colors +--------------------*/ +/*------------------- + Accents +--------------------*/ +/* Differentiating Neutrals */ +/* Differentiating Layers */ +/******************************* + Power-User +*******************************/ +/*------------------- + Emotive Colors +--------------------*/ +/* Positive */ +/* Negative */ +/* Info */ +/* Warning */ +/*------------------- + Paths +--------------------*/ +/* For source only. Modified in gulp for dist */ +/*------------------- + Em Sizes +--------------------*/ +/* + This rounds @size values to the closest pixel then expresses that value in (r)em. + This ensures all size values round to exact pixels +*/ +/* em */ +/* rem */ +/*------------------- + Icons +--------------------*/ +/* Maximum Glyph Width of Icon */ +/*------------------- + Neutral Text +--------------------*/ +/*------------------- + Brand Colors +--------------------*/ +/*------------------- + Borders +--------------------*/ +/*------------------- + Derived Values +--------------------*/ +/* Loaders Position Offset */ +/* Rendered Scrollbar Width */ +/* Maximum Single Character Glyph Width, aka Capital "W" */ +/* Used to match floats with text */ +/* Header Spacing */ +/* Minimum Mobile Width */ +/* Positive / Negative Dupes */ +/* Responsive */ +/*------------------- + Exact Pixel Values +--------------------*/ +/* + These are used to specify exact pixel values in em + for things like borders that remain constantly + sized as emSize adjusts + + Since there are many more sizes than names for sizes, + these are named by their original pixel values. + +*/ +/* Columns */ +/******************************* + States +*******************************/ +/*------------------- + Disabled +--------------------*/ +/*------------------- + Hover +--------------------*/ +/*--- Shadows ---*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Focus +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Down (:active) +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Active +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/* Packaged site.variables */ +/******************************* + User Global Variables +*******************************/ +/*------------------- + Fonts +--------------------*/ +/*------------------- + Breakpoints +--------------------*/ +/* +@mobileBreakpoint : unit( (63 * @emSize), px); +@tabletBreakpoint : unit( (79 * @emSize), px); +@computerBreakpoint : unit( (91 * @emSize), px); +@largeMonitorBreakpoint : unit( (99 * @emSize), px); +@widescreenMonitorBreakpoint : unit( (119 * @emSize), px); +*/ +/******************************* + PXT Variables +*******************************/ +/*------------------- + Menu +--------------------*/ +/*------------------- + Layout +--------------------*/ +/*------------------- + Background +--------------------*/ +/*------------------- + Full screen +--------------------*/ +/*------------------- + Side Docs +--------------------*/ +/*------------------- + Editor +--------------------*/ +/* Component's site.variables */ +/******************************* + Site Settings +*******************************/ +/*------------------- + Fonts +--------------------*/ +/*------------------- + Base Sizes +--------------------*/ +/* This is the single variable that controls them all */ +/* The size of page text */ +/*------------------- + Border Radius +--------------------*/ +/* See Power-user section below + for explanation of @px variables +*/ +/*------------------- + Brand Colors +--------------------*/ +/*-------------- + Page Heading +---------------*/ +/*-------------- + Form Input +---------------*/ +/* This adjusts the default form input across all elements */ +/* Input Text Color */ +/* Line Height Default For Inputs in Browser (Descendors are 17px at 14px base em) */ +/*------------------- + Focused Input +--------------------*/ +/* Used on inputs, textarea etc */ +/* Used on dropdowns, other larger blocks */ +/*------------------- + Sizes +--------------------*/ +/* + Sizes are all expressed in terms of 14px/em (default em) + This ensures these "ratios" remain constant despite changes in EM +*/ +/*------------------- + Page +--------------------*/ +/*------------------- + Paragraph +--------------------*/ +/*------------------- + Links +--------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ +/*------------------- + Highlighted Text +--------------------*/ +/*------------------- + Loader +--------------------*/ +/*------------------- + Grid +--------------------*/ +/*------------------- + Transitions +--------------------*/ +/*------------------- + Breakpoints +--------------------*/ +/*------------------- + Site Colors +--------------------*/ +/*--- Colors ---*/ +/*--- Light Colors ---*/ +/*--- Neutrals ---*/ +/*--- Colored Backgrounds ---*/ +/*--- Colored Headers ---*/ +/*--- Colored Text ---*/ +/*--- Colored Border ---*/ +/*------------------- + Alpha Colors +--------------------*/ +/*------------------- + Accents +--------------------*/ +/* Differentiating Neutrals */ +/* Differentiating Layers */ +/******************************* + Power-User +*******************************/ +/*------------------- + Emotive Colors +--------------------*/ +/* Positive */ +/* Negative */ +/* Info */ +/* Warning */ +/*------------------- + Paths +--------------------*/ +/* For source only. Modified in gulp for dist */ +/*------------------- + Em Sizes +--------------------*/ +/* + This rounds @size values to the closest pixel then expresses that value in (r)em. + This ensures all size values round to exact pixels +*/ +/* em */ +/* rem */ +/*------------------- + Icons +--------------------*/ +/* Maximum Glyph Width of Icon */ +/*------------------- + Neutral Text +--------------------*/ +/*------------------- + Brand Colors +--------------------*/ +/*------------------- + Borders +--------------------*/ +/*------------------- + Derived Values +--------------------*/ +/* Loaders Position Offset */ +/* Rendered Scrollbar Width */ +/* Maximum Single Character Glyph Width, aka Capital "W" */ +/* Used to match floats with text */ +/* Header Spacing */ +/* Minimum Mobile Width */ +/* Positive / Negative Dupes */ +/* Responsive */ +/*------------------- + Exact Pixel Values +--------------------*/ +/* + These are used to specify exact pixel values in em + for things like borders that remain constantly + sized as emSize adjusts + + Since there are many more sizes than names for sizes, + these are named by their original pixel values. + +*/ +/* Columns */ +/******************************* + States +*******************************/ +/*------------------- + Disabled +--------------------*/ +/*------------------- + Hover +--------------------*/ +/*--- Shadows ---*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Focus +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Down (:active) +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Active +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/* Site theme site.variables */ +/******************************* + User Global Variables +*******************************/ +/*------------------- + Site Colors +--------------------*/ +/******************************* + PXT Overrides +*******************************/ +/*------------------- + Component Variables +---------------------*/ +/* Default */ +/******************************* + Search +*******************************/ +/* Search Prompt */ +/* Result Box */ +/* Result */ +/* Result Image */ +/* Result Content */ +/* Description */ +/* Price */ +/* Special Message */ +/* All Results Link */ +/******************************* + States +*******************************/ +/* Focus */ +/* Hover */ +/* Loading */ +/* Active Category */ +/* Active Result */ +/******************************* + Types +*******************************/ +/* Selection */ +/* Category */ +/* Packaged Theme */ +/******************************* + Search +*******************************/ +/* Search Prompt */ +/* Result Box */ +/* Result */ +/* Result Image */ +/* Result Content */ +/* Description */ +/* Price */ +/* Special Message */ +/* All Results Link */ +/******************************* + States +*******************************/ +/* Focus */ +/* Hover */ +/* Loading */ +/* Active Category */ +/* Active Result */ +/******************************* + Types +*******************************/ +/* Selection */ +/* Category */ +/* Site Theme */ +/******************************* + Site Overrides +*******************************/ +/******************************* + Mix-ins +*******************************/ +/*------------------ + Fonts +-------------------*/ +/*------------------ + Overrides +-------------------*/ +/* End Config */ +/******************************* + Search +*******************************/ +.ui.search, +.play-button.search, +.download-button.search { + position: relative; +} +.ui.search > .prompt, +.play-button.search > .prompt, +.download-button.search > .prompt { + margin: 0em; + outline: none; + -webkit-appearance: none; + -webkit-tap-highlight-color: rgba(255, 255, 255, 0); + text-shadow: none; + font-style: normal; + font-weight: normal; + line-height: 1.21428571em; + padding: 0.67857143em 1em; + font-size: 1em; + background: #FFFFFF; + border: 1px solid rgba(34, 36, 38, 0.15); + color: rgba(0, 0, 0, 0.87); + box-shadow: 0em 0em 0em 0em transparent inset; + transition: background-color 0.1s ease, color 0.1s ease, box-shadow 0.1s ease, border-color 0.1s ease; +} +.ui.search .prompt, +.play-button.search .prompt, +.download-button.search .prompt { + border-radius: 500rem; +} +/*-------------- + Icon +---------------*/ +.ui.search .prompt ~ .search.icon, +.play-button.search .prompt ~ .search.icon, +.download-button.search .prompt ~ .search.icon { + cursor: pointer; +} +/*-------------- + Results +---------------*/ +.ui.search > .results, +.play-button.search > .results, +.download-button.search > .results { + display: none; + position: absolute; + top: 100%; + left: 0%; + transform-origin: center top; + white-space: normal; + background: #FFFFFF; + margin-top: 0.5em; + width: 18em; + border-radius: 0.28571429rem; + box-shadow: 0px 2px 4px 0px rgba(34, 36, 38, 0.12), 0px 2px 10px 0px rgba(34, 36, 38, 0.15); + border: 1px solid #D4D4D5; + z-index: 998; +} +.ui.search > .results > :first-child, +.play-button.search > .results > :first-child, +.download-button.search > .results > :first-child { + border-radius: 0.28571429rem 0.28571429rem 0em 0em; +} +.ui.search > .results > :last-child, +.play-button.search > .results > :last-child, +.download-button.search > .results > :last-child { + border-radius: 0em 0em 0.28571429rem 0.28571429rem; +} +/*-------------- + Result +---------------*/ +.ui.search > .results .result, +.play-button.search > .results .result, +.download-button.search > .results .result { + cursor: pointer; + display: block; + overflow: hidden; + font-size: 1em; + padding: 0.85714286em 1.14285714em; + color: rgba(0, 0, 0, 0.87); + line-height: 1.33; + border-bottom: 1px solid rgba(34, 36, 38, 0.1); +} +.ui.search > .results .result:last-child, +.play-button.search > .results .result:last-child, +.download-button.search > .results .result:last-child { + border-bottom: none !important; +} +/* Image */ +.ui.search > .results .result .image, +.play-button.search > .results .result .image, +.download-button.search > .results .result .image { + float: right; + overflow: hidden; + background: none; + width: 5em; + height: 3em; + border-radius: 0.25em; +} +.ui.search > .results .result .image img, +.play-button.search > .results .result .image img, +.download-button.search > .results .result .image img { + display: block; + width: auto; + height: 100%; +} +/*-------------- + Info +---------------*/ +.ui.search > .results .result .image + .content, +.play-button.search > .results .result .image + .content, +.download-button.search > .results .result .image + .content { + margin: 0em 6em 0em 0em; +} +.ui.search > .results .result .title, +.play-button.search > .results .result .title, +.download-button.search > .results .result .title { + margin: -0.14285714em 0em 0em; + font-family: 'Roboto Mono', 'Helvetica Neue', Arial, Helvetica, sans-serif; + font-weight: bold; + font-size: 1em; + color: rgba(0, 0, 0, 0.85); +} +.ui.search > .results .result .description, +.play-button.search > .results .result .description, +.download-button.search > .results .result .description { + margin-top: 0; + font-size: 0.92857143em; + color: rgba(0, 0, 0, 0.4); +} +.ui.search > .results .result .price, +.play-button.search > .results .result .price, +.download-button.search > .results .result .price { + float: right; + color: #3FC863; +} +/*-------------- + Message +---------------*/ +.ui.search > .results > .message, +.play-button.search > .results > .message, +.download-button.search > .results > .message { + padding: 1em 1em; +} +.ui.search > .results > .message .header, +.play-button.search > .results > .message .header, +.download-button.search > .results > .message .header { + font-family: 'Roboto Mono', 'Helvetica Neue', Arial, Helvetica, sans-serif; + font-size: 1rem; + font-weight: bold; + color: rgba(0, 0, 0, 0.87); +} +.ui.search > .results > .message .description, +.play-button.search > .results > .message .description, +.download-button.search > .results > .message .description { + margin-top: 0.25rem; + font-size: 1em; + color: rgba(0, 0, 0, 0.87); +} +/* View All Results */ +.ui.search > .results > .action, +.play-button.search > .results > .action, +.download-button.search > .results > .action { + display: block; + border-top: none; + background: #F3F4F5; + padding: 0.92857143em 1em; + color: rgba(0, 0, 0, 0.87); + font-weight: bold; + text-align: center; +} +/******************************* + States +*******************************/ +/*-------------------- + Focus +---------------------*/ +.ui.search > .prompt:focus, +.play-button.search > .prompt:focus, +.download-button.search > .prompt:focus { + border-color: rgba(34, 36, 38, 0.35); + background: #FFFFFF; + color: rgba(0, 0, 0, 0.95); +} +/*-------------------- + Loading +---------------------*/ +.ui.loading.search .input > i.icon:before, +.play-button.loading.search .input > i.icon:before, +.download-button.loading.search .input > i.icon:before { + position: absolute; + content: ''; + top: 50%; + left: 50%; + margin: -0.64285714em 0em 0em -0.64285714em; + width: 1.28571429em; + height: 1.28571429em; + border-radius: 500rem; + border: 0.2em solid rgba(0, 0, 0, 0.1); +} +.ui.loading.search .input > i.icon:after, +.play-button.loading.search .input > i.icon:after, +.download-button.loading.search .input > i.icon:after { + position: absolute; + content: ''; + top: 50%; + left: 50%; + margin: -0.64285714em 0em 0em -0.64285714em; + width: 1.28571429em; + height: 1.28571429em; + animation: button-spin 0.6s linear; + animation-iteration-count: infinite; + border-radius: 500rem; + border-color: #42495F transparent transparent; + border-style: solid; + border-width: 0.2em; + box-shadow: 0px 0px 0px 1px transparent; +} +/*-------------- + Hover +---------------*/ +.ui.search > .results .result:hover, +.ui.category.search > .results .category .result:hover, +.play-button.search > .results .result:hover, +.play-button.category.search > .results .category .result:hover, +.download-button.search > .results .result:hover, +.download-button.category.search > .results .category .result:hover { + background: #F9FAFB; +} +.ui.search .action:hover, +.play-button.search .action:hover, +.download-button.search .action:hover { + background: #E0E0E0; +} +/*-------------- + Active +---------------*/ +.ui.category.search > .results .category.active, +.play-button.category.search > .results .category.active, +.download-button.category.search > .results .category.active { + background: #F3F4F5; +} +.ui.category.search > .results .category.active > .name, +.play-button.category.search > .results .category.active > .name, +.download-button.category.search > .results .category.active > .name { + color: rgba(0, 0, 0, 0.87); +} +.ui.search > .results .result.active, +.ui.category.search > .results .category .result.active, +.play-button.search > .results .result.active, +.play-button.category.search > .results .category .result.active, +.download-button.search > .results .result.active, +.download-button.category.search > .results .category .result.active { + position: relative; + border-left-color: rgba(34, 36, 38, 0.1); + background: #F3F4F5; + box-shadow: none; +} +.ui.search > .results .result.active .title, +.play-button.search > .results .result.active .title, +.download-button.search > .results .result.active .title { + color: rgba(0, 0, 0, 0.85); +} +.ui.search > .results .result.active .description, +.play-button.search > .results .result.active .description, +.download-button.search > .results .result.active .description { + color: rgba(0, 0, 0, 0.85); +} +/******************************* + Types +*******************************/ +/*-------------- + Selection +---------------*/ +.ui.search.selection .prompt, +.play-button.search.selection .prompt, +.download-button.search.selection .prompt { + border-radius: 0.28571429rem; +} +/* Remove input */ +.ui.search.selection > .icon.input > .remove.icon, +.play-button.search.selection > .icon.input > .remove.icon, +.download-button.search.selection > .icon.input > .remove.icon { + pointer-events: none; + position: absolute; + left: auto; + opacity: 0; + color: ''; + top: 0em; + right: 0em; + transition: color 0.1s ease, opacity 0.1s ease; +} +.ui.search.selection > .icon.input > .active.remove.icon, +.play-button.search.selection > .icon.input > .active.remove.icon, +.download-button.search.selection > .icon.input > .active.remove.icon { + cursor: pointer; + opacity: 0.8; + pointer-events: auto; +} +.ui.search.selection > .icon.input:not([class*="left icon"]) > .icon ~ .remove.icon, +.play-button.search.selection > .icon.input:not([class*="left icon"]) > .icon ~ .remove.icon, +.download-button.search.selection > .icon.input:not([class*="left icon"]) > .icon ~ .remove.icon { + right: 1.85714em; +} +.ui.search.selection > .icon.input > .remove.icon:hover, +.play-button.search.selection > .icon.input > .remove.icon:hover, +.download-button.search.selection > .icon.input > .remove.icon:hover { + opacity: 1; + color: #E81123; +} +/*-------------- + Category +---------------*/ +.ui.category.search .results, +.play-button.category.search .results, +.download-button.category.search .results { + width: 28em; +} +/* Category */ +.ui.category.search > .results .category, +.play-button.category.search > .results .category, +.download-button.category.search > .results .category { + background: #F3F4F5; + box-shadow: none; + border-bottom: 1px solid rgba(34, 36, 38, 0.1); + transition: background 0.1s ease, border-color 0.1s ease; +} +/* Last Category */ +.ui.category.search > .results .category:last-child, +.play-button.category.search > .results .category:last-child, +.download-button.category.search > .results .category:last-child { + border-bottom: none; +} +/* First / Last */ +.ui.category.search > .results .category:first-child .name + .result, +.play-button.category.search > .results .category:first-child .name + .result, +.download-button.category.search > .results .category:first-child .name + .result { + border-radius: 0em 0.28571429rem 0em 0em; +} +.ui.category.search > .results .category:last-child .result:last-child, +.play-button.category.search > .results .category:last-child .result:last-child, +.download-button.category.search > .results .category:last-child .result:last-child { + border-radius: 0em 0em 0.28571429rem 0em; +} +/* Category Result */ +.ui.category.search > .results .category .result, +.play-button.category.search > .results .category .result, +.download-button.category.search > .results .category .result { + background: #FFFFFF; + margin-left: 100px; + border-left: 1px solid rgba(34, 36, 38, 0.15); + border-bottom: 1px solid rgba(34, 36, 38, 0.1); + transition: background 0.1s ease, border-color 0.1s ease; + padding: 0.85714286em 1.14285714em; +} +.ui.category.search > .results .category:last-child .result:last-child, +.play-button.category.search > .results .category:last-child .result:last-child, +.download-button.category.search > .results .category:last-child .result:last-child { + border-bottom: none; +} +/* Category Result Name */ +.ui.category.search > .results .category > .name, +.play-button.category.search > .results .category > .name, +.download-button.category.search > .results .category > .name { + width: 100px; + background: transparent; + font-family: 'Roboto Mono', 'Helvetica Neue', Arial, Helvetica, sans-serif; + font-size: 1em; + float: 1em; + float: left; + padding: 0.4em 1em; + font-weight: bold; + color: rgba(0, 0, 0, 0.4); +} +/******************************* + Variations +*******************************/ +/*------------------- + Left / Right +--------------------*/ +.ui[class*="left aligned"].search > .results, +.play-button[class*="left aligned"].search > .results, +.download-button[class*="left aligned"].search > .results { + right: auto; + left: 0%; +} +.ui[class*="right aligned"].search > .results, +.play-button[class*="right aligned"].search > .results, +.download-button[class*="right aligned"].search > .results { + right: 0%; + left: auto; +} +/*-------------- + Fluid +---------------*/ +.ui.fluid.search .results, +.play-button.fluid.search .results, +.download-button.fluid.search .results { + width: 100%; +} +/*-------------- + Sizes +---------------*/ +.ui.mini.search, +.play-button.mini.search, +.download-button.mini.search { + font-size: 0.78571429em; +} +.ui.small.search, +.play-button.small.search, +.download-button.small.search { + font-size: 0.92857143em; +} +.ui.search, +.play-button.search, +.download-button.search { + font-size: 1em; +} +.ui.large.search, +.play-button.large.search, +.download-button.large.search { + font-size: 1.14285714em; +} +.ui.big.search, +.play-button.big.search, +.download-button.big.search { + font-size: 1.28571429em; +} +.ui.huge.search, +.play-button.huge.search, +.download-button.huge.search { + font-size: 1.42857143em; +} +.ui.massive.search, +.play-button.massive.search, +.download-button.massive.search { + font-size: 1.71428571em; +} +/******************************* + Theme Overrides +*******************************/ +/******************************* + Site Overrides +*******************************/ +/*! + * # Semantic UI - Shape + * http://github.com/semantic-org/semantic-ui/ + * + * + * Released under the MIT license + * http://opensource.org/licenses/MIT + * + */ +/******************************* + Theme +*******************************/ +/* + +████████╗██╗ ██╗███████╗███╗ ███╗███████╗███████╗ +╚══██╔══╝██║ ██║██╔════╝████╗ ████║██╔════╝██╔════╝ + ██║ ███████║█████╗ ██╔████╔██║█████╗ ███████╗ + ██║ ██╔══██║██╔══╝ ██║╚██╔╝██║██╔══╝ ╚════██║ + ██║ ██║ ██║███████╗██║ ╚═╝ ██║███████╗███████║ + ╚═╝ ╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝╚══════╝╚══════╝ + +*/ +/******************************* + Theme Selection +*******************************/ +/* To override a theme for an individual element + specify theme name below +*/ +/* Global */ +/* Elements */ +/* Collections */ +/* Modules */ +/* Views */ +/******************************* + Folders +*******************************/ +/* Path to theme packages */ +/* Path to site override folder */ +/******************************* + Import Theme +*******************************/ +/******************************* + Import Directives +*******************************/ +/*------------------ + Theme +-------------------*/ +/*-------------------- + Site Variables +---------------------*/ +/* Default site.variables */ +/******************************* + Site Settings +*******************************/ +/*------------------- + Fonts +--------------------*/ +/*------------------- + Base Sizes +--------------------*/ +/* This is the single variable that controls them all */ +/* The size of page text */ +/*------------------- + Border Radius +--------------------*/ +/* See Power-user section below + for explanation of @px variables +*/ +/*------------------- + Brand Colors +--------------------*/ +/*-------------- + Page Heading +---------------*/ +/*-------------- + Form Input +---------------*/ +/* This adjusts the default form input across all elements */ +/* Input Text Color */ +/* Line Height Default For Inputs in Browser (Descendors are 17px at 14px base em) */ +/*------------------- + Focused Input +--------------------*/ +/* Used on inputs, textarea etc */ +/* Used on dropdowns, other larger blocks */ +/*------------------- + Sizes +--------------------*/ +/* + Sizes are all expressed in terms of 14px/em (default em) + This ensures these "ratios" remain constant despite changes in EM +*/ +/*------------------- + Page +--------------------*/ +/*------------------- + Paragraph +--------------------*/ +/*------------------- + Links +--------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ +/*------------------- + Highlighted Text +--------------------*/ +/*------------------- + Loader +--------------------*/ +/*------------------- + Grid +--------------------*/ +/*------------------- + Transitions +--------------------*/ +/*------------------- + Breakpoints +--------------------*/ +/*------------------- + Site Colors +--------------------*/ +/*--- Colors ---*/ +/*--- Light Colors ---*/ +/*--- Neutrals ---*/ +/*--- Colored Backgrounds ---*/ +/*--- Colored Headers ---*/ +/*--- Colored Text ---*/ +/*--- Colored Border ---*/ +/*------------------- + Alpha Colors +--------------------*/ +/*------------------- + Accents +--------------------*/ +/* Differentiating Neutrals */ +/* Differentiating Layers */ +/******************************* + Power-User +*******************************/ +/*------------------- + Emotive Colors +--------------------*/ +/* Positive */ +/* Negative */ +/* Info */ +/* Warning */ +/*------------------- + Paths +--------------------*/ +/* For source only. Modified in gulp for dist */ +/*------------------- + Em Sizes +--------------------*/ +/* + This rounds @size values to the closest pixel then expresses that value in (r)em. + This ensures all size values round to exact pixels +*/ +/* em */ +/* rem */ +/*------------------- + Icons +--------------------*/ +/* Maximum Glyph Width of Icon */ +/*------------------- + Neutral Text +--------------------*/ +/*------------------- + Brand Colors +--------------------*/ +/*------------------- + Borders +--------------------*/ +/*------------------- + Derived Values +--------------------*/ +/* Loaders Position Offset */ +/* Rendered Scrollbar Width */ +/* Maximum Single Character Glyph Width, aka Capital "W" */ +/* Used to match floats with text */ +/* Header Spacing */ +/* Minimum Mobile Width */ +/* Positive / Negative Dupes */ +/* Responsive */ +/*------------------- + Exact Pixel Values +--------------------*/ +/* + These are used to specify exact pixel values in em + for things like borders that remain constantly + sized as emSize adjusts + + Since there are many more sizes than names for sizes, + these are named by their original pixel values. + +*/ +/* Columns */ +/******************************* + States +*******************************/ +/*------------------- + Disabled +--------------------*/ +/*------------------- + Hover +--------------------*/ +/*--- Shadows ---*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Focus +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Down (:active) +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Active +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/* Packaged site.variables */ +/******************************* + User Global Variables +*******************************/ +/*------------------- + Fonts +--------------------*/ +/*------------------- + Breakpoints +--------------------*/ +/* +@mobileBreakpoint : unit( (63 * @emSize), px); +@tabletBreakpoint : unit( (79 * @emSize), px); +@computerBreakpoint : unit( (91 * @emSize), px); +@largeMonitorBreakpoint : unit( (99 * @emSize), px); +@widescreenMonitorBreakpoint : unit( (119 * @emSize), px); +*/ +/******************************* + PXT Variables +*******************************/ +/*------------------- + Menu +--------------------*/ +/*------------------- + Layout +--------------------*/ +/*------------------- + Background +--------------------*/ +/*------------------- + Full screen +--------------------*/ +/*------------------- + Side Docs +--------------------*/ +/*------------------- + Editor +--------------------*/ +/* Component's site.variables */ +/******************************* + Site Settings +*******************************/ +/*------------------- + Fonts +--------------------*/ +/*------------------- + Base Sizes +--------------------*/ +/* This is the single variable that controls them all */ +/* The size of page text */ +/*------------------- + Border Radius +--------------------*/ +/* See Power-user section below + for explanation of @px variables +*/ +/*------------------- + Brand Colors +--------------------*/ +/*-------------- + Page Heading +---------------*/ +/*-------------- + Form Input +---------------*/ +/* This adjusts the default form input across all elements */ +/* Input Text Color */ +/* Line Height Default For Inputs in Browser (Descendors are 17px at 14px base em) */ +/*------------------- + Focused Input +--------------------*/ +/* Used on inputs, textarea etc */ +/* Used on dropdowns, other larger blocks */ +/*------------------- + Sizes +--------------------*/ +/* + Sizes are all expressed in terms of 14px/em (default em) + This ensures these "ratios" remain constant despite changes in EM +*/ +/*------------------- + Page +--------------------*/ +/*------------------- + Paragraph +--------------------*/ +/*------------------- + Links +--------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ +/*------------------- + Highlighted Text +--------------------*/ +/*------------------- + Loader +--------------------*/ +/*------------------- + Grid +--------------------*/ +/*------------------- + Transitions +--------------------*/ +/*------------------- + Breakpoints +--------------------*/ +/*------------------- + Site Colors +--------------------*/ +/*--- Colors ---*/ +/*--- Light Colors ---*/ +/*--- Neutrals ---*/ +/*--- Colored Backgrounds ---*/ +/*--- Colored Headers ---*/ +/*--- Colored Text ---*/ +/*--- Colored Border ---*/ +/*------------------- + Alpha Colors +--------------------*/ +/*------------------- + Accents +--------------------*/ +/* Differentiating Neutrals */ +/* Differentiating Layers */ +/******************************* + Power-User +*******************************/ +/*------------------- + Emotive Colors +--------------------*/ +/* Positive */ +/* Negative */ +/* Info */ +/* Warning */ +/*------------------- + Paths +--------------------*/ +/* For source only. Modified in gulp for dist */ +/*------------------- + Em Sizes +--------------------*/ +/* + This rounds @size values to the closest pixel then expresses that value in (r)em. + This ensures all size values round to exact pixels +*/ +/* em */ +/* rem */ +/*------------------- + Icons +--------------------*/ +/* Maximum Glyph Width of Icon */ +/*------------------- + Neutral Text +--------------------*/ +/*------------------- + Brand Colors +--------------------*/ +/*------------------- + Borders +--------------------*/ +/*------------------- + Derived Values +--------------------*/ +/* Loaders Position Offset */ +/* Rendered Scrollbar Width */ +/* Maximum Single Character Glyph Width, aka Capital "W" */ +/* Used to match floats with text */ +/* Header Spacing */ +/* Minimum Mobile Width */ +/* Positive / Negative Dupes */ +/* Responsive */ +/*------------------- + Exact Pixel Values +--------------------*/ +/* + These are used to specify exact pixel values in em + for things like borders that remain constantly + sized as emSize adjusts + + Since there are many more sizes than names for sizes, + these are named by their original pixel values. + +*/ +/* Columns */ +/******************************* + States +*******************************/ +/*------------------- + Disabled +--------------------*/ +/*------------------- + Hover +--------------------*/ +/*--- Shadows ---*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Focus +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Down (:active) +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Active +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/* Site theme site.variables */ +/******************************* + User Global Variables +*******************************/ +/*------------------- + Site Colors +--------------------*/ +/******************************* + PXT Overrides +*******************************/ +/*------------------- + Component Variables +---------------------*/ +/* Default */ +/******************************* + Shape +*******************************/ +/* Animating */ +/* Side */ +/*-------------- + Types +---------------*/ +/* Cube */ +/* Packaged Theme */ +/******************************* + Shape +*******************************/ +/* Animating */ +/* Side */ +/*-------------- + Types +---------------*/ +/* Cube */ +/* Site Theme */ +/******************************* + User Variable Overrides +*******************************/ +/******************************* + Mix-ins +*******************************/ +/*------------------ + Fonts +-------------------*/ +/*------------------ + Overrides +-------------------*/ +/* End Config */ +/******************************* + Shape +*******************************/ +.ui.shape, +.play-button.shape, +.download-button.shape { + position: relative; + vertical-align: top; + display: inline-block; + perspective: 2000px; + transition: transform 0.6s ease-in-out, left 0.6s ease-in-out, width 0.6s ease-in-out, height 0.6s ease-in-out; +} +.ui.shape .sides, +.play-button.shape .sides, +.download-button.shape .sides { + transform-style: preserve-3d; +} +.ui.shape .side, +.play-button.shape .side, +.download-button.shape .side { + opacity: 1; + width: 100%; + margin: 0em !important; + backface-visibility: hidden; +} +.ui.shape .side, +.play-button.shape .side, +.download-button.shape .side { + display: none; +} +.ui.shape .side *, +.play-button.shape .side *, +.download-button.shape .side * { + backface-visibility: visible !important; +} +/******************************* + Types +*******************************/ +.ui.cube.shape .side, +.play-button.cube.shape .side, +.download-button.cube.shape .side { + min-width: 15em; + height: 15em; + padding: 2em; + background-color: #E6E6E6; + color: rgba(0, 0, 0, 0.87); + box-shadow: 0px 0px 2px rgba(0, 0, 0, 0.3); +} +.ui.cube.shape .side > .content, +.play-button.cube.shape .side > .content, +.download-button.cube.shape .side > .content { + width: 100%; + height: 100%; + display: table; + text-align: center; + user-select: text; +} +.ui.cube.shape .side > .content > div, +.play-button.cube.shape .side > .content > div, +.download-button.cube.shape .side > .content > div { + display: table-cell; + vertical-align: middle; + font-size: 2em; +} +/******************************* + Variations +*******************************/ +.ui.text.shape.animating .sides, +.play-button.text.shape.animating .sides, +.download-button.text.shape.animating .sides { + position: static; +} +.ui.text.shape .side, +.play-button.text.shape .side, +.download-button.text.shape .side { + white-space: nowrap; +} +.ui.text.shape .side > *, +.play-button.text.shape .side > *, +.download-button.text.shape .side > * { + white-space: normal; +} +/******************************* + States +*******************************/ +/*-------------- + Loading +---------------*/ +.ui.loading.shape, +.play-button.loading.shape, +.download-button.loading.shape { + position: absolute; + top: -9999px; + left: -9999px; +} +/*-------------- + Animating +---------------*/ +.ui.shape .animating.side, +.play-button.shape .animating.side, +.download-button.shape .animating.side { + position: absolute; + top: 0px; + left: 0px; + display: block; + z-index: 100; +} +.ui.shape .hidden.side, +.play-button.shape .hidden.side, +.download-button.shape .hidden.side { + opacity: 0.6; +} +/*-------------- + CSS +---------------*/ +.ui.shape.animating .sides, +.play-button.shape.animating .sides, +.download-button.shape.animating .sides { + position: absolute; +} +.ui.shape.animating .sides, +.play-button.shape.animating .sides, +.download-button.shape.animating .sides { + transition: transform 0.6s ease-in-out, left 0.6s ease-in-out, width 0.6s ease-in-out, height 0.6s ease-in-out; +} +.ui.shape.animating .side, +.play-button.shape.animating .side, +.download-button.shape.animating .side { + transition: opacity 0.6s ease-in-out; +} +/*-------------- + Active +---------------*/ +.ui.shape .active.side, +.play-button.shape .active.side, +.download-button.shape .active.side { + display: block; +} +/******************************* + Theme Overrides +*******************************/ +/******************************* + User Overrides +*******************************/ +/*! + * # Semantic UI - Sidebar + * http://github.com/semantic-org/semantic-ui/ + * + * + * Released under the MIT license + * http://opensource.org/licenses/MIT + * + */ +/******************************* + Theme +*******************************/ +/* + +████████╗██╗ ██╗███████╗███╗ ███╗███████╗███████╗ +╚══██╔══╝██║ ██║██╔════╝████╗ ████║██╔════╝██╔════╝ + ██║ ███████║█████╗ ██╔████╔██║█████╗ ███████╗ + ██║ ██╔══██║██╔══╝ ██║╚██╔╝██║██╔══╝ ╚════██║ + ██║ ██║ ██║███████╗██║ ╚═╝ ██║███████╗███████║ + ╚═╝ ╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝╚══════╝╚══════╝ + +*/ +/******************************* + Theme Selection +*******************************/ +/* To override a theme for an individual element + specify theme name below +*/ +/* Global */ +/* Elements */ +/* Collections */ +/* Modules */ +/* Views */ +/******************************* + Folders +*******************************/ +/* Path to theme packages */ +/* Path to site override folder */ +/******************************* + Import Theme +*******************************/ +/******************************* + Import Directives +*******************************/ +/*------------------ + Theme +-------------------*/ +/*-------------------- + Site Variables +---------------------*/ +/* Default site.variables */ +/******************************* + Site Settings +*******************************/ +/*------------------- + Fonts +--------------------*/ +/*------------------- + Base Sizes +--------------------*/ +/* This is the single variable that controls them all */ +/* The size of page text */ +/*------------------- + Border Radius +--------------------*/ +/* See Power-user section below + for explanation of @px variables +*/ +/*------------------- + Brand Colors +--------------------*/ +/*-------------- + Page Heading +---------------*/ +/*-------------- + Form Input +---------------*/ +/* This adjusts the default form input across all elements */ +/* Input Text Color */ +/* Line Height Default For Inputs in Browser (Descendors are 17px at 14px base em) */ +/*------------------- + Focused Input +--------------------*/ +/* Used on inputs, textarea etc */ +/* Used on dropdowns, other larger blocks */ +/*------------------- + Sizes +--------------------*/ +/* + Sizes are all expressed in terms of 14px/em (default em) + This ensures these "ratios" remain constant despite changes in EM +*/ +/*------------------- + Page +--------------------*/ +/*------------------- + Paragraph +--------------------*/ +/*------------------- + Links +--------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ +/*------------------- + Highlighted Text +--------------------*/ +/*------------------- + Loader +--------------------*/ +/*------------------- + Grid +--------------------*/ +/*------------------- + Transitions +--------------------*/ +/*------------------- + Breakpoints +--------------------*/ +/*------------------- + Site Colors +--------------------*/ +/*--- Colors ---*/ +/*--- Light Colors ---*/ +/*--- Neutrals ---*/ +/*--- Colored Backgrounds ---*/ +/*--- Colored Headers ---*/ +/*--- Colored Text ---*/ +/*--- Colored Border ---*/ +/*------------------- + Alpha Colors +--------------------*/ +/*------------------- + Accents +--------------------*/ +/* Differentiating Neutrals */ +/* Differentiating Layers */ +/******************************* + Power-User +*******************************/ +/*------------------- + Emotive Colors +--------------------*/ +/* Positive */ +/* Negative */ +/* Info */ +/* Warning */ +/*------------------- + Paths +--------------------*/ +/* For source only. Modified in gulp for dist */ +/*------------------- + Em Sizes +--------------------*/ +/* + This rounds @size values to the closest pixel then expresses that value in (r)em. + This ensures all size values round to exact pixels +*/ +/* em */ +/* rem */ +/*------------------- + Icons +--------------------*/ +/* Maximum Glyph Width of Icon */ +/*------------------- + Neutral Text +--------------------*/ +/*------------------- + Brand Colors +--------------------*/ +/*------------------- + Borders +--------------------*/ +/*------------------- + Derived Values +--------------------*/ +/* Loaders Position Offset */ +/* Rendered Scrollbar Width */ +/* Maximum Single Character Glyph Width, aka Capital "W" */ +/* Used to match floats with text */ +/* Header Spacing */ +/* Minimum Mobile Width */ +/* Positive / Negative Dupes */ +/* Responsive */ +/*------------------- + Exact Pixel Values +--------------------*/ +/* + These are used to specify exact pixel values in em + for things like borders that remain constantly + sized as emSize adjusts + + Since there are many more sizes than names for sizes, + these are named by their original pixel values. + +*/ +/* Columns */ +/******************************* + States +*******************************/ +/*------------------- + Disabled +--------------------*/ +/*------------------- + Hover +--------------------*/ +/*--- Shadows ---*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Focus +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Down (:active) +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Active +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/* Packaged site.variables */ +/******************************* + User Global Variables +*******************************/ +/*------------------- + Fonts +--------------------*/ +/*------------------- + Breakpoints +--------------------*/ +/* +@mobileBreakpoint : unit( (63 * @emSize), px); +@tabletBreakpoint : unit( (79 * @emSize), px); +@computerBreakpoint : unit( (91 * @emSize), px); +@largeMonitorBreakpoint : unit( (99 * @emSize), px); +@widescreenMonitorBreakpoint : unit( (119 * @emSize), px); +*/ +/******************************* + PXT Variables +*******************************/ +/*------------------- + Menu +--------------------*/ +/*------------------- + Layout +--------------------*/ +/*------------------- + Background +--------------------*/ +/*------------------- + Full screen +--------------------*/ +/*------------------- + Side Docs +--------------------*/ +/*------------------- + Editor +--------------------*/ +/* Component's site.variables */ +/******************************* + Site Settings +*******************************/ +/*------------------- + Fonts +--------------------*/ +/*------------------- + Base Sizes +--------------------*/ +/* This is the single variable that controls them all */ +/* The size of page text */ +/*------------------- + Border Radius +--------------------*/ +/* See Power-user section below + for explanation of @px variables +*/ +/*------------------- + Brand Colors +--------------------*/ +/*-------------- + Page Heading +---------------*/ +/*-------------- + Form Input +---------------*/ +/* This adjusts the default form input across all elements */ +/* Input Text Color */ +/* Line Height Default For Inputs in Browser (Descendors are 17px at 14px base em) */ +/*------------------- + Focused Input +--------------------*/ +/* Used on inputs, textarea etc */ +/* Used on dropdowns, other larger blocks */ +/*------------------- + Sizes +--------------------*/ +/* + Sizes are all expressed in terms of 14px/em (default em) + This ensures these "ratios" remain constant despite changes in EM +*/ +/*------------------- + Page +--------------------*/ +/*------------------- + Paragraph +--------------------*/ +/*------------------- + Links +--------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ +/*------------------- + Highlighted Text +--------------------*/ +/*------------------- + Loader +--------------------*/ +/*------------------- + Grid +--------------------*/ +/*------------------- + Transitions +--------------------*/ +/*------------------- + Breakpoints +--------------------*/ +/*------------------- + Site Colors +--------------------*/ +/*--- Colors ---*/ +/*--- Light Colors ---*/ +/*--- Neutrals ---*/ +/*--- Colored Backgrounds ---*/ +/*--- Colored Headers ---*/ +/*--- Colored Text ---*/ +/*--- Colored Border ---*/ +/*------------------- + Alpha Colors +--------------------*/ +/*------------------- + Accents +--------------------*/ +/* Differentiating Neutrals */ +/* Differentiating Layers */ +/******************************* + Power-User +*******************************/ +/*------------------- + Emotive Colors +--------------------*/ +/* Positive */ +/* Negative */ +/* Info */ +/* Warning */ +/*------------------- + Paths +--------------------*/ +/* For source only. Modified in gulp for dist */ +/*------------------- + Em Sizes +--------------------*/ +/* + This rounds @size values to the closest pixel then expresses that value in (r)em. + This ensures all size values round to exact pixels +*/ +/* em */ +/* rem */ +/*------------------- + Icons +--------------------*/ +/* Maximum Glyph Width of Icon */ +/*------------------- + Neutral Text +--------------------*/ +/*------------------- + Brand Colors +--------------------*/ +/*------------------- + Borders +--------------------*/ +/*------------------- + Derived Values +--------------------*/ +/* Loaders Position Offset */ +/* Rendered Scrollbar Width */ +/* Maximum Single Character Glyph Width, aka Capital "W" */ +/* Used to match floats with text */ +/* Header Spacing */ +/* Minimum Mobile Width */ +/* Positive / Negative Dupes */ +/* Responsive */ +/*------------------- + Exact Pixel Values +--------------------*/ +/* + These are used to specify exact pixel values in em + for things like borders that remain constantly + sized as emSize adjusts + + Since there are many more sizes than names for sizes, + these are named by their original pixel values. + +*/ +/* Columns */ +/******************************* + States +*******************************/ +/*------------------- + Disabled +--------------------*/ +/*------------------- + Hover +--------------------*/ +/*--- Shadows ---*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Focus +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Down (:active) +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Active +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/* Site theme site.variables */ +/******************************* + User Global Variables +*******************************/ +/*------------------- + Site Colors +--------------------*/ +/******************************* + PXT Overrides +*******************************/ +/*------------------- + Component Variables +---------------------*/ +/* Default */ +/******************************* + Sidebar +*******************************/ +/*------------------- + Content +--------------------*/ +/* Animation */ +/* Dimmer */ +/* Color below page */ +/* Shadow */ +/* Layering */ +/*------------------- + Variations +--------------------*/ +/* Width */ +/* Height */ +/* Packaged Theme */ +/******************************* + Sidebar +*******************************/ +/*------------------- + Content +--------------------*/ +/* Animation */ +/* Dimmer */ +/* Color below page */ +/* Shadow */ +/* Layering */ +/*------------------- + Variations +--------------------*/ +/* Width */ +/* Height */ +/* Site Theme */ +/******************************* + Site Overrides +*******************************/ +/******************************* + Mix-ins +*******************************/ +/*------------------ + Fonts +-------------------*/ +/*------------------ + Overrides +-------------------*/ +/* End Config */ +/******************************* + Sidebar +*******************************/ +/* Sidebar Menu */ +.ui.sidebar, +.play-button.sidebar, +.download-button.sidebar { + position: fixed; + top: 0; + left: 0; + backface-visibility: hidden; + transition: none; + will-change: transform; + transform: translate3d(0, 0, 0); + visibility: hidden; + -webkit-overflow-scrolling: touch; + height: 100% !important; + max-height: 100%; + border-radius: 0em !important; + margin: 0em !important; + overflow-y: auto !important; + z-index: 102; +} +/* GPU Layers for Child Elements */ +.ui.sidebar > *, +.play-button.sidebar > *, +.download-button.sidebar > * { + backface-visibility: hidden; +} +/*-------------- + Direction +---------------*/ +.ui.left.sidebar, +.play-button.left.sidebar, +.download-button.left.sidebar { + right: auto; + left: 0px; + transform: translate3d(-100%, 0, 0); +} +.ui.right.sidebar, +.play-button.right.sidebar, +.download-button.right.sidebar { + right: 0px !important; + left: auto !important; + transform: translate3d(100%, 0%, 0); +} +.ui.top.sidebar, +.ui.bottom.sidebar, +.play-button.top.sidebar, +.play-button.bottom.sidebar, +.download-button.top.sidebar, +.download-button.bottom.sidebar { + width: 100% !important; + height: auto !important; +} +.ui.top.sidebar, +.play-button.top.sidebar, +.download-button.top.sidebar { + top: 0px !important; + bottom: auto !important; + transform: translate3d(0, -100%, 0); +} +.ui.bottom.sidebar, +.play-button.bottom.sidebar, +.download-button.bottom.sidebar { + top: auto !important; + bottom: 0px !important; + transform: translate3d(0, 100%, 0); +} +/*-------------- + Pushable +---------------*/ +.pushable { + height: 100%; + overflow-x: hidden; + padding: 0em !important; +} +/* Whole Page */ +body.pushable { + background: #545454 !important; +} +/* Page Context */ +.pushable:not(body) { + transform: translate3d(0, 0, 0); +} +.pushable:not(body) > .ui.sidebar, +.pushable:not(body) > .fixed, +.pushable:not(body) > .pusher:after, +.pushable:not(body) > .play-button.sidebar, +.pushable:not(body) > .download-button.sidebar { + position: absolute; +} +/*-------------- + Fixed +---------------*/ +.pushable > .fixed { + position: fixed; + backface-visibility: hidden; + transition: transform 500ms ease; + will-change: transform; + z-index: 101; +} +/*-------------- + Page +---------------*/ +.pushable > .pusher { + position: relative; + backface-visibility: hidden; + overflow: hidden; + min-height: 100%; + transition: transform 500ms ease; + z-index: 2; +} +body.pushable > .pusher { + background: #FDFDFA; +} +/* Pusher should inherit background from context */ +.pushable > .pusher { + background: inherit; +} +/*-------------- + Dimmer +---------------*/ +.pushable > .pusher:after { + position: fixed; + top: 0px; + right: 0px; + content: ''; + background-color: rgba(0, 0, 0, 0.4); + overflow: hidden; + opacity: 0; + transition: opacity 500ms; + will-change: opacity; + z-index: 1000; +} +/*-------------- + Coupling +---------------*/ +.ui.sidebar.menu .item, +.play-button.sidebar.menu .item, +.download-button.sidebar.menu .item { + border-radius: 0em !important; +} +/******************************* + States +*******************************/ +/*-------------- + Dimmed +---------------*/ +.pushable > .pusher.dimmed:after { + width: 100% !important; + height: 100% !important; + opacity: 1 !important; +} +/*-------------- + Animating +---------------*/ +.ui.animating.sidebar, +.play-button.animating.sidebar, +.download-button.animating.sidebar { + visibility: visible; +} +/*-------------- + Visible +---------------*/ +.ui.visible.sidebar, +.play-button.visible.sidebar, +.download-button.visible.sidebar { + visibility: visible; + transform: translate3d(0, 0, 0); +} +/* Shadow Direction */ +.ui.left.visible.sidebar, +.ui.right.visible.sidebar, +.play-button.left.visible.sidebar, +.play-button.right.visible.sidebar, +.download-button.left.visible.sidebar, +.download-button.right.visible.sidebar { + box-shadow: 0px 0px 20px rgba(34, 36, 38, 0.15); +} +.ui.top.visible.sidebar, +.ui.bottom.visible.sidebar, +.play-button.top.visible.sidebar, +.play-button.bottom.visible.sidebar, +.download-button.top.visible.sidebar, +.download-button.bottom.visible.sidebar { + box-shadow: 0px 0px 20px rgba(34, 36, 38, 0.15); +} +/* Visible On Load */ +.ui.visible.left.sidebar ~ .fixed, +.ui.visible.left.sidebar ~ .pusher, +.play-button.visible.left.sidebar ~ .fixed, +.play-button.visible.left.sidebar ~ .pusher, +.download-button.visible.left.sidebar ~ .fixed, +.download-button.visible.left.sidebar ~ .pusher { + transform: translate3d(260px, 0, 0); +} +.ui.visible.right.sidebar ~ .fixed, +.ui.visible.right.sidebar ~ .pusher, +.play-button.visible.right.sidebar ~ .fixed, +.play-button.visible.right.sidebar ~ .pusher, +.download-button.visible.right.sidebar ~ .fixed, +.download-button.visible.right.sidebar ~ .pusher { + transform: translate3d(-260px, 0, 0); +} +.ui.visible.top.sidebar ~ .fixed, +.ui.visible.top.sidebar ~ .pusher, +.play-button.visible.top.sidebar ~ .fixed, +.play-button.visible.top.sidebar ~ .pusher, +.download-button.visible.top.sidebar ~ .fixed, +.download-button.visible.top.sidebar ~ .pusher { + transform: translate3d(0, 36px, 0); +} +.ui.visible.bottom.sidebar ~ .fixed, +.ui.visible.bottom.sidebar ~ .pusher, +.play-button.visible.bottom.sidebar ~ .fixed, +.play-button.visible.bottom.sidebar ~ .pusher, +.download-button.visible.bottom.sidebar ~ .fixed, +.download-button.visible.bottom.sidebar ~ .pusher { + transform: translate3d(0, -36px, 0); +} +/* opposite sides visible forces content overlay */ +.ui.visible.left.sidebar ~ .ui.visible.right.sidebar ~ .fixed, +.ui.visible.left.sidebar ~ .ui.visible.right.sidebar ~ .pusher, +.ui.visible.right.sidebar ~ .ui.visible.left.sidebar ~ .fixed, +.ui.visible.right.sidebar ~ .ui.visible.left.sidebar ~ .pusher, +.play-button.visible.left.sidebar ~ .play-button.visible.right.sidebar ~ .fixed, +.play-button.visible.left.sidebar ~ .play-button.visible.right.sidebar ~ .pusher, +.play-button.visible.right.sidebar ~ .play-button.visible.left.sidebar ~ .fixed, +.play-button.visible.right.sidebar ~ .play-button.visible.left.sidebar ~ .pusher, +.download-button.visible.left.sidebar ~ .download-button.visible.right.sidebar ~ .fixed, +.download-button.visible.left.sidebar ~ .download-button.visible.right.sidebar ~ .pusher, +.download-button.visible.right.sidebar ~ .download-button.visible.left.sidebar ~ .fixed, +.download-button.visible.right.sidebar ~ .download-button.visible.left.sidebar ~ .pusher { + transform: translate3d(0, 0, 0); +} +/*-------------- + iOS +---------------*/ +/******************************* + Variations +*******************************/ +/*-------------- + Width +---------------*/ +/* Left / Right */ +.ui.thin.left.sidebar, +.ui.thin.right.sidebar, +.play-button.thin.left.sidebar, +.play-button.thin.right.sidebar, +.download-button.thin.left.sidebar, +.download-button.thin.right.sidebar { + width: 150px; +} +.ui[class*="very thin"].left.sidebar, +.ui[class*="very thin"].right.sidebar, +.play-button[class*="very thin"].left.sidebar, +.play-button[class*="very thin"].right.sidebar, +.download-button[class*="very thin"].left.sidebar, +.download-button[class*="very thin"].right.sidebar { + width: 60px; +} +.ui.left.sidebar, +.ui.right.sidebar, +.play-button.left.sidebar, +.play-button.right.sidebar, +.download-button.left.sidebar, +.download-button.right.sidebar { + width: 260px; +} +.ui.wide.left.sidebar, +.ui.wide.right.sidebar, +.play-button.wide.left.sidebar, +.play-button.wide.right.sidebar, +.download-button.wide.left.sidebar, +.download-button.wide.right.sidebar { + width: 350px; +} +.ui[class*="very wide"].left.sidebar, +.ui[class*="very wide"].right.sidebar, +.play-button[class*="very wide"].left.sidebar, +.play-button[class*="very wide"].right.sidebar, +.download-button[class*="very wide"].left.sidebar, +.download-button[class*="very wide"].right.sidebar { + width: 475px; +} +/* Left Visible */ +.ui.visible.thin.left.sidebar ~ .fixed, +.ui.visible.thin.left.sidebar ~ .pusher, +.play-button.visible.thin.left.sidebar ~ .fixed, +.play-button.visible.thin.left.sidebar ~ .pusher, +.download-button.visible.thin.left.sidebar ~ .fixed, +.download-button.visible.thin.left.sidebar ~ .pusher { + transform: translate3d(150px, 0, 0); +} +.ui.visible[class*="very thin"].left.sidebar ~ .fixed, +.ui.visible[class*="very thin"].left.sidebar ~ .pusher, +.play-button.visible[class*="very thin"].left.sidebar ~ .fixed, +.play-button.visible[class*="very thin"].left.sidebar ~ .pusher, +.download-button.visible[class*="very thin"].left.sidebar ~ .fixed, +.download-button.visible[class*="very thin"].left.sidebar ~ .pusher { + transform: translate3d(60px, 0, 0); +} +.ui.visible.wide.left.sidebar ~ .fixed, +.ui.visible.wide.left.sidebar ~ .pusher, +.play-button.visible.wide.left.sidebar ~ .fixed, +.play-button.visible.wide.left.sidebar ~ .pusher, +.download-button.visible.wide.left.sidebar ~ .fixed, +.download-button.visible.wide.left.sidebar ~ .pusher { + transform: translate3d(350px, 0, 0); +} +.ui.visible[class*="very wide"].left.sidebar ~ .fixed, +.ui.visible[class*="very wide"].left.sidebar ~ .pusher, +.play-button.visible[class*="very wide"].left.sidebar ~ .fixed, +.play-button.visible[class*="very wide"].left.sidebar ~ .pusher, +.download-button.visible[class*="very wide"].left.sidebar ~ .fixed, +.download-button.visible[class*="very wide"].left.sidebar ~ .pusher { + transform: translate3d(475px, 0, 0); +} +/* Right Visible */ +.ui.visible.thin.right.sidebar ~ .fixed, +.ui.visible.thin.right.sidebar ~ .pusher, +.play-button.visible.thin.right.sidebar ~ .fixed, +.play-button.visible.thin.right.sidebar ~ .pusher, +.download-button.visible.thin.right.sidebar ~ .fixed, +.download-button.visible.thin.right.sidebar ~ .pusher { + transform: translate3d(-150px, 0, 0); +} +.ui.visible[class*="very thin"].right.sidebar ~ .fixed, +.ui.visible[class*="very thin"].right.sidebar ~ .pusher, +.play-button.visible[class*="very thin"].right.sidebar ~ .fixed, +.play-button.visible[class*="very thin"].right.sidebar ~ .pusher, +.download-button.visible[class*="very thin"].right.sidebar ~ .fixed, +.download-button.visible[class*="very thin"].right.sidebar ~ .pusher { + transform: translate3d(-60px, 0, 0); +} +.ui.visible.wide.right.sidebar ~ .fixed, +.ui.visible.wide.right.sidebar ~ .pusher, +.play-button.visible.wide.right.sidebar ~ .fixed, +.play-button.visible.wide.right.sidebar ~ .pusher, +.download-button.visible.wide.right.sidebar ~ .fixed, +.download-button.visible.wide.right.sidebar ~ .pusher { + transform: translate3d(-350px, 0, 0); +} +.ui.visible[class*="very wide"].right.sidebar ~ .fixed, +.ui.visible[class*="very wide"].right.sidebar ~ .pusher, +.play-button.visible[class*="very wide"].right.sidebar ~ .fixed, +.play-button.visible[class*="very wide"].right.sidebar ~ .pusher, +.download-button.visible[class*="very wide"].right.sidebar ~ .fixed, +.download-button.visible[class*="very wide"].right.sidebar ~ .pusher { + transform: translate3d(-475px, 0, 0); +} +/******************************* + Animations +*******************************/ +/*-------------- + Overlay +---------------*/ +/* Set-up */ +.ui.overlay.sidebar, +.play-button.overlay.sidebar, +.download-button.overlay.sidebar { + z-index: 102; +} +/* Initial */ +.ui.left.overlay.sidebar, +.play-button.left.overlay.sidebar, +.download-button.left.overlay.sidebar { + transform: translate3d(-100%, 0%, 0); +} +.ui.right.overlay.sidebar, +.play-button.right.overlay.sidebar, +.download-button.right.overlay.sidebar { + transform: translate3d(100%, 0%, 0); +} +.ui.top.overlay.sidebar, +.play-button.top.overlay.sidebar, +.download-button.top.overlay.sidebar { + transform: translate3d(0%, -100%, 0); +} +.ui.bottom.overlay.sidebar, +.play-button.bottom.overlay.sidebar, +.download-button.bottom.overlay.sidebar { + transform: translate3d(0%, 100%, 0); +} +/* Animation */ +.animating.ui.overlay.sidebar, +.ui.visible.overlay.sidebar, +.animating.play-button.overlay.sidebar, +.play-button.visible.overlay.sidebar, +.animating.download-button.overlay.sidebar, +.download-button.visible.overlay.sidebar { + transition: transform 500ms ease; +} +/* End - Sidebar */ +.ui.visible.left.overlay.sidebar, +.play-button.visible.left.overlay.sidebar, +.download-button.visible.left.overlay.sidebar { + transform: translate3d(0%, 0%, 0); +} +.ui.visible.right.overlay.sidebar, +.play-button.visible.right.overlay.sidebar, +.download-button.visible.right.overlay.sidebar { + transform: translate3d(0%, 0%, 0); +} +.ui.visible.top.overlay.sidebar, +.play-button.visible.top.overlay.sidebar, +.download-button.visible.top.overlay.sidebar { + transform: translate3d(0%, 0%, 0); +} +.ui.visible.bottom.overlay.sidebar, +.play-button.visible.bottom.overlay.sidebar, +.download-button.visible.bottom.overlay.sidebar { + transform: translate3d(0%, 0%, 0); +} +/* End - Pusher */ +.ui.visible.overlay.sidebar ~ .fixed, +.ui.visible.overlay.sidebar ~ .pusher, +.play-button.visible.overlay.sidebar ~ .fixed, +.play-button.visible.overlay.sidebar ~ .pusher, +.download-button.visible.overlay.sidebar ~ .fixed, +.download-button.visible.overlay.sidebar ~ .pusher { + transform: none !important; +} +/*-------------- + Push +---------------*/ +/* Initial */ +.ui.push.sidebar, +.play-button.push.sidebar, +.download-button.push.sidebar { + transition: transform 500ms ease; + z-index: 102; +} +/* Sidebar - Initial */ +.ui.left.push.sidebar, +.play-button.left.push.sidebar, +.download-button.left.push.sidebar { + transform: translate3d(-100%, 0, 0); +} +.ui.right.push.sidebar, +.play-button.right.push.sidebar, +.download-button.right.push.sidebar { + transform: translate3d(100%, 0, 0); +} +.ui.top.push.sidebar, +.play-button.top.push.sidebar, +.download-button.top.push.sidebar { + transform: translate3d(0%, -100%, 0); +} +.ui.bottom.push.sidebar, +.play-button.bottom.push.sidebar, +.download-button.bottom.push.sidebar { + transform: translate3d(0%, 100%, 0); +} +/* End */ +.ui.visible.push.sidebar, +.play-button.visible.push.sidebar, +.download-button.visible.push.sidebar { + transform: translate3d(0%, 0, 0); +} +/*-------------- + Uncover +---------------*/ +/* Initial */ +.ui.uncover.sidebar, +.play-button.uncover.sidebar, +.download-button.uncover.sidebar { + transform: translate3d(0, 0, 0); + z-index: 1; +} +/* End */ +.ui.visible.uncover.sidebar, +.play-button.visible.uncover.sidebar, +.download-button.visible.uncover.sidebar { + transform: translate3d(0, 0, 0); + transition: transform 500ms ease; +} +/*-------------- + Slide Along +---------------*/ +/* Initial */ +.ui.slide.along.sidebar, +.play-button.slide.along.sidebar, +.download-button.slide.along.sidebar { + z-index: 1; +} +/* Sidebar - Initial */ +.ui.left.slide.along.sidebar, +.play-button.left.slide.along.sidebar, +.download-button.left.slide.along.sidebar { + transform: translate3d(-50%, 0, 0); +} +.ui.right.slide.along.sidebar, +.play-button.right.slide.along.sidebar, +.download-button.right.slide.along.sidebar { + transform: translate3d(50%, 0, 0); +} +.ui.top.slide.along.sidebar, +.play-button.top.slide.along.sidebar, +.download-button.top.slide.along.sidebar { + transform: translate3d(0, -50%, 0); +} +.ui.bottom.slide.along.sidebar, +.play-button.bottom.slide.along.sidebar, +.download-button.bottom.slide.along.sidebar { + transform: translate3d(0%, 50%, 0); +} +/* Animation */ +.ui.animating.slide.along.sidebar, +.play-button.animating.slide.along.sidebar, +.download-button.animating.slide.along.sidebar { + transition: transform 500ms ease; +} +/* End */ +.ui.visible.slide.along.sidebar, +.play-button.visible.slide.along.sidebar, +.download-button.visible.slide.along.sidebar { + transform: translate3d(0%, 0, 0); +} +/*-------------- + Slide Out +---------------*/ +/* Initial */ +.ui.slide.out.sidebar, +.play-button.slide.out.sidebar, +.download-button.slide.out.sidebar { + z-index: 1; +} +/* Sidebar - Initial */ +.ui.left.slide.out.sidebar, +.play-button.left.slide.out.sidebar, +.download-button.left.slide.out.sidebar { + transform: translate3d(50%, 0, 0); +} +.ui.right.slide.out.sidebar, +.play-button.right.slide.out.sidebar, +.download-button.right.slide.out.sidebar { + transform: translate3d(-50%, 0, 0); +} +.ui.top.slide.out.sidebar, +.play-button.top.slide.out.sidebar, +.download-button.top.slide.out.sidebar { + transform: translate3d(0%, 50%, 0); +} +.ui.bottom.slide.out.sidebar, +.play-button.bottom.slide.out.sidebar, +.download-button.bottom.slide.out.sidebar { + transform: translate3d(0%, -50%, 0); +} +/* Animation */ +.ui.animating.slide.out.sidebar, +.play-button.animating.slide.out.sidebar, +.download-button.animating.slide.out.sidebar { + transition: transform 500ms ease; +} +/* End */ +.ui.visible.slide.out.sidebar, +.play-button.visible.slide.out.sidebar, +.download-button.visible.slide.out.sidebar { + transform: translate3d(0%, 0, 0); +} +/*-------------- + Scale Down +---------------*/ +/* Initial */ +.ui.scale.down.sidebar, +.play-button.scale.down.sidebar, +.download-button.scale.down.sidebar { + transition: transform 500ms ease; + z-index: 102; +} +/* Sidebar - Initial */ +.ui.left.scale.down.sidebar, +.play-button.left.scale.down.sidebar, +.download-button.left.scale.down.sidebar { + transform: translate3d(-100%, 0, 0); +} +.ui.right.scale.down.sidebar, +.play-button.right.scale.down.sidebar, +.download-button.right.scale.down.sidebar { + transform: translate3d(100%, 0, 0); +} +.ui.top.scale.down.sidebar, +.play-button.top.scale.down.sidebar, +.download-button.top.scale.down.sidebar { + transform: translate3d(0%, -100%, 0); +} +.ui.bottom.scale.down.sidebar, +.play-button.bottom.scale.down.sidebar, +.download-button.bottom.scale.down.sidebar { + transform: translate3d(0%, 100%, 0); +} +/* Pusher - Initial */ +.ui.scale.down.left.sidebar ~ .pusher, +.play-button.scale.down.left.sidebar ~ .pusher, +.download-button.scale.down.left.sidebar ~ .pusher { + transform-origin: 75% 50%; +} +.ui.scale.down.right.sidebar ~ .pusher, +.play-button.scale.down.right.sidebar ~ .pusher, +.download-button.scale.down.right.sidebar ~ .pusher { + transform-origin: 25% 50%; +} +.ui.scale.down.top.sidebar ~ .pusher, +.play-button.scale.down.top.sidebar ~ .pusher, +.download-button.scale.down.top.sidebar ~ .pusher { + transform-origin: 50% 75%; +} +.ui.scale.down.bottom.sidebar ~ .pusher, +.play-button.scale.down.bottom.sidebar ~ .pusher, +.download-button.scale.down.bottom.sidebar ~ .pusher { + transform-origin: 50% 25%; +} +/* Animation */ +.ui.animating.scale.down > .visible.ui.sidebar, +.play-button.animating.scale.down > .visible.play-button.sidebar, +.download-button.animating.scale.down > .visible.download-button.sidebar { + transition: transform 500ms ease; +} +.ui.visible.scale.down.sidebar ~ .pusher, +.ui.animating.scale.down.sidebar ~ .pusher, +.play-button.visible.scale.down.sidebar ~ .pusher, +.play-button.animating.scale.down.sidebar ~ .pusher, +.download-button.visible.scale.down.sidebar ~ .pusher, +.download-button.animating.scale.down.sidebar ~ .pusher { + display: block !important; + width: 100%; + height: 100%; + overflow: hidden !important; +} +/* End */ +.ui.visible.scale.down.sidebar, +.play-button.visible.scale.down.sidebar, +.download-button.visible.scale.down.sidebar { + transform: translate3d(0, 0, 0); +} +.ui.visible.scale.down.sidebar ~ .pusher, +.play-button.visible.scale.down.sidebar ~ .pusher, +.download-button.visible.scale.down.sidebar ~ .pusher { + transform: scale(0.75); +} +/******************************* + Theme Overrides +*******************************/ +/******************************* + Site Overrides +*******************************/ +/*! + * # Semantic UI - Sticky + * http://github.com/semantic-org/semantic-ui/ + * + * + * Released under the MIT license + * http://opensource.org/licenses/MIT + * + */ +/******************************* + Theme +*******************************/ +/* + +████████╗██╗ ██╗███████╗███╗ ███╗███████╗███████╗ +╚══██╔══╝██║ ██║██╔════╝████╗ ████║██╔════╝██╔════╝ + ██║ ███████║█████╗ ██╔████╔██║█████╗ ███████╗ + ██║ ██╔══██║██╔══╝ ██║╚██╔╝██║██╔══╝ ╚════██║ + ██║ ██║ ██║███████╗██║ ╚═╝ ██║███████╗███████║ + ╚═╝ ╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝╚══════╝╚══════╝ + +*/ +/******************************* + Theme Selection +*******************************/ +/* To override a theme for an individual element + specify theme name below +*/ +/* Global */ +/* Elements */ +/* Collections */ +/* Modules */ +/* Views */ +/******************************* + Folders +*******************************/ +/* Path to theme packages */ +/* Path to site override folder */ +/******************************* + Import Theme +*******************************/ +/******************************* + Import Directives +*******************************/ +/*------------------ + Theme +-------------------*/ +/*-------------------- + Site Variables +---------------------*/ +/* Default site.variables */ +/******************************* + Site Settings +*******************************/ +/*------------------- + Fonts +--------------------*/ +/*------------------- + Base Sizes +--------------------*/ +/* This is the single variable that controls them all */ +/* The size of page text */ +/*------------------- + Border Radius +--------------------*/ +/* See Power-user section below + for explanation of @px variables +*/ +/*------------------- + Brand Colors +--------------------*/ +/*-------------- + Page Heading +---------------*/ +/*-------------- + Form Input +---------------*/ +/* This adjusts the default form input across all elements */ +/* Input Text Color */ +/* Line Height Default For Inputs in Browser (Descendors are 17px at 14px base em) */ +/*------------------- + Focused Input +--------------------*/ +/* Used on inputs, textarea etc */ +/* Used on dropdowns, other larger blocks */ +/*------------------- + Sizes +--------------------*/ +/* + Sizes are all expressed in terms of 14px/em (default em) + This ensures these "ratios" remain constant despite changes in EM +*/ +/*------------------- + Page +--------------------*/ +/*------------------- + Paragraph +--------------------*/ +/*------------------- + Links +--------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ +/*------------------- + Highlighted Text +--------------------*/ +/*------------------- + Loader +--------------------*/ +/*------------------- + Grid +--------------------*/ +/*------------------- + Transitions +--------------------*/ +/*------------------- + Breakpoints +--------------------*/ +/*------------------- + Site Colors +--------------------*/ +/*--- Colors ---*/ +/*--- Light Colors ---*/ +/*--- Neutrals ---*/ +/*--- Colored Backgrounds ---*/ +/*--- Colored Headers ---*/ +/*--- Colored Text ---*/ +/*--- Colored Border ---*/ +/*------------------- + Alpha Colors +--------------------*/ +/*------------------- + Accents +--------------------*/ +/* Differentiating Neutrals */ +/* Differentiating Layers */ +/******************************* + Power-User +*******************************/ +/*------------------- + Emotive Colors +--------------------*/ +/* Positive */ +/* Negative */ +/* Info */ +/* Warning */ +/*------------------- + Paths +--------------------*/ +/* For source only. Modified in gulp for dist */ +/*------------------- + Em Sizes +--------------------*/ +/* + This rounds @size values to the closest pixel then expresses that value in (r)em. + This ensures all size values round to exact pixels +*/ +/* em */ +/* rem */ +/*------------------- + Icons +--------------------*/ +/* Maximum Glyph Width of Icon */ +/*------------------- + Neutral Text +--------------------*/ +/*------------------- + Brand Colors +--------------------*/ +/*------------------- + Borders +--------------------*/ +/*------------------- + Derived Values +--------------------*/ +/* Loaders Position Offset */ +/* Rendered Scrollbar Width */ +/* Maximum Single Character Glyph Width, aka Capital "W" */ +/* Used to match floats with text */ +/* Header Spacing */ +/* Minimum Mobile Width */ +/* Positive / Negative Dupes */ +/* Responsive */ +/*------------------- + Exact Pixel Values +--------------------*/ +/* + These are used to specify exact pixel values in em + for things like borders that remain constantly + sized as emSize adjusts + + Since there are many more sizes than names for sizes, + these are named by their original pixel values. + +*/ +/* Columns */ +/******************************* + States +*******************************/ +/*------------------- + Disabled +--------------------*/ +/*------------------- + Hover +--------------------*/ +/*--- Shadows ---*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Focus +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Down (:active) +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Active +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/* Packaged site.variables */ +/******************************* + User Global Variables +*******************************/ +/*------------------- + Fonts +--------------------*/ +/*------------------- + Breakpoints +--------------------*/ +/* +@mobileBreakpoint : unit( (63 * @emSize), px); +@tabletBreakpoint : unit( (79 * @emSize), px); +@computerBreakpoint : unit( (91 * @emSize), px); +@largeMonitorBreakpoint : unit( (99 * @emSize), px); +@widescreenMonitorBreakpoint : unit( (119 * @emSize), px); +*/ +/******************************* + PXT Variables +*******************************/ +/*------------------- + Menu +--------------------*/ +/*------------------- + Layout +--------------------*/ +/*------------------- + Background +--------------------*/ +/*------------------- + Full screen +--------------------*/ +/*------------------- + Side Docs +--------------------*/ +/*------------------- + Editor +--------------------*/ +/* Component's site.variables */ +/******************************* + Site Settings +*******************************/ +/*------------------- + Fonts +--------------------*/ +/*------------------- + Base Sizes +--------------------*/ +/* This is the single variable that controls them all */ +/* The size of page text */ +/*------------------- + Border Radius +--------------------*/ +/* See Power-user section below + for explanation of @px variables +*/ +/*------------------- + Brand Colors +--------------------*/ +/*-------------- + Page Heading +---------------*/ +/*-------------- + Form Input +---------------*/ +/* This adjusts the default form input across all elements */ +/* Input Text Color */ +/* Line Height Default For Inputs in Browser (Descendors are 17px at 14px base em) */ +/*------------------- + Focused Input +--------------------*/ +/* Used on inputs, textarea etc */ +/* Used on dropdowns, other larger blocks */ +/*------------------- + Sizes +--------------------*/ +/* + Sizes are all expressed in terms of 14px/em (default em) + This ensures these "ratios" remain constant despite changes in EM +*/ +/*------------------- + Page +--------------------*/ +/*------------------- + Paragraph +--------------------*/ +/*------------------- + Links +--------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ +/*------------------- + Highlighted Text +--------------------*/ +/*------------------- + Loader +--------------------*/ +/*------------------- + Grid +--------------------*/ +/*------------------- + Transitions +--------------------*/ +/*------------------- + Breakpoints +--------------------*/ +/*------------------- + Site Colors +--------------------*/ +/*--- Colors ---*/ +/*--- Light Colors ---*/ +/*--- Neutrals ---*/ +/*--- Colored Backgrounds ---*/ +/*--- Colored Headers ---*/ +/*--- Colored Text ---*/ +/*--- Colored Border ---*/ +/*------------------- + Alpha Colors +--------------------*/ +/*------------------- + Accents +--------------------*/ +/* Differentiating Neutrals */ +/* Differentiating Layers */ +/******************************* + Power-User +*******************************/ +/*------------------- + Emotive Colors +--------------------*/ +/* Positive */ +/* Negative */ +/* Info */ +/* Warning */ +/*------------------- + Paths +--------------------*/ +/* For source only. Modified in gulp for dist */ +/*------------------- + Em Sizes +--------------------*/ +/* + This rounds @size values to the closest pixel then expresses that value in (r)em. + This ensures all size values round to exact pixels +*/ +/* em */ +/* rem */ +/*------------------- + Icons +--------------------*/ +/* Maximum Glyph Width of Icon */ +/*------------------- + Neutral Text +--------------------*/ +/*------------------- + Brand Colors +--------------------*/ +/*------------------- + Borders +--------------------*/ +/*------------------- + Derived Values +--------------------*/ +/* Loaders Position Offset */ +/* Rendered Scrollbar Width */ +/* Maximum Single Character Glyph Width, aka Capital "W" */ +/* Used to match floats with text */ +/* Header Spacing */ +/* Minimum Mobile Width */ +/* Positive / Negative Dupes */ +/* Responsive */ +/*------------------- + Exact Pixel Values +--------------------*/ +/* + These are used to specify exact pixel values in em + for things like borders that remain constantly + sized as emSize adjusts + + Since there are many more sizes than names for sizes, + these are named by their original pixel values. + +*/ +/* Columns */ +/******************************* + States +*******************************/ +/*------------------- + Disabled +--------------------*/ +/*------------------- + Hover +--------------------*/ +/*--- Shadows ---*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Focus +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Down (:active) +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Active +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/* Site theme site.variables */ +/******************************* + User Global Variables +*******************************/ +/*------------------- + Site Colors +--------------------*/ +/******************************* + PXT Overrides +*******************************/ +/*------------------- + Component Variables +---------------------*/ +/* Default */ +/******************************* + Sticky +*******************************/ +/* Packaged Theme */ +/******************************* + Sticky +*******************************/ +/* Site Theme */ +/******************************* + Site Overrides +*******************************/ +/******************************* + Mix-ins +*******************************/ +/*------------------ + Fonts +-------------------*/ +/*------------------ + Overrides +-------------------*/ +/* End Config */ +/******************************* + Sticky +*******************************/ +.ui.sticky, +.play-button.sticky, +.download-button.sticky { + position: static; + transition: none; + z-index: 800; +} +/******************************* + States +*******************************/ +/* Bound */ +.ui.sticky.bound, +.play-button.sticky.bound, +.download-button.sticky.bound { + position: absolute; + left: auto; + right: auto; +} +/* Fixed */ +.ui.sticky.fixed, +.play-button.sticky.fixed, +.download-button.sticky.fixed { + position: fixed; + left: auto; + right: auto; +} +/* Bound/Fixed Position */ +.ui.sticky.bound.top, +.ui.sticky.fixed.top, +.play-button.sticky.bound.top, +.play-button.sticky.fixed.top, +.download-button.sticky.bound.top, +.download-button.sticky.fixed.top { + top: 0px; + bottom: auto; +} +.ui.sticky.bound.bottom, +.ui.sticky.fixed.bottom, +.play-button.sticky.bound.bottom, +.play-button.sticky.fixed.bottom, +.download-button.sticky.bound.bottom, +.download-button.sticky.fixed.bottom { + top: auto; + bottom: 0px; +} +/******************************* + Types +*******************************/ +.ui.native.sticky, +.play-button.native.sticky, +.download-button.native.sticky { + position: -webkit-sticky; + position: -moz-sticky; + position: -ms-sticky; + position: -o-sticky; + position: sticky; +} +/******************************* + Theme Overrides +*******************************/ +/******************************* + Site Overrides +*******************************/ +/*! + * # Semantic UI - Tab + * http://github.com/semantic-org/semantic-ui/ + * + * + * Released under the MIT license + * http://opensource.org/licenses/MIT + * + */ +/******************************* + Theme +*******************************/ +/* + +████████╗██╗ ██╗███████╗███╗ ███╗███████╗███████╗ +╚══██╔══╝██║ ██║██╔════╝████╗ ████║██╔════╝██╔════╝ + ██║ ███████║█████╗ ██╔████╔██║█████╗ ███████╗ + ██║ ██╔══██║██╔══╝ ██║╚██╔╝██║██╔══╝ ╚════██║ + ██║ ██║ ██║███████╗██║ ╚═╝ ██║███████╗███████║ + ╚═╝ ╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝╚══════╝╚══════╝ + +*/ +/******************************* + Theme Selection +*******************************/ +/* To override a theme for an individual element + specify theme name below +*/ +/* Global */ +/* Elements */ +/* Collections */ +/* Modules */ +/* Views */ +/******************************* + Folders +*******************************/ +/* Path to theme packages */ +/* Path to site override folder */ +/******************************* + Import Theme +*******************************/ +/******************************* + Import Directives +*******************************/ +/*------------------ + Theme +-------------------*/ +/*-------------------- + Site Variables +---------------------*/ +/* Default site.variables */ +/******************************* + Site Settings +*******************************/ +/*------------------- + Fonts +--------------------*/ +/*------------------- + Base Sizes +--------------------*/ +/* This is the single variable that controls them all */ +/* The size of page text */ +/*------------------- + Border Radius +--------------------*/ +/* See Power-user section below + for explanation of @px variables +*/ +/*------------------- + Brand Colors +--------------------*/ +/*-------------- + Page Heading +---------------*/ +/*-------------- + Form Input +---------------*/ +/* This adjusts the default form input across all elements */ +/* Input Text Color */ +/* Line Height Default For Inputs in Browser (Descendors are 17px at 14px base em) */ +/*------------------- + Focused Input +--------------------*/ +/* Used on inputs, textarea etc */ +/* Used on dropdowns, other larger blocks */ +/*------------------- + Sizes +--------------------*/ +/* + Sizes are all expressed in terms of 14px/em (default em) + This ensures these "ratios" remain constant despite changes in EM +*/ +/*------------------- + Page +--------------------*/ +/*------------------- + Paragraph +--------------------*/ +/*------------------- + Links +--------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ +/*------------------- + Highlighted Text +--------------------*/ +/*------------------- + Loader +--------------------*/ +/*------------------- + Grid +--------------------*/ +/*------------------- + Transitions +--------------------*/ +/*------------------- + Breakpoints +--------------------*/ +/*------------------- + Site Colors +--------------------*/ +/*--- Colors ---*/ +/*--- Light Colors ---*/ +/*--- Neutrals ---*/ +/*--- Colored Backgrounds ---*/ +/*--- Colored Headers ---*/ +/*--- Colored Text ---*/ +/*--- Colored Border ---*/ +/*------------------- + Alpha Colors +--------------------*/ +/*------------------- + Accents +--------------------*/ +/* Differentiating Neutrals */ +/* Differentiating Layers */ +/******************************* + Power-User +*******************************/ +/*------------------- + Emotive Colors +--------------------*/ +/* Positive */ +/* Negative */ +/* Info */ +/* Warning */ +/*------------------- + Paths +--------------------*/ +/* For source only. Modified in gulp for dist */ +/*------------------- + Em Sizes +--------------------*/ +/* + This rounds @size values to the closest pixel then expresses that value in (r)em. + This ensures all size values round to exact pixels +*/ +/* em */ +/* rem */ +/*------------------- + Icons +--------------------*/ +/* Maximum Glyph Width of Icon */ +/*------------------- + Neutral Text +--------------------*/ +/*------------------- + Brand Colors +--------------------*/ +/*------------------- + Borders +--------------------*/ +/*------------------- + Derived Values +--------------------*/ +/* Loaders Position Offset */ +/* Rendered Scrollbar Width */ +/* Maximum Single Character Glyph Width, aka Capital "W" */ +/* Used to match floats with text */ +/* Header Spacing */ +/* Minimum Mobile Width */ +/* Positive / Negative Dupes */ +/* Responsive */ +/*------------------- + Exact Pixel Values +--------------------*/ +/* + These are used to specify exact pixel values in em + for things like borders that remain constantly + sized as emSize adjusts + + Since there are many more sizes than names for sizes, + these are named by their original pixel values. + +*/ +/* Columns */ +/******************************* + States +*******************************/ +/*------------------- + Disabled +--------------------*/ +/*------------------- + Hover +--------------------*/ +/*--- Shadows ---*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Focus +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Down (:active) +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Active +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/* Packaged site.variables */ +/******************************* + User Global Variables +*******************************/ +/*------------------- + Fonts +--------------------*/ +/*------------------- + Breakpoints +--------------------*/ +/* +@mobileBreakpoint : unit( (63 * @emSize), px); +@tabletBreakpoint : unit( (79 * @emSize), px); +@computerBreakpoint : unit( (91 * @emSize), px); +@largeMonitorBreakpoint : unit( (99 * @emSize), px); +@widescreenMonitorBreakpoint : unit( (119 * @emSize), px); +*/ +/******************************* + PXT Variables +*******************************/ +/*------------------- + Menu +--------------------*/ +/*------------------- + Layout +--------------------*/ +/*------------------- + Background +--------------------*/ +/*------------------- + Full screen +--------------------*/ +/*------------------- + Side Docs +--------------------*/ +/*------------------- + Editor +--------------------*/ +/* Component's site.variables */ +/******************************* + Site Settings +*******************************/ +/*------------------- + Fonts +--------------------*/ +/*------------------- + Base Sizes +--------------------*/ +/* This is the single variable that controls them all */ +/* The size of page text */ +/*------------------- + Border Radius +--------------------*/ +/* See Power-user section below + for explanation of @px variables +*/ +/*------------------- + Brand Colors +--------------------*/ +/*-------------- + Page Heading +---------------*/ +/*-------------- + Form Input +---------------*/ +/* This adjusts the default form input across all elements */ +/* Input Text Color */ +/* Line Height Default For Inputs in Browser (Descendors are 17px at 14px base em) */ +/*------------------- + Focused Input +--------------------*/ +/* Used on inputs, textarea etc */ +/* Used on dropdowns, other larger blocks */ +/*------------------- + Sizes +--------------------*/ +/* + Sizes are all expressed in terms of 14px/em (default em) + This ensures these "ratios" remain constant despite changes in EM +*/ +/*------------------- + Page +--------------------*/ +/*------------------- + Paragraph +--------------------*/ +/*------------------- + Links +--------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ +/*------------------- + Highlighted Text +--------------------*/ +/*------------------- + Loader +--------------------*/ +/*------------------- + Grid +--------------------*/ +/*------------------- + Transitions +--------------------*/ +/*------------------- + Breakpoints +--------------------*/ +/*------------------- + Site Colors +--------------------*/ +/*--- Colors ---*/ +/*--- Light Colors ---*/ +/*--- Neutrals ---*/ +/*--- Colored Backgrounds ---*/ +/*--- Colored Headers ---*/ +/*--- Colored Text ---*/ +/*--- Colored Border ---*/ +/*------------------- + Alpha Colors +--------------------*/ +/*------------------- + Accents +--------------------*/ +/* Differentiating Neutrals */ +/* Differentiating Layers */ +/******************************* + Power-User +*******************************/ +/*------------------- + Emotive Colors +--------------------*/ +/* Positive */ +/* Negative */ +/* Info */ +/* Warning */ +/*------------------- + Paths +--------------------*/ +/* For source only. Modified in gulp for dist */ +/*------------------- + Em Sizes +--------------------*/ +/* + This rounds @size values to the closest pixel then expresses that value in (r)em. + This ensures all size values round to exact pixels +*/ +/* em */ +/* rem */ +/*------------------- + Icons +--------------------*/ +/* Maximum Glyph Width of Icon */ +/*------------------- + Neutral Text +--------------------*/ +/*------------------- + Brand Colors +--------------------*/ +/*------------------- + Borders +--------------------*/ +/*------------------- + Derived Values +--------------------*/ +/* Loaders Position Offset */ +/* Rendered Scrollbar Width */ +/* Maximum Single Character Glyph Width, aka Capital "W" */ +/* Used to match floats with text */ +/* Header Spacing */ +/* Minimum Mobile Width */ +/* Positive / Negative Dupes */ +/* Responsive */ +/*------------------- + Exact Pixel Values +--------------------*/ +/* + These are used to specify exact pixel values in em + for things like borders that remain constantly + sized as emSize adjusts + + Since there are many more sizes than names for sizes, + these are named by their original pixel values. + +*/ +/* Columns */ +/******************************* + States +*******************************/ +/*------------------- + Disabled +--------------------*/ +/*------------------- + Hover +--------------------*/ +/*--- Shadows ---*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Focus +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Down (:active) +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Active +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/* Site theme site.variables */ +/******************************* + User Global Variables +*******************************/ +/*------------------- + Site Colors +--------------------*/ +/******************************* + PXT Overrides +*******************************/ +/*------------------- + Component Variables +---------------------*/ +/* Default */ +/******************************* + Tab +*******************************/ +/* Loading */ +/* Packaged Theme */ +/******************************* + Tab +*******************************/ +/* Loading */ +/* Site Theme */ +/******************************* + User Variable Overrides +*******************************/ +/******************************* + Mix-ins +*******************************/ +/*------------------ + Fonts +-------------------*/ +/*------------------ + Overrides +-------------------*/ +/* End Config */ +/******************************* + UI Tabs +*******************************/ +.ui.tab, +.play-button.tab, +.download-button.tab { + display: none; +} +/******************************* + States +*******************************/ +/*-------------------- + Active +---------------------*/ +.ui.tab.active, +.ui.tab.open, +.play-button.tab.active, +.play-button.tab.open, +.download-button.tab.active, +.download-button.tab.open { + display: block; +} +/*-------------------- + Loading +---------------------*/ +.ui.tab.loading, +.play-button.tab.loading, +.download-button.tab.loading { + position: relative; + overflow: hidden; + display: block; + min-height: 250px; +} +.ui.tab.loading *, +.play-button.tab.loading *, +.download-button.tab.loading * { + position: relative !important; + left: -10000px !important; +} +.ui.tab.loading:before, +.ui.tab.loading.segment:before, +.play-button.tab.loading:before, +.play-button.tab.loading.segment:before, +.download-button.tab.loading:before, +.download-button.tab.loading.segment:before { + position: absolute; + content: ''; + top: 100px; + left: 50%; + margin: -1.25em 0em 0em -1.25em; + width: 2.5em; + height: 2.5em; + border-radius: 500rem; + border: 0.2em solid rgba(0, 0, 0, 0.1); +} +.ui.tab.loading:after, +.ui.tab.loading.segment:after, +.play-button.tab.loading:after, +.play-button.tab.loading.segment:after, +.download-button.tab.loading:after, +.download-button.tab.loading.segment:after { + position: absolute; + content: ''; + top: 100px; + left: 50%; + margin: -1.25em 0em 0em -1.25em; + width: 2.5em; + height: 2.5em; + animation: button-spin 0.6s linear; + animation-iteration-count: infinite; + border-radius: 500rem; + border-color: #42495F transparent transparent; + border-style: solid; + border-width: 0.2em; + box-shadow: 0px 0px 0px 1px transparent; +} +/******************************* + Tab Overrides +*******************************/ +/******************************* + User Overrides +*******************************/ +/*! + * # Semantic UI - Transition + * http://github.com/semantic-org/semantic-ui/ + * + * + * Released under the MIT license + * http://opensource.org/licenses/MIT + * + */ +/******************************* + Theme +*******************************/ +/* + +████████╗██╗ ██╗███████╗███╗ ███╗███████╗███████╗ +╚══██╔══╝██║ ██║██╔════╝████╗ ████║██╔════╝██╔════╝ + ██║ ███████║█████╗ ██╔████╔██║█████╗ ███████╗ + ██║ ██╔══██║██╔══╝ ██║╚██╔╝██║██╔══╝ ╚════██║ + ██║ ██║ ██║███████╗██║ ╚═╝ ██║███████╗███████║ + ╚═╝ ╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝╚══════╝╚══════╝ + +*/ +/******************************* + Theme Selection +*******************************/ +/* To override a theme for an individual element + specify theme name below +*/ +/* Global */ +/* Elements */ +/* Collections */ +/* Modules */ +/* Views */ +/******************************* + Folders +*******************************/ +/* Path to theme packages */ +/* Path to site override folder */ +/******************************* + Import Theme +*******************************/ +/******************************* + Import Directives +*******************************/ +/*------------------ + Theme +-------------------*/ +/*-------------------- + Site Variables +---------------------*/ +/* Default site.variables */ +/******************************* + Site Settings +*******************************/ +/*------------------- + Fonts +--------------------*/ +/*------------------- + Base Sizes +--------------------*/ +/* This is the single variable that controls them all */ +/* The size of page text */ +/*------------------- + Border Radius +--------------------*/ +/* See Power-user section below + for explanation of @px variables +*/ +/*------------------- + Brand Colors +--------------------*/ +/*-------------- + Page Heading +---------------*/ +/*-------------- + Form Input +---------------*/ +/* This adjusts the default form input across all elements */ +/* Input Text Color */ +/* Line Height Default For Inputs in Browser (Descendors are 17px at 14px base em) */ +/*------------------- + Focused Input +--------------------*/ +/* Used on inputs, textarea etc */ +/* Used on dropdowns, other larger blocks */ +/*------------------- + Sizes +--------------------*/ +/* + Sizes are all expressed in terms of 14px/em (default em) + This ensures these "ratios" remain constant despite changes in EM +*/ +/*------------------- + Page +--------------------*/ +/*------------------- + Paragraph +--------------------*/ +/*------------------- + Links +--------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ +/*------------------- + Highlighted Text +--------------------*/ +/*------------------- + Loader +--------------------*/ +/*------------------- + Grid +--------------------*/ +/*------------------- + Transitions +--------------------*/ +/*------------------- + Breakpoints +--------------------*/ +/*------------------- + Site Colors +--------------------*/ +/*--- Colors ---*/ +/*--- Light Colors ---*/ +/*--- Neutrals ---*/ +/*--- Colored Backgrounds ---*/ +/*--- Colored Headers ---*/ +/*--- Colored Text ---*/ +/*--- Colored Border ---*/ +/*------------------- + Alpha Colors +--------------------*/ +/*------------------- + Accents +--------------------*/ +/* Differentiating Neutrals */ +/* Differentiating Layers */ +/******************************* + Power-User +*******************************/ +/*------------------- + Emotive Colors +--------------------*/ +/* Positive */ +/* Negative */ +/* Info */ +/* Warning */ +/*------------------- + Paths +--------------------*/ +/* For source only. Modified in gulp for dist */ +/*------------------- + Em Sizes +--------------------*/ +/* + This rounds @size values to the closest pixel then expresses that value in (r)em. + This ensures all size values round to exact pixels +*/ +/* em */ +/* rem */ +/*------------------- + Icons +--------------------*/ +/* Maximum Glyph Width of Icon */ +/*------------------- + Neutral Text +--------------------*/ +/*------------------- + Brand Colors +--------------------*/ +/*------------------- + Borders +--------------------*/ +/*------------------- + Derived Values +--------------------*/ +/* Loaders Position Offset */ +/* Rendered Scrollbar Width */ +/* Maximum Single Character Glyph Width, aka Capital "W" */ +/* Used to match floats with text */ +/* Header Spacing */ +/* Minimum Mobile Width */ +/* Positive / Negative Dupes */ +/* Responsive */ +/*------------------- + Exact Pixel Values +--------------------*/ +/* + These are used to specify exact pixel values in em + for things like borders that remain constantly + sized as emSize adjusts + + Since there are many more sizes than names for sizes, + these are named by their original pixel values. + +*/ +/* Columns */ +/******************************* + States +*******************************/ +/*------------------- + Disabled +--------------------*/ +/*------------------- + Hover +--------------------*/ +/*--- Shadows ---*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Focus +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Down (:active) +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Active +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/* Packaged site.variables */ +/******************************* + User Global Variables +*******************************/ +/*------------------- + Fonts +--------------------*/ +/*------------------- + Breakpoints +--------------------*/ +/* +@mobileBreakpoint : unit( (63 * @emSize), px); +@tabletBreakpoint : unit( (79 * @emSize), px); +@computerBreakpoint : unit( (91 * @emSize), px); +@largeMonitorBreakpoint : unit( (99 * @emSize), px); +@widescreenMonitorBreakpoint : unit( (119 * @emSize), px); +*/ +/******************************* + PXT Variables +*******************************/ +/*------------------- + Menu +--------------------*/ +/*------------------- + Layout +--------------------*/ +/*------------------- + Background +--------------------*/ +/*------------------- + Full screen +--------------------*/ +/*------------------- + Side Docs +--------------------*/ +/*------------------- + Editor +--------------------*/ +/* Component's site.variables */ +/******************************* + Site Settings +*******************************/ +/*------------------- + Fonts +--------------------*/ +/*------------------- + Base Sizes +--------------------*/ +/* This is the single variable that controls them all */ +/* The size of page text */ +/*------------------- + Border Radius +--------------------*/ +/* See Power-user section below + for explanation of @px variables +*/ +/*------------------- + Brand Colors +--------------------*/ +/*-------------- + Page Heading +---------------*/ +/*-------------- + Form Input +---------------*/ +/* This adjusts the default form input across all elements */ +/* Input Text Color */ +/* Line Height Default For Inputs in Browser (Descendors are 17px at 14px base em) */ +/*------------------- + Focused Input +--------------------*/ +/* Used on inputs, textarea etc */ +/* Used on dropdowns, other larger blocks */ +/*------------------- + Sizes +--------------------*/ +/* + Sizes are all expressed in terms of 14px/em (default em) + This ensures these "ratios" remain constant despite changes in EM +*/ +/*------------------- + Page +--------------------*/ +/*------------------- + Paragraph +--------------------*/ +/*------------------- + Links +--------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ +/*------------------- + Highlighted Text +--------------------*/ +/*------------------- + Loader +--------------------*/ +/*------------------- + Grid +--------------------*/ +/*------------------- + Transitions +--------------------*/ +/*------------------- + Breakpoints +--------------------*/ +/*------------------- + Site Colors +--------------------*/ +/*--- Colors ---*/ +/*--- Light Colors ---*/ +/*--- Neutrals ---*/ +/*--- Colored Backgrounds ---*/ +/*--- Colored Headers ---*/ +/*--- Colored Text ---*/ +/*--- Colored Border ---*/ +/*------------------- + Alpha Colors +--------------------*/ +/*------------------- + Accents +--------------------*/ +/* Differentiating Neutrals */ +/* Differentiating Layers */ +/******************************* + Power-User +*******************************/ +/*------------------- + Emotive Colors +--------------------*/ +/* Positive */ +/* Negative */ +/* Info */ +/* Warning */ +/*------------------- + Paths +--------------------*/ +/* For source only. Modified in gulp for dist */ +/*------------------- + Em Sizes +--------------------*/ +/* + This rounds @size values to the closest pixel then expresses that value in (r)em. + This ensures all size values round to exact pixels +*/ +/* em */ +/* rem */ +/*------------------- + Icons +--------------------*/ +/* Maximum Glyph Width of Icon */ +/*------------------- + Neutral Text +--------------------*/ +/*------------------- + Brand Colors +--------------------*/ +/*------------------- + Borders +--------------------*/ +/*------------------- + Derived Values +--------------------*/ +/* Loaders Position Offset */ +/* Rendered Scrollbar Width */ +/* Maximum Single Character Glyph Width, aka Capital "W" */ +/* Used to match floats with text */ +/* Header Spacing */ +/* Minimum Mobile Width */ +/* Positive / Negative Dupes */ +/* Responsive */ +/*------------------- + Exact Pixel Values +--------------------*/ +/* + These are used to specify exact pixel values in em + for things like borders that remain constantly + sized as emSize adjusts + + Since there are many more sizes than names for sizes, + these are named by their original pixel values. + +*/ +/* Columns */ +/******************************* + States +*******************************/ +/*------------------- + Disabled +--------------------*/ +/*------------------- + Hover +--------------------*/ +/*--- Shadows ---*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Focus +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Down (:active) +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Active +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/* Site theme site.variables */ +/******************************* + User Global Variables +*******************************/ +/*------------------- + Site Colors +--------------------*/ +/******************************* + PXT Overrides +*******************************/ +/*------------------- + Component Variables +---------------------*/ +/* Default */ +/******************************* + Transition +*******************************/ +/* Packaged Theme */ +/******************************* + Transition +*******************************/ +/* Site Theme */ +/******************************* + User Variable Overrides +*******************************/ +/******************************* + Mix-ins +*******************************/ +/*------------------ + Fonts +-------------------*/ +/*------------------ + Overrides +-------------------*/ +/* End Config */ +/******************************* + Transitions +*******************************/ +.transition { + animation-iteration-count: 1; + animation-duration: 300ms; + animation-timing-function: ease; + animation-fill-mode: both; +} +/******************************* + States +*******************************/ +/* Animating */ +.animating.transition { + backface-visibility: hidden; + visibility: visible !important; +} +/* Loading */ +.loading.transition { + position: absolute; + top: -99999px; + left: -99999px; +} +/* Hidden */ +.hidden.transition { + display: none; + visibility: hidden; +} +/* Visible */ +.visible.transition { + display: block !important; + visibility: visible !important; + /* backface-visibility: @backfaceVisibility; + transform: @use3DAcceleration;*/ +} +/* Disabled */ +.disabled.transition { + animation-play-state: paused; +} +/******************************* + Variations +*******************************/ +.looping.transition { + animation-iteration-count: infinite; +} +/******************************* + Transitions +*******************************/ +/* + Some transitions adapted from Animate CSS + https://github.com/daneden/animate.css + + Additional transitions adapted from Glide + by Nick Pettit - https://github.com/nickpettit/glide +*/ +/*-------------- + Browse +---------------*/ +.transition.browse { + animation-duration: 500ms; +} +.transition.browse.in { + animation-name: browseIn; +} +.transition.browse.out, +.transition.browse.left.out { + animation-name: browseOutLeft; +} +.transition.browse.right.out { + animation-name: browseOutRight; +} +/* In */ +@keyframes browseIn { + 0% { + transform: scale(0.8) translateZ(0px); + z-index: -1; + } + 10% { + transform: scale(0.8) translateZ(0px); + z-index: -1; + opacity: 0.7; + } + 80% { + transform: scale(1.05) translateZ(0px); + opacity: 1; + z-index: 999; + } + 100% { + transform: scale(1) translateZ(0px); + z-index: 999; + } +} +/* Out */ +@keyframes browseOutLeft { + 0% { + z-index: 999; + transform: translateX(0%) rotateY(0deg) rotateX(0deg); + } + 50% { + z-index: -1; + transform: translateX(-105%) rotateY(35deg) rotateX(10deg) translateZ(-10px); + } + 80% { + opacity: 1; + } + 100% { + z-index: -1; + transform: translateX(0%) rotateY(0deg) rotateX(0deg) translateZ(-10px); + opacity: 0; + } +} +@keyframes browseOutRight { + 0% { + z-index: 999; + transform: translateX(0%) rotateY(0deg) rotateX(0deg); + } + 50% { + z-index: 1; + transform: translateX(105%) rotateY(35deg) rotateX(10deg) translateZ(-10px); + } + 80% { + opacity: 1; + } + 100% { + z-index: 1; + transform: translateX(0%) rotateY(0deg) rotateX(0deg) translateZ(-10px); + opacity: 0; + } +} +/*-------------- + Drop +---------------*/ +.drop.transition { + transform-origin: top center; + animation-duration: 400ms; + animation-timing-function: cubic-bezier(0.34, 1.61, 0.7, 1); +} +.drop.transition.in { + animation-name: dropIn; +} +.drop.transition.out { + animation-name: dropOut; +} +/* Drop */ +@keyframes dropIn { + 0% { + opacity: 0; + transform: scale(0); + } + 100% { + opacity: 1; + transform: scale(1); + } +} +@keyframes dropOut { + 0% { + opacity: 1; + transform: scale(1); + } + 100% { + opacity: 0; + transform: scale(0); + } +} +/*-------------- + Fade +---------------*/ +.transition.fade.in { + animation-name: fadeIn; +} +.transition[class*="fade up"].in { + animation-name: fadeInUp; +} +.transition[class*="fade down"].in { + animation-name: fadeInDown; +} +.transition[class*="fade left"].in { + animation-name: fadeInLeft; +} +.transition[class*="fade right"].in { + animation-name: fadeInRight; +} +.transition.fade.out { + animation-name: fadeOut; +} +.transition[class*="fade up"].out { + animation-name: fadeOutUp; +} +.transition[class*="fade down"].out { + animation-name: fadeOutDown; +} +.transition[class*="fade left"].out { + animation-name: fadeOutLeft; +} +.transition[class*="fade right"].out { + animation-name: fadeOutRight; +} +/* In */ +@keyframes fadeIn { + 0% { + opacity: 0; + } + 100% { + opacity: 1; + } +} +@keyframes fadeInUp { + 0% { + opacity: 0; + transform: translateY(10%); + } + 100% { + opacity: 1; + transform: translateY(0%); + } +} +@keyframes fadeInDown { + 0% { + opacity: 0; + transform: translateY(-10%); + } + 100% { + opacity: 1; + transform: translateY(0%); + } +} +@keyframes fadeInLeft { + 0% { + opacity: 0; + transform: translateX(10%); + } + 100% { + opacity: 1; + transform: translateX(0%); + } +} +@keyframes fadeInRight { + 0% { + opacity: 0; + transform: translateX(-10%); + } + 100% { + opacity: 1; + transform: translateX(0%); + } +} +/* Out */ +@keyframes fadeOut { + 0% { + opacity: 1; + } + 100% { + opacity: 0; + } +} +@keyframes fadeOutUp { + 0% { + opacity: 1; + transform: translateY(0%); + } + 100% { + opacity: 0; + transform: translateY(5%); + } +} +@keyframes fadeOutDown { + 0% { + opacity: 1; + transform: translateY(0%); + } + 100% { + opacity: 0; + transform: translateY(-5%); + } +} +@keyframes fadeOutLeft { + 0% { + opacity: 1; + transform: translateX(0%); + } + 100% { + opacity: 0; + transform: translateX(5%); + } +} +@keyframes fadeOutRight { + 0% { + opacity: 1; + transform: translateX(0%); + } + 100% { + opacity: 0; + transform: translateX(-5%); + } +} +/*-------------- + Flips +---------------*/ +.flip.transition.in, +.flip.transition.out { + animation-duration: 600ms; +} +.horizontal.flip.transition.in { + animation-name: horizontalFlipIn; +} +.horizontal.flip.transition.out { + animation-name: horizontalFlipOut; +} +.vertical.flip.transition.in { + animation-name: verticalFlipIn; +} +.vertical.flip.transition.out { + animation-name: verticalFlipOut; +} +/* In */ +@keyframes horizontalFlipIn { + 0% { + transform: perspective(2000px) rotateY(-90deg); + opacity: 0; + } + 100% { + transform: perspective(2000px) rotateY(0deg); + opacity: 1; + } +} +@keyframes verticalFlipIn { + 0% { + transform: perspective(2000px) rotateX(-90deg); + opacity: 0; + } + 100% { + transform: perspective(2000px) rotateX(0deg); + opacity: 1; + } +} +/* Out */ +@keyframes horizontalFlipOut { + 0% { + transform: perspective(2000px) rotateY(0deg); + opacity: 1; + } + 100% { + transform: perspective(2000px) rotateY(90deg); + opacity: 0; + } +} +@keyframes verticalFlipOut { + 0% { + transform: perspective(2000px) rotateX(0deg); + opacity: 1; + } + 100% { + transform: perspective(2000px) rotateX(-90deg); + opacity: 0; + } +} +/*-------------- + Scale +---------------*/ +.scale.transition.in { + animation-name: scaleIn; +} +.scale.transition.out { + animation-name: scaleOut; +} +@keyframes scaleIn { + 0% { + opacity: 0; + transform: scale(0.8); + } + 100% { + opacity: 1; + transform: scale(1); + } +} +/* Out */ +@keyframes scaleOut { + 0% { + opacity: 1; + transform: scale(1); + } + 100% { + opacity: 0; + transform: scale(0.9); + } +} +/*-------------- + Fly +---------------*/ +/* Inward */ +.transition.fly { + animation-duration: 0.6s; + transition-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); +} +.transition.fly.in { + animation-name: flyIn; +} +.transition[class*="fly up"].in { + animation-name: flyInUp; +} +.transition[class*="fly down"].in { + animation-name: flyInDown; +} +.transition[class*="fly left"].in { + animation-name: flyInLeft; +} +.transition[class*="fly right"].in { + animation-name: flyInRight; +} +/* Outward */ +.transition.fly.out { + animation-name: flyOut; +} +.transition[class*="fly up"].out { + animation-name: flyOutUp; +} +.transition[class*="fly down"].out { + animation-name: flyOutDown; +} +.transition[class*="fly left"].out { + animation-name: flyOutLeft; +} +.transition[class*="fly right"].out { + animation-name: flyOutRight; +} +/* In */ +@keyframes flyIn { + 0% { + opacity: 0; + transform: scale3d(0.3, 0.3, 0.3); + } + 20% { + transform: scale3d(1.1, 1.1, 1.1); + } + 40% { + transform: scale3d(0.9, 0.9, 0.9); + } + 60% { + opacity: 1; + transform: scale3d(1.03, 1.03, 1.03); + } + 80% { + transform: scale3d(0.97, 0.97, 0.97); + } + 100% { + opacity: 1; + transform: scale3d(1, 1, 1); + } +} +@keyframes flyInUp { + 0% { + opacity: 0; + transform: translate3d(0, 1500px, 0); + } + 60% { + opacity: 1; + transform: translate3d(0, -20px, 0); + } + 75% { + transform: translate3d(0, 10px, 0); + } + 90% { + transform: translate3d(0, -5px, 0); + } + 100% { + transform: translate3d(0, 0, 0); + } +} +@keyframes flyInDown { + 0% { + opacity: 0; + transform: translate3d(0, -1500px, 0); + } + 60% { + opacity: 1; + transform: translate3d(0, 25px, 0); + } + 75% { + transform: translate3d(0, -10px, 0); + } + 90% { + transform: translate3d(0, 5px, 0); + } + 100% { + transform: none; + } +} +@keyframes flyInLeft { + 0% { + opacity: 0; + transform: translate3d(1500px, 0, 0); + } + 60% { + opacity: 1; + transform: translate3d(-25px, 0, 0); + } + 75% { + transform: translate3d(10px, 0, 0); + } + 90% { + transform: translate3d(-5px, 0, 0); + } + 100% { + transform: none; + } +} +@keyframes flyInRight { + 0% { + opacity: 0; + transform: translate3d(-1500px, 0, 0); + } + 60% { + opacity: 1; + transform: translate3d(25px, 0, 0); + } + 75% { + transform: translate3d(-10px, 0, 0); + } + 90% { + transform: translate3d(5px, 0, 0); + } + 100% { + transform: none; + } +} +/* Out */ +@keyframes flyOut { + 20% { + transform: scale3d(0.9, 0.9, 0.9); + } + 50%, + 55% { + opacity: 1; + transform: scale3d(1.1, 1.1, 1.1); + } + 100% { + opacity: 0; + transform: scale3d(0.3, 0.3, 0.3); + } +} +@keyframes flyOutUp { + 20% { + transform: translate3d(0, 10px, 0); + } + 40%, + 45% { + opacity: 1; + transform: translate3d(0, -20px, 0); + } + 100% { + opacity: 0; + transform: translate3d(0, 2000px, 0); + } +} +@keyframes flyOutDown { + 20% { + transform: translate3d(0, -10px, 0); + } + 40%, + 45% { + opacity: 1; + transform: translate3d(0, 20px, 0); + } + 100% { + opacity: 0; + transform: translate3d(0, -2000px, 0); + } +} +@keyframes flyOutRight { + 20% { + opacity: 1; + transform: translate3d(20px, 0, 0); + } + 100% { + opacity: 0; + transform: translate3d(-2000px, 0, 0); + } +} +@keyframes flyOutLeft { + 20% { + opacity: 1; + transform: translate3d(-20px, 0, 0); + } + 100% { + opacity: 0; + transform: translate3d(2000px, 0, 0); + } +} +/*-------------- + Slide +---------------*/ +.transition.slide.in, +.transition[class*="slide down"].in { + animation-name: slideInY; + transform-origin: top center; +} +.transition[class*="slide up"].in { + animation-name: slideInY; + transform-origin: bottom center; +} +.transition[class*="slide left"].in { + animation-name: slideInX; + transform-origin: center right; +} +.transition[class*="slide right"].in { + animation-name: slideInX; + transform-origin: center left; +} +.transition.slide.out, +.transition[class*="slide down"].out { + animation-name: slideOutY; + transform-origin: top center; +} +.transition[class*="slide up"].out { + animation-name: slideOutY; + transform-origin: bottom center; +} +.transition[class*="slide left"].out { + animation-name: slideOutX; + transform-origin: center right; +} +.transition[class*="slide right"].out { + animation-name: slideOutX; + transform-origin: center left; +} +/* In */ +@keyframes slideInY { + 0% { + opacity: 0; + transform: scaleY(0); + } + 100% { + opacity: 1; + transform: scaleY(1); + } +} +@keyframes slideInX { + 0% { + opacity: 0; + transform: scaleX(0); + } + 100% { + opacity: 1; + transform: scaleX(1); + } +} +/* Out */ +@keyframes slideOutY { + 0% { + opacity: 1; + transform: scaleY(1); + } + 100% { + opacity: 0; + transform: scaleY(0); + } +} +@keyframes slideOutX { + 0% { + opacity: 1; + transform: scaleX(1); + } + 100% { + opacity: 0; + transform: scaleX(0); + } +} +/*-------------- + Swing +---------------*/ +.transition.swing { + animation-duration: 800ms; +} +.transition[class*="swing down"].in { + animation-name: swingInX; + transform-origin: top center; +} +.transition[class*="swing up"].in { + animation-name: swingInX; + transform-origin: bottom center; +} +.transition[class*="swing left"].in { + animation-name: swingInY; + transform-origin: center right; +} +.transition[class*="swing right"].in { + animation-name: swingInY; + transform-origin: center left; +} +.transition.swing.out, +.transition[class*="swing down"].out { + animation-name: swingOutX; + transform-origin: top center; +} +.transition[class*="swing up"].out { + animation-name: swingOutX; + transform-origin: bottom center; +} +.transition[class*="swing left"].out { + animation-name: swingOutY; + transform-origin: center right; +} +.transition[class*="swing right"].out { + animation-name: swingOutY; + transform-origin: center left; +} +/* In */ +@keyframes swingInX { + 0% { + transform: perspective(1000px) rotateX(90deg); + opacity: 0; + } + 40% { + transform: perspective(1000px) rotateX(-30deg); + opacity: 1; + } + 60% { + transform: perspective(1000px) rotateX(15deg); + } + 80% { + transform: perspective(1000px) rotateX(-7.5deg); + } + 100% { + transform: perspective(1000px) rotateX(0deg); + } +} +@keyframes swingInY { + 0% { + transform: perspective(1000px) rotateY(-90deg); + opacity: 0; + } + 40% { + transform: perspective(1000px) rotateY(30deg); + opacity: 1; + } + 60% { + transform: perspective(1000px) rotateY(-17.5deg); + } + 80% { + transform: perspective(1000px) rotateY(7.5deg); + } + 100% { + transform: perspective(1000px) rotateY(0deg); + } +} +/* Out */ +@keyframes swingOutX { + 0% { + transform: perspective(1000px) rotateX(0deg); + } + 40% { + transform: perspective(1000px) rotateX(-7.5deg); + } + 60% { + transform: perspective(1000px) rotateX(17.5deg); + } + 80% { + transform: perspective(1000px) rotateX(-30deg); + opacity: 1; + } + 100% { + transform: perspective(1000px) rotateX(90deg); + opacity: 0; + } +} +@keyframes swingOutY { + 0% { + transform: perspective(1000px) rotateY(0deg); + } + 40% { + transform: perspective(1000px) rotateY(7.5deg); + } + 60% { + transform: perspective(1000px) rotateY(-10deg); + } + 80% { + transform: perspective(1000px) rotateY(30deg); + opacity: 1; + } + 100% { + transform: perspective(1000px) rotateY(-90deg); + opacity: 0; + } +} +/******************************* + Static Animations +*******************************/ +/*-------------- + Emphasis +---------------*/ +.flash.transition { + animation-duration: 750ms; + animation-name: flash; +} +.shake.transition { + animation-duration: 750ms; + animation-name: shake; +} +.bounce.transition { + animation-duration: 750ms; + animation-name: bounce; +} +.tada.transition { + animation-duration: 750ms; + animation-name: tada; +} +.pulse.transition { + animation-duration: 500ms; + animation-name: pulse; +} +.jiggle.transition { + animation-duration: 750ms; + animation-name: jiggle; +} +/* Flash */ +@keyframes flash { + 0%, + 50%, + 100% { + opacity: 1; + } + 25%, + 75% { + opacity: 0; + } +} +/* Shake */ +@keyframes shake { + 0%, + 100% { + transform: translateX(0); + } + 10%, + 30%, + 50%, + 70%, + 90% { + transform: translateX(-10px); + } + 20%, + 40%, + 60%, + 80% { + transform: translateX(10px); + } +} +/* Bounce */ +@keyframes bounce { + 0%, + 20%, + 50%, + 80%, + 100% { + transform: translateY(0); + } + 40% { + transform: translateY(-30px); + } + 60% { + transform: translateY(-15px); + } +} +/* Tada */ +@keyframes tada { + 0% { + transform: scale(1); + } + 10%, + 20% { + transform: scale(0.9) rotate(-3deg); + } + 30%, + 50%, + 70%, + 90% { + transform: scale(1.1) rotate(3deg); + } + 40%, + 60%, + 80% { + transform: scale(1.1) rotate(-3deg); + } + 100% { + transform: scale(1) rotate(0); + } +} +/* Pulse */ +@keyframes pulse { + 0% { + transform: scale(1); + opacity: 1; + } + 50% { + transform: scale(0.9); + opacity: 0.7; + } + 100% { + transform: scale(1); + opacity: 1; + } +} +/* Rubberband */ +@keyframes jiggle { + 0% { + transform: scale3d(1, 1, 1); + } + 30% { + transform: scale3d(1.25, 0.75, 1); + } + 40% { + transform: scale3d(0.75, 1.25, 1); + } + 50% { + transform: scale3d(1.15, 0.85, 1); + } + 65% { + transform: scale3d(0.95, 1.05, 1); + } + 75% { + transform: scale3d(1.05, 0.95, 1); + } + 100% { + transform: scale3d(1, 1, 1); + } +} +/******************************* + Site Overrides +*******************************/ +/*-------------- + Rotate In +---------------*/ +/* Inward */ +.transition.rotate { + animation-duration: 0.6s; + transition-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1); +} +.transition.rotate.in { + animation-name: rotateIn; +} +.transition[class*="rotate down left"].in { + animation-name: rotateInDownLeft; +} +.transition[class*="rotate down right"].in { + animation-name: rotateInDownRight; +} +.transition[class*="rotate up left"].in { + animation-name: rotateInUpLeft; +} +.transition[class*="rotate up right"].in { + animation-name: rotateInUpRight; +} +/* Outward */ +.transition.rotate.out { + animation-name: rotateOut; +} +.transition[class*="rotate down left"].out { + animation-name: rotateOutDownLeft; +} +.transition[class*="rotate down right"].out { + animation-name: rotateOutDownRight; +} +.transition[class*="rotate up left"].out { + animation-name: rotateOutUpLeft; +} +.transition[class*="rotate up right"].out { + animation-name: rotateOutUpRight; +} +/* In */ +@keyframes rotateIn { + from { + transform-origin: center; + transform: rotate3d(0, 0, 1, -200deg); + opacity: 0; + } + to { + transform-origin: center; + transform: none; + opacity: 1; + } +} +@keyframes rotateInDownLeft { + from { + transform-origin: left bottom; + transform: rotate3d(0, 0, 1, -45deg); + opacity: 0; + } + to { + transform-origin: left bottom; + transform: none; + opacity: 1; + } +} +@keyframes rotateInDownRight { + from { + transform-origin: right bottom; + transform: rotate3d(0, 0, 1, 45deg); + opacity: 0; + } + to { + transform-origin: right bottom; + transform: none; + opacity: 1; + } +} +@keyframes rotateInUpLeft { + from { + transform-origin: left bottom; + transform: rotate3d(0, 0, 1, 45deg); + opacity: 0; + } + to { + transform-origin: left bottom; + transform: none; + opacity: 1; + } +} +@keyframes rotateInUpRight { + from { + transform-origin: right bottom; + transform: rotate3d(0, 0, 1, -90deg); + opacity: 0; + } + to { + transform-origin: right bottom; + transform: none; + opacity: 1; + } +} +/* Out */ +@keyframes rotateOut { + from { + transform-origin: center; + opacity: 1; + } + to { + transform-origin: center; + transform: rotate3d(0, 0, 1, 200deg); + opacity: 0; + } +} +@keyframes rotateOutDownLeft { + from { + transform-origin: left bottom; + opacity: 1; + } + to { + transform-origin: left bottom; + transform: rotate3d(0, 0, 1, 45deg); + opacity: 0; + } +} +@keyframes rotateOutDownRight { + from { + transform-origin: right bottom; + opacity: 1; + } + to { + transform-origin: right bottom; + transform: rotate3d(0, 0, 1, -45deg); + opacity: 0; + } +} +@keyframes rotateOutUpLeft { + from { + transform-origin: left bottom; + opacity: 1; + } + to { + transform-origin: left bottom; + transform: rotate3d(0, 0, 1, -45deg); + opacity: 0; + } +} +@keyframes rotateOutUpRight { + from { + transform-origin: right bottom; + opacity: 1; + } + to { + transform-origin: right bottom; + transform: rotate3d(0, 0, 1, 90deg); + opacity: 0; + } +} +/* Import all components */ +/* + +███████╗███████╗███╗ ███╗ █████╗ ███╗ ██╗████████╗██╗ ██████╗ ██╗ ██╗██╗ +██╔════╝██╔════╝████╗ ████║██╔══██╗████╗ ██║╚══██╔══╝██║██╔════╝ ██║ ██║██║ +███████╗█████╗ ██╔████╔██║███████║██╔██╗ ██║ ██║ ██║██║ ██║ ██║██║ +╚════██║██╔══╝ ██║╚██╔╝██║██╔══██║██║╚██╗██║ ██║ ██║██║ ██║ ██║██║ +███████║███████╗██║ ╚═╝ ██║██║ ██║██║ ╚████║ ██║ ██║╚██████╗ ╚██████╔╝██║ +╚══════╝╚══════╝╚═╝ ╚═╝╚═╝ ╚═╝╚═╝ ╚═══╝ ╚═╝ ╚═╝ ╚═════╝ ╚═════╝ ╚═╝ + + Import this file into your LESS project to use Semantic UI without build tools +*/ +/* Global */ +/* Elements */ +/* Collections */ +/* Views */ +/* Modules */ +/* Reference import */ +/******************************* + Layout +*******************************/ +/* Main Layout */ +#filelist, +#maineditor, +#sidedocs { + position: absolute; + top: 5rem; + bottom: 0rem; +} +.hideMenuBar #filelist, +.hideMenuBar #maineditor, +.hideMenuBar #sidedocs { + top: 0; +} +.full-abs { + position: absolute !important; + left: 0; + top: 0; + bottom: 0; + right: 0; +} +/* Main Editor layout */ +#maineditor { + left: 23rem; + right: 0; + overflow: visible; +} +.rtl #maineditor { + left: 0; + right: 23rem; +} +/* File list / Simulator layout */ +#simulator { + height: 100%; +} +#filelist, +#downloadArea { + min-width: 23rem; + max-width: 23rem; + left: 0; +} +.rtl #filelist { + left: auto; + right: 0; +} +#filelist { + padding: 1em 2em 1em 2em; + overflow-x: hidden; + overflow-y: auto; + margin-top: 0; + margin-bottom: 0; + width: 100%; + background-color: #fff; +} +#filelist .simtoolbar { + -webkit-transition: opacity 0.2s; + /* Safari */ + -moz-transition: opacity 0.2s; + /* Mozilla */ + -webkit-transition-timing-function: linear; + /* Mozilla */ + -o-transition: opacity 0.2s; + /* Opera */ + transition: opacity 0.2s; + transition-timing-function: linear; +} +#downloadArea { + margin-top: 0 !important; + padding-top: 0.7rem; + background-color: #fff; +} +.filemenu { + direction: ltr; +} +#filelist .menu { + width: 100%; +} +#filelist .nested.item { + padding-left: 4rem; +} +#filelist .header { + background: rgba(0, 0, 0, 0.05); +} +#simulators { + text-align: center; +} +/* Getting started button */ +#getting-started-btn { + display: none; + z-index: 9; + position: absolute; + top: 5rem; + right: 2rem; +} +.rtl #getting-started-btn { + right: auto; + left: 2rem; +} +#getting-started-btn:not(.sideDocs) { + display: block; +} +.ui.button.getting-started-btn .ui.text, +.play-button.button.getting-started-btn .play-button.text, +.ui.play-button.getting-started-btn .ui.text, +.download-button.button.getting-started-btn .download-button.text, +.ui.download-button.getting-started-btn .ui.text { + font-weight: 100 !important; +} +/* Side Docs layout */ +#sidedocs { + display: none; + overflow-y: auto; + right: 0; + border: none; + top: 0; + padding-top: 5rem; + height: 100%; +} +.rtl #sidedocs { + right: auto; + left: 0; +} +#sidedocspopout { + position: absolute; + top: 6rem; + right: 4.25rem; + display: none; +} +.rtl #sidedocspopout { + right: auto; + left: 4.25rem; +} +#sidedocsexpand { + position: absolute; + top: 6rem; + right: 1.25rem; + display: none; +} +.rtl #sidedocsexpand { + right: auto; + left: 1.25rem; +} +/* Tutorial Mode */ +.tutorial-menuitem > .selected { + background-color: #3CB5B5 !important; + padding: 1.3rem !important; + padding-left: 1.5rem !important; + padding-right: 1.5rem !important; +} +#tutorialcard { + position: absolute; + z-index: 9; + min-width: 320px; +} +#tutorialcard.top { + /* top right */ + top: 1rem; + right: 1rem; +} +.rtl #tutorialcard.top { + /* bottom left */ + right: auto; + left: 1rem; +} +#tutorialcard.bottom { + /* bottom right */ + bottom: 6rem; + right: 1rem; +} +.rtl #tutorialcard.bottom { + /* bottom left */ + right: auto; + left: 1rem; +} +#tutorialcard .ui.card, +#tutorialcard .play-button.card, +#tutorialcard .download-button.card { + padding: 2px; +} +#tutorialcontent { + display: block; + width: 100%; + overflow: hidden; + border: none; + height: 100%; +} +body#docs.tutorial { + overflow-y: hidden; +} +#docs.tutorial .ui.segment, +#docs.tutorial .play-button.segment, +#docs.tutorial .download-button.segment { + padding: 0; + margin: 0; + box-shadow: none; + border: none; +} +#docs.tutorial #content { + margin-bottom: 0.5rem !important; +} +/* Cookie Message */ +#cookiemsg { + position: absolute; + right: 2rem; + bottom: 12rem; + width: 18rem; + text-align: left; + z-index: 1000; +} +#cookiemsg > a { + color: white; + text-decoration: underline; +} +.rtl #cookiemsg { + right: auto; + left: 2rem; + text-align: right; +} +.collapsedEditorTools #cookiemsg { + bottom: 6rem; +} +/* Simulator */ +div.simframe { + border: none; + margin: 0 0 0.5rem 0; + position: relative; + background: transparent; + width: 100%; + padding-bottom: 81.96%; +} +div.simframe > iframe { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; +} +.simHeadless { + height: 0 !important; + width: 0 !important; +} +/* Menu */ +.ui.menu .item.editor-menuitem, +.play-button.menu .item.editor-menuitem, +.download-button.menu .item.editor-menuitem { + background: rgba(27, 28, 29, 0.3) !important; + margin: 0.5rem; + padding: 0.7rem; + border-radius: 0.5rem !important; +} +.sandbox .ui.menu.fixed .item:first-child, +.sandbox .play-button.menu.fixed .item:first-child, +.sandbox .download-button.menu.fixed .item:first-child { + border-radius: 0.5rem !important; +} +.ui.menu.fixed .item.blocks-menuitem, +.ui.menu.fixed .item.javascript-menuitem, +.play-button.menu.fixed .item.blocks-menuitem, +.play-button.menu.fixed .item.javascript-menuitem, +.download-button.menu.fixed .item.blocks-menuitem, +.download-button.menu.fixed .item.javascript-menuitem { + border-radius: 0.2rem !important; +} +.ui.inverted.menu .item.blocks-menuitem, +.play-button.inverted.menu .item.blocks-menuitem, +.download-button.inverted.menu .item.blocks-menuitem { + border-top-right-radius: 0px !important; + border-bottom-right-radius: 0px !important; +} +.ui.inverted.menu .item.javascript-menuitem, +.play-button.inverted.menu .item.javascript-menuitem, +.download-button.inverted.menu .item.javascript-menuitem { + border-top-left-radius: 0px !important; + border-bottom-left-radius: 0px !important; +} +.ui.inverted.menu .item.blocks-menuitem, +.ui.inverted.menu .item.javascript-menuitem, +.play-button.inverted.menu .item.blocks-menuitem, +.play-button.inverted.menu .item.javascript-menuitem, +.download-button.inverted.menu .item.blocks-menuitem, +.download-button.inverted.menu .item.javascript-menuitem { + -webkit-transition: background 1s; + /* Safari */ + -moz-transition: background 1s; + /* Mozilla */ + -webkit-transition-timing-function: ease-in; + /* Mozilla */ + -o-transition: background 1s; + /* Opera */ + transition: background 1s; + transition-timing-function: ease-in; +} +/* Editor tools */ +#editortools { + position: fixed; + top: auto; + bottom: 0; + left: 0; + right: 0; + z-index: 3; + height: 5rem; + background-color: #fff; +} +#blocksArea, +#monacoEditor, +#pxtJsonEditor, +#filelist { + bottom: 5rem !important; +} +/* Help card */ +#helpcard { + position: absolute; + right: 7rem; + bottom: 2.2rem; + margin: 0; + z-index: 5; + font-size: 0.8rem; +} +.rtl #helpcard { + left: 7rem; + right: auto; +} +/* Logo */ +.ui.menu .ui.item.logo, +.play-button.menu .play-button.item.logo, +.download-button.menu .download-button.item.logo { + font-size: 2.2rem; + margin: 0; + padding: 0rem !important; +} +.ui.item.logo .name, +.play-button.item.logo .name, +.download-button.item.logo .name { + font-family: 'Segoe UI', Tahoma, Geneva, Verdana, inherit; + color: #666666; + padding: 0 0.3rem; +} +.ui.item.logo svg, +.play-button.item.logo svg, +.download-button.item.logo svg { + width: 1.2rem; + height: 1.2rem; +} +.ui.item.logo img, +.play-button.item.logo img, +.download-button.item.logo img { + max-height: 2.0rem; + margin-left: 1rem; + margin-right: 1rem; +} +.modal img.ui.logo, +.modal img.play-button.logo, +.modal img.download-button.logo { + max-width: 10em; + max-height: 3em; + vertical-align: middle; +} +/* Sandbox */ +.sandboxfooter { + position: absolute; + bottom: 0rem; + right: 1rem; + z-index: 5; + font-size: 0.7rem; + margin-bottom: 0.2rem !important; +} +.rtl .sandboxfooter { + right: auto; + left: 1rem; +} +/* code card */ +.ui.card .image pre, +.play-button.card .image pre, +.download-button.card .image pre { + margin-left: 0.5rem; + margin-right: 0.5rem; + color: #000; + font-size: 0.7rem; + white-space: pre-wrap; + max-height: 10rem; + overflow-y: hidden; +} +/* Popup message */ +#msg { + position: absolute; + bottom: 5rem; + left: 0; + right: 0; + text-align: center; +} +#msg > div { + display: inline-block; + z-index: 100; +} +#msg > div:empty { + display: none; +} +/* Scrollbars */ +/* OSX Lion+ hides scrollbars while not in use, this overrides that so it's obvious when a div can be scrolled */ +::-webkit-scrollbar { + -moz-appearance: none; + -webkit-appearance: none; + appearance: none; + width: 10px; + height: 10px; +} +::-webkit-scrollbar-thumb { + border-radius: 4px; + background-color: #ccc; + box-shadow: 0 0 1px #ccc; + -webkit-box-shadow: 0 0 1px #ccc; +} +/* Button Colors */ +/******************************* + Docs +*******************************/ +#docs { + font-family: 'Roboto Mono', 'Helvetica Neue', Arial, Helvetica, sans-serif !important; +} +#docs > h1, +h2, +h3, +h4, +h5, +h6 { + font-family: 'Roboto Mono', 'Helvetica Neue', Arial, Helvetica, sans-serif !important; +} +#docs span.block { + display: inline-block; + vertical-align: middle; +} +/******************************* + Projects Modal +*******************************/ +.ui.modal.projectsdialog .ui.dividing.header, +.ui.modal.projectsdialog .content > .header, +.play-button.modal.projectsdialog .play-button.dividing.header, +.play-button.modal.projectsdialog .content > .header, +.download-button.modal.projectsdialog .download-button.dividing.header, +.download-button.modal.projectsdialog .content > .header { + font-weight: normal !important; +} +.ui.modal.projectsdialog .ui.secondary.inverted.pointing.menu, +.play-button.modal.projectsdialog .play-button.secondary.inverted.pointing.menu, +.download-button.modal.projectsdialog .download-button.secondary.inverted.pointing.menu { + border: 0; +} +.ui.modal.projectsdialog .group, +.play-button.modal.projectsdialog .group, +.download-button.modal.projectsdialog .group { + padding: 1rem; +} +.ui.modal.projectsdialog > .content, +.play-button.modal.projectsdialog > .content, +.download-button.modal.projectsdialog > .content { + padding: 0 !important; +} +.ui.modal.projectsdialog .tabsegment, +.play-button.modal.projectsdialog .tabsegment, +.download-button.modal.projectsdialog .tabsegment { + min-height: 450px; + background: white !important; +} +/******************************* + Blockly +*******************************/ +.blocklyTooltipDiv { + border: none !important; + box-shadow: none !important; + background-color: transparent !important; + opacity: 1 !important; +} +.blocklyToolboxDiv, +.monacoToolboxDiv { + background: #F6F4E6 !important; + z-index: 1; + -webkit-transition: width 1s; + /* Safari */ + -moz-transition: width 1s; + /* Mozilla */ + -webkit-transition-timing-function: ease-in; + /* Mozilla */ + -o-transition: width 1s; + /* Opera */ + transition: width 1s; + transition-timing-function: ease-in; +} +svg.blocklySvg { + background-color: #fff !important; +} +#blocksEditor .injectionDiv svg { + overflow: visible; +} +span.blocklyTreeLabel, +text.blocklyText, +input.blocklyHtmlInput { + font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', 'Consolas', 'source-code-pro', monospace !important; +} +/* Using 1rem creates font size issues in Edge +text.blocklyText { + font-size:1rem !important; +} */ +span.blocklyTreeLabel { + font-size: 1.25rem; +} +.blocklyFlyoutButtonShadow { + fill: none !important; +} +.blocklyFlyoutLabelText { + fill: white !important; + font-size: 1rem; +} +.blocklyFlyoutLabelText:hover { + fill: white !important; +} +/* Opacity of blockly flyout background */ +.blocklyFlyoutBackground { + fill-opacity: 0.9 !important; +} +/* This horrendous selector and the next are for subcategories in the Blockly toolbox */ +div.blocklyTreeRoot div div div div div.blocklyTreeRow { + border-left-width: 12px !important; + padding-left: 0px !important; +} +div.blocklyTreeRoot div div div div div.blocklyTreeRow span.blocklyTreeLabel { + font-size: 1rem; +} +/* The trash icon inside the toolbox */ +#blocklyTrashIcon { + position: absolute; + top: 20%; + margin-left: auto; + margin-right: auto; + left: 0; + right: 0; + width: 100px; + height: 80px; + z-index: 8; + font-size: 5rem; + color: #3CB5B5; +} +/* Blockly / Monaco Toolbox Buttons */ +#blocklyToolboxButtons, +#monacoToolboxButtons { + margin-top: 0.1rem; + font-size: 3rem; +} +/* Blockly Search bar */ +.blocklySearchInputField { + border: 0 !important; + border-radius: 0 !important; +} +/* Blockly toolbox icons */ +span.blocklyTreeIcon { + opacity: 1; + margin: -0.2em 0.25em 0em 0.25em; + width: 1.18em; + font-family: 'Icons'; + font-style: normal; + font-weight: normal; + text-decoration: inherit; + text-align: center; + speak: none; + font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; + backface-visibility: hidden; + font-size: 1.2rem; + display: none; +} +.blocklyTreeSelected .blocklyTreeIcon { + color: white; +} +.blocklyTreeIcon.blocklyTreeIconsearch::before { + content: "\f002"; +} +.blocklyTreeIcon.blocklyTreeIconDefault::before { + content: "\f12e"; +} +.blocklyTreeIcon.blocklyTreeIconadvanced::before { + content: "\f141"; +} +.blocklyTreeIcon.blocklyTreeIconmore::before { + content: "\f141"; +} +.blocklyTreeIcon.blocklyTreeIconaddpackage::before { + content: "\f055"; +} +.blocklyTreeIcon.blocklyTreeIconloops::before { + content: "\f01e"; +} +.blocklyTreeIcon.blocklyTreeIconmath::before { + content: "\f1ec"; +} +.blocklyTreeIcon.blocklyTreeIconlogic::before { + content: "\f074"; +} +.blocklyTreeIcon.blocklyTreeIconvariables::before { + content: "\f039"; +} +.blocklyTreeIcon.blocklyTreeIcontext::before { + content: "\f035"; +} +.blocklyTreeIcon.blocklyTreeIconlists::before { + content: "\f0cb"; +} +/* Blockly Slider field */ +.blocklyWidgetDiv .goog-slider-horizontal { + background: white; + border: 2px solid black; + border-radius: 5px; +} +/* Fade out disabled blocks, but don't completely lose the colour */ +.blocklyDisabled > .blocklyPathDark { + display: block !important; + fill-opacity: 0.5; +} +/******************************* + Monaco Editor +*******************************/ +.monaco-editor .monaco-scrollable-element.editor-scrollable { + margin-left: .5rem; +} +/* Monaco Editor Line number colors, changed from the default light theme */ +.monaco-editor.vs .line-numbers { + color: #2c3e50 !important; +} +/* Monaco Editor Line number background, changed from the default light theme */ +.monaco-editor.vs .margin-view-overlays.monaco-editor-background { + background: rgba(0, 0, 0, 0.05); +} +/* Monaco Editor Current line highlighting, only needed for the light theme */ +.monaco-editor.vs .current-line { + background: rgba(0, 0, 255, 0.1); +} +/* Monaco Editor Suggest Widget, styling */ +.monaco-editor .suggest-widget { + border-radius: 5px; +} +.monaco-list-row.focused { + background-color: #0078D7; + color: #fff; +} +.monaco-editor.vs .suggest-widget:not(.frozen) .monaco-list .monaco-list-row .monaco-highlighted-label .highlight { + color: #0078D7; +} +.monaco-editor.vs .suggest-widget:not(.frozen) .monaco-list .monaco-list-row.focused .monaco-highlighted-label .highlight { + color: #fff; +} +.monaco-editor.vs .suggest-widget .details > .monaco-scrollable-element > .body > .type, +.monaco-editor .suggest-widget .monaco-list .monaco-list-row .type-label { + color: #FFB900; +} +.monaco-editor.vs .suggest-widget .details > .monaco-scrollable-element > .body > .docs, +.monaco-editor .suggest-widget .monaco-list .monaco-list-row .docs { + color: #fff; +} +/* Monaco Editor Main tokens */ +.monaco-editor .highlight-statement { + background-color: #FFB900; +} +/* Monaco Toolbox */ +.monacoFlyout { + font-family: Monaco, Menlo, "Ubuntu Mono", Consolas, source-code-pro, monospace; + background: rgba(221, 221, 221, 0.8); + overflow-x: visible; + overflow-y: auto; + border-top-right-radius: 8px; + border-bottom-right-radius: 8px; +} +.monacoFlyout div { + margin: 1.1rem; +} +.monacoDraggableBlock { + color: #FFFFFF; + padding: 0.6rem; + border-radius: 8px; + border: solid 3px #FFFFFF; + cursor: pointer; + -moz-user-select: none; + -ms-user-select: none; + -webkit-user-select: none; + user-select: none; +} +.monacoDraggableBlock span.sig { + opacity: 0.7; +} +.monacoDraggableBlock span.docs { + display: block; + /* enable as needed */ + color: #FFFFFF; + font-size: 70%; + max-width: 22rem; +} +.monacoDraggableBlock:hover { + border: solid 3px #fc3 !important; +} +/****************************** +Avatar +******************************/ +.avatar { + position: relative; +} +#root .avatar .message { + margin-left: 4em; + margin-bottom: 1em; +} +.avatar .avatar-image { + position: absolute; + left: 0; + top: 1em; + width: 3em; + height: 3em; + background-size: contain; + background-image: url("data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%20standalone%3D%22no%22%3F%3E%0A%3C!--%20Generator%3A%20Adobe%20Illustrator%2018.0.0%2C%20SVG%20Export%20Plug-In%20.%20SVG%20Version%3A%206.00%20Build%200)%20%20--%3E%0A%0A%3Csvg%0A%20%20%20xmlns%3Adc%3D%22http%3A%2F%2Fpurl.org%2Fdc%2Felements%2F1.1%2F%22%0A%20%20%20xmlns%3Acc%3D%22http%3A%2F%2Fcreativecommons.org%2Fns%23%22%0A%20%20%20xmlns%3Ardf%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2F02%2F22-rdf-syntax-ns%23%22%0A%20%20%20xmlns%3Asvg%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%0A%20%20%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%0A%20%20%20xmlns%3Axlink%3D%22http%3A%2F%2Fwww.w3.org%2F1999%2Fxlink%22%0A%20%20%20xmlns%3Asodipodi%3D%22http%3A%2F%2Fsodipodi.sourceforge.net%2FDTD%2Fsodipodi-0.dtd%22%0A%20%20%20xmlns%3Ainkscape%3D%22http%3A%2F%2Fwww.inkscape.org%2Fnamespaces%2Finkscape%22%0A%20%20%20version%3D%221.1%22%0A%20%20%20id%3D%22Ebene_1%22%0A%20%20%20x%3D%220px%22%0A%20%20%20y%3D%220px%22%0A%20%20%20viewBox%3D%220%200%20175.49999%20172.4%22%0A%20%20%20enable-background%3D%22new%200%200%20841.9%20595.3%22%0A%20%20%20xml%3Aspace%3D%22preserve%22%0A%20%20%20inkscape%3Aversion%3D%220.91%20r13725%22%0A%20%20%20sodipodi%3Adocname%3D%22Logo_Calliope_Woman.svg%22%0A%20%20%20width%3D%22175.5%22%0A%20%20%20height%3D%22172.39999%22%3E%3Cmetadata%0A%20%20%20%20%20id%3D%22metadata5011%22%3E%3Crdf%3ARDF%3E%3Ccc%3AWork%0A%20%20%20%20%20%20%20%20%20rdf%3Aabout%3D%22%22%3E%3Cdc%3Aformat%3Eimage%2Fsvg%2Bxml%3C%2Fdc%3Aformat%3E%3Cdc%3Atype%0A%20%20%20%20%20%20%20%20%20%20%20rdf%3Aresource%3D%22http%3A%2F%2Fpurl.org%2Fdc%2Fdcmitype%2FStillImage%22%20%2F%3E%3Cdc%3Atitle%3E%3C%2Fdc%3Atitle%3E%3C%2Fcc%3AWork%3E%3C%2Frdf%3ARDF%3E%3C%2Fmetadata%3E%3Cdefs%0A%20%20%20%20%20id%3D%22defs5009%22%20%2F%3E%3Csodipodi%3Anamedview%0A%20%20%20%20%20pagecolor%3D%22%23ffffff%22%0A%20%20%20%20%20bordercolor%3D%22%23666666%22%0A%20%20%20%20%20borderopacity%3D%221%22%0A%20%20%20%20%20objecttolerance%3D%2210%22%0A%20%20%20%20%20gridtolerance%3D%2210%22%0A%20%20%20%20%20guidetolerance%3D%2210%22%0A%20%20%20%20%20inkscape%3Apageopacity%3D%220%22%0A%20%20%20%20%20inkscape%3Apageshadow%3D%222%22%0A%20%20%20%20%20inkscape%3Awindow-width%3D%221920%22%0A%20%20%20%20%20inkscape%3Awindow-height%3D%221137%22%0A%20%20%20%20%20id%3D%22namedview5007%22%0A%20%20%20%20%20showgrid%3D%22false%22%0A%20%20%20%20%20inkscape%3Azoom%3D%220.34208337%22%0A%20%20%20%20%20inkscape%3Acx%3D%22420.95001%22%0A%20%20%20%20%20inkscape%3Acy%3D%22297.64999%22%0A%20%20%20%20%20inkscape%3Awindow-x%3D%22-8%22%0A%20%20%20%20%20inkscape%3Awindow-y%3D%22156%22%0A%20%20%20%20%20inkscape%3Awindow-maximized%3D%221%22%0A%20%20%20%20%20inkscape%3Acurrent-layer%3D%22Ebene_1%22%20%2F%3E%3Cg%0A%20%20%20%20%20id%3D%22g4955%22%0A%20%20%20%20%20transform%3D%22translate(-260.90025%2C-204.1)%22%3E%3Cg%0A%20%20%20%20%20%20%20id%3D%22g4957%22%3E%3Cdefs%0A%20%20%20%20%20%20%20%20%20id%3D%22defs4959%22%3E%3Crect%0A%20%20%20%20%20%20%20%20%20%20%20id%3D%22SVGID_7_%22%0A%20%20%20%20%20%20%20%20%20%20%20x%3D%22193.10001%22%0A%20%20%20%20%20%20%20%20%20%20%20y%3D%22204.10001%22%0A%20%20%20%20%20%20%20%20%20%20%20width%3D%22318.29999%22%0A%20%20%20%20%20%20%20%20%20%20%20height%3D%22256.29999%22%20%2F%3E%3C%2Fdefs%3E%3CclipPath%0A%20%20%20%20%20%20%20%20%20id%3D%22SVGID_1_%22%3E%3Cuse%0A%20%20%20%20%20%20%20%20%20%20%20xlink%3Ahref%3D%22%23SVGID_7_%22%0A%20%20%20%20%20%20%20%20%20%20%20overflow%3D%22visible%22%0A%20%20%20%20%20%20%20%20%20%20%20id%3D%22use4963%22%0A%20%20%20%20%20%20%20%20%20%20%20style%3D%22overflow%3Avisible%22%0A%20%20%20%20%20%20%20%20%20%20%20x%3D%220%22%0A%20%20%20%20%20%20%20%20%20%20%20y%3D%220%22%0A%20%20%20%20%20%20%20%20%20%20%20width%3D%22100%25%22%0A%20%20%20%20%20%20%20%20%20%20%20height%3D%22100%25%22%20%2F%3E%3C%2FclipPath%3E%3C%2Fg%3E%3Cg%0A%20%20%20%20%20%20%20id%3D%22g4965%22%3E%3Cdefs%0A%20%20%20%20%20%20%20%20%20id%3D%22defs4967%22%3E%3Crect%0A%20%20%20%20%20%20%20%20%20%20%20id%3D%22SVGID_9_%22%0A%20%20%20%20%20%20%20%20%20%20%20x%3D%22193.10001%22%0A%20%20%20%20%20%20%20%20%20%20%20y%3D%22204.10001%22%0A%20%20%20%20%20%20%20%20%20%20%20width%3D%22318.29999%22%0A%20%20%20%20%20%20%20%20%20%20%20height%3D%22256.29999%22%20%2F%3E%3C%2Fdefs%3E%3CclipPath%0A%20%20%20%20%20%20%20%20%20id%3D%22SVGID_2_%22%3E%3Cuse%0A%20%20%20%20%20%20%20%20%20%20%20xlink%3Ahref%3D%22%23SVGID_9_%22%0A%20%20%20%20%20%20%20%20%20%20%20overflow%3D%22visible%22%0A%20%20%20%20%20%20%20%20%20%20%20id%3D%22use4971%22%0A%20%20%20%20%20%20%20%20%20%20%20style%3D%22overflow%3Avisible%22%0A%20%20%20%20%20%20%20%20%20%20%20x%3D%220%22%0A%20%20%20%20%20%20%20%20%20%20%20y%3D%220%22%0A%20%20%20%20%20%20%20%20%20%20%20width%3D%22100%25%22%0A%20%20%20%20%20%20%20%20%20%20%20height%3D%22100%25%22%20%2F%3E%3C%2FclipPath%3E%3C%2Fg%3E%3Cg%0A%20%20%20%20%20%20%20id%3D%22g4973%22%3E%3Cdefs%0A%20%20%20%20%20%20%20%20%20id%3D%22defs4975%22%3E%3Crect%0A%20%20%20%20%20%20%20%20%20%20%20id%3D%22SVGID_11_%22%0A%20%20%20%20%20%20%20%20%20%20%20x%3D%22193.10001%22%0A%20%20%20%20%20%20%20%20%20%20%20y%3D%22204.10001%22%0A%20%20%20%20%20%20%20%20%20%20%20width%3D%22318.29999%22%0A%20%20%20%20%20%20%20%20%20%20%20height%3D%22256.29999%22%20%2F%3E%3C%2Fdefs%3E%3CclipPath%0A%20%20%20%20%20%20%20%20%20id%3D%22SVGID_3_%22%3E%3Cuse%0A%20%20%20%20%20%20%20%20%20%20%20xlink%3Ahref%3D%22%23SVGID_11_%22%0A%20%20%20%20%20%20%20%20%20%20%20overflow%3D%22visible%22%0A%20%20%20%20%20%20%20%20%20%20%20id%3D%22use4979%22%0A%20%20%20%20%20%20%20%20%20%20%20style%3D%22overflow%3Avisible%22%0A%20%20%20%20%20%20%20%20%20%20%20x%3D%220%22%0A%20%20%20%20%20%20%20%20%20%20%20y%3D%220%22%0A%20%20%20%20%20%20%20%20%20%20%20width%3D%22100%25%22%0A%20%20%20%20%20%20%20%20%20%20%20height%3D%22100%25%22%20%2F%3E%3C%2FclipPath%3E%3Cpath%0A%20%20%20%20%20%20%20%20%20clip-path%3D%22url(%23SVGID_3_)%22%0A%20%20%20%20%20%20%20%20%20d%3D%22m%20436.4%2C262%20-47.9%2C0%200%2C-46%20c%200%2C-4.7%203.8%2C-8.4%208.4%2C-8.4%20l%2031%2C0%20c%204.7%2C0%208.4%2C3.8%208.4%2C8.4%20l%200%2C46%20z%22%0A%20%20%20%20%20%20%20%20%20id%3D%22path4981%22%0A%20%20%20%20%20%20%20%20%20inkscape%3Aconnector-curvature%3D%220%22%0A%20%20%20%20%20%20%20%20%20style%3D%22fill%3A%234a5261%22%20%2F%3E%3C%2Fg%3E%3Crect%0A%20%20%20%20%20%20%20x%3D%22394.79999%22%0A%20%20%20%20%20%20%20y%3D%22218.7%22%0A%20%20%20%20%20%20%20width%3D%2235.099998%22%0A%20%20%20%20%20%20%20height%3D%2243.200001%22%0A%20%20%20%20%20%20%20id%3D%22rect4983%22%0A%20%20%20%20%20%20%20style%3D%22fill%3A%238096a1%22%20%2F%3E%3Cpath%0A%20%20%20%20%20%20%20d%3D%22m%20317.6%2C239.5%200%2C61%2071%2C0.2%20c%200%2C0%200%2C-57.3%200%2C-61%200%2C-19.5%20-16.1%2C-35.6%20-35.6%2C-35.6%20-19.6%2C0%20-35.4%2C15.8%20-35.4%2C35.4%22%0A%20%20%20%20%20%20%20id%3D%22path4985%22%0A%20%20%20%20%20%20%20inkscape%3Aconnector-curvature%3D%220%22%0A%20%20%20%20%20%20%20style%3D%22fill%3A%23855c33%22%20%2F%3E%3Cpath%0A%20%20%20%20%20%20%20d%3D%22m%20412.4%2C376.5%20-114.2%2C0%20c%20-35.6%2C0%20-50.9%2C-45.2%20-22.6%2C-66.8%20l%2063.8%2C-47.8%2096.9%2C0%200%2C90.7%20c%200.1%2C13.2%20-10.6%2C23.9%20-23.9%2C23.9%22%0A%20%20%20%20%20%20%20id%3D%22path4987%22%0A%20%20%20%20%20%20%20inkscape%3Aconnector-curvature%3D%220%22%0A%20%20%20%20%20%20%20style%3D%22fill%3A%2326a6ab%22%20%2F%3E%3Cpolygon%0A%20%20%20%20%20%20%20points%3D%22345.7%2C257.3%20334.8%2C298.8%20285.1%2C302.5%20%22%0A%20%20%20%20%20%20%20id%3D%22polygon4989%22%0A%20%20%20%20%20%20%20style%3D%22fill%3A%2342c9c9%22%20%2F%3E%3Cpolygon%0A%20%20%20%20%20%20%20points%3D%22354%2C283.8%20332.5%2C283.8%20345.7%2C257.3%20%22%0A%20%20%20%20%20%20%20id%3D%22polygon4991%22%0A%20%20%20%20%20%20%20style%3D%22fill%3A%23f7f5e8%22%20%2F%3E%3Cpolygon%0A%20%20%20%20%20%20%20points%3D%22375.4%2C283.8%20354%2C283.8%20362.2%2C257.3%20%22%0A%20%20%20%20%20%20%20id%3D%22polygon4993%22%0A%20%20%20%20%20%20%20style%3D%22fill%3A%23f7f5e8%22%20%2F%3E%3Cpolygon%0A%20%20%20%20%20%20%20points%3D%22373.1%2C298.8%20334.8%2C298.8%20332.5%2C283.8%20375.4%2C283.8%20%22%0A%20%20%20%20%20%20%20id%3D%22polygon4995%22%0A%20%20%20%20%20%20%20style%3D%22fill%3A%23bdd1cf%22%20%2F%3E%3Cpath%0A%20%20%20%20%20%20%20d%3D%22m%20400.6%2C376.5%20c%20-3.5%2C-26.2%20-10.6%2C-58%20-27.3%2C-77.7%20l%20-0.2%2C0%20-19%2C0%20-19%2C0%20-0.2%2C0%20c%20-16.7%2C19.8%20-23.8%2C51.5%20-27.3%2C77.7%20l%2093%2C0%20z%22%0A%20%20%20%20%20%20%20id%3D%22path4997%22%0A%20%20%20%20%20%20%20inkscape%3Aconnector-curvature%3D%220%22%0A%20%20%20%20%20%20%20style%3D%22fill%3A%23f7f5e8%22%20%2F%3E%3Cpath%0A%20%20%20%20%20%20%20d%3D%22m%20357%2C258%20-6.1%2C0%20c%20-6.4%2C0%20-11.5%2C-5.2%20-11.5%2C-11.5%20l%200%2C-19.7%2029.2%2C0%200%2C19.7%20c%20-0.1%2C6.3%20-5.3%2C11.5%20-11.6%2C11.5%22%0A%20%20%20%20%20%20%20id%3D%22path4999%22%0A%20%20%20%20%20%20%20inkscape%3Aconnector-curvature%3D%220%22%0A%20%20%20%20%20%20%20style%3D%22fill%3A%23ffcc99%22%20%2F%3E%3Cpath%0A%20%20%20%20%20%20%20d%3D%22m%20335.8%2C376.5%200%2C-77.7%20c%2012.4%2C29.1%2027.7%2C64.3%2046.5%2C77.7%20l%20-46.5%2C0%20z%22%0A%20%20%20%20%20%20%20id%3D%22path5001%22%0A%20%20%20%20%20%20%20inkscape%3Aconnector-curvature%3D%220%22%0A%20%20%20%20%20%20%20style%3D%22fill%3A%23bdd1cf%22%20%2F%3E%3Cpolygon%0A%20%20%20%20%20%20%20points%3D%22362.2%2C257.3%20345.7%2C257.3%20354%2C283.8%20%22%0A%20%20%20%20%20%20%20id%3D%22polygon5003%22%0A%20%20%20%20%20%20%20style%3D%22fill%3A%23ffcc99%22%20%2F%3E%3Cpolygon%0A%20%20%20%20%20%20%20points%3D%22436.4%2C315.3%20394.8%2C262%20436.4%2C262%20%22%0A%20%20%20%20%20%20%20id%3D%22polygon5005%22%0A%20%20%20%20%20%20%20style%3D%22fill%3A%2342c9c9%22%20%2F%3E%3C%2Fg%3E%3C%2Fsvg%3E"); +} +.avatar .message:after { + top: 1.1em; + left: -1em; + bottom: auto; + border-width: 0px 1em 0.7em 0; + border-color: rgba(0, 0, 0, 0) #EEE; + content: ''; + position: absolute; + border-style: solid; + display: block; + width: 0; +} +/******************************* + Layout Variables +*******************************/ +.ui.widedesktop.only, +.play-button.widedesktop.only, +.download-button.widedesktop.only { + display: none !important; +} +.ui.tablet.only, +.play-button.tablet.only, +.download-button.tablet.only { + display: none !important; +} +@media only screen and (min-width: 1200px) and (min-height: 30em) { + .ui.widedesktop.only, + .play-button.widedesktop.only, + .download-button.widedesktop.only { + display: inherit !important; + } + .ui.widedesktop.hide, + .play-button.widedesktop.hide, + .download-button.widedesktop.hide { + display: none !important; + } +} +/* smaller desktop screen */ +@media only screen and (max-width: 991px), only screen and (max-aspect-ratio: 12/10) { + .ui.desktop.only, + .play-button.desktop.only, + .download-button.desktop.only { + display: none !important; + } +} +/* thin desktop portrait mode */ +@media only screen and (max-width: 991px), only screen and (max-aspect-ratio: 7/10) { + .ui.landscape.only, + .play-button.landscape.only, + .download-button.landscape.only { + display: none !important; + } +} +@media only screen and (min-width: 992px) { + .ui.portrait.only, + .play-button.portrait.only, + .download-button.portrait.only { + display: none !important; + } +} +/* Tablet only */ +@media only screen and (min-width: 768px) and (max-width: 991px) { + .ui.tablet.only, + .play-button.tablet.only, + .download-button.tablet.only { + display: inherit !important; + } +} +/* Mobile + Tablet */ +@media only screen and (max-width: 991px) { + .ui.portrait.only, + .play-button.portrait.only, + .download-button.portrait.only { + display: inherit !important; + } + .ui.portrait.hide, + .play-button.portrait.hide, + .download-button.portrait.hide { + display: none !important; + } +} +/* Screens with decent vertical space */ +@media only screen and (max-height: 44rem) { + .ui.tall.only, + .play-button.tall.only, + .download-button.tall.only { + display: none !important; + } +} +@media only screen and (min-width: 320px) { + .ui.thin.only, + .play-button.thin.only, + .download-button.thin.only { + display: none !important; + } +} +@media only screen and (max-width: 320px) { + .ui.wide.only, + .play-button.wide.only, + .download-button.wide.only { + display: none !important; + } +} +/******************************* + Media Adjustments +*******************************/ +/* Large Monitor */ +@media only screen and (min-width: 1200px) { + /* Layout */ + .sideDocs #maineditor, + .sideDocs #editortools { + right: 20rem; + } + .rtl .sideDocs #maineditor { + left: 20rem; + right: 23rem; + } + .rtl .sideDocs #editortools { + left: 20rem; + right: 0; + } + .sideDocs #sidedocs { + display: block; + width: 20rem; + } + #sidedocspopout, + #sidedocsexpand { + display: block; + } + /* Blockly */ + div.blocklyTreeRow { + min-width: 200px; + } +} +/* Small Monitor */ +@media only screen and (min-width: 992px) and (max-width: 1199px) { + /* Blockly row */ + div.blocklyTreeRow { + min-width: 200px; + } +} +/* Tablet */ +@media only screen and (min-width: 768px) and (max-width: 991px) { + /* Blockly */ + div.blocklyTreeRow { + padding-top: 0.25rem !important; + padding-bottom: 1.5rem !important; + border-left-width: 12px !important; + } + div.blocklyTreeRoot div div div div div.blocklyTreeRow { + border-left-width: 18px !important; + padding-top: 0px !important; + padding-bottom: 1.6rem !important; + } +} +/* Mobile */ +/* >= Small Monitor (Small Monitor + Large Monitor + Wide Monitor) */ +@media only screen and (min-width: 992px) { + /* Blockly */ + div.blocklyTreeRow { + padding-top: 0.5rem !important; + padding-bottom: 2.0rem !important; + border-left-width: 12px !important; + } + div.blocklyTreeRoot div div div div div.blocklyTreeRow { + border-left-width: 18px !important; + padding-top: 0px !important; + padding-bottom: 1.6rem !important; + } + .collapsedEditorTools #filelist { + display: none; + } + .collapsedEditorTools #downloadArea { + background: #fff; + } + .collapsedEditorTools #maineditor { + left: 0; + } + .rtl .collapsedEditorTools #maineditor { + left: inherit; + right: 0 !important; + } + #cookiemsg { + bottom: 7.5rem; + } + /* Full screen */ + .fullscreensim #filelist { + position: fixed; + z-index: 100; + top: 0; + left: 0; + bottom: 0; + right: 0; + padding: 0; + max-width: 100%; + min-width: 100%; + height: 100%; + } + .fullscreensim #boardview { + position: relative; + height: 100%; + background-color: white; + padding: 5rem; + padding-left: calc(10rem); + padding-right: calc(10rem); + background-color: #1B1C1D; + background: #1B1C1D; + /* For browsers that do not support gradients */ + background: -webkit-linear-gradient(#1B1C1D 50%, #fff); + /* For Safari 5.1 to 6.0 */ + background: -o-linear-gradient(#1B1C1D 50%, #fff); + /* For Opera 11.1 to 12.0 */ + background: -moz-linear-gradient(#1B1C1D 50%, #fff); + /* For Firefox 3.6 to 15 */ + background: linear-gradient(#1B1C1D 50%, #fff); + /* Standard syntax */ + } + .fullscreensim #simulator .ui.item:not(.simtoolbar), + .fullscreensim #simulator .ui.menu, + .fullscreensim #menubar .ui.item:not(.logo), + .fullscreensim #maineditor, + .fullscreensim #editortools, + .fullscreensim #simulator .play-button.item:not(.simtoolbar), + .fullscreensim #simulator .play-button.menu, + .fullscreensim #menubar .play-button.item:not(.logo), + .fullscreensim #simulator .download-button.item:not(.simtoolbar), + .fullscreensim #simulator .download-button.menu, + .fullscreensim #menubar .download-button.item:not(.logo) { + display: none !important; + z-index: -10; + } + .fullscreensim .sandboxfooter { + z-index: 100; + bottom: 1rem; + } + .fullscreensim .ui.menu, + .fullscreensim .play-button.menu, + .fullscreensim .download-button.menu { + background: transparent !important; + } + .fullscreensim #filelist .simtoolbar { + position: fixed; + bottom: 2rem; + left: auto; + right: auto; + } + .fullscreensim #simulators { + position: relative; + padding: 3rem; + width: 100%; + height: 100%; + } + .fullscreensim div.simframe { + position: relative; + width: 50%; + height: 100%; + float: left; + padding-bottom: 0 !important; + } + .fullscreensim div.simframe > iframe { + position: relative; + max-width: 90%; + } + .fullscreensim div.simframe:only-child { + width: 100%; + } + .fullscreensim div.simframe:only-child > iframe { + max-width: 100%; + } +} +/* <= Small Monitor (Mobile + Tablet + Small Monitor) */ +@media only screen and (max-width: 1199px) { + /* Layout */ + #filelist, + #downloadArea { + min-width: 20rem; + max-width: 20rem; + } + #maineditor { + left: 20rem; + } + .rtl #maineditor { + right: 20rem; + left: 0; + } + /* Logo */ + #logo .name { + display: none !important; + } + /* Blockly */ + span.blocklyTreeLabel { + font-size: 1rem; + } + /* Help card */ + #helpcard { + top: auto; + bottom: 2.2rem; + margin: 0; + } +} +/* <= Tablet (Mobile + Tablet) */ +@media only screen and (max-width: 991px) { + /* Blockly */ + span.blocklyTreeLabel { + font-size: 1rem; + } + /* Help card */ + #helpcard { + top: auto; + bottom: 2rem; + margin: 0; + } + /* Layout */ + #filelist { + position: absolute; + padding: 0; + margin: 1em; + z-index: 5; + bottom: 0rem !important; + left: 4rem !important; + top: auto; + width: auto; + min-width: inherit; + max-width: inherit; + background: transparent !important; + } + .rtl #filelist { + left: auto; + right: 0; + } + #maineditor, + .rtl #maineditor { + left: 0; + right: 0; + } + #maineditor:not(.sandbox), + .rtl #maineditor:not(.sandbox) { + bottom: 0rem; + } + #editortools { + height: 10rem; + } + #blocksArea, + #monacoEditor, + #pxtJsonEditor, + #msg { + bottom: 10rem !important; + } + #tutorialcard.bottom { + bottom: 11rem !important; + } + .hideEditorFloats #editortools { + height: 5rem !important; + } + .hideEditorFloats #blocksArea, + .hideEditorFloats #monacoEditor, + .hideEditorFloats #msg { + bottom: 5rem !important; + } + .hideEditorFloats #tutorialcard.bottom { + bottom: 5rem !important; + } + /* Simulator */ + div.simframe { + display: inline-block; + width: 10rem; + margin-right: 0.5rem; + } + div.simframe:not(:first-child) { + display: none !important; + } + /* Hide floating editors */ + .hideEditorFloats .editorFloat { + display: none; + } + #downloadArea { + display: none; + } + /* Menu spacing */ + .ui.menu .item, + .play-button.menu .item, + .download-button.menu .item { + padding: 0.4em !important; + } + .ui.menu .item.editor-menuitem, + .play-button.menu .item.editor-menuitem, + .download-button.menu .item.editor-menuitem { + margin-top: 1.25rem !important; + margin-bottom: 1.25rem !important; + } + /* Top Menu */ + #maineditor { + top: 5rem !important; + } + #getting-started-btn { + top: 5rem; + } + /* Logo */ + .ui.item.logo img, + .play-button.item.logo img, + .download-button.item.logo img { + max-height: 2.5rem; + margin-left: 0.5rem; + margin-right: 0.5rem; + } + .ui.mini.image, + .play-button.mini.image, + .download-button.mini.image { + display: block !important; + } +} +/* Mobile */ +@media only screen and (max-width: 767px) { + /* Logo */ + #logo { + font-size: 0rem; + padding-right: 0; + } + /* Blockly */ + text.blocklyCheckbox { + font-size: 17pt !important; + } + /* Hide blockly tree labels on mobile */ + span.blocklyTreeLabel { + display: none !important; + } + div.blocklyTreeRow:hover span.blocklyTreeLabel { + display: none !important; + } + div.blocklyTreeRow.blocklyTreeSelected:hover span.blocklyTreeLabel { + display: none !important; + } + div.blocklyTreeRow { + padding-right: 0; + height: 2rem; + text-align: center; + } + div.blocklyTreeRoot div div div div div.blocklyTreeRow { + border-left-width: 8px !important; + } + span.blocklyTreeIcon { + font-size: 1.5rem; + margin: 0.0em 0.25em 0.0em 0.25em; + } + /* Blockly trash icon */ + #blocklyTrashIcon { + font-size: 3rem; + } + /* Hide the blockly toolbox search */ + #blocklySearchArea { + display: none !important; + } + .hideEditorFloats #editortools { + height: 5rem !important; + } + .hideEditorFloats #blocksArea, + .hideEditorFloats #monacoEditor { + bottom: 5rem !important; + } +} +/******************************* + Site Settings +*******************************/ +/*------------------- + Fonts +--------------------*/ +/*------------------- + Base Sizes +--------------------*/ +/* This is the single variable that controls them all */ +/* The size of page text */ +/*------------------- + Border Radius +--------------------*/ +/* See Power-user section below + for explanation of @px variables +*/ +/*------------------- + Brand Colors +--------------------*/ +/*-------------- + Page Heading +---------------*/ +/*-------------- + Form Input +---------------*/ +/* This adjusts the default form input across all elements */ +/* Input Text Color */ +/* Line Height Default For Inputs in Browser (Descendors are 17px at 14px base em) */ +/*------------------- + Focused Input +--------------------*/ +/* Used on inputs, textarea etc */ +/* Used on dropdowns, other larger blocks */ +/*------------------- + Sizes +--------------------*/ +/* + Sizes are all expressed in terms of 14px/em (default em) + This ensures these "ratios" remain constant despite changes in EM +*/ +/*------------------- + Page +--------------------*/ +/*------------------- + Paragraph +--------------------*/ +/*------------------- + Links +--------------------*/ +/*------------------- + Scroll Bars +--------------------*/ +/* Inverted */ +/*------------------- + Highlighted Text +--------------------*/ +/*------------------- + Loader +--------------------*/ +/*------------------- + Grid +--------------------*/ +/*------------------- + Transitions +--------------------*/ +/*------------------- + Breakpoints +--------------------*/ +/*------------------- + Site Colors +--------------------*/ +/*--- Colors ---*/ +/*--- Light Colors ---*/ +/*--- Neutrals ---*/ +/*--- Colored Backgrounds ---*/ +/*--- Colored Headers ---*/ +/*--- Colored Text ---*/ +/*--- Colored Border ---*/ +/*------------------- + Alpha Colors +--------------------*/ +/*------------------- + Accents +--------------------*/ +/* Differentiating Neutrals */ +/* Differentiating Layers */ +/******************************* + Power-User +*******************************/ +/*------------------- + Emotive Colors +--------------------*/ +/* Positive */ +/* Negative */ +/* Info */ +/* Warning */ +/*------------------- + Paths +--------------------*/ +/* For source only. Modified in gulp for dist */ +/*------------------- + Em Sizes +--------------------*/ +/* + This rounds @size values to the closest pixel then expresses that value in (r)em. + This ensures all size values round to exact pixels +*/ +/* em */ +/* rem */ +/*------------------- + Icons +--------------------*/ +/* Maximum Glyph Width of Icon */ +/*------------------- + Neutral Text +--------------------*/ +/*------------------- + Brand Colors +--------------------*/ +/*------------------- + Borders +--------------------*/ +/*------------------- + Derived Values +--------------------*/ +/* Loaders Position Offset */ +/* Rendered Scrollbar Width */ +/* Maximum Single Character Glyph Width, aka Capital "W" */ +/* Used to match floats with text */ +/* Header Spacing */ +/* Minimum Mobile Width */ +/* Positive / Negative Dupes */ +/* Responsive */ +/*------------------- + Exact Pixel Values +--------------------*/ +/* + These are used to specify exact pixel values in em + for things like borders that remain constantly + sized as emSize adjusts + + Since there are many more sizes than names for sizes, + these are named by their original pixel values. + +*/ +/* Columns */ +/******************************* + States +*******************************/ +/*------------------- + Disabled +--------------------*/ +/*------------------- + Hover +--------------------*/ +/*--- Shadows ---*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Focus +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Down (:active) +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/*------------------- + Active +--------------------*/ +/*--- Colors ---*/ +/*--- Emotive ---*/ +/*--- Brand ---*/ +/*--- Dark Tones ---*/ +/*--- Light Tones ---*/ +/******************************* + User Global Variables +*******************************/ +/*------------------- + Fonts +--------------------*/ +/*------------------- + Breakpoints +--------------------*/ +/* +@mobileBreakpoint : unit( (63 * @emSize), px); +@tabletBreakpoint : unit( (79 * @emSize), px); +@computerBreakpoint : unit( (91 * @emSize), px); +@largeMonitorBreakpoint : unit( (99 * @emSize), px); +@widescreenMonitorBreakpoint : unit( (119 * @emSize), px); +*/ +/******************************* + PXT Variables +*******************************/ +/*------------------- + Menu +--------------------*/ +/*------------------- + Layout +--------------------*/ +/*------------------- + Background +--------------------*/ +/*------------------- + Full screen +--------------------*/ +/*------------------- + Side Docs +--------------------*/ +/*------------------- + Editor +--------------------*/ +/******************************* + User Global Variables +*******************************/ +/*------------------- + Site Colors +--------------------*/ +/******************************* + PXT Overrides +*******************************/ +/******************************* + Menu +*******************************/ +/*------------------- + Collection +--------------------*/ +/* Menu */ +/* Menu Item */ +/* Divider */ +/* Sub Menu */ +/* Text Item */ +/*-------------- + Elements +---------------*/ +/* Icon */ +/* Dropdown Icon */ +/* Header */ +/* Vertical Icon */ +/* Vertical Header */ +/* Pointing Arrow */ +/*-------------- + Couplings +---------------*/ +/* Button */ +/* Input */ +/* Image */ +/* Label */ +/* Dropdown in Menu */ +/* Dropdown Variations */ +/*-------------- + States +---------------*/ +/* Hovered Item */ +/* Pressed Item */ +/* Active Item */ +/* Active Hovered Item */ +/* Selected Dropdown */ +/* Active Dropdown */ +/* Active Sub Menu */ +/*-------------- + Types +---------------*/ +/* Vertical */ +/* Secondary */ +/* Pointing */ +/* Inverted Secondary */ +/* Inverted Pointing */ +/* Tiered */ +/* Icon */ +/* Tabular */ +/* Pagination */ +/* Labeled Icon */ +/* Text */ +/*-------------- + Variations +---------------*/ +/* Inverted */ +/* Inverted Sub Menu */ +/* Inverted Hover */ +/* Pressed */ +/* Inverted Active */ +/* Inverted Active Hover */ +/* Inverted Menu Divider */ +/* Inverted Colored */ +/* Fixed */ +/* Floated */ +/* Attached */ +/* Resize large sizes */ +/* Sizes */ +/* Reference import */ +/******************************* + Add your custom CSS here +*******************************/ +/* not relevant in new UI +.openproject { + background: #4ECC60 !important; +} */ +.blocks-menuitem.active, +.javascript-menuitem.active { + background: #738791 !important; +} +/* not relevant in new UI +.help-dropdown-menuitem, .more-dropdown-menuitem { + background: #424955 !important; + margin-right:0px !important; +} */ +.huge.download-button i { + display: none !important; +} +#filelist .menu { + width: 100%; +} +/******************************* + Blockly +*******************************/ +div.blocklyTreeRow { + border-radius: 8px; +} +/* This removes any padding at the top of the toolbox */ +div.blocklyTreeRoot { + padding: 0px !important; +} +/* Blockly Text */ +div.blocklyTreeLabel { + font-family: 'Roboto Mono', 'Helvetica Neue', Arial, Helvetica, sans-serif !important; + font-size: 1rem !important; +} +.blocklyFlyoutBackground { + fill: #42495F; +} +.blocklyToolboxDiv { + padding: 7px; +} +.organization { + top: 1.6em; +} +/* Mobile */ +@media only screen and (max-width: 767px) { + .blocklyTreeLabel { + font-size: 0.5rem !important; + } +} +/* Tablet */ +/* Small Monitor */ +/* Large Monitor */ +/******************************* + Menu Bar +*******************************/ +#menubar { + height: 5rem; +} +#fileNameInput { + width: 350px; +} diff --git a/semantic.js b/semantic.js new file mode 100644 index 00000000..a767ccec --- /dev/null +++ b/semantic.js @@ -0,0 +1,17485 @@ + +/*! + * # Semantic UI - Site + * http://github.com/semantic-org/semantic-ui/ + * + * + * Released under the MIT license + * http://opensource.org/licenses/MIT + * + */ + +;(function ($, window, document, undefined) { + +$.site = $.fn.site = function(parameters) { + var + time = new Date().getTime(), + performance = [], + + query = arguments[0], + methodInvoked = (typeof query == 'string'), + queryArguments = [].slice.call(arguments, 1), + + settings = ( $.isPlainObject(parameters) ) + ? $.extend(true, {}, $.site.settings, parameters) + : $.extend({}, $.site.settings), + + namespace = settings.namespace, + error = settings.error, + + eventNamespace = '.' + namespace, + moduleNamespace = 'module-' + namespace, + + $document = $(document), + $module = $document, + element = this, + instance = $module.data(moduleNamespace), + + module, + returnedValue + ; + module = { + + initialize: function() { + module.instantiate(); + }, + + instantiate: function() { + module.verbose('Storing instance of site', module); + instance = module; + $module + .data(moduleNamespace, module) + ; + }, + + normalize: function() { + module.fix.console(); + module.fix.requestAnimationFrame(); + }, + + fix: { + console: function() { + module.debug('Normalizing window.console'); + if (console === undefined || console.log === undefined) { + module.verbose('Console not available, normalizing events'); + module.disable.console(); + } + if (typeof console.group == 'undefined' || typeof console.groupEnd == 'undefined' || typeof console.groupCollapsed == 'undefined') { + module.verbose('Console group not available, normalizing events'); + window.console.group = function() {}; + window.console.groupEnd = function() {}; + window.console.groupCollapsed = function() {}; + } + if (typeof console.markTimeline == 'undefined') { + module.verbose('Mark timeline not available, normalizing events'); + window.console.markTimeline = function() {}; + } + }, + consoleClear: function() { + module.debug('Disabling programmatic console clearing'); + window.console.clear = function() {}; + }, + requestAnimationFrame: function() { + module.debug('Normalizing requestAnimationFrame'); + if(window.requestAnimationFrame === undefined) { + module.debug('RequestAnimationFrame not available, normalizing event'); + window.requestAnimationFrame = window.requestAnimationFrame + || window.mozRequestAnimationFrame + || window.webkitRequestAnimationFrame + || window.msRequestAnimationFrame + || function(callback) { setTimeout(callback, 0); } + ; + } + } + }, + + moduleExists: function(name) { + return ($.fn[name] !== undefined && $.fn[name].settings !== undefined); + }, + + enabled: { + modules: function(modules) { + var + enabledModules = [] + ; + modules = modules || settings.modules; + $.each(modules, function(index, name) { + if(module.moduleExists(name)) { + enabledModules.push(name); + } + }); + return enabledModules; + } + }, + + disabled: { + modules: function(modules) { + var + disabledModules = [] + ; + modules = modules || settings.modules; + $.each(modules, function(index, name) { + if(!module.moduleExists(name)) { + disabledModules.push(name); + } + }); + return disabledModules; + } + }, + + change: { + setting: function(setting, value, modules, modifyExisting) { + modules = (typeof modules === 'string') + ? (modules === 'all') + ? settings.modules + : [modules] + : modules || settings.modules + ; + modifyExisting = (modifyExisting !== undefined) + ? modifyExisting + : true + ; + $.each(modules, function(index, name) { + var + namespace = (module.moduleExists(name)) + ? $.fn[name].settings.namespace || false + : true, + $existingModules + ; + if(module.moduleExists(name)) { + module.verbose('Changing default setting', setting, value, name); + $.fn[name].settings[setting] = value; + if(modifyExisting && namespace) { + $existingModules = $(':data(module-' + namespace + ')'); + if($existingModules.length > 0) { + module.verbose('Modifying existing settings', $existingModules); + $existingModules[name]('setting', setting, value); + } + } + } + }); + }, + settings: function(newSettings, modules, modifyExisting) { + modules = (typeof modules === 'string') + ? [modules] + : modules || settings.modules + ; + modifyExisting = (modifyExisting !== undefined) + ? modifyExisting + : true + ; + $.each(modules, function(index, name) { + var + $existingModules + ; + if(module.moduleExists(name)) { + module.verbose('Changing default setting', newSettings, name); + $.extend(true, $.fn[name].settings, newSettings); + if(modifyExisting && namespace) { + $existingModules = $(':data(module-' + namespace + ')'); + if($existingModules.length > 0) { + module.verbose('Modifying existing settings', $existingModules); + $existingModules[name]('setting', newSettings); + } + } + } + }); + } + }, + + enable: { + console: function() { + module.console(true); + }, + debug: function(modules, modifyExisting) { + modules = modules || settings.modules; + module.debug('Enabling debug for modules', modules); + module.change.setting('debug', true, modules, modifyExisting); + }, + verbose: function(modules, modifyExisting) { + modules = modules || settings.modules; + module.debug('Enabling verbose debug for modules', modules); + module.change.setting('verbose', true, modules, modifyExisting); + } + }, + disable: { + console: function() { + module.console(false); + }, + debug: function(modules, modifyExisting) { + modules = modules || settings.modules; + module.debug('Disabling debug for modules', modules); + module.change.setting('debug', false, modules, modifyExisting); + }, + verbose: function(modules, modifyExisting) { + modules = modules || settings.modules; + module.debug('Disabling verbose debug for modules', modules); + module.change.setting('verbose', false, modules, modifyExisting); + } + }, + + console: function(enable) { + if(enable) { + if(instance.cache.console === undefined) { + module.error(error.console); + return; + } + module.debug('Restoring console function'); + window.console = instance.cache.console; + } + else { + module.debug('Disabling console function'); + instance.cache.console = window.console; + window.console = { + clear : function(){}, + error : function(){}, + group : function(){}, + groupCollapsed : function(){}, + groupEnd : function(){}, + info : function(){}, + log : function(){}, + markTimeline : function(){}, + warn : function(){} + }; + } + }, + + destroy: function() { + module.verbose('Destroying previous site for', $module); + $module + .removeData(moduleNamespace) + ; + }, + + cache: {}, + + setting: function(name, value) { + if( $.isPlainObject(name) ) { + $.extend(true, settings, name); + } + else if(value !== undefined) { + settings[name] = value; + } + else { + return settings[name]; + } + }, + internal: function(name, value) { + if( $.isPlainObject(name) ) { + $.extend(true, module, name); + } + else if(value !== undefined) { + module[name] = value; + } + else { + return module[name]; + } + }, + debug: function() { + if(settings.debug) { + if(settings.performance) { + module.performance.log(arguments); + } + else { + module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':'); + module.debug.apply(console, arguments); + } + } + }, + verbose: function() { + if(settings.verbose && settings.debug) { + if(settings.performance) { + module.performance.log(arguments); + } + else { + module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':'); + module.verbose.apply(console, arguments); + } + } + }, + error: function() { + module.error = Function.prototype.bind.call(console.error, console, settings.name + ':'); + module.error.apply(console, arguments); + }, + performance: { + log: function(message) { + var + currentTime, + executionTime, + previousTime + ; + if(settings.performance) { + currentTime = new Date().getTime(); + previousTime = time || currentTime; + executionTime = currentTime - previousTime; + time = currentTime; + performance.push({ + 'Element' : element, + 'Name' : message[0], + 'Arguments' : [].slice.call(message, 1) || '', + 'Execution Time' : executionTime + }); + } + clearTimeout(module.performance.timer); + module.performance.timer = setTimeout(module.performance.display, 500); + }, + display: function() { + var + title = settings.name + ':', + totalTime = 0 + ; + time = false; + clearTimeout(module.performance.timer); + $.each(performance, function(index, data) { + totalTime += data['Execution Time']; + }); + title += ' ' + totalTime + 'ms'; + if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) { + console.groupCollapsed(title); + if(console.table) { + console.table(performance); + } + else { + $.each(performance, function(index, data) { + console.log(data['Name'] + ': ' + data['Execution Time']+'ms'); + }); + } + console.groupEnd(); + } + performance = []; + } + }, + invoke: function(query, passedArguments, context) { + var + object = instance, + maxDepth, + found, + response + ; + passedArguments = passedArguments || queryArguments; + context = element || context; + if(typeof query == 'string' && object !== undefined) { + query = query.split(/[\. ]/); + maxDepth = query.length - 1; + $.each(query, function(depth, value) { + var camelCaseValue = (depth != maxDepth) + ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1) + : query + ; + if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) { + object = object[camelCaseValue]; + } + else if( object[camelCaseValue] !== undefined ) { + found = object[camelCaseValue]; + return false; + } + else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) { + object = object[value]; + } + else if( object[value] !== undefined ) { + found = object[value]; + return false; + } + else { + module.error(error.method, query); + return false; + } + }); + } + if ( $.isFunction( found ) ) { + response = found.apply(context, passedArguments); + } + else if(found !== undefined) { + response = found; + } + if($.isArray(returnedValue)) { + returnedValue.push(response); + } + else if(returnedValue !== undefined) { + returnedValue = [returnedValue, response]; + } + else if(response !== undefined) { + returnedValue = response; + } + return found; + } + }; + + if(methodInvoked) { + if(instance === undefined) { + module.initialize(); + } + module.invoke(query); + } + else { + if(instance !== undefined) { + module.destroy(); + } + module.initialize(); + } + return (returnedValue !== undefined) + ? returnedValue + : this + ; +}; + +$.site.settings = { + + name : 'Site', + namespace : 'site', + + error : { + console : 'Console cannot be restored, most likely it was overwritten outside of module', + method : 'The method you called is not defined.' + }, + + debug : false, + verbose : false, + performance : true, + + modules: [ + 'accordion', + 'api', + 'checkbox', + 'dimmer', + 'dropdown', + 'embed', + 'form', + 'modal', + 'nag', + 'popup', + 'rating', + 'shape', + 'sidebar', + 'state', + 'sticky', + 'tab', + 'transition', + 'visit', + 'visibility' + ], + + siteNamespace : 'site', + namespaceStub : { + cache : {}, + config : {}, + sections : {}, + section : {}, + utilities : {} + } + +}; + +// allows for selection of elements with data attributes +$.extend($.expr[ ":" ], { + data: ($.expr.createPseudo) + ? $.expr.createPseudo(function(dataName) { + return function(elem) { + return !!$.data(elem, dataName); + }; + }) + : function(elem, i, match) { + // support: jQuery < 1.8 + return !!$.data(elem, match[ 3 ]); + } +}); + + +})( jQuery, window, document ); + +/*! + * # Semantic UI - Accordion + * http://github.com/semantic-org/semantic-ui/ + * + * + * Released under the MIT license + * http://opensource.org/licenses/MIT + * + */ + +;(function ($, window, document, undefined) { + +"use strict"; + +window = (typeof window != 'undefined' && window.Math == Math) + ? window + : (typeof self != 'undefined' && self.Math == Math) + ? self + : Function('return this')() +; + +$.fn.accordion = function(parameters) { + var + $allModules = $(this), + + time = new Date().getTime(), + performance = [], + + query = arguments[0], + methodInvoked = (typeof query == 'string'), + queryArguments = [].slice.call(arguments, 1), + + requestAnimationFrame = window.requestAnimationFrame + || window.mozRequestAnimationFrame + || window.webkitRequestAnimationFrame + || window.msRequestAnimationFrame + || function(callback) { setTimeout(callback, 0); }, + + returnedValue + ; + $allModules + .each(function() { + var + settings = ( $.isPlainObject(parameters) ) + ? $.extend(true, {}, $.fn.accordion.settings, parameters) + : $.extend({}, $.fn.accordion.settings), + + className = settings.className, + namespace = settings.namespace, + selector = settings.selector, + error = settings.error, + + eventNamespace = '.' + namespace, + moduleNamespace = 'module-' + namespace, + moduleSelector = $allModules.selector || '', + + $module = $(this), + $title = $module.find(selector.title), + $content = $module.find(selector.content), + + element = this, + instance = $module.data(moduleNamespace), + observer, + module + ; + + module = { + + initialize: function() { + module.debug('Initializing', $module); + module.bind.events(); + if(settings.observeChanges) { + module.observeChanges(); + } + module.instantiate(); + }, + + instantiate: function() { + instance = module; + $module + .data(moduleNamespace, module) + ; + }, + + destroy: function() { + module.debug('Destroying previous instance', $module); + $module + .off(eventNamespace) + .removeData(moduleNamespace) + ; + }, + + refresh: function() { + $title = $module.find(selector.title); + $content = $module.find(selector.content); + }, + + observeChanges: function() { + if('MutationObserver' in window) { + observer = new MutationObserver(function(mutations) { + module.debug('DOM tree modified, updating selector cache'); + module.refresh(); + }); + observer.observe(element, { + childList : true, + subtree : true + }); + module.debug('Setting up mutation observer', observer); + } + }, + + bind: { + events: function() { + module.debug('Binding delegated events'); + $module + .on(settings.on + eventNamespace, selector.trigger, module.event.click) + ; + } + }, + + event: { + click: function() { + module.toggle.call(this); + } + }, + + toggle: function(query) { + var + $activeTitle = (query !== undefined) + ? (typeof query === 'number') + ? $title.eq(query) + : $(query).closest(selector.title) + : $(this).closest(selector.title), + $activeContent = $activeTitle.next($content), + isAnimating = $activeContent.hasClass(className.animating), + isActive = $activeContent.hasClass(className.active), + isOpen = (isActive && !isAnimating), + isOpening = (!isActive && isAnimating) + ; + module.debug('Toggling visibility of content', $activeTitle); + if(isOpen || isOpening) { + if(settings.collapsible) { + module.close.call($activeTitle); + } + else { + module.debug('Cannot close accordion content collapsing is disabled'); + } + } + else { + module.open.call($activeTitle); + } + }, + + open: function(query) { + var + $activeTitle = (query !== undefined) + ? (typeof query === 'number') + ? $title.eq(query) + : $(query).closest(selector.title) + : $(this).closest(selector.title), + $activeContent = $activeTitle.next($content), + isAnimating = $activeContent.hasClass(className.animating), + isActive = $activeContent.hasClass(className.active), + isOpen = (isActive || isAnimating) + ; + if(isOpen) { + module.debug('Accordion already open, skipping', $activeContent); + return; + } + module.debug('Opening accordion content', $activeTitle); + settings.onOpening.call($activeContent); + if(settings.exclusive) { + module.closeOthers.call($activeTitle); + } + $activeTitle + .addClass(className.active) + ; + $activeContent + .stop(true, true) + .addClass(className.animating) + ; + if(settings.animateChildren) { + if($.fn.transition !== undefined && $module.transition('is supported')) { + $activeContent + .children() + .transition({ + animation : 'fade in', + queue : false, + useFailSafe : true, + debug : settings.debug, + verbose : settings.verbose, + duration : settings.duration + }) + ; + } + else { + $activeContent + .children() + .stop(true, true) + .animate({ + opacity: 1 + }, settings.duration, module.resetOpacity) + ; + } + } + $activeContent + .slideDown(settings.duration, settings.easing, function() { + $activeContent + .removeClass(className.animating) + .addClass(className.active) + ; + module.reset.display.call(this); + settings.onOpen.call(this); + settings.onChange.call(this); + }) + ; + }, + + close: function(query) { + var + $activeTitle = (query !== undefined) + ? (typeof query === 'number') + ? $title.eq(query) + : $(query).closest(selector.title) + : $(this).closest(selector.title), + $activeContent = $activeTitle.next($content), + isAnimating = $activeContent.hasClass(className.animating), + isActive = $activeContent.hasClass(className.active), + isOpening = (!isActive && isAnimating), + isClosing = (isActive && isAnimating) + ; + if((isActive || isOpening) && !isClosing) { + module.debug('Closing accordion content', $activeContent); + settings.onClosing.call($activeContent); + $activeTitle + .removeClass(className.active) + ; + $activeContent + .stop(true, true) + .addClass(className.animating) + ; + if(settings.animateChildren) { + if($.fn.transition !== undefined && $module.transition('is supported')) { + $activeContent + .children() + .transition({ + animation : 'fade out', + queue : false, + useFailSafe : true, + debug : settings.debug, + verbose : settings.verbose, + duration : settings.duration + }) + ; + } + else { + $activeContent + .children() + .stop(true, true) + .animate({ + opacity: 0 + }, settings.duration, module.resetOpacity) + ; + } + } + $activeContent + .slideUp(settings.duration, settings.easing, function() { + $activeContent + .removeClass(className.animating) + .removeClass(className.active) + ; + module.reset.display.call(this); + settings.onClose.call(this); + settings.onChange.call(this); + }) + ; + } + }, + + closeOthers: function(index) { + var + $activeTitle = (index !== undefined) + ? $title.eq(index) + : $(this).closest(selector.title), + $parentTitles = $activeTitle.parents(selector.content).prev(selector.title), + $activeAccordion = $activeTitle.closest(selector.accordion), + activeSelector = selector.title + '.' + className.active + ':visible', + activeContent = selector.content + '.' + className.active + ':visible', + $openTitles, + $nestedTitles, + $openContents + ; + if(settings.closeNested) { + $openTitles = $activeAccordion.find(activeSelector).not($parentTitles); + $openContents = $openTitles.next($content); + } + else { + $openTitles = $activeAccordion.find(activeSelector).not($parentTitles); + $nestedTitles = $activeAccordion.find(activeContent).find(activeSelector).not($parentTitles); + $openTitles = $openTitles.not($nestedTitles); + $openContents = $openTitles.next($content); + } + if( ($openTitles.length > 0) ) { + module.debug('Exclusive enabled, closing other content', $openTitles); + $openTitles + .removeClass(className.active) + ; + $openContents + .removeClass(className.animating) + .stop(true, true) + ; + if(settings.animateChildren) { + if($.fn.transition !== undefined && $module.transition('is supported')) { + $openContents + .children() + .transition({ + animation : 'fade out', + useFailSafe : true, + debug : settings.debug, + verbose : settings.verbose, + duration : settings.duration + }) + ; + } + else { + $openContents + .children() + .stop(true, true) + .animate({ + opacity: 0 + }, settings.duration, module.resetOpacity) + ; + } + } + $openContents + .slideUp(settings.duration , settings.easing, function() { + $(this).removeClass(className.active); + module.reset.display.call(this); + }) + ; + } + }, + + reset: { + + display: function() { + module.verbose('Removing inline display from element', this); + $(this).css('display', ''); + if( $(this).attr('style') === '') { + $(this) + .attr('style', '') + .removeAttr('style') + ; + } + }, + + opacity: function() { + module.verbose('Removing inline opacity from element', this); + $(this).css('opacity', ''); + if( $(this).attr('style') === '') { + $(this) + .attr('style', '') + .removeAttr('style') + ; + } + }, + + }, + + setting: function(name, value) { + module.debug('Changing setting', name, value); + if( $.isPlainObject(name) ) { + $.extend(true, settings, name); + } + else if(value !== undefined) { + if($.isPlainObject(settings[name])) { + $.extend(true, settings[name], value); + } + else { + settings[name] = value; + } + } + else { + return settings[name]; + } + }, + internal: function(name, value) { + module.debug('Changing internal', name, value); + if(value !== undefined) { + if( $.isPlainObject(name) ) { + $.extend(true, module, name); + } + else { + module[name] = value; + } + } + else { + return module[name]; + } + }, + debug: function() { + if(!settings.silent && settings.debug) { + if(settings.performance) { + module.performance.log(arguments); + } + else { + module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':'); + module.debug.apply(console, arguments); + } + } + }, + verbose: function() { + if(!settings.silent && settings.verbose && settings.debug) { + if(settings.performance) { + module.performance.log(arguments); + } + else { + module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':'); + module.verbose.apply(console, arguments); + } + } + }, + error: function() { + if(!settings.silent) { + module.error = Function.prototype.bind.call(console.error, console, settings.name + ':'); + module.error.apply(console, arguments); + } + }, + performance: { + log: function(message) { + var + currentTime, + executionTime, + previousTime + ; + if(settings.performance) { + currentTime = new Date().getTime(); + previousTime = time || currentTime; + executionTime = currentTime - previousTime; + time = currentTime; + performance.push({ + 'Name' : message[0], + 'Arguments' : [].slice.call(message, 1) || '', + 'Element' : element, + 'Execution Time' : executionTime + }); + } + clearTimeout(module.performance.timer); + module.performance.timer = setTimeout(module.performance.display, 500); + }, + display: function() { + var + title = settings.name + ':', + totalTime = 0 + ; + time = false; + clearTimeout(module.performance.timer); + $.each(performance, function(index, data) { + totalTime += data['Execution Time']; + }); + title += ' ' + totalTime + 'ms'; + if(moduleSelector) { + title += ' \'' + moduleSelector + '\''; + } + if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) { + console.groupCollapsed(title); + if(console.table) { + console.table(performance); + } + else { + $.each(performance, function(index, data) { + console.log(data['Name'] + ': ' + data['Execution Time']+'ms'); + }); + } + console.groupEnd(); + } + performance = []; + } + }, + invoke: function(query, passedArguments, context) { + var + object = instance, + maxDepth, + found, + response + ; + passedArguments = passedArguments || queryArguments; + context = element || context; + if(typeof query == 'string' && object !== undefined) { + query = query.split(/[\. ]/); + maxDepth = query.length - 1; + $.each(query, function(depth, value) { + var camelCaseValue = (depth != maxDepth) + ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1) + : query + ; + if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) { + object = object[camelCaseValue]; + } + else if( object[camelCaseValue] !== undefined ) { + found = object[camelCaseValue]; + return false; + } + else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) { + object = object[value]; + } + else if( object[value] !== undefined ) { + found = object[value]; + return false; + } + else { + module.error(error.method, query); + return false; + } + }); + } + if ( $.isFunction( found ) ) { + response = found.apply(context, passedArguments); + } + else if(found !== undefined) { + response = found; + } + if($.isArray(returnedValue)) { + returnedValue.push(response); + } + else if(returnedValue !== undefined) { + returnedValue = [returnedValue, response]; + } + else if(response !== undefined) { + returnedValue = response; + } + return found; + } + }; + if(methodInvoked) { + if(instance === undefined) { + module.initialize(); + } + module.invoke(query); + } + else { + if(instance !== undefined) { + instance.invoke('destroy'); + } + module.initialize(); + } + }) + ; + return (returnedValue !== undefined) + ? returnedValue + : this + ; +}; + +$.fn.accordion.settings = { + + name : 'Accordion', + namespace : 'accordion', + + silent : false, + debug : false, + verbose : false, + performance : true, + + on : 'click', // event on title that opens accordion + + observeChanges : true, // whether accordion should automatically refresh on DOM insertion + + exclusive : true, // whether a single accordion content panel should be open at once + collapsible : true, // whether accordion content can be closed + closeNested : false, // whether nested content should be closed when a panel is closed + animateChildren : true, // whether children opacity should be animated + + duration : 350, // duration of animation + easing : 'easeOutQuad', // easing equation for animation + + + onOpening : function(){}, // callback before open animation + onOpen : function(){}, // callback after open animation + onClosing : function(){}, // callback before closing animation + onClose : function(){}, // callback after closing animation + onChange : function(){}, // callback after closing or opening animation + + error: { + method : 'The method you called is not defined' + }, + + className : { + active : 'active', + animating : 'animating' + }, + + selector : { + accordion : '.accordion', + title : '.title', + trigger : '.title', + content : '.content' + } + +}; + +// Adds easing +$.extend( $.easing, { + easeOutQuad: function (x, t, b, c, d) { + return -c *(t/=d)*(t-2) + b; + } +}); + +})( jQuery, window, document ); + + +/*! + * # Semantic UI - Checkbox + * http://github.com/semantic-org/semantic-ui/ + * + * + * Released under the MIT license + * http://opensource.org/licenses/MIT + * + */ + +;(function ($, window, document, undefined) { + +"use strict"; + +window = (typeof window != 'undefined' && window.Math == Math) + ? window + : (typeof self != 'undefined' && self.Math == Math) + ? self + : Function('return this')() +; + +$.fn.checkbox = function(parameters) { + var + $allModules = $(this), + moduleSelector = $allModules.selector || '', + + time = new Date().getTime(), + performance = [], + + query = arguments[0], + methodInvoked = (typeof query == 'string'), + queryArguments = [].slice.call(arguments, 1), + returnedValue + ; + + $allModules + .each(function() { + var + settings = $.extend(true, {}, $.fn.checkbox.settings, parameters), + + className = settings.className, + namespace = settings.namespace, + selector = settings.selector, + error = settings.error, + + eventNamespace = '.' + namespace, + moduleNamespace = 'module-' + namespace, + + $module = $(this), + $label = $(this).children(selector.label), + $input = $(this).children(selector.input), + input = $input[0], + + initialLoad = false, + shortcutPressed = false, + instance = $module.data(moduleNamespace), + + observer, + element = this, + module + ; + + module = { + + initialize: function() { + module.verbose('Initializing checkbox', settings); + + module.create.label(); + module.bind.events(); + + module.set.tabbable(); + module.hide.input(); + + module.observeChanges(); + module.instantiate(); + module.setup(); + }, + + instantiate: function() { + module.verbose('Storing instance of module', module); + instance = module; + $module + .data(moduleNamespace, module) + ; + }, + + destroy: function() { + module.verbose('Destroying module'); + module.unbind.events(); + module.show.input(); + $module.removeData(moduleNamespace); + }, + + fix: { + reference: function() { + if( $module.is(selector.input) ) { + module.debug('Behavior called on adjusting invoked element'); + $module = $module.closest(selector.checkbox); + module.refresh(); + } + } + }, + + setup: function() { + module.set.initialLoad(); + if( module.is.indeterminate() ) { + module.debug('Initial value is indeterminate'); + module.indeterminate(); + } + else if( module.is.checked() ) { + module.debug('Initial value is checked'); + module.check(); + } + else { + module.debug('Initial value is unchecked'); + module.uncheck(); + } + module.remove.initialLoad(); + }, + + refresh: function() { + $label = $module.children(selector.label); + $input = $module.children(selector.input); + input = $input[0]; + }, + + hide: { + input: function() { + module.verbose('Modifying z-index to be unselectable'); + $input.addClass(className.hidden); + } + }, + show: { + input: function() { + module.verbose('Modifying z-index to be selectable'); + $input.removeClass(className.hidden); + } + }, + + observeChanges: function() { + if('MutationObserver' in window) { + observer = new MutationObserver(function(mutations) { + module.debug('DOM tree modified, updating selector cache'); + module.refresh(); + }); + observer.observe(element, { + childList : true, + subtree : true + }); + module.debug('Setting up mutation observer', observer); + } + }, + + attachEvents: function(selector, event) { + var + $element = $(selector) + ; + event = $.isFunction(module[event]) + ? module[event] + : module.toggle + ; + if($element.length > 0) { + module.debug('Attaching checkbox events to element', selector, event); + $element + .on('click' + eventNamespace, event) + ; + } + else { + module.error(error.notFound); + } + }, + + event: { + click: function(event) { + var + $target = $(event.target) + ; + if( $target.is(selector.input) ) { + module.verbose('Using default check action on initialized checkbox'); + return; + } + if( $target.is(selector.link) ) { + module.debug('Clicking link inside checkbox, skipping toggle'); + return; + } + module.toggle(); + $input.focus(); + event.preventDefault(); + }, + keydown: function(event) { + var + key = event.which, + keyCode = { + enter : 13, + space : 32, + escape : 27 + } + ; + if(key == keyCode.escape) { + module.verbose('Escape key pressed blurring field'); + $input.blur(); + shortcutPressed = true; + } + else if(!event.ctrlKey && ( key == keyCode.space || key == keyCode.enter) ) { + module.verbose('Enter/space key pressed, toggling checkbox'); + module.toggle(); + shortcutPressed = true; + } + else { + shortcutPressed = false; + } + }, + keyup: function(event) { + if(shortcutPressed) { + event.preventDefault(); + } + } + }, + + check: function() { + if( !module.should.allowCheck() ) { + return; + } + module.debug('Checking checkbox', $input); + module.set.checked(); + if( !module.should.ignoreCallbacks() ) { + settings.onChecked.call(input); + settings.onChange.call(input); + } + }, + + uncheck: function() { + if( !module.should.allowUncheck() ) { + return; + } + module.debug('Unchecking checkbox'); + module.set.unchecked(); + if( !module.should.ignoreCallbacks() ) { + settings.onUnchecked.call(input); + settings.onChange.call(input); + } + }, + + indeterminate: function() { + if( module.should.allowIndeterminate() ) { + module.debug('Checkbox is already indeterminate'); + return; + } + module.debug('Making checkbox indeterminate'); + module.set.indeterminate(); + if( !module.should.ignoreCallbacks() ) { + settings.onIndeterminate.call(input); + settings.onChange.call(input); + } + }, + + determinate: function() { + if( module.should.allowDeterminate() ) { + module.debug('Checkbox is already determinate'); + return; + } + module.debug('Making checkbox determinate'); + module.set.determinate(); + if( !module.should.ignoreCallbacks() ) { + settings.onDeterminate.call(input); + settings.onChange.call(input); + } + }, + + enable: function() { + if( module.is.enabled() ) { + module.debug('Checkbox is already enabled'); + return; + } + module.debug('Enabling checkbox'); + module.set.enabled(); + settings.onEnable.call(input); + // preserve legacy callbacks + settings.onEnabled.call(input); + }, + + disable: function() { + if( module.is.disabled() ) { + module.debug('Checkbox is already disabled'); + return; + } + module.debug('Disabling checkbox'); + module.set.disabled(); + settings.onDisable.call(input); + // preserve legacy callbacks + settings.onDisabled.call(input); + }, + + get: { + radios: function() { + var + name = module.get.name() + ; + return $('input[name="' + name + '"]').closest(selector.checkbox); + }, + otherRadios: function() { + return module.get.radios().not($module); + }, + name: function() { + return $input.attr('name'); + } + }, + + is: { + initialLoad: function() { + return initialLoad; + }, + radio: function() { + return ($input.hasClass(className.radio) || $input.attr('type') == 'radio'); + }, + indeterminate: function() { + return $input.prop('indeterminate') !== undefined && $input.prop('indeterminate'); + }, + checked: function() { + return $input.prop('checked') !== undefined && $input.prop('checked'); + }, + disabled: function() { + return $input.prop('disabled') !== undefined && $input.prop('disabled'); + }, + enabled: function() { + return !module.is.disabled(); + }, + determinate: function() { + return !module.is.indeterminate(); + }, + unchecked: function() { + return !module.is.checked(); + } + }, + + should: { + allowCheck: function() { + if(module.is.determinate() && module.is.checked() && !module.should.forceCallbacks() ) { + module.debug('Should not allow check, checkbox is already checked'); + return false; + } + if(settings.beforeChecked.apply(input) === false) { + module.debug('Should not allow check, beforeChecked cancelled'); + return false; + } + return true; + }, + allowUncheck: function() { + if(module.is.determinate() && module.is.unchecked() && !module.should.forceCallbacks() ) { + module.debug('Should not allow uncheck, checkbox is already unchecked'); + return false; + } + if(settings.beforeUnchecked.apply(input) === false) { + module.debug('Should not allow uncheck, beforeUnchecked cancelled'); + return false; + } + return true; + }, + allowIndeterminate: function() { + if(module.is.indeterminate() && !module.should.forceCallbacks() ) { + module.debug('Should not allow indeterminate, checkbox is already indeterminate'); + return false; + } + if(settings.beforeIndeterminate.apply(input) === false) { + module.debug('Should not allow indeterminate, beforeIndeterminate cancelled'); + return false; + } + return true; + }, + allowDeterminate: function() { + if(module.is.determinate() && !module.should.forceCallbacks() ) { + module.debug('Should not allow determinate, checkbox is already determinate'); + return false; + } + if(settings.beforeDeterminate.apply(input) === false) { + module.debug('Should not allow determinate, beforeDeterminate cancelled'); + return false; + } + return true; + }, + forceCallbacks: function() { + return (module.is.initialLoad() && settings.fireOnInit); + }, + ignoreCallbacks: function() { + return (initialLoad && !settings.fireOnInit); + } + }, + + can: { + change: function() { + return !( $module.hasClass(className.disabled) || $module.hasClass(className.readOnly) || $input.prop('disabled') || $input.prop('readonly') ); + }, + uncheck: function() { + return (typeof settings.uncheckable === 'boolean') + ? settings.uncheckable + : !module.is.radio() + ; + } + }, + + set: { + initialLoad: function() { + initialLoad = true; + }, + checked: function() { + module.verbose('Setting class to checked'); + $module + .removeClass(className.indeterminate) + .addClass(className.checked) + ; + if( module.is.radio() ) { + module.uncheckOthers(); + } + if(!module.is.indeterminate() && module.is.checked()) { + module.debug('Input is already checked, skipping input property change'); + return; + } + module.verbose('Setting state to checked', input); + $input + .prop('indeterminate', false) + .prop('checked', true) + ; + module.trigger.change(); + }, + unchecked: function() { + module.verbose('Removing checked class'); + $module + .removeClass(className.indeterminate) + .removeClass(className.checked) + ; + if(!module.is.indeterminate() && module.is.unchecked() ) { + module.debug('Input is already unchecked'); + return; + } + module.debug('Setting state to unchecked'); + $input + .prop('indeterminate', false) + .prop('checked', false) + ; + module.trigger.change(); + }, + indeterminate: function() { + module.verbose('Setting class to indeterminate'); + $module + .addClass(className.indeterminate) + ; + if( module.is.indeterminate() ) { + module.debug('Input is already indeterminate, skipping input property change'); + return; + } + module.debug('Setting state to indeterminate'); + $input + .prop('indeterminate', true) + ; + module.trigger.change(); + }, + determinate: function() { + module.verbose('Removing indeterminate class'); + $module + .removeClass(className.indeterminate) + ; + if( module.is.determinate() ) { + module.debug('Input is already determinate, skipping input property change'); + return; + } + module.debug('Setting state to determinate'); + $input + .prop('indeterminate', false) + ; + }, + disabled: function() { + module.verbose('Setting class to disabled'); + $module + .addClass(className.disabled) + ; + if( module.is.disabled() ) { + module.debug('Input is already disabled, skipping input property change'); + return; + } + module.debug('Setting state to disabled'); + $input + .prop('disabled', 'disabled') + ; + module.trigger.change(); + }, + enabled: function() { + module.verbose('Removing disabled class'); + $module.removeClass(className.disabled); + if( module.is.enabled() ) { + module.debug('Input is already enabled, skipping input property change'); + return; + } + module.debug('Setting state to enabled'); + $input + .prop('disabled', false) + ; + module.trigger.change(); + }, + tabbable: function() { + module.verbose('Adding tabindex to checkbox'); + if( $input.attr('tabindex') === undefined) { + $input.attr('tabindex', 0); + } + } + }, + + remove: { + initialLoad: function() { + initialLoad = false; + } + }, + + trigger: { + change: function() { + var + events = document.createEvent('HTMLEvents'), + inputElement = $input[0] + ; + if(inputElement) { + module.verbose('Triggering native change event'); + events.initEvent('change', true, false); + inputElement.dispatchEvent(events); + } + } + }, + + + create: { + label: function() { + if($input.prevAll(selector.label).length > 0) { + $input.prev(selector.label).detach().insertAfter($input); + module.debug('Moving existing label', $label); + } + else if( !module.has.label() ) { + $label = $('