diff --git a/esp_meas.pro.user b/esp_meas.pro.user index a8b729e..7fae79d 100644 --- a/esp_meas.pro.user +++ b/esp_meas.pro.user @@ -1,6 +1,6 @@ - + EnvironmentId diff --git a/html/css/app.css b/html/css/app.css index 5857009..cc8002f 100644 --- a/html/css/app.css +++ b/html/css/app.css @@ -1 +1 @@ -*,:after,:before{box-sizing:border-box}html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}figure,nav{display:block}canvas,progress{display:inline-block;vertical-align:baseline}[hidden]{display:none}a{background-color:transparent}a:active,a:hover{outline:0}b{font-weight:700}h1,h2{font-size:2em;margin:.67em 0}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}hr{box-sizing:content-box;height:0}pre{overflow:auto}code,pre{font-family:monospace;font-size:1em}button,input,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}legend{border:0;padding:0}textarea{overflow:auto}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}html{box-sizing:border-box}*,:after,:before{box-sizing:inherit}.ct-zoom-rect{fill:rgba(200,100,100,.3);stroke:#ff2b12}.ct-axis-title{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.ct-axis-title,.ct-label{fill:rgba(255,255,255,.8)}.ct-label{color:rgba(255,255,255,.8);font-size:.75rem;line-height:1}.ct-label.ct-horizontal.ct-start{align-items:flex-end;justify-content:flex-start;text-align:left;text-anchor:start}.ct-label.ct-horizontal.ct-end{align-items:flex-start;justify-content:flex-start;text-align:left;text-anchor:start;transform:translate(-4px) rotate(45deg)}.ct-label.ct-vertical.ct-start{align-items:flex-end;justify-content:flex-end;text-align:right;text-anchor:end;transform:translateY(20%)}.ct-label.ct-vertical.ct-end{align-items:flex-end;justify-content:flex-start;text-align:left;text-anchor:start}.ct-chart-bar .ct-label,.ct-chart-line .ct-label{display:flex}.ct-chart-bar .ct-label.ct-horizontal.ct-start{align-items:flex-end;justify-content:center;text-align:center;text-anchor:start}.ct-chart-bar .ct-label.ct-horizontal.ct-end{align-items:flex-start;justify-content:center;text-align:center;text-anchor:start}.ct-chart-bar.ct-horizontal-bars .ct-label.ct-horizontal.ct-start{align-items:flex-end;justify-content:flex-start;text-align:left;text-anchor:start}.ct-chart-bar.ct-horizontal-bars .ct-label.ct-horizontal.ct-end{align-items:flex-start;justify-content:flex-start;text-align:left;text-anchor:start}.ct-chart-bar.ct-horizontal-bars .ct-label.ct-vertical.ct-start{align-items:center;justify-content:flex-end;text-align:right;text-anchor:end}.ct-chart-bar.ct-horizontal-bars .ct-label.ct-vertical.ct-end{align-items:center;justify-content:flex-start;text-align:left;text-anchor:end}.ct-grid{stroke:rgba(255,255,255,.3);stroke-width:1px;stroke-dasharray:2px}.ct-point{stroke-width:4px;stroke-linecap:round}.ct-line{fill:none;stroke-width:2px}.ct-with-area .ct-line{stroke-width:1px}.ct-area{stroke:none;fill-opacity:.3}.ct-bar{fill:none;stroke-width:10px}.ct-series-a .ct-bar,.ct-series-a .ct-line,.ct-series-a .ct-point{stroke:#f05b4f}.ct-series-a .ct-area,.ct-series-a .ct-slice-pie{fill:#f05b4f}.ct-series-b .ct-bar,.ct-series-b .ct-line,.ct-series-b .ct-point{stroke:#6188e2}.ct-series-b .ct-area,.ct-series-b .ct-slice-pie{fill:#6188e2}.ct-series-c .ct-bar,.ct-series-c .ct-line,.ct-series-c .ct-point{stroke:#59922b}.ct-series-c .ct-area,.ct-series-c .ct-slice-pie{fill:#59922b}.ct-series-d .ct-bar,.ct-series-d .ct-line,.ct-series-d .ct-point{stroke:#eacf7d}.ct-series-d .ct-area,.ct-series-d .ct-slice-pie{fill:#eacf7d}.ct-series-e .ct-bar,.ct-series-e .ct-line,.ct-series-e .ct-point{stroke:#a748ca}.ct-series-e .ct-area,.ct-series-e .ct-slice-pie{fill:#a748ca}.ct-wide{display:block;position:relative;width:100%}.ct-wide:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:62.5%}.ct-wide:after{content:"";display:table;clear:both}.ct-wide>svg{display:block;position:absolute;top:0;left:0}.ct-narrow{display:block;position:relative;width:100%}.ct-narrow:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:66.6666666667%}.ct-narrow:after{content:"";display:table;clear:both}.ct-narrow>svg{display:block;position:absolute;top:0;left:0}.center{text-align:center}.invis{visibility:hidden}.hidden{display:none}html{font-family:Arial,sans-serif;color:#D0D0D0;background:#131315}body,html{border:0 none;margin:0;padding:0;text-decoration:none;width:100%;height:100%;overflow:hidden}a,a:link,a:visited{color:#5abfff;text-decoration:none}a:hover{color:#5abfff;text-decoration:underline}#outer{display:flex;position:absolute;width:100%;height:100%;left:0;right:0;top:0;bottom:0;overflow:hidden;flex-direction:row}@media screen and (max-width:544px){#outer{display:block;overflow-y:scroll}}#menu{flex:0 0 15rem;background:#2bab5f}#menu>*{display:block;text-decoration:none;padding:.6180469716rem 1rem;white-space:nowrap;word-wrap:normal;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}#menu #brand{color:white;background:#218248;font-size:120%;text-align:center;position:relative;margin-bottom:1rem}@media screen and (max-width:544px){#menu #brand{background:#2bab5f;cursor:pointer}#menu #brand:after{position:absolute;color:rgba(0,0,0,.2);right:1rem;content:'>';top:50%;font-size:120%;font-weight:700;transform:translateY(-50%) rotate(90deg)}}#menu.expanded #brand{background:#218248}@media screen and (max-width:544px){#menu.expanded #brand:after{transform:translateY(-50%) rotate(-90deg)}}#menu a{font-size:130%;color:white;transition:background-color .2s;text-shadow:0 0 5px rgba(0,0,0,.4)}#menu a.selected,#menu a:hover{background:#1bd886;text-shadow:0 0 5px rgba(0,0,0,.6)}#menu a.selected{position:relative;box-shadow:0 0 5px rgba(0,0,0,.5)}#menu a:before{content:"▸";padding-right:.5rem;position:relative;top:-.1rem}@media screen and (max-width:544px){#menu a{display:none}}#menu.expanded a{display:block}@media screen and (min-width:545px) and (max-width:1000px){#menu{flex-basis:10rem}#menu #brand{font-size:95%;margin-bottom:.6180469716rem}#menu a{font-size:105%}#menu>*{padding:.3819820591rem .6180469716rem}}#content{flex-grow:1;position:relative;padding:1rem;overflow-y:auto}@media screen and (max-width:544px){#content{padding:.6180469716rem}}#content>*{margin-left:auto;margin-right:auto}#content h1{text-align:center;font-size:2.2806973457em;margin-top:0;margin-bottom:1rem}#content h2{font-size:1.423828125em;margin-bottom:.6180469716rem}#content td,#content th{padding:.3819820591rem}#content tbody th{text-align:right;width:130px;color:#fff}#loader{position:absolute;right:1.618rem;top:1.618rem;transition:opacity .2s;opacity:0}@media screen and (max-width:544px){#loader{top:1rem;right:1rem}}#loader.show{opacity:1}.Box{display:block;max-width:900px;margin-top:1rem;padding:.6180469716rem 1rem;border-radius:3px;background-color:rgba(255,255,255,.07)}@media screen and (max-width:544px){.Box{margin-top:.6180469716rem}}.Box h2,h1+.Box{margin-top:0}.Box.wide{width:initial;max-width:initial}.Box.medium{max-width:1200px}.Modal{position:fixed;width:100%;height:100%;left:0;top:0;right:0;bottom:0;display:flex;justify-content:center;align-items:center;transition:opacity .5s;background:rgba(0,0,0,.65);opacity:0}.Modal.visible{opacity:1}.Modal.hidden{display:none}.Dialog{margin:.6180469716rem;padding:1rem;overflow:hidden;max-width:100%;max-height:100%;flex:0 1 30rem;background:#1c1c1e;border-left:6px solid #217b3a;border-right:6px solid #217b3a;box-shadow:0 0 2px 0 #434349,0 0 6px 0 black;border-radius:6px}.Dialog h1,.Dialog h2{margin-top:0}.Dialog p:last-child{margin-bottom:0}.ErrMsg{position:fixed;bottom:2.617924rem;padding:.6180469716rem 1rem;left:50%;transform:translate(-50%);-webkit-font-smoothing:subpixel-antialiased;-webkit-transform:translateZ(0) scale(1);background:#d03e42;color:white;text-shadow:0 0 2px black;box-shadow:0 0 6px 0 rgba(0,0,0,.6);border-radius:5px;max-width:80%;transition:opacity .5s;opacity:0}@media screen and (max-width:544px){.ErrMsg{width:calc(100% - 1rem)}}.ErrMsg.visible{opacity:1}.ErrMsg.hidden{display:none}.button,button,input[type=button],input[type=reset],input[type=submit]{text-align:center;cursor:pointer;display:inline-block;border-radius:2px;padding:0 .6em;border:0 none;outline:0 none!important;line-height:1.8em;font-size:1.1em;margin-bottom:3px;min-width:5em;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;text-shadow:1.5px 1.5px 2px rgba(0,0,0,.8)}.button:active,button:active,input[type=button]:active,input[type=reset]:active,input[type=submit]:active{position:relative;top:2px}.button.narrow,button.narrow,input[type=button].narrow,input[type=reset].narrow,input[type=submit].narrow{min-width:initial}.btn-green,input[type=submit]{background-color:#2ca94b;box-shadow:0 3px 0 #1d7032;text-decoration:none!important}.btn-green,.btn-green:link,.btn-green:visited,input[type=submit],input[type=submit]:link,input[type=submit]:visited{color:#FEFEFE}.btn-green.active,.btn-green.selected,.btn-green:active,.btn-green:hover,input[type=submit].active,input[type=submit].selected,input[type=submit]:active,input[type=submit]:hover{background-color:#28ba5c;color:#FEFEFE}.btn-green.active,.btn-green.selected,.btn-green:hover,input[type=submit].active,input[type=submit].selected,input[type=submit]:hover{box-shadow:0 3px 0 #1a773b}.btn-green:active,input[type=submit]:active{box-shadow:0 1px 0 #1a773b}.btn-red,input[type=reset]{background-color:#D04E51;box-shadow:0 3px 0 #aa2d30;text-decoration:none!important}.btn-red,.btn-red:link,.btn-red:visited,input[type=reset],input[type=reset]:link,input[type=reset]:visited{color:#FEFEFE}.btn-red.active,.btn-red.selected,.btn-red:active,.btn-red:hover,input[type=reset].active,input[type=reset].selected,input[type=reset]:active,input[type=reset]:hover{background-color:#d4403f;color:#FEFEFE}.btn-red.active,.btn-red.selected,.btn-red:hover,input[type=reset].active,input[type=reset].selected,input[type=reset]:hover{box-shadow:0 3px 0 #9e2423}.btn-red:active,input[type=reset]:active{box-shadow:0 1px 0 #9e2423}.btn-blue{background-color:#3983cd;box-shadow:0 3px 0 #265f98;text-decoration:none!important}.btn-blue,.btn-blue:link,.btn-blue:visited{color:#FEFEFE}.btn-blue.active,.btn-blue.selected,.btn-blue:active,.btn-blue:hover{background-color:#2076C6;color:#FEFEFE}.btn-blue.active,.btn-blue.selected,.btn-blue:hover{box-shadow:0 3px 0 #154c80}.btn-blue:active{box-shadow:0 1px 0 #154c80}input[type=number],input[type=password],input[type=text],select,textarea{border:0 none;border-bottom:2px solid #217b3a;background-color:#303030;color:#fff;padding:6px;line-height:1em;outline:0 none!important;-moz-outline:0 none!important;font-weight:400}input[type=number]:focus,input[type=number]:hover,input[type=password]:focus,input[type=password]:hover,input[type=text]:focus,input[type=text]:hover,select:focus,select:hover,textarea:focus,textarea:hover{border-bottom-color:#28bc65}input[type=number],input[type=password],input[type=text],textarea{-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text;cursor:text}textarea{font-family:monospace;line-height:1.2em;display:block}form{border:0 none;margin:0;padding:0;text-decoration:none}input[type=number],input[type=password],input[type=text],label.select-wrap,select,textarea{width:250px}form .Row{vertical-align:middle;margin:14px auto;text-align:left;display:flex;flex-direction:row}form .Row:first-child{margin-top:0}form .Row:last-child{margin-bottom:0}form .Row .spacer{width:130px}@media screen and (max-width:544px){form .Row .spacer{display:none}}form .Row.buttons .button,form .Row.buttons input{margin-right:.6180469716rem}form .Row.centered{justify-content:center}form .Row.message{font-size:1em;text-shadow:1px 1px 3px black;text-align:center}form .Row.message.error{color:crimson}form .Row.message.ok{color:#0fe851}form .Row.separator{padding-top:14px;border-top:2px solid rgba(255,255,255,.1)}form .Row textarea{display:inline-block;vertical-align:top;min-height:10rem;flex-grow:1;resize:vertical}form .Row label{font-weight:700;color:#fff;text-shadow:1px 1px 3px black;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}form .Row .checkbox-wrap,form .Row label{display:inline-block;width:130px;text-align:right;padding:8px;align-self:flex-start}form .Row .checkbox-wrap input[type=checkbox]{margin:auto;width:auto;height:auto}form .Row .checkbox-wrap+label{width:250px;padding-left:0;text-align:left;cursor:pointer}@media screen and (max-width:544px){form .Row{flex-direction:column}form .Row.buttons,form .Row.centered{flex-direction:row}form .Row.buttons{justify-content:center}form .Row.buttons :last-child{margin-right:0}form .Row label{padding-left:0;text-align:left;width:auto}form .Row .checkbox-wrap{order:1;text-align:left;padding-bottom:0;border-radius:.4px;width:auto}form .Row .checkbox-wrap+label{width:auto}form .Row input[type=number],form .Row input[type=password],form .Row input[type=text],form .Row textarea{width:100%}}form span.required{color:red}.RadioGroup{display:inline-block;line-height:1.5em;vertical-align:middle}.RadioGroup label{width:auto;text-align:left;cursor:pointer;font-weight:400}.RadioGroup input[type=radio]{vertical-align:middle;margin:0 0 0 5px}@media screen and (-webkit-min-device-pixel-ratio:0){select{padding-right:18px}}select{-webkit-appearance:none;-moz-appearance:none;appearance:none;cursor:pointer;line-height:1.4em;padding:3.5px;padding-right:1em}select:-moz-focusring{color:transparent;text-shadow:0 0 0 #fff}select option{background:#303030}label.select-wrap{position:relative;display:inline!important;margin:0!important;padding:0!important;width:auto!important}label.select-wrap:after{content:'<>';font-family:Consolas,monospace;font-weight:700;color:#28bc65;top:50%;transform:translateY(-50%) rotate(90deg);right:2px;position:absolute;z-index:100;pointer-events:none}#ap-list{-webkit-column-count:3;-moz-column-count:3;column-count:3;-webkit-column-gap:0;-moz-column-gap:0;column-gap:0;margin:0 -.2360828548rem}@media screen and (min-width:545px) and (max-width:1000px){#ap-list{-webkit-column-count:2;-moz-column-count:2;column-count:2}}@media screen and (max-width:544px){#ap-list{-webkit-column-count:1;-moz-column-count:1;column-count:1}}#ap-loader{background:rgba(255,255,255,.1);border-radius:5px;padding:.3819820591rem;margin-bottom:.3819820591rem}#ap-box{padding-bottom:.3819820591rem}#psk-modal form{display:flex;align-items:center;margin:.3819820591rem}#psk-modal form>*{margin-left:.3819820591rem;margin-right:.3819820591rem}#psk-modal form>:first-child{margin-left:0}#psk-modal form>:last-child{margin-right:0}#psk-modal form input[type=password]{min-width:5rem}.AP{-webkit-column-break-inside:avoid;page-break-inside:avoid;break-inside:avoid-column;max-width:500px;padding:.2360828548rem}.AP.selected .inner{background:#43de81!important;cursor:default;top:0!important}.AP .inner{cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;position:relative;border-radius:3px;color:#222;background:#afafaf;transition:background-color .5s;display:flex}.AP .inner:active{left:0;top:1px}.AP .inner:hover{background:white}.AP .inner>*{padding:.6180469716rem;white-space:nowrap;word-wrap:normal}.AP .inner .rssi{min-width:2rem;flex:0 0 15%;text-align:right}.AP .inner .rssi:after{padding-left:.090179415rem;content:'%';font-size:.8888888889em}.AP .inner .essid{flex:1 1 70%;min-width:0;text-overflow:ellipsis;overflow:hidden;font-weight:700}.AP .inner .auth{flex:0 0 15%}.page-home #staRSSIperc:after{padding-left:.1459102934rem;content:'%';font-size:.8888888889em}.page-home #staRSSI:after{padding-left:.1459102934rem;content:'dBm';font-size:.8888888889em}#samp-ctrl{display:flex;padding:.3819820591rem;flex-direction:row;justify-content:center;align-items:stretch}@media screen and (max-width:544px){#samp-ctrl{flex-direction:column}}#samp-ctrl>div{margin:.3819820591rem .6180469716rem}#samp-ctrl label{line-height:1.8;font-weight:700}#samp-ctrl input,#samp-ctrl select{width:6em}@media screen and (max-width:544px){#samp-ctrl input,#samp-ctrl select{width:100%}}.Box.chartbox{display:flex;flex-direction:row}@media screen and (max-width:544px){.Box.chartbox{flex-direction:column}}.Box.chartbox .stats{flex:0 1;position:relative}@media screen and (max-width:544px){.Box.chartbox .stats table{margin:0 auto}.Box.chartbox .stats td,.Box.chartbox .stats th{width:50%}}.Box.chartbox .stats td,.Box.chartbox .stats th{white-space:nowrap;word-wrap:normal}.Box.chartbox .stats th sub{font-weight:400}.Box.chartbox .stats td{min-width:100px}.Box.chartbox .stats td:after{font-size:90%;padding-left:.5em}.Box.chartbox .stats #stat-f-s:after{content:"Hz"}.Box.chartbox .stats #stat-i-peak:after,.Box.chartbox .stats #stat-i-rms:after{content:"mA"}.Box.chartbox .stats .ar{position:absolute;bottom:.3819820591rem;width:100%;text-align:center}.Box.chartbox .stats .ar input[type=number]{width:4em}.Box.chartbox .stats .ar input[type=button]{margin-left:.3819820591rem}.page-about .Box{padding-left:1rem;padding-right:1rem}.page-about .Box a{font-weight:700}.page-about #logo{float:right;height:130px}.page-about #logo2{max-width:150px}@media screen and (min-width:545px){.mq-phone{display:none}}@media screen and (max-width:544px){.mq-tablet-min{display:none}}@media screen and (min-width:1001px){.mq-tablet-max{display:none}}@media screen and (max-width:1000px){.mq-normal-min{display:none}} \ No newline at end of file +*,:after,:before{box-sizing:border-box}html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}figure,nav{display:block}canvas,progress{display:inline-block;vertical-align:baseline}[hidden]{display:none}a{background-color:transparent}a:active,a:hover{outline:0}b{font-weight:700}h1,h2{font-size:2em;margin:.67em 0}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}hr{box-sizing:content-box;height:0}pre{overflow:auto}code,pre{font-family:monospace;font-size:1em}button,input,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}legend{border:0;padding:0}textarea{overflow:auto}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}html{box-sizing:border-box}*,:after,:before{box-sizing:inherit}.ct-zoom-rect{fill:rgba(200,100,100,.3);stroke:#ff2b12}.ct-axis-title{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.ct-axis-title,.ct-label{fill:rgba(255,255,255,.8)}.ct-label{color:rgba(255,255,255,.8);font-size:.75rem;line-height:1}.ct-label.ct-horizontal.ct-start{align-items:flex-end;justify-content:flex-start;text-align:left;text-anchor:start}.ct-label.ct-horizontal.ct-end{align-items:flex-start;justify-content:flex-start;text-align:left;text-anchor:start;transform:translate(-4px) rotate(45deg)}.ct-label.ct-vertical.ct-start{align-items:flex-end;justify-content:flex-end;text-align:right;text-anchor:end;transform:translateY(20%)}.ct-label.ct-vertical.ct-end{align-items:flex-end;justify-content:flex-start;text-align:left;text-anchor:start}.ct-chart-bar .ct-label,.ct-chart-line .ct-label{display:flex}.ct-chart-bar .ct-label.ct-horizontal.ct-start{align-items:flex-end;justify-content:center;text-align:center;text-anchor:start}.ct-chart-bar .ct-label.ct-horizontal.ct-end{align-items:flex-start;justify-content:center;text-align:center;text-anchor:start}.ct-chart-bar.ct-horizontal-bars .ct-label.ct-horizontal.ct-start{align-items:flex-end;justify-content:flex-start;text-align:left;text-anchor:start}.ct-chart-bar.ct-horizontal-bars .ct-label.ct-horizontal.ct-end{align-items:flex-start;justify-content:flex-start;text-align:left;text-anchor:start}.ct-chart-bar.ct-horizontal-bars .ct-label.ct-vertical.ct-start{align-items:center;justify-content:flex-end;text-align:right;text-anchor:end}.ct-chart-bar.ct-horizontal-bars .ct-label.ct-vertical.ct-end{align-items:center;justify-content:flex-start;text-align:left;text-anchor:end}.ct-grid{stroke:rgba(255,255,255,.3);stroke-width:1px;stroke-dasharray:2px}.ct-point{stroke-width:4px;stroke-linecap:round}.ct-line{fill:none;stroke-width:2px}.ct-with-area .ct-line{stroke-width:1px}.ct-area{stroke:none;fill-opacity:.3}.ct-bar{fill:none;stroke-width:10px}.ct-series-a .ct-bar,.ct-series-a .ct-line,.ct-series-a .ct-point{stroke:#f05b4f}.ct-series-a .ct-area,.ct-series-a .ct-slice-pie{fill:#f05b4f}.ct-series-b .ct-bar,.ct-series-b .ct-line,.ct-series-b .ct-point{stroke:#6188e2}.ct-series-b .ct-area,.ct-series-b .ct-slice-pie{fill:#6188e2}.ct-series-c .ct-bar,.ct-series-c .ct-line,.ct-series-c .ct-point{stroke:#59922b}.ct-series-c .ct-area,.ct-series-c .ct-slice-pie{fill:#59922b}.ct-series-d .ct-bar,.ct-series-d .ct-line,.ct-series-d .ct-point{stroke:#eacf7d}.ct-series-d .ct-area,.ct-series-d .ct-slice-pie{fill:#eacf7d}.ct-series-e .ct-bar,.ct-series-e .ct-line,.ct-series-e .ct-point{stroke:#a748ca}.ct-series-e .ct-area,.ct-series-e .ct-slice-pie{fill:#a748ca}.ct-wide{display:block;position:relative;width:100%}.ct-wide:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:62.5%}.ct-wide:after{content:"";display:table;clear:both}.ct-wide>svg{display:block;position:absolute;top:0;left:0}.ct-narrow{display:block;position:relative;width:100%}.ct-narrow:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:66.6666666667%}.ct-narrow:after{content:"";display:table;clear:both}.ct-narrow>svg{display:block;position:absolute;top:0;left:0}.center{text-align:center}.invis{visibility:hidden}.hidden{display:none}html{font-family:Arial,sans-serif;color:#D0D0D0;background:#131315}body,html{border:0 none;margin:0;padding:0;text-decoration:none;width:100%;height:100%;overflow:hidden}a,a:link,a:visited{color:#5abfff;text-decoration:none}a:hover{color:#5abfff;text-decoration:underline}#outer{display:flex;position:absolute;width:100%;height:100%;left:0;right:0;top:0;bottom:0;overflow:hidden;flex-direction:row}@media screen and (max-width:544px){#outer{display:block;overflow-y:scroll}}#menu{flex:0 0 15rem;background:#2bab5f}#menu>*{display:block;text-decoration:none;padding:.6180469716rem 1rem;white-space:nowrap;word-wrap:normal;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}#menu #brand{color:white;background:#218248;font-size:120%;text-align:center;position:relative;margin-bottom:1rem}@media screen and (max-width:544px){#menu #brand{background:#2bab5f;cursor:pointer}#menu #brand:after{position:absolute;color:rgba(0,0,0,.2);right:1rem;content:'>';top:50%;font-size:120%;font-weight:700;transform:translateY(-50%) rotate(90deg)}}#menu.expanded #brand{background:#218248}@media screen and (max-width:544px){#menu.expanded #brand:after{transform:translateY(-50%) rotate(-90deg)}}#menu a{font-size:130%;color:white;transition:background-color .2s;text-shadow:0 0 5px rgba(0,0,0,.4)}#menu a.selected,#menu a:hover{background:#1bd886;text-shadow:0 0 5px rgba(0,0,0,.6)}#menu a.selected{position:relative;box-shadow:0 0 5px rgba(0,0,0,.5)}#menu a:before{content:"▸";padding-right:.5rem;position:relative;top:-.1rem}@media screen and (max-width:544px){#menu a{display:none}}#menu.expanded a{display:block}@media screen and (min-width:545px) and (max-width:1000px){#menu{flex-basis:10rem}#menu #brand{font-size:95%;margin-bottom:.6180469716rem}#menu a{font-size:105%}#menu>*{padding:.3819820591rem .6180469716rem}}#content{flex-grow:1;position:relative;padding:1rem;overflow-y:auto}@media screen and (max-width:544px){#content{padding:.6180469716rem}}#content>*{margin-left:auto;margin-right:auto}#content h1{text-align:center;font-size:2.2806973457em;margin-top:0;margin-bottom:1rem}#content h2{font-size:1.423828125em;margin-bottom:.6180469716rem}#content td,#content th{padding:.3819820591rem}#content tbody th{text-align:right;width:130px;color:#fff}#loader{position:absolute;right:1.618rem;top:1.618rem;transition:opacity .2s;opacity:0}@media screen and (max-width:544px){#loader{top:1rem;right:1rem}}#loader.show{opacity:1}.Box{display:block;max-width:900px;margin-top:1rem;padding:.6180469716rem 1rem;border-radius:3px;background-color:rgba(255,255,255,.07)}@media screen and (max-width:544px){.Box{margin-top:.6180469716rem}}.Box h2,h1+.Box{margin-top:0}.Box.wide{width:initial;max-width:initial}.Box.medium{max-width:1200px}.Modal{position:fixed;width:100%;height:100%;left:0;top:0;right:0;bottom:0;display:flex;justify-content:center;align-items:center;transition:opacity .5s;background:rgba(0,0,0,.65);opacity:0}.Modal.visible{opacity:1}.Modal.hidden{display:none}.Dialog{margin:.6180469716rem;padding:1rem;overflow:hidden;max-width:100%;max-height:100%;flex:0 1 30rem;background:#1c1c1e;border-left:6px solid #217b3a;border-right:6px solid #217b3a;box-shadow:0 0 2px 0 #434349,0 0 6px 0 black;border-radius:6px}.Dialog h1,.Dialog h2{margin-top:0}.Dialog p:last-child{margin-bottom:0}.ErrMsg{position:fixed;bottom:2.617924rem;padding:.6180469716rem 1rem;left:50%;transform:translate(-50%);-webkit-font-smoothing:subpixel-antialiased;-webkit-transform:translateZ(0) scale(1);background:#d03e42;color:white;text-shadow:0 0 2px black;box-shadow:0 0 6px 0 rgba(0,0,0,.6);border-radius:5px;max-width:80%;transition:opacity .5s;opacity:0}@media screen and (max-width:544px){.ErrMsg{width:calc(100% - 1rem)}}.ErrMsg.visible{opacity:1}.ErrMsg.hidden{display:none}.button,button,input[type=button],input[type=reset],input[type=submit]{text-align:center;cursor:pointer;display:inline-block;border-radius:2px;padding:0 .6em;border:0 none;outline:0 none!important;line-height:1.8em;font-size:1.1em;margin-bottom:3px;min-width:5em;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;text-shadow:1.5px 1.5px 2px rgba(0,0,0,.8)}.button:active,button:active,input[type=button]:active,input[type=reset]:active,input[type=submit]:active{position:relative;top:2px}.button.narrow,button.narrow,input[type=button].narrow,input[type=reset].narrow,input[type=submit].narrow{min-width:initial}.btn-green,input[type=submit]{background-color:#2ca94b;box-shadow:0 3px 0 #1d7032;text-decoration:none!important}.btn-green,.btn-green:link,.btn-green:visited,input[type=submit],input[type=submit]:link,input[type=submit]:visited{color:#FEFEFE}.btn-green.active,.btn-green.selected,.btn-green:active,.btn-green:hover,input[type=submit].active,input[type=submit].selected,input[type=submit]:active,input[type=submit]:hover{background-color:#28ba5c;color:#FEFEFE}.btn-green.active,.btn-green.selected,.btn-green:hover,input[type=submit].active,input[type=submit].selected,input[type=submit]:hover{box-shadow:0 3px 0 #1a773b}.btn-green:active,input[type=submit]:active{box-shadow:0 1px 0 #1a773b}.btn-red,input[type=reset]{background-color:#D04E51;box-shadow:0 3px 0 #aa2d30;text-decoration:none!important}.btn-red,.btn-red:link,.btn-red:visited,input[type=reset],input[type=reset]:link,input[type=reset]:visited{color:#FEFEFE}.btn-red.active,.btn-red.selected,.btn-red:active,.btn-red:hover,input[type=reset].active,input[type=reset].selected,input[type=reset]:active,input[type=reset]:hover{background-color:#d4403f;color:#FEFEFE}.btn-red.active,.btn-red.selected,.btn-red:hover,input[type=reset].active,input[type=reset].selected,input[type=reset]:hover{box-shadow:0 3px 0 #9e2423}.btn-red:active,input[type=reset]:active{box-shadow:0 1px 0 #9e2423}.btn-blue{background-color:#3983cd;box-shadow:0 3px 0 #265f98;text-decoration:none!important}.btn-blue,.btn-blue:link,.btn-blue:visited{color:#FEFEFE}.btn-blue.active,.btn-blue.selected,.btn-blue:active,.btn-blue:hover{background-color:#2076C6;color:#FEFEFE}.btn-blue.active,.btn-blue.selected,.btn-blue:hover{box-shadow:0 3px 0 #154c80}.btn-blue:active{box-shadow:0 1px 0 #154c80}input[type=number],input[type=password],input[type=text],select,textarea{border:0 none;border-bottom:2px solid #217b3a;background-color:#303030;color:#fff;padding:6px;line-height:1em;outline:0 none!important;-moz-outline:0 none!important;font-weight:400}input[type=number]:focus,input[type=number]:hover,input[type=password]:focus,input[type=password]:hover,input[type=text]:focus,input[type=text]:hover,select:focus,select:hover,textarea:focus,textarea:hover{border-bottom-color:#28bc65}input[type=number],input[type=password],input[type=text],textarea{-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text;cursor:text}textarea{font-family:monospace;line-height:1.2em;display:block}form{border:0 none;margin:0;padding:0;text-decoration:none}input[type=number],input[type=password],input[type=text],label.select-wrap,select,textarea{width:250px}form .Row{vertical-align:middle;margin:14px auto;text-align:left;display:flex;flex-direction:row}form .Row:first-child{margin-top:0}form .Row:last-child{margin-bottom:0}form .Row .spacer{width:130px}@media screen and (max-width:544px){form .Row .spacer{display:none}}form .Row.buttons .button,form .Row.buttons input{margin-right:.6180469716rem}form .Row.centered{justify-content:center}form .Row.message{font-size:1em;text-shadow:1px 1px 3px black;text-align:center}form .Row.message.error{color:crimson}form .Row.message.ok{color:#0fe851}form .Row.separator{padding-top:14px;border-top:2px solid rgba(255,255,255,.1)}form .Row textarea{display:inline-block;vertical-align:top;min-height:10rem;flex-grow:1;resize:vertical}form .Row label{font-weight:700;color:#fff;text-shadow:1px 1px 3px black;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}form .Row .checkbox-wrap,form .Row label{display:inline-block;width:130px;text-align:right;padding:8px;align-self:flex-start}form .Row .checkbox-wrap input[type=checkbox]{margin:auto;width:auto;height:auto}form .Row .checkbox-wrap+label{width:250px;padding-left:0;text-align:left;cursor:pointer}@media screen and (max-width:544px){form .Row{flex-direction:column}form .Row.buttons,form .Row.centered{flex-direction:row}form .Row.buttons{justify-content:center}form .Row.buttons :last-child{margin-right:0}form .Row label{padding-left:0;text-align:left;width:auto}form .Row .checkbox-wrap{order:1;text-align:left;padding-bottom:0;border-radius:.4px;width:auto}form .Row .checkbox-wrap+label{width:auto}form .Row input[type=number],form .Row input[type=password],form .Row input[type=text],form .Row textarea{width:100%}}form span.required{color:red}.RadioGroup{display:inline-block;line-height:1.5em;vertical-align:middle}.RadioGroup label{width:auto;text-align:left;cursor:pointer;font-weight:400}.RadioGroup input[type=radio]{vertical-align:middle;margin:0 0 0 5px}@media screen and (-webkit-min-device-pixel-ratio:0){select{padding-right:18px}}select{-webkit-appearance:none;-moz-appearance:none;appearance:none;cursor:pointer;line-height:1.4em;padding:3.5px;padding-right:1em}select:-moz-focusring{color:transparent;text-shadow:0 0 0 #fff}select option{background:#303030}label.select-wrap{position:relative;display:inline!important;margin:0!important;padding:0!important;width:auto!important}label.select-wrap:after{content:'<>';font-family:Consolas,monospace;font-weight:700;color:#28bc65;top:50%;transform:translateY(-50%) rotate(90deg);right:2px;position:absolute;z-index:100;pointer-events:none}#ap-list{-webkit-column-count:3;-moz-column-count:3;column-count:3;-webkit-column-gap:0;-moz-column-gap:0;column-gap:0;margin:0 -.2360828548rem}@media screen and (min-width:545px) and (max-width:1000px){#ap-list{-webkit-column-count:2;-moz-column-count:2;column-count:2}}@media screen and (max-width:544px){#ap-list{-webkit-column-count:1;-moz-column-count:1;column-count:1}}#ap-loader{background:rgba(255,255,255,.1);border-radius:5px;padding:.3819820591rem;margin-bottom:.3819820591rem}#ap-box{padding-bottom:.3819820591rem}#psk-modal form{display:flex;align-items:center;margin:.3819820591rem}#psk-modal form>*{margin-left:.3819820591rem;margin-right:.3819820591rem}#psk-modal form>:first-child{margin-left:0}#psk-modal form>:last-child{margin-right:0}#psk-modal form input[type=password]{min-width:5rem}.AP{-webkit-column-break-inside:avoid;page-break-inside:avoid;break-inside:avoid-column;max-width:500px;padding:.2360828548rem}.AP.selected .inner{background:#43de81!important;cursor:default;top:0!important}.AP .inner{cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;position:relative;border-radius:3px;color:#222;background:#afafaf;transition:background-color .5s;display:flex}.AP .inner:active{left:0;top:1px}.AP .inner:hover{background:white}.AP .inner>*{padding:.6180469716rem;white-space:nowrap;word-wrap:normal}.AP .inner .rssi{min-width:2rem;flex:0 0 15%;text-align:right}.AP .inner .rssi:after{padding-left:.090179415rem;content:'%';font-size:.8888888889em}.AP .inner .essid{flex:1 1 70%;min-width:0;text-overflow:ellipsis;overflow:hidden;font-weight:700}.AP .inner .auth{flex:0 0 15%}.page-home #staRSSIperc:after{padding-left:.1459102934rem;content:'%';font-size:.8888888889em}.page-home #staRSSI:after{padding-left:.1459102934rem;content:'dBm';font-size:.8888888889em}#samp-ctrl{display:flex;padding:.3819820591rem;flex-direction:row;justify-content:center;align-items:stretch}@media screen and (max-width:544px){#samp-ctrl{flex-direction:column}}#samp-ctrl>div{margin:.3819820591rem .6180469716rem}#samp-ctrl label{line-height:1.8;font-weight:700}#samp-ctrl input,#samp-ctrl select{width:6em}@media screen and (max-width:544px){#samp-ctrl input,#samp-ctrl select{width:100%}}.Box.chartbox{display:flex;flex-direction:row}@media screen and (max-width:544px){.Box.chartbox{flex-direction:column}}.Box.chartbox .stats{flex:0 1;position:relative;padding-bottom:50px}@media screen and (max-width:544px){.Box.chartbox .stats table{margin:0 auto}.Box.chartbox .stats td,.Box.chartbox .stats th{width:50%}}.Box.chartbox .stats td,.Box.chartbox .stats th{white-space:nowrap;word-wrap:normal}.Box.chartbox .stats th sub{font-weight:400}.Box.chartbox .stats td{min-width:100px}.Box.chartbox .stats td:after{font-size:90%;padding-left:.5em}.Box.chartbox .stats #stat-f-s:after{content:"Hz"}.Box.chartbox .stats #stat-i-peak:after,.Box.chartbox .stats #stat-i-rms:after{content:"mA"}.Box.chartbox .stats .ar{position:absolute;bottom:.3819820591rem;width:100%;text-align:center}.Box.chartbox .stats .ar input[type=number]{width:4em}.Box.chartbox .stats .ar input[type=button]{margin-left:.3819820591rem}.page-about .Box{padding-left:1rem;padding-right:1rem}.page-about .Box a{font-weight:700}.page-about #logo{float:right;height:130px}.page-about #logo2{max-width:150px}@media screen and (min-width:545px){.mq-phone{display:none}}@media screen and (max-width:544px){.mq-tablet-min{display:none}}@media screen and (min-width:1001px){.mq-tablet-max{display:none}}@media screen and (max-width:1000px){.mq-normal-min{display:none}} \ No newline at end of file diff --git a/html/js/all.js b/html/js/all.js index 2b8ab52..b5575f5 100644 --- a/html/js/all.js +++ b/html/js/all.js @@ -1,3 +1,3 @@ function bool(t){return 1===t||"1"===t||t===!0||"true"===t}function numfmt(t,e){var n=Math.pow(10,e);return Math.round(t*n)/n}function errorMsg(t){notify.show(t,3e3)}!function(){"use strict";function t(){var t;for(p=!0,t=0;t=0;n-=1)t(e[n])}function r(t){return t.replace(/-\w/g,function(t){return t.charAt(1).toUpperCase()})}function i(t,e){return t.currentStyle?t.currentStyle[r(e)]:g.getComputedStyle?g.getComputedStyle(t,null).getPropertyValue(e):null}function a(t,e){return encodeURIComponent(t).replace(/%20/g,"+")+"="+encodeURIComponent(e).replace(/%20/g,"+")}function s(t,e,n){try{t.style[r(e)]=n}catch(i){}}function o(t){t.style.display="","none"===i(t,"display")&&(t.style.display="block")}function u(t){var e,r,i,s="";if(t.constructor===Object){for(e in t)if(t.hasOwnProperty(e))if(t[e].constructor===Array)for(r=0;r0&&(s+="&"+a(e.name,e.value));break;case"select-multiple":for(i=0;i0?s.substring(1):""}function c(t,e,r){var i,a,s,o=!1;return t&&(i=t.split(/\s+/),n(function(t){for(s=0;s0?y[0].className.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"").replace(/\s+/," "):void 0},e.setClass=function(t){return(t||""===t)&&n(function(e){e.className=t},y),e},e.addClass=function(t){return t&&n(function(e){e.className+=" "+t},y),e},e.removeClass=function(t){return c(t,"remove",y),e},e.toggleClass=function(t){return c(t,"toggle",y),e},e.hasClass=function(t){return c(t,"has",y)},e.html=function(t){return t||""===t?(n(function(e){e.innerHTML=t},y),e):y[0]?y[0].innerHTML:void 0},e.htmlBefore=function(t){return l(t,"before",y),e},e.htmlAfter=function(t){return l(t,"after",y),e},e.htmlAppend=function(t){return l(t,"append",y),e},e.htmlPrepend=function(t){return l(t,"prepend",y),e},e.attr=function(t,r){if(t){if(t=t.toLowerCase(),"undefined"!=typeof r)return n(function(e){"style"===t?e.style.cssText=r:"class"===t?e.className=r:e.setAttribute(t,r)},y),e;if(y[0])if("style"===t){if(y[0].style.cssText)return y[0].style.cssText}else if("class"===t){if(y[0].className)return y[0].className}else if(y[0].getAttribute(t))return y[0].getAttribute(t)}},e.data=function(t,n){return t?e.attr("data-"+t,n):void 0},e.val=function(t){var r,i,a;if(t||""===t)return n(function(e){switch(e.nodeName){case"SELECT":for("string"!=typeof t&&"number"!=typeof t||(t=[t]),i=0;i1?r:r[0];case"INPUT":case"TEXTAREA":case"BUTTON":return y[0].value}},e.checked=function(t){return"boolean"==typeof t?(n(function(e){"INPUT"!==e.nodeName||"checkbox"!==e.type&&"radio"!==e.type||(e.checked=t)},y),e):!y[0]||"INPUT"!==y[0].nodeName||"checkbox"!==y[0].type&&"radio"!==y[0].type?void 0:!!y[0].checked},e.on=function(r,i){return t!==g&&t!==v||(y=[t]),n(function(t){v.addEventListener?t.addEventListener(r,i,!1):v.attachEvent&&(t[r+i]=function(){return i.apply(t,arguments)},t.attachEvent("on"+r,t[r+i]))},y),e},e.off=function(r,i){return t!==g&&t!==v||(y=[t]),n(function(t){v.addEventListener?t.removeEventListener(r,i,!1):v.attachEvent&&(t.detachEvent("on"+r,t[r+i]),t[r+i]=null)},y),e},e.ajax=function(t,n,r,i){var a,s=u(y),o=n?n.toUpperCase():"GET",c="_ts="+ +new Date,l=Chartist.extend({},{nocache:!0,timeout:5e3,loader:!0},i);return console.log("ajax to = "+l.timeout),s&&"GET"===o&&(t+=-1===t.indexOf("?")?"?"+s:"&"+s,s=null),a=new XMLHttpRequest,a&&(l.nocache&&(t+=-1===t.indexOf("?")?"?"+c:"&"+c),l.loader&&$("#loader").addClass("show"),a.open(o,t,!0),a.timeout=l.timeout,a.onreadystatechange=function(){4===a.readyState&&(l.loader&&$("#loader").removeClass("show"),r&&0!=a.status&&r(a.responseText,a.status))},a.setRequestHeader("X-Requested-With","XMLHttpRequest"),"POST"===o&&a.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),a.send(s)),e},e.get=function(t,n,r){return e.ajax(t,"get",n,r)},e.post=function(t,n,r){return e.ajax(t,"post",n,r)},e}var f=[],d=[],p=!1,m=!1,v=document,g=window;v.addEventListener?(v.addEventListener("DOMContentLoaded",t,!1),g.addEventListener("load",e,!1)):v.attachEvent?(v.attachEvent("onreadystatechange",t),g.attachEvent("onload",e)):g.onload=e,g.$=h}(),function(t,e){t.Chartist=e()}(this,function(){var t={version:"0.9.7"};return function(t,e,n){"use strict";n.namespaces={svg:"http://www.w3.org/2000/svg",xmlns:"http://www.w3.org/2000/xmlns/",xhtml:"http://www.w3.org/1999/xhtml",xlink:"http://www.w3.org/1999/xlink",ct:"http://gionkunz.github.com/chartist-js/ct"},n.noop=function(t){return t},n.alphaNumerate=function(t){return String.fromCharCode(97+t%26)},n.extend=function(t){t=t||{};var e=Array.prototype.slice.call(arguments,1);return e.forEach(function(e){for(var r in e)"object"!=typeof e[r]||null===e[r]||e[r]instanceof Array?t[r]=e[r]:t[r]=n.extend({},t[r],e[r])}),t},n.replaceAll=function(t,e,n){return t.replace(new RegExp(e,"g"),n)},n.ensureUnit=function(t,e){return"number"==typeof t&&(t+=e),t},n.quantity=function(t){if("string"==typeof t){var e=/^(\d+)\s*(.*)$/g.exec(t);return{value:+e[1],unit:e[2]||void 0}}return{value:t}},n.querySelector=function(t){return t instanceof Node?t:e.querySelector(t)},n.times=function(t){return Array.apply(null,new Array(t))},n.sum=function(t,e){return t+(e?e:0)},n.mapMultiply=function(t){return function(e){return e*t}},n.mapAdd=function(t){return function(e){return e+t}},n.serialMap=function(t,e){var r=[],i=Math.max.apply(null,t.map(function(t){return t.length}));return n.times(i).forEach(function(n,i){var a=t.map(function(t){return t[i]});r[i]=e.apply(null,a)}),r},n.roundWithPrecision=function(t,e){var r=Math.pow(10,e||n.precision);return Math.round(t*r)/r},n.precision=8,n.serialize=function(t){return null===t||void 0===t?t:("number"==typeof t?t=""+t:"object"==typeof t&&(t=JSON.stringify({data:t})),_.escape(t))},n.deserialize=function(t){if("string"!=typeof t)return t;t=_.unescape(t);try{t=JSON.parse(t),t=void 0!==t.data?t.data:t}catch(e){}return t},n.createSvg=function(t,e,r,i){var a;return e=e||"100%",r=r||"100%",Array.prototype.slice.call(t.querySelectorAll("svg")).filter(function(t){return t.getAttributeNS(n.namespaces.xmlns,"ct")}).forEach(function(e){t.removeChild(e)}),a=new n.Svg("svg").attr({width:e,height:r}).addClass(i).attr({style:"width: "+e+"; height: "+r+";"}),t.appendChild(a._node),a},n.normalizeData=function(t){if(t=t||{series:[],labels:[]},t.series=t.series||[],t.labels=t.labels||[],t.series.length>0&&0===t.labels.length){var e,r=n.getDataArray(t);e=r.every(function(t){return t instanceof Array})?Math.max.apply(null,r.map(function(t){return t.length})):r.length,t.labels=n.times(e).map(function(){return""})}return t},n.reverseData=function(t){t.labels.reverse(),t.series.reverse();for(var e=0;ea.high&&(a.high=n),o&&n0?a.low=0:(a.high=1,a.low=0)),a},n.isNum=function(t){return!isNaN(t)&&isFinite(t)},n.isFalseyButZero=function(t){return!t&&0!==t},n.getNumberOrUndefined=function(t){return isNaN(+t)?void 0:+t},n.getMultiValue=function(t,e){return n.isNum(t)?+t:t?t[e||"y"]||0:0},n.rho=function(t){function e(t,n){return t%n===0?n:e(n,t%n)}function n(t){return t*t+1}if(1===t)return t;var r,i=2,a=2;if(t%2===0)return 2;do i=n(i)%t,a=n(n(a))%t,r=e(Math.abs(i-a),t);while(1===r);return r},n.getBounds=function(t,e,r,i){var a,s,o,u=0,c={high:e.high,low:e.low};c.valueRange=c.high-c.low,c.oom=n.orderOfMagnitude(c.valueRange),c.step=Math.pow(10,c.oom),c.min=Math.floor(c.low/c.step)*c.step,c.max=Math.ceil(c.high/c.step)*c.step,c.range=c.max-c.min,c.numberOfSteps=Math.round(c.range/c.step);var l=n.projectLength(t,c.step,c),h=r>l,f=i?n.rho(c.range):0;if(i&&n.projectLength(t,1,c)>=r)c.step=1;else if(i&&f=r)c.step=f;else for(;;){if(h&&n.projectLength(t,c.step,c)<=r)c.step*=2;else{if(h||!(n.projectLength(t,c.step/2,c)>=r))break;if(c.step/=2,i&&c.step%1!==0){c.step*=2;break}}if(u++>1e3)throw new Error("Exceeded maximum number of iterations while optimizing scale step!")}for(s=c.min,o=c.max;s+c.step<=c.low;)s+=c.step;for(;o-c.step>=c.high;)o-=c.step;for(c.min=s,c.max=o,c.range=c.max-c.min,c.values=[],a=c.min;a<=c.max;a+=c.step)c.values.push(n.roundWithPrecision(a));return c},n.createChartRect=function(t,e,r){var i=!(!e.axisX&&!e.axisY),a=i?e.axisY.offset:0,s=i?e.axisX.offset:0,o=t.width()||n.quantity(e.width).value||0,u=t.height()||n.quantity(e.height).value||0,c=n.normalizePadding(e.chartPadding,r);o=Math.max(o,a+c.left+c.right),u=Math.max(u,s+c.top+c.bottom);var l={padding:c,width:function(){return this.x2-this.x1},height:function(){return this.y1-this.y2}};return i?("start"===e.axisX.position?(l.y2=c.top+s,l.y1=Math.max(u-c.bottom,l.y2+1)):(l.y2=c.top,l.y1=Math.max(u-c.bottom-s,l.y2+1)),"start"===e.axisY.position?(l.x1=c.left+a,l.x2=Math.max(o-c.right,l.x1+1)):(l.x1=c.left,l.x2=Math.max(o-c.right-a,l.x1+1))):(l.x1=c.left,l.x2=Math.max(o-c.right,l.x1+1),l.y2=c.top,l.y1=Math.max(u-c.bottom,l.y2+1)),l},n.createGrid=function(t,e,r,i,a,s,o,u){var c={};c[r.units.pos+"1"]=Math.round(t)+.5,c[r.units.pos+"2"]=Math.round(t)+.5,c[r.counterUnits.pos+"1"]=i,c[r.counterUnits.pos+"2"]=i+a;var l=s.elem("line",c,o.join(" "));u.emit("draw",n.extend({type:"grid",axis:r,index:e,group:s,element:l},c))},n.createLabel=function(t,e,r,i,a,s,o,u,c,l,h){var f,d={};d[a.units.pos]=t+o[a.units.pos],d[a.counterUnits.pos]=o[a.counterUnits.pos],d[a.units.len]=e,d[a.counterUnits.len]=s-10;var p=i[r];if(_.isNumber(p)&&(p=n.roundWithPrecision(p,2)),l){var m=''+p+"";f=u.foreignObject(m,n.extend({style:"overflow: visible;"},d))}else f=u.elem("text",d,c.join(" ")).text(p);h.emit("draw",n.extend({type:"label",axis:a,index:r,group:u,element:f,text:p},d))},n.getSeriesOption=function(t,e,n){if(t.name&&e.series&&e.series[t.name]){var r=e.series[t.name];return r.hasOwnProperty(n)?r[n]:e[n]}return e[n]},n.optionsProvider=function(e,r,i){function a(e){var a=o;if(o=n.extend({},c),r)for(u=0;u=2&&e[a]<=e[a-2]?i=!0:(i&&(r.push({pathCoordinates:[],valueData:[]}),i=!1),r[r.length-1].pathCoordinates.push(e[a],e[a+1]),r[r.length-1].valueData.push(n[a/2]));return r}var r={fillHoles:!1};return t=n.extend({},r,t),function i(t,r){var a=e(t,r);if(a.length){if(a.length>1){var s=[];return a.forEach(function(t){s.push(i(t.pathCoordinates,t.valueData))}),n.Svg.Path.join(s)}if(t=a[0].pathCoordinates,r=a[0].valueData,t.length<=4)return n.Interpolation.none()(t,r);var o,u,c=[],l=[],h=t.length/2,f=[],d=[],p=[],m=[];for(o=0;h>o;o++)c[o]=t[2*o],l[o]=t[2*o+1];for(o=0;h-1>o;o++)p[o]=l[o+1]-l[o],m[o]=c[o+1]-c[o],d[o]=p[o]/m[o];for(f[0]=d[0],f[h-1]=d[h-2],o=1;h-1>o;o++)0===d[o]||0===d[o-1]||d[o-1]>0!=d[o]>0?f[o]=0:(f[o]=3*(m[o-1]+m[o])/((2*m[o]+m[o-1])/d[o-1]+(m[o]+2*m[o-1])/d[o]),isFinite(f[o])||(f[o]=0));for(u=(new n.Svg.Path).move(c[0],l[0],!1,r[0]),o=0;h-1>o;o++)u.curve(c[o]+m[o]/3,l[o]+f[o]*m[o]/3,c[o+1]-m[o]/3,l[o+1]-f[o+1]*m[o]/3,c[o+1],l[o+1],!1,r[o+1]);return u}return n.Interpolation.none()([])}},n.Interpolation.step=function(t){var e={postpone:!0,fillHoles:!1};return t=n.extend({},e,t),function(e,r){for(var i,a,s,o=new n.Svg.Path,u=0;u1}).map(function(t){var e=t.pathElements[0],n=t.pathElements[t.pathElements.length-1];return t.clone(!0).position(0).remove(1).move(e.x,g).line(e.x,e.y).position(t.pathElements.length+1).line(n.x,g)}).forEach(function(n){var o=u.elem("path",{d:n.stringify()},t.classNames.area,!0);this.eventEmitter.emit("draw",{type:"area",values:e.normalized[s],path:n.clone(),series:a,seriesIndex:s,axisX:r,axisY:i,chartRect:c,index:s,group:u,element:o})}.bind(this))}}.bind(this)),this.eventEmitter.emit("created",{bounds:i.bounds,chartRect:c,axisX:r,axisY:i,svg:this.svg,options:t})}function i(t,e,r,i){n.Line["super"].constructor.call(this,t,e,a,n.extend({},a,r),i)}var a={axisX:{offset:30,position:"end",labelOffset:{x:0,y:0},showLabel:!0,showGrid:!0,labelInterpolationFnc:n.noop,type:void 0},axisY:{offset:40,position:"start",labelOffset:{x:0,y:0},showLabel:!0,showGrid:!0,labelInterpolationFnc:n.noop,type:void 0,scaleMinSpace:20,onlyInteger:!1},width:void 0,height:void 0,showLine:!0,showPoint:!0,showArea:!1,areaBase:0,lineSmooth:!0,low:void 0,high:void 0,chartPadding:{top:15,right:15,bottom:5,left:10},fullWidth:!1,reverseData:!1,classNames:{chart:"ct-chart-line",label:"ct-label",labelGroup:"ct-labels",series:"ct-series",line:"ct-line",point:"ct-point",area:"ct-area",grid:"ct-grid",gridGroup:"ct-grids",vertical:"ct-vertical",horizontal:"ct-horizontal",start:"ct-start",end:"ct-end"}};n.Line=n.Base.extend({constructor:i,createChart:r})}(window,document,t),function(t,e,n){"use strict";function r(t){this.data=n.normalizeData(this.data);var e,r={raw:this.data,normalized:t.distributeSeries?n.getDataArray(this.data,t.reverseData,t.horizontalBars?"x":"y").map(function(t){return[t]}):n.getDataArray(this.data,t.reverseData,t.horizontalBars?"x":"y")};this.svg=n.createSvg(this.container,t.width,t.height,t.classNames.chart+(t.horizontalBars?" "+t.classNames.horizontalBars:""));var i=this.svg.elem("g").addClass(t.classNames.gridGroup),s=this.svg.elem("g"),o=this.svg.elem("g").addClass(t.classNames.labelGroup);if(t.stackBars&&0!==r.normalized.length){var u=n.serialMap(r.normalized,function(){return Array.prototype.slice.call(arguments).map(function(t){return t}).reduce(function(t,e){return{x:t.x+(e&&e.x)||0,y:t.y+(e&&e.y)||0}},{x:0,y:0})});e=n.getHighLow([u],n.extend({},t,{referenceValue:0}),t.horizontalBars?"x":"y")}else e=n.getHighLow(r.normalized,n.extend({},t,{referenceValue:0}),t.horizontalBars?"x":"y");e.high=+t.high||(0===t.high?0:e.high),e.low=+t.low||(0===t.low?0:e.low);var c,l,h,f,d,p=n.createChartRect(this.svg,t,a.padding);l=t.distributeSeries&&t.stackBars?r.raw.labels.slice(0,1):r.raw.labels,t.horizontalBars?(c=f=void 0===t.axisX.type?new n.AutoScaleAxis(n.Axis.units.x,r,p,n.extend({},t.axisX,{highLow:e,referenceValue:0})):t.axisX.type.call(n,n.Axis.units.x,r,p,n.extend({},t.axisX,{highLow:e,referenceValue:0})),h=d=void 0===t.axisY.type?new n.StepAxis(n.Axis.units.y,r,p,{ticks:l}):t.axisY.type.call(n,n.Axis.units.y,r,p,t.axisY)):(h=f=void 0===t.axisX.type?new n.StepAxis(n.Axis.units.x,r,p,{ticks:l}):t.axisX.type.call(n,n.Axis.units.x,r,p,t.axisX),c=d=void 0===t.axisY.type?new n.AutoScaleAxis(n.Axis.units.y,r,p,n.extend({},t.axisY,{highLow:e,referenceValue:0})):t.axisY.type.call(n,n.Axis.units.y,r,p,n.extend({},t.axisY,{highLow:e,referenceValue:0})));var m=t.horizontalBars?p.x1+c.projectValue(0):p.y1-c.projectValue(0),v=[];h.createGridAndLabels(i,o,this.supportsForeignObject,t,this.eventEmitter),c.createGridAndLabels(i,o,this.supportsForeignObject,t,this.eventEmitter),r.raw.series.forEach(function(e,i){var a,o,u=i-(r.raw.series.length-1)/2;a=t.distributeSeries&&!t.stackBars?h.axisLength/r.normalized.length/2:t.distributeSeries&&t.stackBars?h.axisLength/2:h.axisLength/r.normalized[i].length/2,o=s.elem("g"),o.attr({"ct:series-name":e.name,"ct:meta":n.serialize(e.meta)}),o.addClass([t.classNames.series,e.className||t.classNames.series+"-"+n.alphaNumerate(i)].join(" ")),r.normalized[i].forEach(function(s,l){var g,x,y,b;if(b=t.distributeSeries&&!t.stackBars?i:t.distributeSeries&&t.stackBars?0:l,g=t.horizontalBars?{x:p.x1+c.projectValue(s&&s.x?s.x:0,l,r.normalized[i]),y:p.y1-h.projectValue(s&&s.y?s.y:0,b,r.normalized[i])}:{x:p.x1+h.projectValue(s&&s.x?s.x:0,b,r.normalized[i]),y:p.y1-c.projectValue(s&&s.y?s.y:0,l,r.normalized[i])},h instanceof n.StepAxis&&(h.options.stretch||(g[h.units.pos]+=a*(t.horizontalBars?-1:1)),g[h.units.pos]+=t.stackBars||t.distributeSeries?0:u*t.seriesBarDistance*(t.horizontalBars?-1:1)),y=v[l]||m,v[l]=y-(m-g[h.counterUnits.pos]),void 0!==s){var w={};w[h.units.pos+"1"]=g[h.units.pos],w[h.units.pos+"2"]=g[h.units.pos],!t.stackBars||"accumulate"!==t.stackMode&&t.stackMode?(w[h.counterUnits.pos+"1"]=m,w[h.counterUnits.pos+"2"]=g[h.counterUnits.pos]):(w[h.counterUnits.pos+"1"]=y,w[h.counterUnits.pos+"2"]=v[l]),w.x1=Math.min(Math.max(w.x1,p.x1),p.x2),w.x2=Math.min(Math.max(w.x2,p.x1),p.x2),w.y1=Math.min(Math.max(w.y1,p.y2),p.y1),w.y2=Math.min(Math.max(w.y2,p.y2),p.y1),x=o.elem("line",w,t.classNames.bar).attr({"ct:value":[s.x,s.y].filter(n.isNum).join(","),"ct:meta":n.getMetaData(e,l)}),this.eventEmitter.emit("draw",n.extend({type:"bar",value:s,index:l,meta:n.getMetaData(e,l),series:e,seriesIndex:i,axisX:f,axisY:d,chartRect:p,group:o,element:x},w))}}.bind(this))}.bind(this)),this.eventEmitter.emit("created",{bounds:c.bounds,chartRect:p,axisX:f,axisY:d,svg:this.svg,options:t})}function i(t,e,r,i){n.Bar["super"].constructor.call(this,t,e,a,n.extend({},a,r),i)}var a={axisX:{offset:30,position:"end",labelOffset:{x:0,y:0},showLabel:!0,showGrid:!0,labelInterpolationFnc:n.noop,scaleMinSpace:30,onlyInteger:!1},axisY:{offset:40,position:"start",labelOffset:{x:0,y:0},showLabel:!0,showGrid:!0,labelInterpolationFnc:n.noop,scaleMinSpace:20,onlyInteger:!1},width:void 0,height:void 0,high:void 0,low:void 0,chartPadding:{top:15,right:15,bottom:5,left:10},seriesBarDistance:15,stackBars:!1,stackMode:"accumulate",horizontalBars:!1,distributeSeries:!1,reverseData:!1,classNames:{chart:"ct-chart-bar",horizontalBars:"ct-horizontal-bars",label:"ct-label",labelGroup:"ct-labels",series:"ct-series",bar:"ct-bar",grid:"ct-grid",gridGroup:"ct-grids",vertical:"ct-vertical",horizontal:"ct-horizontal",start:"ct-start",end:"ct-end"}};n.Bar=n.Base.extend({constructor:i,createChart:r})}(window,document,t),t}),function(t,e){t["Chartist.plugins.ctAxisTitle"]=e()}(this,function(){return function(t,e,n){"use strict";var r={axisTitle:"",axisClass:"ct-axis-title",offset:{x:0,y:0},textAnchor:"middle",flipText:!1},i={axisX:r,axisY:r};n.plugins=n.plugins||{},n.plugins.ctAxisTitle=function(t){return t=n.extend({},i,t),function(e){e.on("created",function(e){var r,i,a;if(t.axisX.axisTitle&&e.axisX&&(r=e.axisX.axisLength/2+e.options.axisY.offset+e.options.chartPadding.left,i=e.options.chartPadding.top,"end"===e.options.axisY.position&&(r-=e.options.axisY.offset),"end"===e.options.axisX.position&&(i+=e.axisY.axisLength),a=new n.Svg("text"),a.addClass(t.axisX.axisClass),a.text(t.axisX.axisTitle),a.attr({x:r+t.axisX.offset.x,y:i+t.axisX.offset.y,"text-anchor":t.axisX.textAnchor}),e.svg.append(a,!0)),t.axisY.axisTitle&&e.axisY){r=0,i=e.axisY.axisLength/2+e.options.chartPadding.top,"start"===e.options.axisX.position&&(i+=e.options.axisX.offset),"end"===e.options.axisY.position&&(r=e.axisX.axisLength);var s="rotate("+(t.axisY.flipText?-90:90)+", "+r+", "+i+")";a=new n.Svg("text"),a.addClass(t.axisY.axisClass),a.text(t.axisY.axisTitle),a.attr({x:r+t.axisY.offset.x,y:i+t.axisY.offset.y,transform:s,"text-anchor":t.axisY.textAnchor}),e.svg.append(a,!0)}})}}}(window,document,Chartist),Chartist.plugins.ctAxisTitle}),function(t,e){t["Chartist.plugins.zoom"]=e()}(this,function(){return function(t,e,n){"use strict";function r(t){t.attr({style:"display:none"})}function i(t){t.attr({style:"display:block"})}function a(t,e){var n=t.x,r=t.y,i=e.x-n,a=e.y-r;return 0>i&&(i=-i,n=e.x),0>a&&(a=-a,r=e.y),{x:n,y:r,width:i,height:a}}function s(t,e){return o(t.clientX,t.clientY,e)}function o(t,e,n){var r="svg"===n.tagName?n:n.ownerSVGElement,i=r.getScreenCTM(),a=r.createSVGPoint();return a.x=t,a.y=e,a=a.matrixTransform(i.inverse()),a||{x:0,y:0}}function u(t,e){var n=e.bounds.max,r=e.bounds.min;if(e.scale&&"log"===e.scale.type){var i=e.scale.base;return Math.pow(i,t*c(n/r,i)/e.axisLength)*r}return t*e.bounds.range/e.axisLength+r}function c(t,e){return Math.log(t)/Math.log(e)}var l={};n.plugins=n.plugins||{},n.plugins.zoom=function(t){return t=n.extend({},l,t),function(e){function o(t){var e=s(t,b);return e.id=t.identifier,e}function c(t){for(var e=0;e1&&(y.attr(a(O[0],O[1])),i(y))}function h(t){for(var e=t.changedTouches,n=0;n1&&(y.attr(a(O[0],O[1])),i(y),t.preventDefault())}function f(t){d(t.changedTouches)}function d(t){for(var e=0;e=0&&O.splice(n,1)}}function p(t){O.length>1&&g(a(O[0],O[1])),d(t.changedTouches),r(y)}function m(t){0===t.button&&(S=s(t,b),y.attr(a(S,S)),i(y),t.preventDefault())}function v(e){if(0===e.button){var n=a(S,s(e,b));g(n),S=null,r(y),e.preventDefault()}else t.resetOnRightMouseBtn&&2===e.button&&(L(),e.preventDefault())}function g(t){if(t.width>5&&t.height>5){var n=t.x-E.x1,r=n+t.width,i=E.y1-t.y,a=i-t.height,s=u(n,w),o=u(r,w),c=u(a,A),l=u(i,A),h=e.options.explicitBounds;_.isUndefined(h)||(_.isUndefined(h.xLow)||(s=Math.max(h.xLow,s)),_.isUndefined(h.xHigh)||(o=Math.min(h.xHigh,o)),_.isUndefined(h.yLow)||(c=Math.max(h.yLow,c)),_.isUndefined(h.yHigh)||(l=Math.min(h.yHigh,l))),e.options.axisX.highLow={low:s,high:o},e.options.axisY.highLow={low:c,high:l},e.update(e.data,e.options),C&&C(e,L)}}function x(t){if(S){var e=s(t,b);y.attr(a(S,e)),t.preventDefault()}}if(e instanceof n.Line){var y,b,w,A,E,S,C=t.onZoom,O=[];e.on("draw",function(t){var e=t.type;"line"!==e&&"bar"!==e&&"area"!==e&&"point"!==e||t.element.attr({"clip-path":"url(#zoom-mask)"})}),e.on("created",function(t){w=t.axisX,A=t.axisY,E=t.chartRect,b=t.svg._node,y=t.svg.elem("rect",{x:10,y:10,width:100,height:100},"ct-zoom-rect"),r(y);var e=t.svg.querySelector("defs")||t.svg.elem("defs"),n=E.width(),i=E.height();e.elem("clipPath",{id:"zoom-mask"}).elem("rect",{x:E.x1,y:E.y2,width:n,height:i,fill:"white"}),b.addEventListener("mousedown",m),b.addEventListener("mouseup",v),b.addEventListener("mousemove",x),b.addEventListener("touchstart",l),b.addEventListener("touchmove",h),b.addEventListener("touchend",p),b.addEventListener("touchcancel",f)});var L=function(){e.options.axisX.highLow=null,e.options.axisY.highLow=null,e.update(e.data,e.options)}}}}}(window,document,Chartist),Chartist.plugins.zoom}),function(){function t(t,e){return t.set(e[0],e[1]),t}function e(t,e){return t.add(e),t}function n(t,e){for(var n=-1,r=t.length;++n-1&&t%1==0&&e>t}function f(t){var e=-1,n=Array(t.size);return t.forEach(function(t,r){n[++e]=[r,t]}),n}function d(t){var e=-1,n=Array(t.size);return t.forEach(function(t){n[++e]=t}),n}function p(t){return gn[t]}function m(){}function v(){}function g(t,e){return y(t,e)&&delete t[e]}function x(t,e){if(Gn){var n=t[e];return n===ye?ve:n}return Nn.call(t,e)?t[e]:ve}function y(t,e){return Gn?t[e]!==ve:Nn.call(t,e)}function b(t,e,n){t[e]=Gn&&n===ve?ye:n}function w(t){var e=-1,n=t?t.length:0;for(this.clear();++en)return!1;var r=t.length-1;return n==r?t.pop():Yn.call(t,n,1),!0}function z(t,e){var n=T(t,e);return 0>n?ve:t[n][1]}function P(t,e){return T(t,e)>-1}function T(t,e){for(var n=t.length;n--;)if(Rt(t[n][0],e))return n;return-1}function I(t,e,n){var r=T(t,e);0>r?t.push([e,n]):t[r][1]=n}function B(t,e,n){var r=t[e];Nn.call(t,e)&&Rt(r,n)&&(n!==ve||e in t)||(t[e]=n)}function U(t,e){return t&&pt(e,se(e),t)}function X(t){return"function"==typeof t?t:de}function Y(t){return ar(t)?t:Bt(t)}function R(t,e,r,i,a,s,o){var u;if(i&&(u=s?i(t,a,s,o):i(t)),u!==ve)return u;if(!Gt(t))return t;var c=ar(t);if(c){if(u=Lt(t),!e)return dt(t,u)}else{var h=Ct(t),f=h==je||h==Ne;if(sr(t))return st(t,e);if(h==ze||h==_e||f&&!s){if(l(t))return s?t:{};if(u=Mt(f?{}:t),!e)return u=U(u,t),r?vt(t,u):u}else{if(!mn[h])return s?t:{};u=jt(t,h,e)}}o||(o=new O);var d=o.get(t);return d?d:(o.set(t,u),(c?n:F)(t,function(n,a){B(u,a,R(n,e,r,i,a,t,o))}),r&&!c?vt(t,u):u)}function D(t){return Gt(t)?Un(t):{}}function F(t,e){return t&&nr(t,e,se)}function q(t,e){e=kt(e,t)?[e+""]:Y(e);for(var n=0,r=e.length;null!=t&&r>n;)t=t[e[n++]];return n&&n==r?t:ve}function V(t,e){return Nn.call(t,e)||"object"==typeof t&&e in t&&null===In(t)}function H(t,e){return e in Object(t)}function G(t,e,n,r,i){return t===e?!0:null==t||null==e||!Gt(t)&&!Wt(e)?t!==t&&e!==e:W(t,e,G,n,r,i)}function W(t,e,n,r,i,a){var s=ar(t),o=ar(e),u=Ce,c=Ce;s||(u=Ct(t),u=u==_e?ze:u),o||(c=Ct(e),c=c==_e?ze:c);var h=u==ze&&!l(t),f=c==ze&&!l(e),d=u==c;if(d&&!h)return a||(a=new O),s||te(t)?bt(t,e,n,r,i,a):wt(t,e,u,n,r,i,a);if(!(i&we)){var p=h&&Nn.call(t,"__wrapped__"),m=f&&Nn.call(e,"__wrapped__");if(p||m)return a||(a=new O),n(p?t.value():t,m?e.value():e,r,i,a)}return d?(a||(a=new O),At(t,e,n,r,i,a)):!1}function Q(t,e,n,r){var i=n.length,a=i,s=!r;if(null==t)return!a;for(t=Object(t);i--;){var o=n[i];if(s&&o[2]?o[1]!==t[o[0]]:!(o[0]in t))return!1}for(;++ie&&(e=-e>i?0:i+e),n=n>i?i:n,0>n&&(n+=i),i=e>n?0:n-e>>>0,e>>>=0;for(var a=Array(i);++re?1:-1:ne(r)||0,it(e,n,r,t)}}function bt(t,e,n,r,i,s){var o=-1,u=i&we,c=i&be,l=t.length,h=e.length;if(l!=h&&!(u&&h>l))return!1;var f=s.get(t);if(f)return f==e;var d=!0;for(s.set(t,e);++o-1&&t%1==0&&Ee>=t}function Gt(t){var e=typeof t;return!!t&&("object"==e||"function"==e)}function Wt(t){return!!t&&"object"==typeof t}function Qt(t){return null==t?!1:Vt(t)?kn.test(jn.call(t)):Wt(t)&&(l(t)?kn:hn).test(t)}function Zt(t){return"number"==typeof t||Wt(t)&&$n.call(t)==ke}function Jt(t){return"string"==typeof t||!ar(t)&&Wt(t)&&$n.call(t)==Ie}function Kt(t){return"symbol"==typeof t||Wt(t)&&$n.call(t)==Be}function te(t){return Wt(t)&&Ht(t.length)&&!!pn[$n.call(t)]}function ee(t){return t===ve}function ne(t){if(Gt(t)){var e=Vt(t.valueOf)?t.valueOf():t;t=Gt(e)?e+"":e}if("string"!=typeof t)return 0===t?t:+t;t=t.replace(sn,"");var n=ln.test(t);return n||fn.test(t)?yn(t.slice(2),n?2:8):cn.test(t)?Se:+t}function re(t){if("string"==typeof t)return t;if(null==t)return"";if(Kt(t))return tr?tr.call(t):"";var e=t+"";return"0"==e&&1/t==-Ae?"-0":e}function ie(t,e,n){var r=null==t?ve:q(t,e);return r===ve?n:r}function ae(t,e){return Ot(t,e,H)}function se(t){var e=Pt(t);if(!e&&!Ft(t))return J(t);var n=Nt(t),r=!!n,i=n||[],a=i.length;for(var s in t)!V(t,s)||r&&("length"==s||h(s,a))||e&&"constructor"==s||i.push(s);return i}function oe(t){return o(t,se(t))}function ue(t){return t=re(t),t&&Ke.test(t)?t.replace(Ze,c):t}function ce(t){return t=re(t),t&&an.test(t)?t.replace(rn,"\\$&"):t}function le(){var t=arguments,e=re(t[0]);return t.length<3?e:e.replace(t[1],t[2])}function he(t){return t=re(t),t&&Je.test(t)?t.replace(Qe,p):t}function fe(t){return function(){return t}}function de(t){return t}function pe(t){return Z("function"==typeof t?t:R(t,!0))}function me(t){return kt(t)?nt(t):rt(t)}var ve,ge="4.6.1",xe=200,ye="__lodash_hash_undefined__",be=1,we=2,Ae=1/0,Ee=9007199254740991,Se=NaN,_e="[object Arguments]",Ce="[object Array]",Oe="[object Boolean]",Le="[object Date]",Me="[object Error]",je="[object Function]",Ne="[object GeneratorFunction]",$e="[object Map]",ke="[object Number]",ze="[object Object]",Pe="[object RegExp]",Te="[object Set]",Ie="[object String]",Be="[object Symbol]",Ue="[object WeakMap]",Xe="[object ArrayBuffer]",Ye="[object Float32Array]",Re="[object Float64Array]",De="[object Int8Array]",Fe="[object Int16Array]",qe="[object Int32Array]",Ve="[object Uint8Array]",He="[object Uint8ClampedArray]",Ge="[object Uint16Array]",We="[object Uint32Array]",Qe=/&(?:amp|lt|gt|quot|#39|#96);/g,Ze=/[&<>"'`]/g,Je=RegExp(Qe.source),Ke=RegExp(Ze.source),tn=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,en=/^\w*$/,nn=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]/g,rn=/[\\^$.*+?()[\]{}|]/g,an=RegExp(rn.source),sn=/^\s+|\s+$/g,on=/\\(\\)?/g,un=/\w*$/,cn=/^[-+]0x[0-9a-f]+$/i,ln=/^0b[01]+$/i,hn=/^\[object .+?Constructor\]$/,fn=/^0o[0-7]+$/i,dn=/^(?:0|[1-9]\d*)$/,pn={};pn[Ye]=pn[Re]=pn[De]=pn[Fe]=pn[qe]=pn[Ve]=pn[He]=pn[Ge]=pn[We]=!0,pn[_e]=pn[Ce]=pn[Xe]=pn[Oe]=pn[Le]=pn[Me]=pn[je]=pn[$e]=pn[ke]=pn[ze]=pn[Pe]=pn[Te]=pn[Ie]=pn[Ue]=!1;var mn={};mn[_e]=mn[Ce]=mn[Xe]=mn[Oe]=mn[Le]=mn[Ye]=mn[Re]=mn[De]=mn[Fe]=mn[qe]=mn[$e]=mn[ke]=mn[ze]=mn[Pe]=mn[Te]=mn[Ie]=mn[Be]=mn[Ve]=mn[He]=mn[Ge]=mn[We]=!0,mn[Me]=mn[je]=mn[Ue]=!1;var vn={"&":"&","<":"<",">":">",'"':""","'":"'","`":"`"},gn={"&":"&","<":"<",">":">",""":'"',"'":"'","`":"`"},xn={"function":!0,object:!0},yn=parseInt,bn=xn[typeof exports]&&exports&&!exports.nodeType?exports:ve,wn=xn[typeof module]&&module&&!module.nodeType?module:ve,An=wn&&wn.exports===bn?bn:ve,En=u(bn&&wn&&"object"==typeof global&&global),Sn=u(xn[typeof self]&&self),_n=u(xn[typeof window]&&window),Cn=u(xn[typeof this]&&this),On=En||_n!==(Cn&&Cn.window)&&_n||Sn||Cn||Function("return this")(),Ln=Array.prototype,Mn=Object.prototype,jn=Function.prototype.toString,Nn=Mn.hasOwnProperty,$n=Mn.toString,kn=RegExp("^"+jn.call(Nn).replace(rn,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),zn=An?On.Buffer:ve,Pn=On.Symbol,Tn=On.Uint8Array,In=Object.getPrototypeOf,Bn=Object.getOwnPropertySymbols,Un=Object.create,Xn=Mn.propertyIsEnumerable,Yn=Ln.splice,Rn=Math.ceil,Dn=Object.keys,Fn=Math.max,qn=_t(On,"Map"),Vn=_t(On,"Set"),Hn=_t(On,"WeakMap"),Gn=_t(Object,"create"),Wn=qn?jn.call(qn):"",Qn=Vn?jn.call(Vn):"",Zn=Hn?jn.call(Hn):"",Jn=Pn?Pn.prototype:ve,Kn=Jn?Jn.valueOf:ve,tr=Jn?Jn.toString:ve,er=gt(F),nr=xt(),rr=nt("length"),ir=Bn||function(){return[]};(qn&&Ct(new qn)!=$e||Vn&&Ct(new Vn)!=Te||Hn&&Ct(new Hn)!=Ue)&&(Ct=function(t){var e=$n.call(t),n=e==ze?t.constructor:null,r="function"==typeof n?jn.call(n):"";if(r)switch(r){case Wn:return $e;case Qn:return Te;case Zn:return Ue}return e});var ar=Array.isArray,sr=zn?function(t){return t instanceof zn}:fe(!1),or=yt();v.prototype=Gn?Gn(null):Mn,w.prototype.clear=A,w.prototype["delete"]=E,w.prototype.get=S,w.prototype.has=_,w.prototype.set=C,O.prototype.clear=L,O.prototype["delete"]=M,O.prototype.get=j,O.prototype.has=N,O.prototype.set=$,m.constant=fe,m.iteratee=pe,m.keys=se,m.map=Yt,m.property=me,m.range=or,m.toPairs=oe,m.eq=Rt,m.escape=ue,m.escapeRegExp=ce,m.forEach=Xt,m.get=ie,m.hasIn=ae,m.identity=de,m.isArguments=Dt,m.isArray=ar,m.isArrayLike=Ft,m.isArrayLikeObject=qt,m.isBuffer=sr,m.isFunction=Vt,m.isLength=Ht,m.isNative=Qt,m.isNumber=Zt,m.isObject=Gt,m.isObjectLike=Wt,m.isString=Jt,m.isSymbol=Kt,m.isTypedArray=te,m.isUndefined=ee,m.last=Ut,m.replace=le,m.toNumber=ne,m.toString=re,m.unescape=he,m.each=Xt,m.VERSION=ge,(_n||Sn||{})._=m,On._=m}.call(this),String.prototype.format=function(){var t=this,e=arguments;1==arguments.length&&(_.isArray(arguments[0])||_.isObject(arguments[0]))&&(e=arguments[0]);for(var n in e)if(e.hasOwnProperty(n)){var r=n;n.match(/^\{.*\}$/)||(n="{"+n+"}");var i=new RegExp(_.escapeRegExp(n),"g");t=t.replace(i,e[r])}return t};var modal=function(){var t={};return t.show=function(t){var e=$(t);e.removeClass("hidden visible"),setTimeout(function(){e.addClass("visible")},1)},t.hide=function(t){var e=$(t);e.removeClass("visible"),setTimeout(function(){e.addClass("hidden")},500)},t.init=function(){$(".Modal").on("click",function(){$(this).hasClass("no-close")||t.hide(this)}),$(".Dialog").on("click",function(t){t.stopImmediatePropagation()}),$(window).on("keydown",function(e){27==e.which&&t.hide(".Modal")})},t}(),notify=function(){var t={},e="#notif";return t.show=function(n,r){$(e).html(n),modal.show(e),_.isUndefined(r)||setTimeout(t.hide,r)},t.hide=function(){var t=$(e);t.removeClass("visible"),setTimeout(function(){t.addClass("hidden")},250)},t.init=function(){$(e).on("click",function(){t.hide(this)})},t}();$().ready(function(){setInterval(function(){$(".anim-dots").each(function(t){var e=$(t),n=e.html()+".";5==n.length&&(n="."),e.html(n)})},1e3),modal.init(),notify.init()});var page_wifi=function(){function t(t,e){if(200!=e)return void n(5e3);t=JSON.parse(t);var a=!bool(t.result.inProgress)&&t.result.APs.length>0;if(n(a?15e3:1e3),a){var s=$("#ap-list");$(".AP").remove(),s.toggle(a),$("#ap-loader").toggle(!a),t.result.APs.sort(function(t,e){return e.rssi-t.rssi}).forEach(function(t){if(t.enc=parseInt(t.enc),!(t.enc>4)){var e=document.createElement("div"),n=$(e).data("ssid",t.essid).data("pwd",0!=t.enc).addClass("AP");t.essid==r.current&&n.addClass("selected");var a=document.createElement("div");$(a).addClass("inner").htmlAppend('
{0}
'.format(t.rssi_perc)).htmlAppend('
{0}
'.format(_.escape(t.essid))).htmlAppend('
{0}
'.format(i[t.enc]));n.on("click",function(){var t=$(this);$("#conn-essid").val(t.data("ssid")),$("#conn-passwd").val(""),t.data("pwd")?modal.show("#psk-modal"):$("#conn-form").submit()}),e.appendChild(a),s[0].appendChild(e)}})}}function e(){$().get(_root+"/wifi/scan.cgi",t)}function n(t){setTimeout(e,t)}var r={},i=["Open","WEP","WPA","WPA2","WPA/WPA2"];return r.init=function(){e()},r}(),page_waveform=function(){function t(t){var e,n,r=window.matchMedia("screen and (min-width: 544px)"),a=!r.matches,u="FFT"==t.stats.format;u?(e="Frequency - [ Hz ]",n="Magnitude - [ mA ]"):(e="Sample time - [ ms ]",n="Current - [ mA ]");var c=Math.max(-t.stats.min,t.stats.max),l=Math.max(c,10);$("#stat-count").html(t.stats.count),$("#stat-f-s").html(numfmt(t.stats.freq,2)),$("#stat-i-peak").html(numfmt(c,2)),$("#stat-i-rms").html(numfmt(t.stats.rms,2)),$(".stats").removeClass("invis");var h=u?t.stats.freq/t.stats.count:1e3/t.stats.freq,f=_.map(t.samples,function(t,e){return{x:e*h,y:t}}),d=[Chartist.plugins.zoom({resetOnRightMouseBtn:!0,onZoom:function(t,e){i=e,s=t.options.axisX.highLow,o=t.options.axisY.highLow}})];a||d.push(Chartist.plugins.ctAxisTitle({axisX:{axisTitle:e,offset:{x:0,y:55}},axisY:{axisTitle:n,flipText:!0,offset:{x:0,y:15}}}));var p,m,v,g;s?(p=s.high,m=s.low,v=o.high,g=o.low):(v=u?void 0:l,g=u?0:-l),new Chartist.Line("#chart",{series:[{name:"a",data:f}]},{showPoint:!1,showArea:u,fullWidth:!0,chartPadding:a?{right:20,bottom:5,left:0}:{right:25,bottom:30,left:25},series:{a:{lineSmooth:Chartist.Interpolation.monotoneCubic()}},axisX:{type:Chartist.AutoScaleAxis,high:p,low:m},axisY:{type:Chartist.AutoScaleAxis, -high:v,low:g},explicitBounds:{xLow:0,yLow:u?0:void 0,xHigh:f[f.length-1].x},plugins:d})}function e(e,i){if(c=!1,200!=i)errorMsg("Request failed."),l&&r();else{var a=JSON.parse(e);if(!a.success)return errorMsg("Sampling / readout failed."),void(l&&r());t(a),l&&(f=setTimeout(n,h))}}function n(){if(c)return!1;c=!0;var t=$("#count").val(),n=$("#freq").val(),r=_root+"/api/{fmt}.json?n={n}&fs={fs}".format({fmt:a,n:t,fs:n});return $().get(r,e,{timeout:1e3/n*t+1500}),!0}function r(){h=1e3*+$("#ar-time").val(),l=!l,l?n():clearTimeout(f),$("#ar-btn").toggleClass("btn-blue").toggleClass("btn-red").val(l?"Stop":"Auto")}var i,a,s,o,u={},c=!1,l=!1,h=1,f=-1;return u.init=function(t){a=t,$("#load").on("click",n),$("#count,#freq").on("keyup",function(t){13==t.which&&n()}),$("#chart").on("contextmenu",function(t){return i&&i(),i=null,s=null,o=null,t.preventDefault(),!1}),$("input[type=number]").on("mousewheel",function(t){var e=+$(this).val(),n=+($(this).attr("step")||1);t.wheelDelta>0?e+=n:e-=n,$(this).val(e)}),$("#ar-btn").on("click",r)},u}(),page_status=function(){function t(t,a){if(200!=a)errorMsg("Update failed.");else try{var s=JSON.parse(t);n.j=s,$(".sta-only").toggle(s.sta),$(".ap-only").toggle(s.ap),$("#uptime").html(s.uptime),$("#heap").html(s.heap+" bytes"),$("#wmode").html(s.wifiMode),s.sta&&($("#staSSID").html(s.sta.SSID),$("#staRSSIperc").html(s.sta.RSSIperc),$("#staRSSI").html(s.sta.RSSI),$("#staMAC").html(s.sta.MAC)),s.ap&&($("#apSSID").html(s.ap.SSID),$("#apHidden").html(s.ap.hidden?"Yes":"No"),$("#apAuth").html(s.ap.auth),$(".ap-auth-only").toggle("Open"!=s.ap.auth),$("#apPwd").html(s.ap.pwd),$("#apChan").html(s.ap.chan),$("#apMAC").html(s.ap.MAC))}catch(o){errorMsg(o)}i||setTimeout(e,r)}function e(){$().get(_root+"/api/status.json",t)}var n={};n.j={};var r=1e4,i=!1;return n.trigReset=function(){var t="#reset-modal";$().get(_root+"/reset.cgi",function(n,r){if(200==r){modal.show(t),i=!0;var a=setInterval(function(){$().get(_root+"/ping.cgi",function(n,r){200==r&&(modal.hide(t),e(),clearInterval(a),i=!1)},{timeout:500})},1e3)}})},n.init=function(){e()},n}(); \ No newline at end of file +ticks:e.raw.labels,stretch:t.fullWidth})):t.axisX.type.call(n,n.Axis.units.x,e,c,t.axisX),i=void 0===t.axisY.type?new n.AutoScaleAxis(n.Axis.units.y,e,c,n.extend({},t.axisY,{high:n.isNum(t.high)?t.high:t.axisY.high,low:n.isNum(t.low)?t.low:t.axisY.low})):t.axisY.type.call(n,n.Axis.units.y,e,c,t.axisY),r.createGridAndLabels(s,u,this.supportsForeignObject,t,this.eventEmitter),i.createGridAndLabels(s,u,this.supportsForeignObject,t,this.eventEmitter),e.raw.series.forEach(function(a,s){var u=o.elem("g");u.attr({"ct:series-name":a.name,"ct:meta":n.serialize(a.meta)}),u.addClass([t.classNames.series,a.className||t.classNames.series+"-"+n.alphaNumerate(s)].join(" "));var l=[],h=[];e.normalized[s].forEach(function(t,o){var u={x:c.x1+r.projectValue(t,o,e.normalized[s]),y:c.y1-i.projectValue(t,o,e.normalized[s])};l.push(u.x,u.y),h.push({value:t,valueIndex:o,meta:n.getMetaData(a,o)})}.bind(this));var f={lineSmooth:n.getSeriesOption(a,t,"lineSmooth"),showPoint:n.getSeriesOption(a,t,"showPoint"),showLine:n.getSeriesOption(a,t,"showLine"),showArea:n.getSeriesOption(a,t,"showArea"),areaBase:n.getSeriesOption(a,t,"areaBase")},d="function"==typeof f.lineSmooth?f.lineSmooth:f.lineSmooth?n.Interpolation.cardinal():n.Interpolation.none(),p=d(l,h);if(f.showPoint&&p.pathElements.forEach(function(e){var o=u.elem("line",{x1:e.x,y1:e.y,x2:e.x+.01,y2:e.y},t.classNames.point).attr({"ct:value":[e.data.value.x,e.data.value.y].filter(n.isNum).join(","),"ct:meta":e.data.meta});this.eventEmitter.emit("draw",{type:"point",value:e.data.value,index:e.data.valueIndex,meta:e.data.meta,series:a,seriesIndex:s,axisX:r,axisY:i,group:u,element:o,x:e.x,y:e.y})}.bind(this)),f.showLine){var m=u.elem("path",{d:p.stringify()},t.classNames.line,!0);this.eventEmitter.emit("draw",{type:"line",values:e.normalized[s],path:p.clone(),chartRect:c,index:s,series:a,seriesIndex:s,axisX:r,axisY:i,group:u,element:m})}if(f.showArea&&i.range){var v=Math.max(Math.min(f.areaBase,i.range.max),i.range.min),g=c.y1-i.projectValue(v);p.splitByCommand("M").filter(function(t){return t.pathElements.length>1}).map(function(t){var e=t.pathElements[0],n=t.pathElements[t.pathElements.length-1];return t.clone(!0).position(0).remove(1).move(e.x,g).line(e.x,e.y).position(t.pathElements.length+1).line(n.x,g)}).forEach(function(n){var o=u.elem("path",{d:n.stringify()},t.classNames.area,!0);this.eventEmitter.emit("draw",{type:"area",values:e.normalized[s],path:n.clone(),series:a,seriesIndex:s,axisX:r,axisY:i,chartRect:c,index:s,group:u,element:o})}.bind(this))}}.bind(this)),this.eventEmitter.emit("created",{bounds:i.bounds,chartRect:c,axisX:r,axisY:i,svg:this.svg,options:t})}function i(t,e,r,i){n.Line["super"].constructor.call(this,t,e,a,n.extend({},a,r),i)}var a={axisX:{offset:30,position:"end",labelOffset:{x:0,y:0},showLabel:!0,showGrid:!0,labelInterpolationFnc:n.noop,type:void 0},axisY:{offset:40,position:"start",labelOffset:{x:0,y:0},showLabel:!0,showGrid:!0,labelInterpolationFnc:n.noop,type:void 0,scaleMinSpace:20,onlyInteger:!1},width:void 0,height:void 0,showLine:!0,showPoint:!0,showArea:!1,areaBase:0,lineSmooth:!0,low:void 0,high:void 0,chartPadding:{top:15,right:15,bottom:5,left:10},fullWidth:!1,reverseData:!1,classNames:{chart:"ct-chart-line",label:"ct-label",labelGroup:"ct-labels",series:"ct-series",line:"ct-line",point:"ct-point",area:"ct-area",grid:"ct-grid",gridGroup:"ct-grids",vertical:"ct-vertical",horizontal:"ct-horizontal",start:"ct-start",end:"ct-end"}};n.Line=n.Base.extend({constructor:i,createChart:r})}(window,document,t),function(t,e,n){"use strict";function r(t){this.data=n.normalizeData(this.data);var e,r={raw:this.data,normalized:t.distributeSeries?n.getDataArray(this.data,t.reverseData,t.horizontalBars?"x":"y").map(function(t){return[t]}):n.getDataArray(this.data,t.reverseData,t.horizontalBars?"x":"y")};this.svg=n.createSvg(this.container,t.width,t.height,t.classNames.chart+(t.horizontalBars?" "+t.classNames.horizontalBars:""));var i=this.svg.elem("g").addClass(t.classNames.gridGroup),s=this.svg.elem("g"),o=this.svg.elem("g").addClass(t.classNames.labelGroup);if(t.stackBars&&0!==r.normalized.length){var u=n.serialMap(r.normalized,function(){return Array.prototype.slice.call(arguments).map(function(t){return t}).reduce(function(t,e){return{x:t.x+(e&&e.x)||0,y:t.y+(e&&e.y)||0}},{x:0,y:0})});e=n.getHighLow([u],n.extend({},t,{referenceValue:0}),t.horizontalBars?"x":"y")}else e=n.getHighLow(r.normalized,n.extend({},t,{referenceValue:0}),t.horizontalBars?"x":"y");e.high=+t.high||(0===t.high?0:e.high),e.low=+t.low||(0===t.low?0:e.low);var c,l,h,f,d,p=n.createChartRect(this.svg,t,a.padding);l=t.distributeSeries&&t.stackBars?r.raw.labels.slice(0,1):r.raw.labels,t.horizontalBars?(c=f=void 0===t.axisX.type?new n.AutoScaleAxis(n.Axis.units.x,r,p,n.extend({},t.axisX,{highLow:e,referenceValue:0})):t.axisX.type.call(n,n.Axis.units.x,r,p,n.extend({},t.axisX,{highLow:e,referenceValue:0})),h=d=void 0===t.axisY.type?new n.StepAxis(n.Axis.units.y,r,p,{ticks:l}):t.axisY.type.call(n,n.Axis.units.y,r,p,t.axisY)):(h=f=void 0===t.axisX.type?new n.StepAxis(n.Axis.units.x,r,p,{ticks:l}):t.axisX.type.call(n,n.Axis.units.x,r,p,t.axisX),c=d=void 0===t.axisY.type?new n.AutoScaleAxis(n.Axis.units.y,r,p,n.extend({},t.axisY,{highLow:e,referenceValue:0})):t.axisY.type.call(n,n.Axis.units.y,r,p,n.extend({},t.axisY,{highLow:e,referenceValue:0})));var m=t.horizontalBars?p.x1+c.projectValue(0):p.y1-c.projectValue(0),v=[];h.createGridAndLabels(i,o,this.supportsForeignObject,t,this.eventEmitter),c.createGridAndLabels(i,o,this.supportsForeignObject,t,this.eventEmitter),r.raw.series.forEach(function(e,i){var a,o,u=i-(r.raw.series.length-1)/2;a=t.distributeSeries&&!t.stackBars?h.axisLength/r.normalized.length/2:t.distributeSeries&&t.stackBars?h.axisLength/2:h.axisLength/r.normalized[i].length/2,o=s.elem("g"),o.attr({"ct:series-name":e.name,"ct:meta":n.serialize(e.meta)}),o.addClass([t.classNames.series,e.className||t.classNames.series+"-"+n.alphaNumerate(i)].join(" ")),r.normalized[i].forEach(function(s,l){var g,x,y,b;if(b=t.distributeSeries&&!t.stackBars?i:t.distributeSeries&&t.stackBars?0:l,g=t.horizontalBars?{x:p.x1+c.projectValue(s&&s.x?s.x:0,l,r.normalized[i]),y:p.y1-h.projectValue(s&&s.y?s.y:0,b,r.normalized[i])}:{x:p.x1+h.projectValue(s&&s.x?s.x:0,b,r.normalized[i]),y:p.y1-c.projectValue(s&&s.y?s.y:0,l,r.normalized[i])},h instanceof n.StepAxis&&(h.options.stretch||(g[h.units.pos]+=a*(t.horizontalBars?-1:1)),g[h.units.pos]+=t.stackBars||t.distributeSeries?0:u*t.seriesBarDistance*(t.horizontalBars?-1:1)),y=v[l]||m,v[l]=y-(m-g[h.counterUnits.pos]),void 0!==s){var w={};w[h.units.pos+"1"]=g[h.units.pos],w[h.units.pos+"2"]=g[h.units.pos],!t.stackBars||"accumulate"!==t.stackMode&&t.stackMode?(w[h.counterUnits.pos+"1"]=m,w[h.counterUnits.pos+"2"]=g[h.counterUnits.pos]):(w[h.counterUnits.pos+"1"]=y,w[h.counterUnits.pos+"2"]=v[l]),w.x1=Math.min(Math.max(w.x1,p.x1),p.x2),w.x2=Math.min(Math.max(w.x2,p.x1),p.x2),w.y1=Math.min(Math.max(w.y1,p.y2),p.y1),w.y2=Math.min(Math.max(w.y2,p.y2),p.y1),x=o.elem("line",w,t.classNames.bar).attr({"ct:value":[s.x,s.y].filter(n.isNum).join(","),"ct:meta":n.getMetaData(e,l)}),this.eventEmitter.emit("draw",n.extend({type:"bar",value:s,index:l,meta:n.getMetaData(e,l),series:e,seriesIndex:i,axisX:f,axisY:d,chartRect:p,group:o,element:x},w))}}.bind(this))}.bind(this)),this.eventEmitter.emit("created",{bounds:c.bounds,chartRect:p,axisX:f,axisY:d,svg:this.svg,options:t})}function i(t,e,r,i){n.Bar["super"].constructor.call(this,t,e,a,n.extend({},a,r),i)}var a={axisX:{offset:30,position:"end",labelOffset:{x:0,y:0},showLabel:!0,showGrid:!0,labelInterpolationFnc:n.noop,scaleMinSpace:30,onlyInteger:!1},axisY:{offset:40,position:"start",labelOffset:{x:0,y:0},showLabel:!0,showGrid:!0,labelInterpolationFnc:n.noop,scaleMinSpace:20,onlyInteger:!1},width:void 0,height:void 0,high:void 0,low:void 0,chartPadding:{top:15,right:15,bottom:5,left:10},seriesBarDistance:15,stackBars:!1,stackMode:"accumulate",horizontalBars:!1,distributeSeries:!1,reverseData:!1,classNames:{chart:"ct-chart-bar",horizontalBars:"ct-horizontal-bars",label:"ct-label",labelGroup:"ct-labels",series:"ct-series",bar:"ct-bar",grid:"ct-grid",gridGroup:"ct-grids",vertical:"ct-vertical",horizontal:"ct-horizontal",start:"ct-start",end:"ct-end"}};n.Bar=n.Base.extend({constructor:i,createChart:r})}(window,document,t),t}),function(t,e){t["Chartist.plugins.ctAxisTitle"]=e()}(this,function(){return function(t,e,n){"use strict";var r={axisTitle:"",axisClass:"ct-axis-title",offset:{x:0,y:0},textAnchor:"middle",flipText:!1},i={axisX:r,axisY:r};n.plugins=n.plugins||{},n.plugins.ctAxisTitle=function(t){return t=n.extend({},i,t),function(e){e.on("created",function(e){var r,i,a;if(t.axisX.axisTitle&&e.axisX&&(r=e.axisX.axisLength/2+e.options.axisY.offset+e.options.chartPadding.left,i=e.options.chartPadding.top,"end"===e.options.axisY.position&&(r-=e.options.axisY.offset),"end"===e.options.axisX.position&&(i+=e.axisY.axisLength),a=new n.Svg("text"),a.addClass(t.axisX.axisClass),a.text(t.axisX.axisTitle),a.attr({x:r+t.axisX.offset.x,y:i+t.axisX.offset.y,"text-anchor":t.axisX.textAnchor}),e.svg.append(a,!0)),t.axisY.axisTitle&&e.axisY){r=0,i=e.axisY.axisLength/2+e.options.chartPadding.top,"start"===e.options.axisX.position&&(i+=e.options.axisX.offset),"end"===e.options.axisY.position&&(r=e.axisX.axisLength);var s="rotate("+(t.axisY.flipText?-90:90)+", "+r+", "+i+")";a=new n.Svg("text"),a.addClass(t.axisY.axisClass),a.text(t.axisY.axisTitle),a.attr({x:r+t.axisY.offset.x,y:i+t.axisY.offset.y,transform:s,"text-anchor":t.axisY.textAnchor}),e.svg.append(a,!0)}})}}}(window,document,Chartist),Chartist.plugins.ctAxisTitle}),function(t,e){t["Chartist.plugins.zoom"]=e()}(this,function(){return function(t,e,n){"use strict";function r(t){t.attr({style:"display:none"})}function i(t){t.attr({style:"display:block"})}function a(t,e){var n=t.x,r=t.y,i=e.x-n,a=e.y-r;return 0>i&&(i=-i,n=e.x),0>a&&(a=-a,r=e.y),{x:n,y:r,width:i,height:a}}function s(t,e){return o(t.clientX,t.clientY,e)}function o(t,e,n){var r="svg"===n.tagName?n:n.ownerSVGElement,i=r.getScreenCTM(),a=r.createSVGPoint();return a.x=t,a.y=e,a=a.matrixTransform(i.inverse()),a||{x:0,y:0}}function u(t,e){var n=e.bounds.max,r=e.bounds.min;if(e.scale&&"log"===e.scale.type){var i=e.scale.base;return Math.pow(i,t*c(n/r,i)/e.axisLength)*r}return t*e.bounds.range/e.axisLength+r}function c(t,e){return Math.log(t)/Math.log(e)}var l={};n.plugins=n.plugins||{},n.plugins.zoom=function(t){return t=n.extend({},l,t),function(e){function o(t){var e=s(t,b);return e.id=t.identifier,e}function c(t){for(var e=0;e1&&(y.attr(a(O[0],O[1])),i(y))}function h(t){for(var e=t.changedTouches,n=0;n1&&(y.attr(a(O[0],O[1])),i(y),t.preventDefault())}function f(t){d(t.changedTouches)}function d(t){for(var e=0;e=0&&O.splice(n,1)}}function p(t){O.length>1&&g(a(O[0],O[1])),d(t.changedTouches),r(y)}function m(t){0===t.button&&(S=s(t,b),y.attr(a(S,S)),i(y),t.preventDefault())}function v(e){if(0===e.button){var n=a(S,s(e,b));g(n),S=null,r(y),e.preventDefault()}else t.resetOnRightMouseBtn&&2===e.button&&(L(),e.preventDefault())}function g(t){if(t.width>5&&t.height>5){var n=t.x-E.x1,r=n+t.width,i=E.y1-t.y,a=i-t.height,s=u(n,w),o=u(r,w),c=u(a,A),l=u(i,A),h=e.options.explicitBounds;_.isUndefined(h)||(_.isUndefined(h.xLow)||(s=Math.max(h.xLow,s)),_.isUndefined(h.xHigh)||(o=Math.min(h.xHigh,o)),_.isUndefined(h.yLow)||(c=Math.max(h.yLow,c)),_.isUndefined(h.yHigh)||(l=Math.min(h.yHigh,l))),e.options.axisX.highLow={low:s,high:o},e.options.axisY.highLow={low:c,high:l},e.update(e.data,e.options),C&&C(e,L)}}function x(t){if(S){var e=s(t,b);y.attr(a(S,e)),t.preventDefault()}}if(e instanceof n.Line){var y,b,w,A,E,S,C=t.onZoom,O=[];e.on("draw",function(t){var e=t.type;"line"!==e&&"bar"!==e&&"area"!==e&&"point"!==e||t.element.attr({"clip-path":"url(#zoom-mask)"})}),e.on("created",function(t){w=t.axisX,A=t.axisY,E=t.chartRect,b=t.svg._node,y=t.svg.elem("rect",{x:10,y:10,width:100,height:100},"ct-zoom-rect"),r(y);var e=t.svg.querySelector("defs")||t.svg.elem("defs"),n=E.width(),i=E.height();e.elem("clipPath",{id:"zoom-mask"}).elem("rect",{x:E.x1,y:E.y2,width:n,height:i,fill:"white"}),b.addEventListener("mousedown",m),b.addEventListener("mouseup",v),b.addEventListener("mousemove",x),b.addEventListener("touchstart",l),b.addEventListener("touchmove",h),b.addEventListener("touchend",p),b.addEventListener("touchcancel",f)});var L=function(){e.options.axisX.highLow=null,e.options.axisY.highLow=null,e.update(e.data,e.options)}}}}}(window,document,Chartist),Chartist.plugins.zoom}),function(){function t(t,e){return t.set(e[0],e[1]),t}function e(t,e){return t.add(e),t}function n(t,e){for(var n=-1,r=t.length;++n-1&&t%1==0&&e>t}function f(t){var e=-1,n=Array(t.size);return t.forEach(function(t,r){n[++e]=[r,t]}),n}function d(t){var e=-1,n=Array(t.size);return t.forEach(function(t){n[++e]=t}),n}function p(t){return gn[t]}function m(){}function v(){}function g(t,e){return y(t,e)&&delete t[e]}function x(t,e){if(Gn){var n=t[e];return n===ye?ve:n}return Nn.call(t,e)?t[e]:ve}function y(t,e){return Gn?t[e]!==ve:Nn.call(t,e)}function b(t,e,n){t[e]=Gn&&n===ve?ye:n}function w(t){var e=-1,n=t?t.length:0;for(this.clear();++en)return!1;var r=t.length-1;return n==r?t.pop():Yn.call(t,n,1),!0}function z(t,e){var n=T(t,e);return 0>n?ve:t[n][1]}function P(t,e){return T(t,e)>-1}function T(t,e){for(var n=t.length;n--;)if(Rt(t[n][0],e))return n;return-1}function I(t,e,n){var r=T(t,e);0>r?t.push([e,n]):t[r][1]=n}function B(t,e,n){var r=t[e];Nn.call(t,e)&&Rt(r,n)&&(n!==ve||e in t)||(t[e]=n)}function U(t,e){return t&&pt(e,se(e),t)}function X(t){return"function"==typeof t?t:de}function Y(t){return ar(t)?t:Bt(t)}function R(t,e,r,i,a,s,o){var u;if(i&&(u=s?i(t,a,s,o):i(t)),u!==ve)return u;if(!Gt(t))return t;var c=ar(t);if(c){if(u=Lt(t),!e)return dt(t,u)}else{var h=Ct(t),f=h==je||h==Ne;if(sr(t))return st(t,e);if(h==ze||h==_e||f&&!s){if(l(t))return s?t:{};if(u=Mt(f?{}:t),!e)return u=U(u,t),r?vt(t,u):u}else{if(!mn[h])return s?t:{};u=jt(t,h,e)}}o||(o=new O);var d=o.get(t);return d?d:(o.set(t,u),(c?n:F)(t,function(n,a){B(u,a,R(n,e,r,i,a,t,o))}),r&&!c?vt(t,u):u)}function D(t){return Gt(t)?Un(t):{}}function F(t,e){return t&&nr(t,e,se)}function q(t,e){e=kt(e,t)?[e+""]:Y(e);for(var n=0,r=e.length;null!=t&&r>n;)t=t[e[n++]];return n&&n==r?t:ve}function V(t,e){return Nn.call(t,e)||"object"==typeof t&&e in t&&null===In(t)}function H(t,e){return e in Object(t)}function G(t,e,n,r,i){return t===e?!0:null==t||null==e||!Gt(t)&&!Wt(e)?t!==t&&e!==e:W(t,e,G,n,r,i)}function W(t,e,n,r,i,a){var s=ar(t),o=ar(e),u=Ce,c=Ce;s||(u=Ct(t),u=u==_e?ze:u),o||(c=Ct(e),c=c==_e?ze:c);var h=u==ze&&!l(t),f=c==ze&&!l(e),d=u==c;if(d&&!h)return a||(a=new O),s||te(t)?bt(t,e,n,r,i,a):wt(t,e,u,n,r,i,a);if(!(i&we)){var p=h&&Nn.call(t,"__wrapped__"),m=f&&Nn.call(e,"__wrapped__");if(p||m)return a||(a=new O),n(p?t.value():t,m?e.value():e,r,i,a)}return d?(a||(a=new O),At(t,e,n,r,i,a)):!1}function Q(t,e,n,r){var i=n.length,a=i,s=!r;if(null==t)return!a;for(t=Object(t);i--;){var o=n[i];if(s&&o[2]?o[1]!==t[o[0]]:!(o[0]in t))return!1}for(;++ie&&(e=-e>i?0:i+e),n=n>i?i:n,0>n&&(n+=i),i=e>n?0:n-e>>>0,e>>>=0;for(var a=Array(i);++re?1:-1:ne(r)||0,it(e,n,r,t)}}function bt(t,e,n,r,i,s){var o=-1,u=i&we,c=i&be,l=t.length,h=e.length;if(l!=h&&!(u&&h>l))return!1;var f=s.get(t);if(f)return f==e;var d=!0;for(s.set(t,e);++o-1&&t%1==0&&Ee>=t}function Gt(t){var e=typeof t;return!!t&&("object"==e||"function"==e)}function Wt(t){return!!t&&"object"==typeof t}function Qt(t){return null==t?!1:Vt(t)?kn.test(jn.call(t)):Wt(t)&&(l(t)?kn:hn).test(t)}function Zt(t){return"number"==typeof t||Wt(t)&&$n.call(t)==ke}function Jt(t){return"string"==typeof t||!ar(t)&&Wt(t)&&$n.call(t)==Ie}function Kt(t){return"symbol"==typeof t||Wt(t)&&$n.call(t)==Be}function te(t){return Wt(t)&&Ht(t.length)&&!!pn[$n.call(t)]}function ee(t){return t===ve}function ne(t){if(Gt(t)){var e=Vt(t.valueOf)?t.valueOf():t;t=Gt(e)?e+"":e}if("string"!=typeof t)return 0===t?t:+t;t=t.replace(sn,"");var n=ln.test(t);return n||fn.test(t)?yn(t.slice(2),n?2:8):cn.test(t)?Se:+t}function re(t){if("string"==typeof t)return t;if(null==t)return"";if(Kt(t))return tr?tr.call(t):"";var e=t+"";return"0"==e&&1/t==-Ae?"-0":e}function ie(t,e,n){var r=null==t?ve:q(t,e);return r===ve?n:r}function ae(t,e){return Ot(t,e,H)}function se(t){var e=Pt(t);if(!e&&!Ft(t))return J(t);var n=Nt(t),r=!!n,i=n||[],a=i.length;for(var s in t)!V(t,s)||r&&("length"==s||h(s,a))||e&&"constructor"==s||i.push(s);return i}function oe(t){return o(t,se(t))}function ue(t){return t=re(t),t&&Ke.test(t)?t.replace(Ze,c):t}function ce(t){return t=re(t),t&&an.test(t)?t.replace(rn,"\\$&"):t}function le(){var t=arguments,e=re(t[0]);return t.length<3?e:e.replace(t[1],t[2])}function he(t){return t=re(t),t&&Je.test(t)?t.replace(Qe,p):t}function fe(t){return function(){return t}}function de(t){return t}function pe(t){return Z("function"==typeof t?t:R(t,!0))}function me(t){return kt(t)?nt(t):rt(t)}var ve,ge="4.6.1",xe=200,ye="__lodash_hash_undefined__",be=1,we=2,Ae=1/0,Ee=9007199254740991,Se=NaN,_e="[object Arguments]",Ce="[object Array]",Oe="[object Boolean]",Le="[object Date]",Me="[object Error]",je="[object Function]",Ne="[object GeneratorFunction]",$e="[object Map]",ke="[object Number]",ze="[object Object]",Pe="[object RegExp]",Te="[object Set]",Ie="[object String]",Be="[object Symbol]",Ue="[object WeakMap]",Xe="[object ArrayBuffer]",Ye="[object Float32Array]",Re="[object Float64Array]",De="[object Int8Array]",Fe="[object Int16Array]",qe="[object Int32Array]",Ve="[object Uint8Array]",He="[object Uint8ClampedArray]",Ge="[object Uint16Array]",We="[object Uint32Array]",Qe=/&(?:amp|lt|gt|quot|#39|#96);/g,Ze=/[&<>"'`]/g,Je=RegExp(Qe.source),Ke=RegExp(Ze.source),tn=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,en=/^\w*$/,nn=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]/g,rn=/[\\^$.*+?()[\]{}|]/g,an=RegExp(rn.source),sn=/^\s+|\s+$/g,on=/\\(\\)?/g,un=/\w*$/,cn=/^[-+]0x[0-9a-f]+$/i,ln=/^0b[01]+$/i,hn=/^\[object .+?Constructor\]$/,fn=/^0o[0-7]+$/i,dn=/^(?:0|[1-9]\d*)$/,pn={};pn[Ye]=pn[Re]=pn[De]=pn[Fe]=pn[qe]=pn[Ve]=pn[He]=pn[Ge]=pn[We]=!0,pn[_e]=pn[Ce]=pn[Xe]=pn[Oe]=pn[Le]=pn[Me]=pn[je]=pn[$e]=pn[ke]=pn[ze]=pn[Pe]=pn[Te]=pn[Ie]=pn[Ue]=!1;var mn={};mn[_e]=mn[Ce]=mn[Xe]=mn[Oe]=mn[Le]=mn[Ye]=mn[Re]=mn[De]=mn[Fe]=mn[qe]=mn[$e]=mn[ke]=mn[ze]=mn[Pe]=mn[Te]=mn[Ie]=mn[Be]=mn[Ve]=mn[He]=mn[Ge]=mn[We]=!0,mn[Me]=mn[je]=mn[Ue]=!1;var vn={"&":"&","<":"<",">":">",'"':""","'":"'","`":"`"},gn={"&":"&","<":"<",">":">",""":'"',"'":"'","`":"`"},xn={"function":!0,object:!0},yn=parseInt,bn=xn[typeof exports]&&exports&&!exports.nodeType?exports:ve,wn=xn[typeof module]&&module&&!module.nodeType?module:ve,An=wn&&wn.exports===bn?bn:ve,En=u(bn&&wn&&"object"==typeof global&&global),Sn=u(xn[typeof self]&&self),_n=u(xn[typeof window]&&window),Cn=u(xn[typeof this]&&this),On=En||_n!==(Cn&&Cn.window)&&_n||Sn||Cn||Function("return this")(),Ln=Array.prototype,Mn=Object.prototype,jn=Function.prototype.toString,Nn=Mn.hasOwnProperty,$n=Mn.toString,kn=RegExp("^"+jn.call(Nn).replace(rn,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),zn=An?On.Buffer:ve,Pn=On.Symbol,Tn=On.Uint8Array,In=Object.getPrototypeOf,Bn=Object.getOwnPropertySymbols,Un=Object.create,Xn=Mn.propertyIsEnumerable,Yn=Ln.splice,Rn=Math.ceil,Dn=Object.keys,Fn=Math.max,qn=_t(On,"Map"),Vn=_t(On,"Set"),Hn=_t(On,"WeakMap"),Gn=_t(Object,"create"),Wn=qn?jn.call(qn):"",Qn=Vn?jn.call(Vn):"",Zn=Hn?jn.call(Hn):"",Jn=Pn?Pn.prototype:ve,Kn=Jn?Jn.valueOf:ve,tr=Jn?Jn.toString:ve,er=gt(F),nr=xt(),rr=nt("length"),ir=Bn||function(){return[]};(qn&&Ct(new qn)!=$e||Vn&&Ct(new Vn)!=Te||Hn&&Ct(new Hn)!=Ue)&&(Ct=function(t){var e=$n.call(t),n=e==ze?t.constructor:null,r="function"==typeof n?jn.call(n):"";if(r)switch(r){case Wn:return $e;case Qn:return Te;case Zn:return Ue}return e});var ar=Array.isArray,sr=zn?function(t){return t instanceof zn}:fe(!1),or=yt();v.prototype=Gn?Gn(null):Mn,w.prototype.clear=A,w.prototype["delete"]=E,w.prototype.get=S,w.prototype.has=_,w.prototype.set=C,O.prototype.clear=L,O.prototype["delete"]=M,O.prototype.get=j,O.prototype.has=N,O.prototype.set=$,m.constant=fe,m.iteratee=pe,m.keys=se,m.map=Yt,m.property=me,m.range=or,m.toPairs=oe,m.eq=Rt,m.escape=ue,m.escapeRegExp=ce,m.forEach=Xt,m.get=ie,m.hasIn=ae,m.identity=de,m.isArguments=Dt,m.isArray=ar,m.isArrayLike=Ft,m.isArrayLikeObject=qt,m.isBuffer=sr,m.isFunction=Vt,m.isLength=Ht,m.isNative=Qt,m.isNumber=Zt,m.isObject=Gt,m.isObjectLike=Wt,m.isString=Jt,m.isSymbol=Kt,m.isTypedArray=te,m.isUndefined=ee,m.last=Ut,m.replace=le,m.toNumber=ne,m.toString=re,m.unescape=he,m.each=Xt,m.VERSION=ge,(_n||Sn||{})._=m,On._=m}.call(this),String.prototype.format=function(){var t=this,e=arguments;1==arguments.length&&(_.isArray(arguments[0])||_.isObject(arguments[0]))&&(e=arguments[0]);for(var n in e)if(e.hasOwnProperty(n)){var r=n;n.match(/^\{.*\}$/)||(n="{"+n+"}");var i=new RegExp(_.escapeRegExp(n),"g");t=t.replace(i,e[r])}return t};var modal=function(){var t={};return t.show=function(t){var e=$(t);e.removeClass("hidden visible"),setTimeout(function(){e.addClass("visible")},1)},t.hide=function(t){var e=$(t);e.removeClass("visible"),setTimeout(function(){e.addClass("hidden")},500)},t.init=function(){$(".Modal").on("click",function(){$(this).hasClass("no-close")||t.hide(this)}),$(".Dialog").on("click",function(t){t.stopImmediatePropagation()}),$(window).on("keydown",function(e){27==e.which&&t.hide(".Modal")})},t}(),notify=function(){var t={},e="#notif";return t.show=function(n,r){$(e).html(n),modal.show(e),_.isUndefined(r)||setTimeout(t.hide,r)},t.hide=function(){var t=$(e);t.removeClass("visible"),setTimeout(function(){t.addClass("hidden")},250)},t.init=function(){$(e).on("click",function(){t.hide(this)})},t}();$().ready(function(){setInterval(function(){$(".anim-dots").each(function(t){var e=$(t),n=e.html()+".";5==n.length&&(n="."),e.html(n)})},1e3),modal.init(),notify.init()});var page_wifi=function(){function t(t,e){if(200!=e)return void n(5e3);t=JSON.parse(t);var a=!bool(t.result.inProgress)&&t.result.APs.length>0;if(n(a?15e3:1e3),a){var s=$("#ap-list");$(".AP").remove(),s.toggle(a),$("#ap-loader").toggle(!a),t.result.APs.sort(function(t,e){return e.rssi-t.rssi}).forEach(function(t){if(t.enc=parseInt(t.enc),!(t.enc>4)){var e=document.createElement("div"),n=$(e).data("ssid",t.essid).data("pwd",0!=t.enc).addClass("AP");t.essid==r.current&&n.addClass("selected");var a=document.createElement("div");$(a).addClass("inner").htmlAppend('
{0}
'.format(t.rssi_perc)).htmlAppend('
{0}
'.format(_.escape(t.essid))).htmlAppend('
{0}
'.format(i[t.enc]));n.on("click",function(){var t=$(this);$("#conn-essid").val(t.data("ssid")),$("#conn-passwd").val(""),t.data("pwd")?modal.show("#psk-modal"):$("#conn-form").submit()}),e.appendChild(a),s[0].appendChild(e)}})}}function e(){$().get(_root+"/wifi/scan",t)}function n(t){setTimeout(e,t)}var r={},i=["Open","WEP","WPA","WPA2","WPA/WPA2"];return r.init=function(){e()},r}(),page_waveform=function(){function t(t){var e,n,r=window.matchMedia("screen and (min-width: 544px)"),a=!r.matches,u="FFT"==t.stats.format;u?(e="Frequency - [ Hz ]",n="Magnitude - [ mA ]"):(e="Sample time - [ ms ]",n="Current - [ mA ]");var c=Math.max(-t.stats.min,t.stats.max),l=Math.max(c,10);$("#stat-count").html(t.stats.count),$("#stat-f-s").html(numfmt(t.stats.freq,2)),$("#stat-i-peak").html(numfmt(c,2)),$("#stat-i-rms").html(numfmt(t.stats.rms,2)),$(".stats").removeClass("invis");var h=u?t.stats.freq/t.stats.count:1e3/t.stats.freq,f=_.map(t.samples,function(t,e){return{x:e*h,y:t}}),d=[Chartist.plugins.zoom({resetOnRightMouseBtn:!0,onZoom:function(t,e){i=e,s=t.options.axisX.highLow,o=t.options.axisY.highLow}})];a||d.push(Chartist.plugins.ctAxisTitle({axisX:{axisTitle:e,offset:{x:0,y:55}},axisY:{axisTitle:n,flipText:!0,offset:{x:0,y:15}}}));var p,m,v,g;s?(p=s.high,m=s.low,v=o.high,g=o.low):(v=u?void 0:l,g=u?0:-l),new Chartist.Line("#chart",{series:[{name:"a",data:f}]},{showPoint:!1,showArea:u,fullWidth:!0,chartPadding:a?{right:20,bottom:5,left:0}:{right:25,bottom:30,left:25},series:{a:{lineSmooth:Chartist.Interpolation.monotoneCubic()}},axisX:{type:Chartist.AutoScaleAxis,high:p,low:m},axisY:{type:Chartist.AutoScaleAxis, +high:v,low:g},explicitBounds:{xLow:0,yLow:u?0:void 0,xHigh:f[f.length-1].x},plugins:d})}function e(e,i){if(c=!1,200!=i)errorMsg("Request failed."),l&&r();else{var a=JSON.parse(e);if(!a.success)return errorMsg("Sampling / readout failed."),void(l&&r());t(a),l&&(f=setTimeout(n,h))}}function n(){if(c)return!1;c=!0;var t=$("#count").val(),n=$("#freq").val(),r=_root+"/measure/{fmt}?n={n}&fs={fs}".format({fmt:a,n:t,fs:n});return $().get(r,e,{timeout:1e3/n*t+1500}),!0}function r(){h=1e3*+$("#ar-time").val(),l=!l,l?n():clearTimeout(f),$("#ar-btn").toggleClass("btn-blue").toggleClass("btn-red").val(l?"Stop":"Auto")}var i,a,s,o,u={},c=!1,l=!1,h=1,f=-1;return u.init=function(t){a=t,$("#load").on("click",n),$("#count,#freq").on("keyup",function(t){13==t.which&&n()}),$("#chart").on("contextmenu",function(t){return i&&i(),i=null,s=null,o=null,t.preventDefault(),!1}),$("input[type=number]").on("mousewheel",function(t){var e=+$(this).val(),n=+($(this).attr("step")||1);t.wheelDelta>0?e+=n:e-=n,$(this).val(e)}),$("#ar-btn").on("click",r)},u}(),page_status=function(){function t(t,a){if(200!=a)errorMsg("Update failed.");else try{var s=JSON.parse(t);n.j=s,$(".sta-only").toggle(s.sta),$(".ap-only").toggle(s.ap),$("#uptime").html(s.uptime),$("#heap").html(s.heap+" bytes"),$("#wmode").html(s.wifiMode),s.sta&&($("#staSSID").html(s.sta.SSID),$("#staRSSIperc").html(s.sta.RSSIperc),$("#staRSSI").html(s.sta.RSSI),$("#staMAC").html(s.sta.MAC)),s.ap&&($("#apSSID").html(s.ap.SSID),$("#apHidden").html(s.ap.hidden?"Yes":"No"),$("#apAuth").html(s.ap.auth),$(".ap-auth-only").toggle("Open"!=s.ap.auth),$("#apPwd").html(s.ap.pwd),$("#apChan").html(s.ap.chan),$("#apMAC").html(s.ap.MAC))}catch(o){errorMsg(o)}i||setTimeout(e,r)}function e(){$().get(_root+"/system/status",t)}var n={};n.j={};var r=1e4,i=!1;return n.trigReset=function(){var t="#reset-modal";$().get(_root+"/system/reset",function(n,r){if(200==r){modal.show(t),i=!0;var a=setInterval(function(){$().get(_root+"/system/ping",function(n,r){200==r&&(modal.hide(t),e(),clearInterval(a),i=!1)},{timeout:500})},1e3)}})},n.init=function(){e()},n}(); \ No newline at end of file diff --git a/html/pages/about.tpl b/html/pages/about.tpl index 842c088..43101b8 100644 --- a/html/pages/about.tpl +++ b/html/pages/about.tpl @@ -19,7 +19,7 @@
+ HomeWiFi configWaveformFFTAbout
Loading… diff --git a/html/pages/fft.html b/html/pages/fft.html index 117d320..f69a625 100644 --- a/html/pages/fft.html +++ b/html/pages/fft.html @@ -19,7 +19,7 @@
+ HomeWiFi configWaveformFFTAbout
Loading… diff --git a/html/pages/status.tpl b/html/pages/status.tpl index edce6fe..a0a0f4a 100644 --- a/html/pages/status.tpl +++ b/html/pages/status.tpl @@ -19,7 +19,7 @@
+ HomeWiFi configWaveformFFTAbout
Loading… diff --git a/html/pages/wfm.html b/html/pages/wfm.html index a2b34fd..1928c0f 100644 --- a/html/pages/wfm.html +++ b/html/pages/wfm.html @@ -19,7 +19,7 @@
+ HomeWiFi configWaveformFFTAbout
Loading… diff --git a/html/pages/wifi.tpl b/html/pages/wifi.tpl index 2fa81b1..9ed1a3d 100644 --- a/html/pages/wifi.tpl +++ b/html/pages/wifi.tpl @@ -19,7 +19,7 @@
+ HomeWiFi configWaveformFFTAbout
Loading… diff --git a/html_src/_start.php b/html_src/_start.php index 3a3a451..97262c1 100644 --- a/html_src/_start.php +++ b/html_src/_start.php @@ -4,13 +4,13 @@ $root = $prod ? '' : 'http://192.168.1.13'; $menu = [ - 'home' => [ $prod ? '/' : '/page_status.php', 'Home' ], + 'home' => [ $prod ? '/status' : '/page_status.php', 'Home' ], 'wifi' => [ $prod ? '/wifi' : '/page_wifi.php', 'WiFi config' ], 'waveform' => [ $prod ? '/waveform' : '/page_waveform.php', 'Waveform' ], 'fft' => [ $prod ? '/fft' : '/page_fft.php', 'FFT' ], // 'spectrogram' => [ '/spectrogram', 'Spectrogram' ], // 'transient' => [ '/transient', 'Power-on transient' ], - 'about' => [ $prod ? '/about' : '/page_about.php', 'About' ], + 'about' => [ $prod ? '/about' : '/page_about.php', 'About' ], ]; $appname = 'Current Analyser'; diff --git a/html_src/css/app.css b/html_src/css/app.css index 5857009..cc8002f 100644 --- a/html_src/css/app.css +++ b/html_src/css/app.css @@ -1 +1 @@ -*,:after,:before{box-sizing:border-box}html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}figure,nav{display:block}canvas,progress{display:inline-block;vertical-align:baseline}[hidden]{display:none}a{background-color:transparent}a:active,a:hover{outline:0}b{font-weight:700}h1,h2{font-size:2em;margin:.67em 0}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}hr{box-sizing:content-box;height:0}pre{overflow:auto}code,pre{font-family:monospace;font-size:1em}button,input,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}legend{border:0;padding:0}textarea{overflow:auto}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}html{box-sizing:border-box}*,:after,:before{box-sizing:inherit}.ct-zoom-rect{fill:rgba(200,100,100,.3);stroke:#ff2b12}.ct-axis-title{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.ct-axis-title,.ct-label{fill:rgba(255,255,255,.8)}.ct-label{color:rgba(255,255,255,.8);font-size:.75rem;line-height:1}.ct-label.ct-horizontal.ct-start{align-items:flex-end;justify-content:flex-start;text-align:left;text-anchor:start}.ct-label.ct-horizontal.ct-end{align-items:flex-start;justify-content:flex-start;text-align:left;text-anchor:start;transform:translate(-4px) rotate(45deg)}.ct-label.ct-vertical.ct-start{align-items:flex-end;justify-content:flex-end;text-align:right;text-anchor:end;transform:translateY(20%)}.ct-label.ct-vertical.ct-end{align-items:flex-end;justify-content:flex-start;text-align:left;text-anchor:start}.ct-chart-bar .ct-label,.ct-chart-line .ct-label{display:flex}.ct-chart-bar .ct-label.ct-horizontal.ct-start{align-items:flex-end;justify-content:center;text-align:center;text-anchor:start}.ct-chart-bar .ct-label.ct-horizontal.ct-end{align-items:flex-start;justify-content:center;text-align:center;text-anchor:start}.ct-chart-bar.ct-horizontal-bars .ct-label.ct-horizontal.ct-start{align-items:flex-end;justify-content:flex-start;text-align:left;text-anchor:start}.ct-chart-bar.ct-horizontal-bars .ct-label.ct-horizontal.ct-end{align-items:flex-start;justify-content:flex-start;text-align:left;text-anchor:start}.ct-chart-bar.ct-horizontal-bars .ct-label.ct-vertical.ct-start{align-items:center;justify-content:flex-end;text-align:right;text-anchor:end}.ct-chart-bar.ct-horizontal-bars .ct-label.ct-vertical.ct-end{align-items:center;justify-content:flex-start;text-align:left;text-anchor:end}.ct-grid{stroke:rgba(255,255,255,.3);stroke-width:1px;stroke-dasharray:2px}.ct-point{stroke-width:4px;stroke-linecap:round}.ct-line{fill:none;stroke-width:2px}.ct-with-area .ct-line{stroke-width:1px}.ct-area{stroke:none;fill-opacity:.3}.ct-bar{fill:none;stroke-width:10px}.ct-series-a .ct-bar,.ct-series-a .ct-line,.ct-series-a .ct-point{stroke:#f05b4f}.ct-series-a .ct-area,.ct-series-a .ct-slice-pie{fill:#f05b4f}.ct-series-b .ct-bar,.ct-series-b .ct-line,.ct-series-b .ct-point{stroke:#6188e2}.ct-series-b .ct-area,.ct-series-b .ct-slice-pie{fill:#6188e2}.ct-series-c .ct-bar,.ct-series-c .ct-line,.ct-series-c .ct-point{stroke:#59922b}.ct-series-c .ct-area,.ct-series-c .ct-slice-pie{fill:#59922b}.ct-series-d .ct-bar,.ct-series-d .ct-line,.ct-series-d .ct-point{stroke:#eacf7d}.ct-series-d .ct-area,.ct-series-d .ct-slice-pie{fill:#eacf7d}.ct-series-e .ct-bar,.ct-series-e .ct-line,.ct-series-e .ct-point{stroke:#a748ca}.ct-series-e .ct-area,.ct-series-e .ct-slice-pie{fill:#a748ca}.ct-wide{display:block;position:relative;width:100%}.ct-wide:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:62.5%}.ct-wide:after{content:"";display:table;clear:both}.ct-wide>svg{display:block;position:absolute;top:0;left:0}.ct-narrow{display:block;position:relative;width:100%}.ct-narrow:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:66.6666666667%}.ct-narrow:after{content:"";display:table;clear:both}.ct-narrow>svg{display:block;position:absolute;top:0;left:0}.center{text-align:center}.invis{visibility:hidden}.hidden{display:none}html{font-family:Arial,sans-serif;color:#D0D0D0;background:#131315}body,html{border:0 none;margin:0;padding:0;text-decoration:none;width:100%;height:100%;overflow:hidden}a,a:link,a:visited{color:#5abfff;text-decoration:none}a:hover{color:#5abfff;text-decoration:underline}#outer{display:flex;position:absolute;width:100%;height:100%;left:0;right:0;top:0;bottom:0;overflow:hidden;flex-direction:row}@media screen and (max-width:544px){#outer{display:block;overflow-y:scroll}}#menu{flex:0 0 15rem;background:#2bab5f}#menu>*{display:block;text-decoration:none;padding:.6180469716rem 1rem;white-space:nowrap;word-wrap:normal;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}#menu #brand{color:white;background:#218248;font-size:120%;text-align:center;position:relative;margin-bottom:1rem}@media screen and (max-width:544px){#menu #brand{background:#2bab5f;cursor:pointer}#menu #brand:after{position:absolute;color:rgba(0,0,0,.2);right:1rem;content:'>';top:50%;font-size:120%;font-weight:700;transform:translateY(-50%) rotate(90deg)}}#menu.expanded #brand{background:#218248}@media screen and (max-width:544px){#menu.expanded #brand:after{transform:translateY(-50%) rotate(-90deg)}}#menu a{font-size:130%;color:white;transition:background-color .2s;text-shadow:0 0 5px rgba(0,0,0,.4)}#menu a.selected,#menu a:hover{background:#1bd886;text-shadow:0 0 5px rgba(0,0,0,.6)}#menu a.selected{position:relative;box-shadow:0 0 5px rgba(0,0,0,.5)}#menu a:before{content:"▸";padding-right:.5rem;position:relative;top:-.1rem}@media screen and (max-width:544px){#menu a{display:none}}#menu.expanded a{display:block}@media screen and (min-width:545px) and (max-width:1000px){#menu{flex-basis:10rem}#menu #brand{font-size:95%;margin-bottom:.6180469716rem}#menu a{font-size:105%}#menu>*{padding:.3819820591rem .6180469716rem}}#content{flex-grow:1;position:relative;padding:1rem;overflow-y:auto}@media screen and (max-width:544px){#content{padding:.6180469716rem}}#content>*{margin-left:auto;margin-right:auto}#content h1{text-align:center;font-size:2.2806973457em;margin-top:0;margin-bottom:1rem}#content h2{font-size:1.423828125em;margin-bottom:.6180469716rem}#content td,#content th{padding:.3819820591rem}#content tbody th{text-align:right;width:130px;color:#fff}#loader{position:absolute;right:1.618rem;top:1.618rem;transition:opacity .2s;opacity:0}@media screen and (max-width:544px){#loader{top:1rem;right:1rem}}#loader.show{opacity:1}.Box{display:block;max-width:900px;margin-top:1rem;padding:.6180469716rem 1rem;border-radius:3px;background-color:rgba(255,255,255,.07)}@media screen and (max-width:544px){.Box{margin-top:.6180469716rem}}.Box h2,h1+.Box{margin-top:0}.Box.wide{width:initial;max-width:initial}.Box.medium{max-width:1200px}.Modal{position:fixed;width:100%;height:100%;left:0;top:0;right:0;bottom:0;display:flex;justify-content:center;align-items:center;transition:opacity .5s;background:rgba(0,0,0,.65);opacity:0}.Modal.visible{opacity:1}.Modal.hidden{display:none}.Dialog{margin:.6180469716rem;padding:1rem;overflow:hidden;max-width:100%;max-height:100%;flex:0 1 30rem;background:#1c1c1e;border-left:6px solid #217b3a;border-right:6px solid #217b3a;box-shadow:0 0 2px 0 #434349,0 0 6px 0 black;border-radius:6px}.Dialog h1,.Dialog h2{margin-top:0}.Dialog p:last-child{margin-bottom:0}.ErrMsg{position:fixed;bottom:2.617924rem;padding:.6180469716rem 1rem;left:50%;transform:translate(-50%);-webkit-font-smoothing:subpixel-antialiased;-webkit-transform:translateZ(0) scale(1);background:#d03e42;color:white;text-shadow:0 0 2px black;box-shadow:0 0 6px 0 rgba(0,0,0,.6);border-radius:5px;max-width:80%;transition:opacity .5s;opacity:0}@media screen and (max-width:544px){.ErrMsg{width:calc(100% - 1rem)}}.ErrMsg.visible{opacity:1}.ErrMsg.hidden{display:none}.button,button,input[type=button],input[type=reset],input[type=submit]{text-align:center;cursor:pointer;display:inline-block;border-radius:2px;padding:0 .6em;border:0 none;outline:0 none!important;line-height:1.8em;font-size:1.1em;margin-bottom:3px;min-width:5em;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;text-shadow:1.5px 1.5px 2px rgba(0,0,0,.8)}.button:active,button:active,input[type=button]:active,input[type=reset]:active,input[type=submit]:active{position:relative;top:2px}.button.narrow,button.narrow,input[type=button].narrow,input[type=reset].narrow,input[type=submit].narrow{min-width:initial}.btn-green,input[type=submit]{background-color:#2ca94b;box-shadow:0 3px 0 #1d7032;text-decoration:none!important}.btn-green,.btn-green:link,.btn-green:visited,input[type=submit],input[type=submit]:link,input[type=submit]:visited{color:#FEFEFE}.btn-green.active,.btn-green.selected,.btn-green:active,.btn-green:hover,input[type=submit].active,input[type=submit].selected,input[type=submit]:active,input[type=submit]:hover{background-color:#28ba5c;color:#FEFEFE}.btn-green.active,.btn-green.selected,.btn-green:hover,input[type=submit].active,input[type=submit].selected,input[type=submit]:hover{box-shadow:0 3px 0 #1a773b}.btn-green:active,input[type=submit]:active{box-shadow:0 1px 0 #1a773b}.btn-red,input[type=reset]{background-color:#D04E51;box-shadow:0 3px 0 #aa2d30;text-decoration:none!important}.btn-red,.btn-red:link,.btn-red:visited,input[type=reset],input[type=reset]:link,input[type=reset]:visited{color:#FEFEFE}.btn-red.active,.btn-red.selected,.btn-red:active,.btn-red:hover,input[type=reset].active,input[type=reset].selected,input[type=reset]:active,input[type=reset]:hover{background-color:#d4403f;color:#FEFEFE}.btn-red.active,.btn-red.selected,.btn-red:hover,input[type=reset].active,input[type=reset].selected,input[type=reset]:hover{box-shadow:0 3px 0 #9e2423}.btn-red:active,input[type=reset]:active{box-shadow:0 1px 0 #9e2423}.btn-blue{background-color:#3983cd;box-shadow:0 3px 0 #265f98;text-decoration:none!important}.btn-blue,.btn-blue:link,.btn-blue:visited{color:#FEFEFE}.btn-blue.active,.btn-blue.selected,.btn-blue:active,.btn-blue:hover{background-color:#2076C6;color:#FEFEFE}.btn-blue.active,.btn-blue.selected,.btn-blue:hover{box-shadow:0 3px 0 #154c80}.btn-blue:active{box-shadow:0 1px 0 #154c80}input[type=number],input[type=password],input[type=text],select,textarea{border:0 none;border-bottom:2px solid #217b3a;background-color:#303030;color:#fff;padding:6px;line-height:1em;outline:0 none!important;-moz-outline:0 none!important;font-weight:400}input[type=number]:focus,input[type=number]:hover,input[type=password]:focus,input[type=password]:hover,input[type=text]:focus,input[type=text]:hover,select:focus,select:hover,textarea:focus,textarea:hover{border-bottom-color:#28bc65}input[type=number],input[type=password],input[type=text],textarea{-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text;cursor:text}textarea{font-family:monospace;line-height:1.2em;display:block}form{border:0 none;margin:0;padding:0;text-decoration:none}input[type=number],input[type=password],input[type=text],label.select-wrap,select,textarea{width:250px}form .Row{vertical-align:middle;margin:14px auto;text-align:left;display:flex;flex-direction:row}form .Row:first-child{margin-top:0}form .Row:last-child{margin-bottom:0}form .Row .spacer{width:130px}@media screen and (max-width:544px){form .Row .spacer{display:none}}form .Row.buttons .button,form .Row.buttons input{margin-right:.6180469716rem}form .Row.centered{justify-content:center}form .Row.message{font-size:1em;text-shadow:1px 1px 3px black;text-align:center}form .Row.message.error{color:crimson}form .Row.message.ok{color:#0fe851}form .Row.separator{padding-top:14px;border-top:2px solid rgba(255,255,255,.1)}form .Row textarea{display:inline-block;vertical-align:top;min-height:10rem;flex-grow:1;resize:vertical}form .Row label{font-weight:700;color:#fff;text-shadow:1px 1px 3px black;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}form .Row .checkbox-wrap,form .Row label{display:inline-block;width:130px;text-align:right;padding:8px;align-self:flex-start}form .Row .checkbox-wrap input[type=checkbox]{margin:auto;width:auto;height:auto}form .Row .checkbox-wrap+label{width:250px;padding-left:0;text-align:left;cursor:pointer}@media screen and (max-width:544px){form .Row{flex-direction:column}form .Row.buttons,form .Row.centered{flex-direction:row}form .Row.buttons{justify-content:center}form .Row.buttons :last-child{margin-right:0}form .Row label{padding-left:0;text-align:left;width:auto}form .Row .checkbox-wrap{order:1;text-align:left;padding-bottom:0;border-radius:.4px;width:auto}form .Row .checkbox-wrap+label{width:auto}form .Row input[type=number],form .Row input[type=password],form .Row input[type=text],form .Row textarea{width:100%}}form span.required{color:red}.RadioGroup{display:inline-block;line-height:1.5em;vertical-align:middle}.RadioGroup label{width:auto;text-align:left;cursor:pointer;font-weight:400}.RadioGroup input[type=radio]{vertical-align:middle;margin:0 0 0 5px}@media screen and (-webkit-min-device-pixel-ratio:0){select{padding-right:18px}}select{-webkit-appearance:none;-moz-appearance:none;appearance:none;cursor:pointer;line-height:1.4em;padding:3.5px;padding-right:1em}select:-moz-focusring{color:transparent;text-shadow:0 0 0 #fff}select option{background:#303030}label.select-wrap{position:relative;display:inline!important;margin:0!important;padding:0!important;width:auto!important}label.select-wrap:after{content:'<>';font-family:Consolas,monospace;font-weight:700;color:#28bc65;top:50%;transform:translateY(-50%) rotate(90deg);right:2px;position:absolute;z-index:100;pointer-events:none}#ap-list{-webkit-column-count:3;-moz-column-count:3;column-count:3;-webkit-column-gap:0;-moz-column-gap:0;column-gap:0;margin:0 -.2360828548rem}@media screen and (min-width:545px) and (max-width:1000px){#ap-list{-webkit-column-count:2;-moz-column-count:2;column-count:2}}@media screen and (max-width:544px){#ap-list{-webkit-column-count:1;-moz-column-count:1;column-count:1}}#ap-loader{background:rgba(255,255,255,.1);border-radius:5px;padding:.3819820591rem;margin-bottom:.3819820591rem}#ap-box{padding-bottom:.3819820591rem}#psk-modal form{display:flex;align-items:center;margin:.3819820591rem}#psk-modal form>*{margin-left:.3819820591rem;margin-right:.3819820591rem}#psk-modal form>:first-child{margin-left:0}#psk-modal form>:last-child{margin-right:0}#psk-modal form input[type=password]{min-width:5rem}.AP{-webkit-column-break-inside:avoid;page-break-inside:avoid;break-inside:avoid-column;max-width:500px;padding:.2360828548rem}.AP.selected .inner{background:#43de81!important;cursor:default;top:0!important}.AP .inner{cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;position:relative;border-radius:3px;color:#222;background:#afafaf;transition:background-color .5s;display:flex}.AP .inner:active{left:0;top:1px}.AP .inner:hover{background:white}.AP .inner>*{padding:.6180469716rem;white-space:nowrap;word-wrap:normal}.AP .inner .rssi{min-width:2rem;flex:0 0 15%;text-align:right}.AP .inner .rssi:after{padding-left:.090179415rem;content:'%';font-size:.8888888889em}.AP .inner .essid{flex:1 1 70%;min-width:0;text-overflow:ellipsis;overflow:hidden;font-weight:700}.AP .inner .auth{flex:0 0 15%}.page-home #staRSSIperc:after{padding-left:.1459102934rem;content:'%';font-size:.8888888889em}.page-home #staRSSI:after{padding-left:.1459102934rem;content:'dBm';font-size:.8888888889em}#samp-ctrl{display:flex;padding:.3819820591rem;flex-direction:row;justify-content:center;align-items:stretch}@media screen and (max-width:544px){#samp-ctrl{flex-direction:column}}#samp-ctrl>div{margin:.3819820591rem .6180469716rem}#samp-ctrl label{line-height:1.8;font-weight:700}#samp-ctrl input,#samp-ctrl select{width:6em}@media screen and (max-width:544px){#samp-ctrl input,#samp-ctrl select{width:100%}}.Box.chartbox{display:flex;flex-direction:row}@media screen and (max-width:544px){.Box.chartbox{flex-direction:column}}.Box.chartbox .stats{flex:0 1;position:relative}@media screen and (max-width:544px){.Box.chartbox .stats table{margin:0 auto}.Box.chartbox .stats td,.Box.chartbox .stats th{width:50%}}.Box.chartbox .stats td,.Box.chartbox .stats th{white-space:nowrap;word-wrap:normal}.Box.chartbox .stats th sub{font-weight:400}.Box.chartbox .stats td{min-width:100px}.Box.chartbox .stats td:after{font-size:90%;padding-left:.5em}.Box.chartbox .stats #stat-f-s:after{content:"Hz"}.Box.chartbox .stats #stat-i-peak:after,.Box.chartbox .stats #stat-i-rms:after{content:"mA"}.Box.chartbox .stats .ar{position:absolute;bottom:.3819820591rem;width:100%;text-align:center}.Box.chartbox .stats .ar input[type=number]{width:4em}.Box.chartbox .stats .ar input[type=button]{margin-left:.3819820591rem}.page-about .Box{padding-left:1rem;padding-right:1rem}.page-about .Box a{font-weight:700}.page-about #logo{float:right;height:130px}.page-about #logo2{max-width:150px}@media screen and (min-width:545px){.mq-phone{display:none}}@media screen and (max-width:544px){.mq-tablet-min{display:none}}@media screen and (min-width:1001px){.mq-tablet-max{display:none}}@media screen and (max-width:1000px){.mq-normal-min{display:none}} \ No newline at end of file +*,:after,:before{box-sizing:border-box}html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}figure,nav{display:block}canvas,progress{display:inline-block;vertical-align:baseline}[hidden]{display:none}a{background-color:transparent}a:active,a:hover{outline:0}b{font-weight:700}h1,h2{font-size:2em;margin:.67em 0}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}hr{box-sizing:content-box;height:0}pre{overflow:auto}code,pre{font-family:monospace;font-size:1em}button,input,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}legend{border:0;padding:0}textarea{overflow:auto}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}html{box-sizing:border-box}*,:after,:before{box-sizing:inherit}.ct-zoom-rect{fill:rgba(200,100,100,.3);stroke:#ff2b12}.ct-axis-title{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.ct-axis-title,.ct-label{fill:rgba(255,255,255,.8)}.ct-label{color:rgba(255,255,255,.8);font-size:.75rem;line-height:1}.ct-label.ct-horizontal.ct-start{align-items:flex-end;justify-content:flex-start;text-align:left;text-anchor:start}.ct-label.ct-horizontal.ct-end{align-items:flex-start;justify-content:flex-start;text-align:left;text-anchor:start;transform:translate(-4px) rotate(45deg)}.ct-label.ct-vertical.ct-start{align-items:flex-end;justify-content:flex-end;text-align:right;text-anchor:end;transform:translateY(20%)}.ct-label.ct-vertical.ct-end{align-items:flex-end;justify-content:flex-start;text-align:left;text-anchor:start}.ct-chart-bar .ct-label,.ct-chart-line .ct-label{display:flex}.ct-chart-bar .ct-label.ct-horizontal.ct-start{align-items:flex-end;justify-content:center;text-align:center;text-anchor:start}.ct-chart-bar .ct-label.ct-horizontal.ct-end{align-items:flex-start;justify-content:center;text-align:center;text-anchor:start}.ct-chart-bar.ct-horizontal-bars .ct-label.ct-horizontal.ct-start{align-items:flex-end;justify-content:flex-start;text-align:left;text-anchor:start}.ct-chart-bar.ct-horizontal-bars .ct-label.ct-horizontal.ct-end{align-items:flex-start;justify-content:flex-start;text-align:left;text-anchor:start}.ct-chart-bar.ct-horizontal-bars .ct-label.ct-vertical.ct-start{align-items:center;justify-content:flex-end;text-align:right;text-anchor:end}.ct-chart-bar.ct-horizontal-bars .ct-label.ct-vertical.ct-end{align-items:center;justify-content:flex-start;text-align:left;text-anchor:end}.ct-grid{stroke:rgba(255,255,255,.3);stroke-width:1px;stroke-dasharray:2px}.ct-point{stroke-width:4px;stroke-linecap:round}.ct-line{fill:none;stroke-width:2px}.ct-with-area .ct-line{stroke-width:1px}.ct-area{stroke:none;fill-opacity:.3}.ct-bar{fill:none;stroke-width:10px}.ct-series-a .ct-bar,.ct-series-a .ct-line,.ct-series-a .ct-point{stroke:#f05b4f}.ct-series-a .ct-area,.ct-series-a .ct-slice-pie{fill:#f05b4f}.ct-series-b .ct-bar,.ct-series-b .ct-line,.ct-series-b .ct-point{stroke:#6188e2}.ct-series-b .ct-area,.ct-series-b .ct-slice-pie{fill:#6188e2}.ct-series-c .ct-bar,.ct-series-c .ct-line,.ct-series-c .ct-point{stroke:#59922b}.ct-series-c .ct-area,.ct-series-c .ct-slice-pie{fill:#59922b}.ct-series-d .ct-bar,.ct-series-d .ct-line,.ct-series-d .ct-point{stroke:#eacf7d}.ct-series-d .ct-area,.ct-series-d .ct-slice-pie{fill:#eacf7d}.ct-series-e .ct-bar,.ct-series-e .ct-line,.ct-series-e .ct-point{stroke:#a748ca}.ct-series-e .ct-area,.ct-series-e .ct-slice-pie{fill:#a748ca}.ct-wide{display:block;position:relative;width:100%}.ct-wide:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:62.5%}.ct-wide:after{content:"";display:table;clear:both}.ct-wide>svg{display:block;position:absolute;top:0;left:0}.ct-narrow{display:block;position:relative;width:100%}.ct-narrow:before{display:block;float:left;content:"";width:0;height:0;padding-bottom:66.6666666667%}.ct-narrow:after{content:"";display:table;clear:both}.ct-narrow>svg{display:block;position:absolute;top:0;left:0}.center{text-align:center}.invis{visibility:hidden}.hidden{display:none}html{font-family:Arial,sans-serif;color:#D0D0D0;background:#131315}body,html{border:0 none;margin:0;padding:0;text-decoration:none;width:100%;height:100%;overflow:hidden}a,a:link,a:visited{color:#5abfff;text-decoration:none}a:hover{color:#5abfff;text-decoration:underline}#outer{display:flex;position:absolute;width:100%;height:100%;left:0;right:0;top:0;bottom:0;overflow:hidden;flex-direction:row}@media screen and (max-width:544px){#outer{display:block;overflow-y:scroll}}#menu{flex:0 0 15rem;background:#2bab5f}#menu>*{display:block;text-decoration:none;padding:.6180469716rem 1rem;white-space:nowrap;word-wrap:normal;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}#menu #brand{color:white;background:#218248;font-size:120%;text-align:center;position:relative;margin-bottom:1rem}@media screen and (max-width:544px){#menu #brand{background:#2bab5f;cursor:pointer}#menu #brand:after{position:absolute;color:rgba(0,0,0,.2);right:1rem;content:'>';top:50%;font-size:120%;font-weight:700;transform:translateY(-50%) rotate(90deg)}}#menu.expanded #brand{background:#218248}@media screen and (max-width:544px){#menu.expanded #brand:after{transform:translateY(-50%) rotate(-90deg)}}#menu a{font-size:130%;color:white;transition:background-color .2s;text-shadow:0 0 5px rgba(0,0,0,.4)}#menu a.selected,#menu a:hover{background:#1bd886;text-shadow:0 0 5px rgba(0,0,0,.6)}#menu a.selected{position:relative;box-shadow:0 0 5px rgba(0,0,0,.5)}#menu a:before{content:"▸";padding-right:.5rem;position:relative;top:-.1rem}@media screen and (max-width:544px){#menu a{display:none}}#menu.expanded a{display:block}@media screen and (min-width:545px) and (max-width:1000px){#menu{flex-basis:10rem}#menu #brand{font-size:95%;margin-bottom:.6180469716rem}#menu a{font-size:105%}#menu>*{padding:.3819820591rem .6180469716rem}}#content{flex-grow:1;position:relative;padding:1rem;overflow-y:auto}@media screen and (max-width:544px){#content{padding:.6180469716rem}}#content>*{margin-left:auto;margin-right:auto}#content h1{text-align:center;font-size:2.2806973457em;margin-top:0;margin-bottom:1rem}#content h2{font-size:1.423828125em;margin-bottom:.6180469716rem}#content td,#content th{padding:.3819820591rem}#content tbody th{text-align:right;width:130px;color:#fff}#loader{position:absolute;right:1.618rem;top:1.618rem;transition:opacity .2s;opacity:0}@media screen and (max-width:544px){#loader{top:1rem;right:1rem}}#loader.show{opacity:1}.Box{display:block;max-width:900px;margin-top:1rem;padding:.6180469716rem 1rem;border-radius:3px;background-color:rgba(255,255,255,.07)}@media screen and (max-width:544px){.Box{margin-top:.6180469716rem}}.Box h2,h1+.Box{margin-top:0}.Box.wide{width:initial;max-width:initial}.Box.medium{max-width:1200px}.Modal{position:fixed;width:100%;height:100%;left:0;top:0;right:0;bottom:0;display:flex;justify-content:center;align-items:center;transition:opacity .5s;background:rgba(0,0,0,.65);opacity:0}.Modal.visible{opacity:1}.Modal.hidden{display:none}.Dialog{margin:.6180469716rem;padding:1rem;overflow:hidden;max-width:100%;max-height:100%;flex:0 1 30rem;background:#1c1c1e;border-left:6px solid #217b3a;border-right:6px solid #217b3a;box-shadow:0 0 2px 0 #434349,0 0 6px 0 black;border-radius:6px}.Dialog h1,.Dialog h2{margin-top:0}.Dialog p:last-child{margin-bottom:0}.ErrMsg{position:fixed;bottom:2.617924rem;padding:.6180469716rem 1rem;left:50%;transform:translate(-50%);-webkit-font-smoothing:subpixel-antialiased;-webkit-transform:translateZ(0) scale(1);background:#d03e42;color:white;text-shadow:0 0 2px black;box-shadow:0 0 6px 0 rgba(0,0,0,.6);border-radius:5px;max-width:80%;transition:opacity .5s;opacity:0}@media screen and (max-width:544px){.ErrMsg{width:calc(100% - 1rem)}}.ErrMsg.visible{opacity:1}.ErrMsg.hidden{display:none}.button,button,input[type=button],input[type=reset],input[type=submit]{text-align:center;cursor:pointer;display:inline-block;border-radius:2px;padding:0 .6em;border:0 none;outline:0 none!important;line-height:1.8em;font-size:1.1em;margin-bottom:3px;min-width:5em;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;text-shadow:1.5px 1.5px 2px rgba(0,0,0,.8)}.button:active,button:active,input[type=button]:active,input[type=reset]:active,input[type=submit]:active{position:relative;top:2px}.button.narrow,button.narrow,input[type=button].narrow,input[type=reset].narrow,input[type=submit].narrow{min-width:initial}.btn-green,input[type=submit]{background-color:#2ca94b;box-shadow:0 3px 0 #1d7032;text-decoration:none!important}.btn-green,.btn-green:link,.btn-green:visited,input[type=submit],input[type=submit]:link,input[type=submit]:visited{color:#FEFEFE}.btn-green.active,.btn-green.selected,.btn-green:active,.btn-green:hover,input[type=submit].active,input[type=submit].selected,input[type=submit]:active,input[type=submit]:hover{background-color:#28ba5c;color:#FEFEFE}.btn-green.active,.btn-green.selected,.btn-green:hover,input[type=submit].active,input[type=submit].selected,input[type=submit]:hover{box-shadow:0 3px 0 #1a773b}.btn-green:active,input[type=submit]:active{box-shadow:0 1px 0 #1a773b}.btn-red,input[type=reset]{background-color:#D04E51;box-shadow:0 3px 0 #aa2d30;text-decoration:none!important}.btn-red,.btn-red:link,.btn-red:visited,input[type=reset],input[type=reset]:link,input[type=reset]:visited{color:#FEFEFE}.btn-red.active,.btn-red.selected,.btn-red:active,.btn-red:hover,input[type=reset].active,input[type=reset].selected,input[type=reset]:active,input[type=reset]:hover{background-color:#d4403f;color:#FEFEFE}.btn-red.active,.btn-red.selected,.btn-red:hover,input[type=reset].active,input[type=reset].selected,input[type=reset]:hover{box-shadow:0 3px 0 #9e2423}.btn-red:active,input[type=reset]:active{box-shadow:0 1px 0 #9e2423}.btn-blue{background-color:#3983cd;box-shadow:0 3px 0 #265f98;text-decoration:none!important}.btn-blue,.btn-blue:link,.btn-blue:visited{color:#FEFEFE}.btn-blue.active,.btn-blue.selected,.btn-blue:active,.btn-blue:hover{background-color:#2076C6;color:#FEFEFE}.btn-blue.active,.btn-blue.selected,.btn-blue:hover{box-shadow:0 3px 0 #154c80}.btn-blue:active{box-shadow:0 1px 0 #154c80}input[type=number],input[type=password],input[type=text],select,textarea{border:0 none;border-bottom:2px solid #217b3a;background-color:#303030;color:#fff;padding:6px;line-height:1em;outline:0 none!important;-moz-outline:0 none!important;font-weight:400}input[type=number]:focus,input[type=number]:hover,input[type=password]:focus,input[type=password]:hover,input[type=text]:focus,input[type=text]:hover,select:focus,select:hover,textarea:focus,textarea:hover{border-bottom-color:#28bc65}input[type=number],input[type=password],input[type=text],textarea{-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text;cursor:text}textarea{font-family:monospace;line-height:1.2em;display:block}form{border:0 none;margin:0;padding:0;text-decoration:none}input[type=number],input[type=password],input[type=text],label.select-wrap,select,textarea{width:250px}form .Row{vertical-align:middle;margin:14px auto;text-align:left;display:flex;flex-direction:row}form .Row:first-child{margin-top:0}form .Row:last-child{margin-bottom:0}form .Row .spacer{width:130px}@media screen and (max-width:544px){form .Row .spacer{display:none}}form .Row.buttons .button,form .Row.buttons input{margin-right:.6180469716rem}form .Row.centered{justify-content:center}form .Row.message{font-size:1em;text-shadow:1px 1px 3px black;text-align:center}form .Row.message.error{color:crimson}form .Row.message.ok{color:#0fe851}form .Row.separator{padding-top:14px;border-top:2px solid rgba(255,255,255,.1)}form .Row textarea{display:inline-block;vertical-align:top;min-height:10rem;flex-grow:1;resize:vertical}form .Row label{font-weight:700;color:#fff;text-shadow:1px 1px 3px black;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}form .Row .checkbox-wrap,form .Row label{display:inline-block;width:130px;text-align:right;padding:8px;align-self:flex-start}form .Row .checkbox-wrap input[type=checkbox]{margin:auto;width:auto;height:auto}form .Row .checkbox-wrap+label{width:250px;padding-left:0;text-align:left;cursor:pointer}@media screen and (max-width:544px){form .Row{flex-direction:column}form .Row.buttons,form .Row.centered{flex-direction:row}form .Row.buttons{justify-content:center}form .Row.buttons :last-child{margin-right:0}form .Row label{padding-left:0;text-align:left;width:auto}form .Row .checkbox-wrap{order:1;text-align:left;padding-bottom:0;border-radius:.4px;width:auto}form .Row .checkbox-wrap+label{width:auto}form .Row input[type=number],form .Row input[type=password],form .Row input[type=text],form .Row textarea{width:100%}}form span.required{color:red}.RadioGroup{display:inline-block;line-height:1.5em;vertical-align:middle}.RadioGroup label{width:auto;text-align:left;cursor:pointer;font-weight:400}.RadioGroup input[type=radio]{vertical-align:middle;margin:0 0 0 5px}@media screen and (-webkit-min-device-pixel-ratio:0){select{padding-right:18px}}select{-webkit-appearance:none;-moz-appearance:none;appearance:none;cursor:pointer;line-height:1.4em;padding:3.5px;padding-right:1em}select:-moz-focusring{color:transparent;text-shadow:0 0 0 #fff}select option{background:#303030}label.select-wrap{position:relative;display:inline!important;margin:0!important;padding:0!important;width:auto!important}label.select-wrap:after{content:'<>';font-family:Consolas,monospace;font-weight:700;color:#28bc65;top:50%;transform:translateY(-50%) rotate(90deg);right:2px;position:absolute;z-index:100;pointer-events:none}#ap-list{-webkit-column-count:3;-moz-column-count:3;column-count:3;-webkit-column-gap:0;-moz-column-gap:0;column-gap:0;margin:0 -.2360828548rem}@media screen and (min-width:545px) and (max-width:1000px){#ap-list{-webkit-column-count:2;-moz-column-count:2;column-count:2}}@media screen and (max-width:544px){#ap-list{-webkit-column-count:1;-moz-column-count:1;column-count:1}}#ap-loader{background:rgba(255,255,255,.1);border-radius:5px;padding:.3819820591rem;margin-bottom:.3819820591rem}#ap-box{padding-bottom:.3819820591rem}#psk-modal form{display:flex;align-items:center;margin:.3819820591rem}#psk-modal form>*{margin-left:.3819820591rem;margin-right:.3819820591rem}#psk-modal form>:first-child{margin-left:0}#psk-modal form>:last-child{margin-right:0}#psk-modal form input[type=password]{min-width:5rem}.AP{-webkit-column-break-inside:avoid;page-break-inside:avoid;break-inside:avoid-column;max-width:500px;padding:.2360828548rem}.AP.selected .inner{background:#43de81!important;cursor:default;top:0!important}.AP .inner{cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;position:relative;border-radius:3px;color:#222;background:#afafaf;transition:background-color .5s;display:flex}.AP .inner:active{left:0;top:1px}.AP .inner:hover{background:white}.AP .inner>*{padding:.6180469716rem;white-space:nowrap;word-wrap:normal}.AP .inner .rssi{min-width:2rem;flex:0 0 15%;text-align:right}.AP .inner .rssi:after{padding-left:.090179415rem;content:'%';font-size:.8888888889em}.AP .inner .essid{flex:1 1 70%;min-width:0;text-overflow:ellipsis;overflow:hidden;font-weight:700}.AP .inner .auth{flex:0 0 15%}.page-home #staRSSIperc:after{padding-left:.1459102934rem;content:'%';font-size:.8888888889em}.page-home #staRSSI:after{padding-left:.1459102934rem;content:'dBm';font-size:.8888888889em}#samp-ctrl{display:flex;padding:.3819820591rem;flex-direction:row;justify-content:center;align-items:stretch}@media screen and (max-width:544px){#samp-ctrl{flex-direction:column}}#samp-ctrl>div{margin:.3819820591rem .6180469716rem}#samp-ctrl label{line-height:1.8;font-weight:700}#samp-ctrl input,#samp-ctrl select{width:6em}@media screen and (max-width:544px){#samp-ctrl input,#samp-ctrl select{width:100%}}.Box.chartbox{display:flex;flex-direction:row}@media screen and (max-width:544px){.Box.chartbox{flex-direction:column}}.Box.chartbox .stats{flex:0 1;position:relative;padding-bottom:50px}@media screen and (max-width:544px){.Box.chartbox .stats table{margin:0 auto}.Box.chartbox .stats td,.Box.chartbox .stats th{width:50%}}.Box.chartbox .stats td,.Box.chartbox .stats th{white-space:nowrap;word-wrap:normal}.Box.chartbox .stats th sub{font-weight:400}.Box.chartbox .stats td{min-width:100px}.Box.chartbox .stats td:after{font-size:90%;padding-left:.5em}.Box.chartbox .stats #stat-f-s:after{content:"Hz"}.Box.chartbox .stats #stat-i-peak:after,.Box.chartbox .stats #stat-i-rms:after{content:"mA"}.Box.chartbox .stats .ar{position:absolute;bottom:.3819820591rem;width:100%;text-align:center}.Box.chartbox .stats .ar input[type=number]{width:4em}.Box.chartbox .stats .ar input[type=button]{margin-left:.3819820591rem}.page-about .Box{padding-left:1rem;padding-right:1rem}.page-about .Box a{font-weight:700}.page-about #logo{float:right;height:130px}.page-about #logo2{max-width:150px}@media screen and (min-width:545px){.mq-phone{display:none}}@media screen and (max-width:544px){.mq-tablet-min{display:none}}@media screen and (min-width:1001px){.mq-tablet-max{display:none}}@media screen and (max-width:1000px){.mq-normal-min{display:none}} \ No newline at end of file diff --git a/html_src/css/app.css.map b/html_src/css/app.css.map index 56f1178..b57e468 100644 --- a/html_src/css/app.css.map +++ b/html_src/css/app.css.map @@ -1 +1 @@ -{"version":3,"sources":["app.css","_normalize.scss","lib/neat/grid/_box-sizing.scss","lib/chartist/_chartist.scss","lib/chartist/_chartist-settings.scss","utils/_pointer.scss","app.scss","layout/_base.scss","utils/_misc.scss","layout/_outer-wrap.scss","lib/neat/grid/_media.scss","layout/_menu.scss","lib/bourbon/functions/_modular-scale.scss","layout/_content.scss","layout/_box.scss","layout/_modal.scss","lib/bourbon/addons/_prefixer.scss","form/_buttons.scss","form/_fancy_button_mixins.scss","form/_form_elements.scss","form/_select.scss","form/_form_layout.scss","pages/_wifi.scss","pages/_home.scss","pages/_wfm.scss","pages/_about.scss"],"names":[],"mappings":"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","file":"app.css","sourcesContent":["@charset \"UTF-8\";\n/* normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */\n/**\n * 1. Set default font family to sans-serif.\n * 2. Prevent iOS and IE text size adjust after device orientation change,\n * without disabling user zoom.\n */\n*, *:before, *:after {\n box-sizing: border-box; }\n\nhtml {\n font-family: sans-serif;\n /* 1 */\n -ms-text-size-adjust: 100%;\n /* 2 */\n -webkit-text-size-adjust: 100%;\n /* 2 */ }\n\n/**\n * Remove default margin.\n */\nbody {\n margin: 0; }\n\n/* HTML5 display definitions\n ========================================================================== */\n/**\n * Correct `block` display not defined for any HTML5 element in IE 8/9.\n * Correct `block` display not defined for `details` or `summary` in IE 10/11\n * and Firefox.\n * Correct `block` display not defined for `main` in IE 11.\n */\nfigure,\nnav {\n display: block; }\n\n/**\n * 1. Correct `inline-block` display not defined in IE 8/9.\n * 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera.\n */\ncanvas,\nprogress {\n display: inline-block;\n /* 1 */\n vertical-align: baseline;\n /* 2 */ }\n\n/**\n * Prevent modern browsers from displaying `audio` without controls.\n * Remove excess height in iOS 5 devices.\n */\n/**\n * Address `[hidden]` styling not present in IE 8/9/10.\n * Hide the `template` element in IE 8/9/10/11, Safari, and Firefox < 22.\n */\n[hidden] {\n display: none; }\n\n/* Links\n ========================================================================== */\n/**\n * Remove the gray background color from active links in IE 10.\n */\na {\n background-color: transparent; }\n\n/**\n * Improve readability of focused elements when they are also in an\n * active/hover state.\n */\na:active,\na:hover {\n outline: 0; }\n\n/* Text-level semantics\n ========================================================================== */\n/**\n * Address styling not present in IE 8/9/10/11, Safari, and Chrome.\n */\n/**\n * Address style set to `bolder` in Firefox 4+, Safari, and Chrome.\n */\nb {\n font-weight: bold; }\n\n/**\n * Address styling not present in Safari and Chrome.\n */\n/**\n * Address variable `h1` font-size and margin within `section` and `article`\n * contexts in Firefox 4+, Safari, and Chrome.\n */\nh1 {\n font-size: 2em;\n margin: 0.67em 0; }\n\nh2 {\n font-size: 2em;\n margin: 0.67em 0; }\n\n/**\n * Address styling not present in IE 8/9.\n */\n/**\n * Address inconsistent and variable font size in all browsers.\n */\nsmall {\n font-size: 80%; }\n\n/**\n * Prevent `sub` and `sup` affecting `line-height` in all browsers.\n */\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline; }\n\nsup {\n top: -0.5em; }\n\nsub {\n bottom: -0.25em; }\n\n/* Embedded content\n ========================================================================== */\n/**\n * Remove border when inside `a` element in IE 8/9/10.\n */\nimg {\n border: 0; }\n\n/**\n * Correct overflow not hidden in IE 9/10/11.\n */\nsvg:not(:root) {\n overflow: hidden; }\n\n/* Grouping content\n ========================================================================== */\n/**\n * Address margin not present in IE 8/9 and Safari.\n */\n/**\n * Address differences between Firefox and other browsers.\n */\nhr {\n box-sizing: content-box;\n height: 0; }\n\n/**\n * Contain overflow in all browsers.\n */\npre {\n overflow: auto; }\n\n/**\n * Address odd `em`-unit font size rendering in all browsers.\n */\ncode,\npre {\n font-family: monospace;\n font-size: 1em; }\n\n/* Forms\n ========================================================================== */\n/**\n * Known limitation: by default, Chrome and Safari on OS X allow very limited\n * styling of `select`, unless a `border` property is set.\n */\n/**\n * 1. Correct color not being inherited.\n * Known issue: affects color of disabled elements.\n * 2. Correct font properties not being inherited.\n * 3. Address margins set differently in Firefox 4+, Safari, and Chrome.\n */\nbutton,\ninput,\nselect,\ntextarea {\n color: inherit;\n /* 1 */\n font: inherit;\n /* 2 */\n margin: 0;\n /* 3 */ }\n\n/**\n * Address `overflow` set to `hidden` in IE 8/9/10/11.\n */\nbutton {\n overflow: visible; }\n\n/**\n * Address inconsistent `text-transform` inheritance for `button` and `select`.\n * All other form control elements do not inherit `text-transform` values.\n * Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera.\n * Correct `select` style inheritance in Firefox.\n */\nbutton,\nselect {\n text-transform: none; }\n\n/**\n * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`\n * and `video` controls.\n * 2. Correct inability to style clickable `input` types in iOS.\n * 3. Improve usability and consistency of cursor style between image-type\n * `input` and others.\n */\nbutton,\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n -webkit-appearance: button;\n /* 2 */\n cursor: pointer;\n /* 3 */ }\n\n/**\n * Re-set default cursor for disabled elements.\n */\nbutton[disabled],\nhtml input[disabled] {\n cursor: default; }\n\n/**\n * Remove inner padding and border in Firefox 4+.\n */\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n border: 0;\n padding: 0; }\n\n/**\n * Address Firefox 4+ setting `line-height` on `input` using `!important` in\n * the UA stylesheet.\n */\ninput {\n line-height: normal; }\n\n/**\n * It's recommended that you don't attempt to style these elements.\n * Firefox's implementation doesn't respect box-sizing, padding, or width.\n *\n * 1. Address box sizing set to `content-box` in IE 8/9/10.\n * 2. Remove excess padding in IE 8/9/10.\n */\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n box-sizing: border-box;\n /* 1 */\n padding: 0;\n /* 2 */ }\n\n/**\n * Fix the cursor style for Chrome's increment/decrement buttons. For certain\n * `font-size` values of the `input`, it causes the cursor style of the\n * decrement button to change from `default` to `text`.\n */\n/**\n * 1. Address `appearance` set to `searchfield` in Safari and Chrome.\n * 2. Address `box-sizing` set to `border-box` in Safari and Chrome.\n */\n/**\n * Remove inner padding and search cancel button in Safari and Chrome on OS X.\n * Safari (but not Chrome) clips the cancel button when the search input has\n * padding (and `textfield` appearance).\n */\n/**\n * Define consistent border, margin, and padding.\n */\n/**\n * 1. Correct `color` not being inherited in IE 8/9/10/11.\n * 2. Remove padding so people aren't caught out if they zero out fieldsets.\n */\nlegend {\n border: 0;\n /* 1 */\n padding: 0;\n /* 2 */ }\n\n/**\n * Remove default vertical scrollbar in IE 8/9/10/11.\n */\ntextarea {\n overflow: auto; }\n\n/**\n * Don't inherit the `font-weight` (applied by a rule above).\n * NOTE: the default cannot safely be changed in Chrome and Safari on OS X.\n */\n/* Tables\n ========================================================================== */\n/**\n * Remove most spacing between table cells.\n */\ntable {\n border-collapse: collapse;\n border-spacing: 0; }\n\ntd,\nth {\n padding: 0; }\n\nhtml {\n box-sizing: border-box; }\n\n*, *::after, *::before {\n box-sizing: inherit; }\n\n.ct-zoom-rect {\n fill: rgba(200, 100, 100, 0.3);\n stroke: #ff2b12; }\n\n.ct-axis-title {\n fill: rgba(255, 255, 255, 0.8);\n -webkit-user-select: none;\n -khtml-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none; }\n\n.ct-label {\n fill: rgba(255, 255, 255, 0.8);\n color: rgba(255, 255, 255, 0.8);\n font-size: 0.75rem;\n line-height: 1; }\n .ct-label.ct-horizontal.ct-start {\n align-items: flex-end;\n justify-content: flex-start;\n text-align: left;\n text-anchor: start; }\n .ct-label.ct-horizontal.ct-end {\n align-items: flex-start;\n justify-content: flex-start;\n text-align: left;\n text-anchor: start;\n transform: translate(-4px, 0%) rotate(45deg); }\n .ct-label.ct-vertical.ct-start {\n align-items: flex-end;\n justify-content: flex-end;\n text-align: right;\n text-anchor: end;\n transform: translate(0, 20%); }\n .ct-label.ct-vertical.ct-end {\n align-items: flex-end;\n justify-content: flex-start;\n text-align: left;\n text-anchor: start; }\n\n.ct-chart-line .ct-label,\n.ct-chart-bar .ct-label {\n display: flex; }\n\n.ct-chart-bar .ct-label.ct-horizontal.ct-start {\n align-items: flex-end;\n justify-content: center;\n text-align: center;\n text-anchor: start; }\n\n.ct-chart-bar .ct-label.ct-horizontal.ct-end {\n align-items: flex-start;\n justify-content: center;\n text-align: center;\n text-anchor: start; }\n\n.ct-chart-bar.ct-horizontal-bars .ct-label.ct-horizontal.ct-start {\n align-items: flex-end;\n justify-content: flex-start;\n text-align: left;\n text-anchor: start; }\n\n.ct-chart-bar.ct-horizontal-bars .ct-label.ct-horizontal.ct-end {\n align-items: flex-start;\n justify-content: flex-start;\n text-align: left;\n text-anchor: start; }\n\n.ct-chart-bar.ct-horizontal-bars .ct-label.ct-vertical.ct-start {\n align-items: center;\n justify-content: flex-end;\n text-align: right;\n text-anchor: end; }\n\n.ct-chart-bar.ct-horizontal-bars .ct-label.ct-vertical.ct-end {\n align-items: center;\n justify-content: flex-start;\n text-align: left;\n text-anchor: end; }\n\n.ct-grid {\n stroke: rgba(255, 255, 255, 0.3);\n stroke-width: 1px;\n stroke-dasharray: 2px; }\n\n.ct-point {\n stroke-width: 4px;\n stroke-linecap: round; }\n\n.ct-line {\n fill: none;\n stroke-width: 2px; }\n\n.ct-with-area .ct-line {\n stroke-width: 1px; }\n\n.ct-area {\n stroke: none;\n fill-opacity: 0.3; }\n\n.ct-bar {\n fill: none;\n stroke-width: 10px; }\n\n.ct-series-a .ct-point, .ct-series-a .ct-line, .ct-series-a .ct-bar {\n stroke: #f05b4f; }\n\n.ct-series-a .ct-slice-pie, .ct-series-a .ct-area {\n fill: #f05b4f; }\n\n.ct-series-b .ct-point, .ct-series-b .ct-line, .ct-series-b .ct-bar {\n stroke: #6188e2; }\n\n.ct-series-b .ct-slice-pie, .ct-series-b .ct-area {\n fill: #6188e2; }\n\n.ct-series-c .ct-point, .ct-series-c .ct-line, .ct-series-c .ct-bar {\n stroke: #59922b; }\n\n.ct-series-c .ct-slice-pie, .ct-series-c .ct-area {\n fill: #59922b; }\n\n.ct-series-d .ct-point, .ct-series-d .ct-line, .ct-series-d .ct-bar {\n stroke: #eacf7d; }\n\n.ct-series-d .ct-slice-pie, .ct-series-d .ct-area {\n fill: #eacf7d; }\n\n.ct-series-e .ct-point, .ct-series-e .ct-line, .ct-series-e .ct-bar {\n stroke: #a748ca; }\n\n.ct-series-e .ct-slice-pie, .ct-series-e .ct-area {\n fill: #a748ca; }\n\n.ct-wide {\n display: block;\n position: relative;\n width: 100%; }\n .ct-wide:before {\n display: block;\n float: left;\n content: \"\";\n width: 0;\n height: 0;\n padding-bottom: 62.5%; }\n .ct-wide:after {\n content: \"\";\n display: table;\n clear: both; }\n .ct-wide > svg {\n display: block;\n position: absolute;\n top: 0;\n left: 0; }\n\n.ct-narrow {\n display: block;\n position: relative;\n width: 100%; }\n .ct-narrow:before {\n display: block;\n float: left;\n content: \"\";\n width: 0;\n height: 0;\n padding-bottom: 66.6666666667%; }\n .ct-narrow:after {\n content: \"\";\n display: table;\n clear: both; }\n .ct-narrow > svg {\n display: block;\n position: absolute;\n top: 0;\n left: 0; }\n\n.center {\n text-align: center; }\n\n.invis {\n visibility: hidden; }\n\n.hidden {\n display: none; }\n\nhtml {\n font-family: Arial, sans-serif;\n color: #D0D0D0;\n background: #131315; }\n\nhtml, body {\n border: 0 none;\n margin: 0;\n padding: 0;\n text-decoration: none;\n width: 100%;\n height: 100%;\n overflow: hidden; }\n\na, a:visited, a:link {\n color: #5abfff;\n text-decoration: none; }\n\na:hover {\n color: #5abfff;\n text-decoration: underline; }\n\n/* Main outer container */\n#outer {\n display: flex;\n position: absolute;\n width: 100%;\n height: 100%;\n left: 0;\n right: 0;\n top: 0;\n bottom: 0;\n overflow: hidden;\n flex-direction: row; }\n\n@media screen and (max-width: 544px) {\n #outer {\n display: block;\n overflow-y: scroll; } }\n\n#menu {\n flex: 0 0 15rem;\n background: #2bab5f; }\n #menu > * {\n display: block;\n text-decoration: none;\n padding: 0.6180469716rem 1rem;\n white-space: nowrap;\n word-wrap: normal;\n -webkit-user-select: none;\n -khtml-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none; }\n #menu #brand {\n color: white;\n background: #218248;\n font-size: 120%;\n text-align: center;\n position: relative;\n margin-bottom: 1rem; }\n @media screen and (max-width: 544px) {\n #menu #brand {\n background: #2bab5f;\n cursor: pointer; }\n #menu #brand:after {\n position: absolute;\n color: rgba(0, 0, 0, 0.2);\n right: 1rem;\n content: '>';\n top: 50%;\n font-size: 120%;\n font-weight: bold;\n transform: translate(0, -50%) rotate(90deg); } }\n #menu.expanded #brand {\n background: #218248; }\n @media screen and (max-width: 544px) {\n #menu.expanded #brand:after {\n transform: translate(0, -50%) rotate(-90deg); } }\n #menu a {\n font-size: 130%;\n color: white;\n transition: background-color 0.2s;\n text-shadow: 0 0 5px rgba(0, 0, 0, 0.4); }\n #menu a:hover, #menu a.selected {\n background: #1bd886;\n text-shadow: 0 0 5px rgba(0, 0, 0, 0.6); }\n #menu a.selected {\n position: relative;\n box-shadow: 0 0 5px rgba(0, 0, 0, 0.5); }\n #menu a:before {\n content: \"▸\";\n padding-right: .5rem;\n position: relative;\n top: -0.1rem; }\n @media screen and (max-width: 544px) {\n #menu a {\n display: none; } }\n #menu.expanded a {\n display: block; }\n @media screen and (min-width: 545px) and (max-width: 1000px) {\n #menu {\n flex-basis: 10rem; }\n #menu #brand {\n font-size: 95%;\n margin-bottom: 0.6180469716rem; }\n #menu a {\n font-size: 105%; }\n #menu > * {\n padding: 0.3819820591rem 0.6180469716rem; } }\n\n#content {\n flex-grow: 1;\n position: relative;\n padding: 1rem;\n overflow-y: auto; }\n @media screen and (max-width: 544px) {\n #content {\n padding: 0.6180469716rem; } }\n #content > * {\n margin-left: auto;\n margin-right: auto; }\n #content h1 {\n text-align: center;\n font-size: 2.2806973457em;\n margin-top: 0;\n margin-bottom: 1rem; }\n #content h2 {\n font-size: 1.423828125em;\n margin-bottom: 0.6180469716rem; }\n #content td, #content th {\n padding: 0.3819820591rem; }\n #content tbody th {\n text-align: right;\n width: 130px;\n color: white; }\n\n#loader {\n position: absolute;\n right: 1.618rem;\n top: 1.618rem;\n transition: opacity .2s;\n opacity: 0; }\n @media screen and (max-width: 544px) {\n #loader {\n top: 1rem;\n right: 1rem; } }\n #loader.show {\n opacity: 1; }\n\n.Box {\n display: block;\n max-width: 900px;\n margin-top: 1rem;\n padding: 0.6180469716rem 1rem;\n border-radius: 3px;\n background-color: rgba(255, 255, 255, 0.07); }\n @media screen and (max-width: 544px) {\n .Box {\n margin-top: 0.6180469716rem; } }\n h1 + .Box {\n margin-top: 0; }\n .Box h2 {\n margin-top: 0; }\n .Box.wide {\n width: initial;\n max-width: initial; }\n .Box.medium {\n max-width: 1200px; }\n\n.Modal {\n position: fixed;\n width: 100%;\n height: 100%;\n left: 0;\n top: 0;\n right: 0;\n bottom: 0;\n display: flex;\n justify-content: center;\n align-items: center;\n transition: opacity .5s;\n background: rgba(0, 0, 0, 0.65);\n opacity: 0; }\n .Modal.visible {\n opacity: 1; }\n .Modal.hidden {\n display: none; }\n\n.Dialog {\n margin: 0.6180469716rem;\n padding: 1rem;\n overflow: hidden;\n max-width: 100%;\n max-height: 100%;\n flex: 0 1 30rem;\n background: #1c1c1e;\n border-left: 6px solid #217b3a;\n border-right: 6px solid #217b3a;\n box-shadow: 0 0 2px 0 #434349, 0 0 6px 0 black;\n border-radius: 6px; }\n .Dialog h1, .Dialog h2 {\n margin-top: 0; }\n .Dialog p:last-child {\n margin-bottom: 0; }\n\n.ErrMsg {\n position: fixed;\n bottom: 2.617924rem;\n padding: 0.6180469716rem 1rem;\n left: 50%;\n -webkit-transform: translate(-50%, 0);\n -moz-transform: translate(-50%, 0);\n -ms-transform: translate(-50%, 0);\n -o-transform: translate(-50%, 0);\n transform: translate(-50%, 0);\n -webkit-font-smoothing: subpixel-antialiased;\n -webkit-transform: translateZ(0) scale(1, 1);\n background: #d03e42;\n color: white;\n text-shadow: 0 0 2px black;\n box-shadow: 0 0 6px 0 rgba(0, 0, 0, 0.6);\n border-radius: 5px;\n max-width: 80%;\n transition: opacity .5s;\n opacity: 0; }\n @media screen and (max-width: 544px) {\n .ErrMsg {\n width: calc(100% - 1rem); } }\n .ErrMsg.visible {\n opacity: 1; }\n .ErrMsg.hidden {\n display: none; }\n\nbutton, input[type=\"button\"], input[type=\"reset\"], input[type=\"submit\"], .button {\n text-align: center;\n cursor: pointer;\n display: inline-block;\n border-radius: 2px;\n padding: 0 0.6em;\n border: 0 none;\n outline: 0 none !important;\n line-height: 1.8em;\n font-size: 1.1em;\n margin-bottom: 3px;\n min-width: 5em;\n -webkit-user-select: none;\n -khtml-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n /*\t&::before {\n\t\tmargin-right: .4em;\n\t}\n\n\t&.icononly::before {\n\t\tmargin-right: 0;\n\t}*/\n text-shadow: 1.5px 1.5px 2px rgba(0, 0, 0, 0.8); }\n button:active, input[type=\"button\"]:active, input[type=\"reset\"]:active, input[type=\"submit\"]:active, .button:active {\n position: relative;\n top: 2px; }\n button.narrow, input[type=\"button\"].narrow, input[type=\"reset\"].narrow, input[type=\"submit\"].narrow, .button.narrow {\n min-width: initial; }\n\ninput[type=\"submit\"], .btn-green {\n background-color: #2ca94b;\n box-shadow: 0 3px 0 #1d7032;\n text-decoration: none !important; }\n input[type=\"submit\"], input[type=\"submit\"]:link, input[type=\"submit\"]:visited, .btn-green, .btn-green:link, .btn-green:visited {\n color: #FEFEFE; }\n input[type=\"submit\"]:hover, input[type=\"submit\"]:active, input[type=\"submit\"].active, input[type=\"submit\"].selected, .btn-green:hover, .btn-green:active, .btn-green.active, .btn-green.selected {\n background-color: #28ba5c;\n color: #FEFEFE; }\n input[type=\"submit\"]:hover, input[type=\"submit\"].selected, input[type=\"submit\"].active, .btn-green:hover, .btn-green.selected, .btn-green.active {\n box-shadow: 0 3px 0 #1a773b; }\n input[type=\"submit\"]:active, .btn-green:active {\n box-shadow: 0 1px 0 #1a773b; }\n\ninput[type=\"reset\"], .btn-red {\n background-color: #D04E51;\n box-shadow: 0 3px 0 #aa2d30;\n text-decoration: none !important; }\n input[type=\"reset\"], input[type=\"reset\"]:link, input[type=\"reset\"]:visited, .btn-red, .btn-red:link, .btn-red:visited {\n color: #FEFEFE; }\n input[type=\"reset\"]:hover, input[type=\"reset\"]:active, input[type=\"reset\"].active, input[type=\"reset\"].selected, .btn-red:hover, .btn-red:active, .btn-red.active, .btn-red.selected {\n background-color: #d4403f;\n color: #FEFEFE; }\n input[type=\"reset\"]:hover, input[type=\"reset\"].selected, input[type=\"reset\"].active, .btn-red:hover, .btn-red.selected, .btn-red.active {\n box-shadow: 0 3px 0 #9e2423; }\n input[type=\"reset\"]:active, .btn-red:active {\n box-shadow: 0 1px 0 #9e2423; }\n\n.btn-blue {\n background-color: #3983cd;\n box-shadow: 0 3px 0 #265f98;\n text-decoration: none !important; }\n .btn-blue, .btn-blue:link, .btn-blue:visited {\n color: #FEFEFE; }\n .btn-blue:hover, .btn-blue:active, .btn-blue.active, .btn-blue.selected {\n background-color: #2076C6;\n color: #FEFEFE; }\n .btn-blue:hover, .btn-blue.selected, .btn-blue.active {\n box-shadow: 0 3px 0 #154c80; }\n .btn-blue:active {\n box-shadow: 0 1px 0 #154c80; }\n\n/*\n\n&[type=\"submit\"],\n&.gray-green {\n\t@include fancy-btn-colors-full(\n\t\t\t$btn-gray-f, $btn-gray-b, $btn-gray-l,\n\t\t\t$btn-green-fa, $btn-green-ba, darken($btn-green-ba, 16)\n\t)\n}\n\n&.gray-blue {\n\t@include fancy-btn-colors-full(\n\t\t\t$btn-gray-f, $btn-gray-b, $btn-gray-l,\n\t\t\t$btn-blue-fa, $btn-blue-ba, darken($btn-blue-ba, 16)\n\t)\n}\n\n&.gray-red {\n\t@include fancy-btn-colors-full(\n\t\t\t$btn-gray-f, $btn-gray-b, $btn-gray-l,\n\t\t\t$btn-red-fa, $btn-red-ba, darken($btn-red-ba, 16)\n\t)\n}\n\n&.gray-orange {\n\t@include fancy-btn-colors-full(\n\t\t\t$btn-gray-f, $btn-gray-b, $btn-gray-l,\n\t\t\t$btn-orange-fa, $btn-orange-ba, darken($btn-orange-ba, 16)\n\t)\n}\n\n// No change on hover - to be used for disabled buttons\n&.gray-gray {\n\t@include fancy-btn-colors-full(\n\t\t\t$btn-gray-f, $btn-gray-b, $btn-gray-l,\n\t\t\t$btn-gray-f, $btn-gray-b, $btn-gray-l\n\t)\n}\n\n*/\nbutton, input[type=\"button\"], input[type=\"reset\"], input[type=\"submit\"], .button {\n text-align: center;\n cursor: pointer;\n display: inline-block;\n border-radius: 2px;\n padding: 0 0.6em;\n border: 0 none;\n outline: 0 none !important;\n line-height: 1.8em;\n font-size: 1.1em;\n margin-bottom: 3px;\n min-width: 5em;\n -webkit-user-select: none;\n -khtml-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n /*\t&::before {\n\t\tmargin-right: .4em;\n\t}\n\n\t&.icononly::before {\n\t\tmargin-right: 0;\n\t}*/\n text-shadow: 1.5px 1.5px 2px rgba(0, 0, 0, 0.8); }\n button:active, input[type=\"button\"]:active, input[type=\"reset\"]:active, input[type=\"submit\"]:active, .button:active {\n position: relative;\n top: 2px; }\n button.narrow, input[type=\"button\"].narrow, input[type=\"reset\"].narrow, input[type=\"submit\"].narrow, .button.narrow {\n min-width: initial; }\n\ninput[type=\"submit\"], .btn-green {\n background-color: #2ca94b;\n box-shadow: 0 3px 0 #1d7032;\n text-decoration: none !important; }\n input[type=\"submit\"], input[type=\"submit\"]:link, input[type=\"submit\"]:visited, .btn-green, .btn-green:link, .btn-green:visited {\n color: #FEFEFE; }\n input[type=\"submit\"]:hover, input[type=\"submit\"]:active, input[type=\"submit\"].active, input[type=\"submit\"].selected, .btn-green:hover, .btn-green:active, .btn-green.active, .btn-green.selected {\n background-color: #28ba5c;\n color: #FEFEFE; }\n input[type=\"submit\"]:hover, input[type=\"submit\"].selected, input[type=\"submit\"].active, .btn-green:hover, .btn-green.selected, .btn-green.active {\n box-shadow: 0 3px 0 #1a773b; }\n input[type=\"submit\"]:active, .btn-green:active {\n box-shadow: 0 1px 0 #1a773b; }\n\ninput[type=\"reset\"], .btn-red {\n background-color: #D04E51;\n box-shadow: 0 3px 0 #aa2d30;\n text-decoration: none !important; }\n input[type=\"reset\"], input[type=\"reset\"]:link, input[type=\"reset\"]:visited, .btn-red, .btn-red:link, .btn-red:visited {\n color: #FEFEFE; }\n input[type=\"reset\"]:hover, input[type=\"reset\"]:active, input[type=\"reset\"].active, input[type=\"reset\"].selected, .btn-red:hover, .btn-red:active, .btn-red.active, .btn-red.selected {\n background-color: #d4403f;\n color: #FEFEFE; }\n input[type=\"reset\"]:hover, input[type=\"reset\"].selected, input[type=\"reset\"].active, .btn-red:hover, .btn-red.selected, .btn-red.active {\n box-shadow: 0 3px 0 #9e2423; }\n input[type=\"reset\"]:active, .btn-red:active {\n box-shadow: 0 1px 0 #9e2423; }\n\n.btn-blue {\n background-color: #3983cd;\n box-shadow: 0 3px 0 #265f98;\n text-decoration: none !important; }\n .btn-blue, .btn-blue:link, .btn-blue:visited {\n color: #FEFEFE; }\n .btn-blue:hover, .btn-blue:active, .btn-blue.active, .btn-blue.selected {\n background-color: #2076C6;\n color: #FEFEFE; }\n .btn-blue:hover, .btn-blue.selected, .btn-blue.active {\n box-shadow: 0 3px 0 #154c80; }\n .btn-blue:active {\n box-shadow: 0 1px 0 #154c80; }\n\n/*\n\n&[type=\"submit\"],\n&.gray-green {\n\t@include fancy-btn-colors-full(\n\t\t\t$btn-gray-f, $btn-gray-b, $btn-gray-l,\n\t\t\t$btn-green-fa, $btn-green-ba, darken($btn-green-ba, 16)\n\t)\n}\n\n&.gray-blue {\n\t@include fancy-btn-colors-full(\n\t\t\t$btn-gray-f, $btn-gray-b, $btn-gray-l,\n\t\t\t$btn-blue-fa, $btn-blue-ba, darken($btn-blue-ba, 16)\n\t)\n}\n\n&.gray-red {\n\t@include fancy-btn-colors-full(\n\t\t\t$btn-gray-f, $btn-gray-b, $btn-gray-l,\n\t\t\t$btn-red-fa, $btn-red-ba, darken($btn-red-ba, 16)\n\t)\n}\n\n&.gray-orange {\n\t@include fancy-btn-colors-full(\n\t\t\t$btn-gray-f, $btn-gray-b, $btn-gray-l,\n\t\t\t$btn-orange-fa, $btn-orange-ba, darken($btn-orange-ba, 16)\n\t)\n}\n\n// No change on hover - to be used for disabled buttons\n&.gray-gray {\n\t@include fancy-btn-colors-full(\n\t\t\t$btn-gray-f, $btn-gray-b, $btn-gray-l,\n\t\t\t$btn-gray-f, $btn-gray-b, $btn-gray-l\n\t)\n}\n\n*/\ninput[type=\"number\"], input[type=\"password\"], input[type=\"text\"], textarea, select {\n border: 0 none;\n border-bottom: 2px solid #217b3a;\n background-color: #303030;\n color: white;\n padding: 6px;\n line-height: 1em;\n outline: 0 none !important;\n -moz-outline: 0 none !important;\n font-weight: normal; }\n input[type=\"number\"]:focus, input[type=\"number\"]:hover, input[type=\"password\"]:focus, input[type=\"password\"]:hover, input[type=\"text\"]:focus, input[type=\"text\"]:hover, textarea:focus, textarea:hover, select:focus, select:hover {\n border-bottom-color: #28bc65; }\n\ninput[type=\"number\"], input[type=\"password\"], input[type=\"text\"], textarea {\n -webkit-user-select: text;\n -khtml-user-select: text;\n -moz-user-select: text;\n -ms-user-select: text;\n user-select: text;\n cursor: text; }\n\ntextarea {\n font-family: monospace;\n line-height: 1.2em;\n display: block; }\n\n@media screen and (-webkit-min-device-pixel-ratio: 0) {\n select {\n padding-right: 18px; } }\n\nselect {\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n cursor: pointer;\n line-height: 1.4em;\n padding: 3.5px;\n padding-right: 1em; }\n select:-moz-focusring {\n color: transparent;\n text-shadow: 0 0 0 white; }\n select option {\n background: #303030; }\n\nlabel.select-wrap {\n position: relative;\n display: inline !important;\n margin: 0 !important;\n padding: 0 !important;\n width: auto !important; }\n label.select-wrap:after {\n content: '<>';\n /* will be rotated */\n font-family: \"Consolas\", monospace;\n font-weight: bold;\n color: #28bc65;\n top: 50%;\n -webkit-transform: translate(0, -50%) rotate(90deg);\n -moz-transform: translate(0, -50%) rotate(90deg);\n -ms-transform: translate(0, -50%) rotate(90deg);\n -o-transform: translate(0, -50%) rotate(90deg);\n transform: translate(0, -50%) rotate(90deg);\n right: 2px;\n position: absolute;\n z-index: 100;\n pointer-events: none; }\n\nform {\n border: 0 none;\n margin: 0;\n padding: 0;\n text-decoration: none; }\n\ninput[type=\"number\"], input[type=\"password\"], input[type=\"text\"], textarea, select, label.select-wrap {\n width: 250px; }\n\nform .Row {\n vertical-align: middle;\n margin: 14px auto;\n text-align: left;\n display: flex;\n flex-direction: row; }\n form .Row:first-child {\n margin-top: 0; }\n form .Row:last-child {\n margin-bottom: 0; }\n form .Row .spacer {\n width: 130px; }\n @media screen and (max-width: 544px) {\n form .Row .spacer {\n display: none; } }\n form .Row.buttons input, form .Row.buttons .button {\n margin-right: 0.6180469716rem; }\n form .Row.centered {\n justify-content: center; }\n form .Row.message {\n font-size: 1em;\n text-shadow: 1px 1px 3px black;\n text-align: center; }\n form .Row.message.error {\n color: crimson; }\n form .Row.message.ok {\n color: #0fe851; }\n form .Row.separator {\n padding-top: 14px;\n border-top: 2px solid rgba(255, 255, 255, 0.1); }\n form .Row textarea {\n display: inline-block;\n vertical-align: top;\n min-height: 10rem;\n flex-grow: 1;\n resize: vertical; }\n form .Row label {\n font-weight: bold;\n color: white;\n display: inline-block;\n width: 130px;\n text-align: right;\n text-shadow: 1px 1px 3px black;\n padding: 8px;\n align-self: flex-start;\n -webkit-user-select: none;\n -khtml-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none; }\n form .Row .checkbox-wrap {\n display: inline-block;\n width: 130px;\n padding: 8px;\n text-align: right;\n align-self: flex-start; }\n form .Row .checkbox-wrap input[type=checkbox] {\n margin: auto;\n width: auto;\n height: auto; }\n form .Row .checkbox-wrap + label {\n width: 250px;\n padding-left: 0;\n text-align: left;\n cursor: pointer; }\n @media screen and (max-width: 544px) {\n form .Row {\n flex-direction: column; }\n form .Row.buttons, form .Row.centered {\n flex-direction: row; }\n form .Row.buttons {\n justify-content: center; }\n form .Row.buttons :last-child {\n margin-right: 0; }\n form .Row label {\n padding-left: 0;\n text-align: left;\n width: auto; }\n form .Row .checkbox-wrap {\n order: 1;\n text-align: left;\n padding-bottom: 0;\n border-radius: .4px;\n width: auto; }\n form .Row .checkbox-wrap + label {\n width: auto; }\n form .Row input[type=\"number\"], form .Row input[type=\"password\"], form .Row input[type=\"text\"], form .Row textarea, form .Row textarea {\n width: 100%; } }\n\nform span.required {\n color: red; }\n\n.RadioGroup {\n display: inline-block;\n line-height: 1.5em;\n vertical-align: middle; }\n .RadioGroup label {\n width: auto;\n text-align: left;\n cursor: pointer;\n font-weight: normal; }\n .RadioGroup input[type=\"radio\"] {\n vertical-align: middle;\n margin: 0 0 0 5px; }\n\n@media screen and (-webkit-min-device-pixel-ratio: 0) {\n select {\n padding-right: 18px; } }\n\nselect {\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n cursor: pointer;\n line-height: 1.4em;\n padding: 3.5px;\n padding-right: 1em; }\n select:-moz-focusring {\n color: transparent;\n text-shadow: 0 0 0 white; }\n select option {\n background: #303030; }\n\nlabel.select-wrap {\n position: relative;\n display: inline !important;\n margin: 0 !important;\n padding: 0 !important;\n width: auto !important; }\n label.select-wrap:after {\n content: '<>';\n /* will be rotated */\n font-family: \"Consolas\", monospace;\n font-weight: bold;\n color: #28bc65;\n top: 50%;\n -webkit-transform: translate(0, -50%) rotate(90deg);\n -moz-transform: translate(0, -50%) rotate(90deg);\n -ms-transform: translate(0, -50%) rotate(90deg);\n -o-transform: translate(0, -50%) rotate(90deg);\n transform: translate(0, -50%) rotate(90deg);\n right: 2px;\n position: absolute;\n z-index: 100;\n pointer-events: none; }\n\n#ap-list {\n column-count: 3;\n column-gap: 0;\n margin: 0 -0.2360828548rem; }\n @media screen and (min-width: 545px) and (max-width: 1000px) {\n #ap-list {\n column-count: 2; } }\n @media screen and (max-width: 544px) {\n #ap-list {\n column-count: 1; } }\n\n#ap-loader {\n background: rgba(255, 255, 255, 0.1);\n border-radius: 5px;\n padding: 0.3819820591rem;\n margin-bottom: 0.3819820591rem; }\n\n#ap-box {\n padding-bottom: 0.3819820591rem; }\n\n#psk-modal form {\n display: flex;\n align-items: center;\n margin: 0.3819820591rem; }\n #psk-modal form > * {\n margin-left: 0.3819820591rem;\n margin-right: 0.3819820591rem; }\n #psk-modal form > *:first-child {\n margin-left: 0; }\n #psk-modal form > *:last-child {\n margin-right: 0; }\n #psk-modal form input[type=password] {\n min-width: 5rem; }\n\n.AP {\n break-inside: avoid-column;\n max-width: 500px;\n padding: 0.2360828548rem; }\n .AP.selected .inner {\n background: #43de81 !important;\n cursor: default;\n top: 0 !important; }\n .AP .inner {\n cursor: pointer;\n -webkit-user-select: none;\n -khtml-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n position: relative;\n border-radius: 3px;\n color: #222;\n background: #afafaf;\n transition: background-color 0.5s;\n display: flex; }\n .AP .inner:active {\n left: 0;\n top: 1px; }\n .AP .inner:hover {\n background: white; }\n .AP .inner > * {\n padding: 0.6180469716rem;\n white-space: nowrap;\n word-wrap: normal; }\n .AP .inner .rssi {\n min-width: 2rem;\n flex: 0 0 15%;\n text-align: right; }\n .AP .inner .rssi:after {\n padding-left: 0.090179415rem;\n content: '%';\n font-size: 0.8888888889em; }\n .AP .inner .essid {\n flex: 1 1 70%;\n min-width: 0;\n text-overflow: ellipsis;\n overflow: hidden;\n font-weight: bold; }\n .AP .inner .auth {\n flex: 0 0 15%; }\n\n.page-home #staRSSIperc:after {\n padding-left: 0.1459102934rem;\n content: '%';\n font-size: 0.8888888889em; }\n\n.page-home #staRSSI:after {\n padding-left: 0.1459102934rem;\n content: 'dBm';\n font-size: 0.8888888889em; }\n\n#samp-ctrl {\n display: flex;\n padding: 0.3819820591rem;\n flex-direction: row;\n justify-content: center;\n align-items: stretch; }\n @media screen and (max-width: 544px) {\n #samp-ctrl {\n flex-direction: column; } }\n #samp-ctrl > div {\n margin: 0.3819820591rem 0.6180469716rem; }\n #samp-ctrl label {\n line-height: 1.8;\n font-weight: bold; }\n #samp-ctrl input, #samp-ctrl select {\n width: 6em; }\n @media screen and (max-width: 544px) {\n #samp-ctrl input, #samp-ctrl select {\n width: 100%; } }\n\n.Box.chartbox {\n display: flex;\n flex-direction: row; }\n @media screen and (max-width: 544px) {\n .Box.chartbox {\n flex-direction: column; } }\n .Box.chartbox .stats {\n flex: 0 1;\n position: relative; }\n @media screen and (max-width: 544px) {\n .Box.chartbox .stats table {\n margin: 0 auto; }\n .Box.chartbox .stats td, .Box.chartbox .stats th {\n width: 50%; } }\n .Box.chartbox .stats th, .Box.chartbox .stats td {\n white-space: nowrap;\n word-wrap: normal; }\n .Box.chartbox .stats th sub {\n font-weight: normal; }\n .Box.chartbox .stats td {\n min-width: 100px; }\n .Box.chartbox .stats td:after {\n font-size: 90%;\n padding-left: .5em; }\n .Box.chartbox .stats #stat-f-s:after {\n content: \"Hz\"; }\n .Box.chartbox .stats #stat-i-peak:after {\n content: \"mA\"; }\n .Box.chartbox .stats #stat-i-rms:after {\n content: \"mA\"; }\n .Box.chartbox .stats .ar {\n position: absolute;\n bottom: 0.3819820591rem;\n width: 100%;\n text-align: center; }\n .Box.chartbox .stats .ar input[type=number] {\n width: 4em; }\n .Box.chartbox .stats .ar input[type=button] {\n margin-left: 0.3819820591rem; }\n\n.page-about .Box {\n padding-left: 1rem;\n padding-right: 1rem; }\n .page-about .Box a {\n font-weight: bold; }\n\n.page-about #logo {\n float: right;\n height: 130px; }\n\n.page-about #logo2 {\n max-width: 150px; }\n\n@media screen and (min-width: 545px) {\n .mq-phone {\n display: none; } }\n\n@media screen and (max-width: 544px) {\n .mq-tablet-min {\n display: none; } }\n\n@media screen and (min-width: 1001px) {\n .mq-tablet-max {\n display: none; } }\n\n@media screen and (max-width: 1000px) {\n .mq-normal-min {\n display: none; } }\n","/* normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */\n\n/**\n * 1. Set default font family to sans-serif.\n * 2. Prevent iOS and IE text size adjust after device orientation change,\n * without disabling user zoom.\n */\n\n*, *:before, *:after {\n\tbox-sizing: border-box;\n}\n\n\nhtml {\n font-family: sans-serif; /* 1 */\n -ms-text-size-adjust: 100%; /* 2 */\n -webkit-text-size-adjust: 100%; /* 2 */\n}\n\n/**\n * Remove default margin.\n */\n\nbody {\n margin: 0;\n}\n\n/* HTML5 display definitions\n ========================================================================== */\n\n/**\n * Correct `block` display not defined for any HTML5 element in IE 8/9.\n * Correct `block` display not defined for `details` or `summary` in IE 10/11\n * and Firefox.\n * Correct `block` display not defined for `main` in IE 11.\n */\n\n//article,\n//aside,\n//details,\n//figcaption,\nfigure,\n//footer,\n//header,\n//hgroup,\n//main,\n//menu,\nnav\n//section,\n//summary\n{\n display: block;\n}\n\n/**\n * 1. Correct `inline-block` display not defined in IE 8/9.\n * 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera.\n */\n\n//audio,\ncanvas,\nprogress\n//video\n{\n display: inline-block; /* 1 */\n vertical-align: baseline; /* 2 */\n}\n\n/**\n * Prevent modern browsers from displaying `audio` without controls.\n * Remove excess height in iOS 5 devices.\n */\n//\n//audio:not([controls]) {\n// display: none;\n// height: 0;\n//}\n\n/**\n * Address `[hidden]` styling not present in IE 8/9/10.\n * Hide the `template` element in IE 8/9/10/11, Safari, and Firefox < 22.\n */\n\n[hidden]\n//template\n{\n display: none;\n}\n\n/* Links\n ========================================================================== */\n\n/**\n * Remove the gray background color from active links in IE 10.\n */\n\na {\n background-color: transparent;\n}\n\n/**\n * Improve readability of focused elements when they are also in an\n * active/hover state.\n */\n\na:active,\na:hover {\n outline: 0;\n}\n\n/* Text-level semantics\n ========================================================================== */\n\n/**\n * Address styling not present in IE 8/9/10/11, Safari, and Chrome.\n */\n\n//abbr[title] {\n// border-bottom: 1px dotted;\n//}\n\n/**\n * Address style set to `bolder` in Firefox 4+, Safari, and Chrome.\n */\n\nb\n//strong\n{\n font-weight: bold;\n}\n\n/**\n * Address styling not present in Safari and Chrome.\n */\n//\n//dfn {\n// font-style: italic;\n//}\n\n/**\n * Address variable `h1` font-size and margin within `section` and `article`\n * contexts in Firefox 4+, Safari, and Chrome.\n */\n\nh1 {\n font-size: 2em;\n margin: 0.67em 0;\n}\n\nh2 {\n font-size: 2em;\n margin: 0.67em 0;\n}\n\n/**\n * Address styling not present in IE 8/9.\n */\n//\n//mark {\n// background: #ff0;\n// color: #000;\n//}\n\n/**\n * Address inconsistent and variable font size in all browsers.\n */\n\nsmall {\n font-size: 80%;\n}\n\n/**\n * Prevent `sub` and `sup` affecting `line-height` in all browsers.\n */\n\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\n\nsup {\n top: -0.5em;\n}\n\nsub {\n bottom: -0.25em;\n}\n\n/* Embedded content\n ========================================================================== */\n\n/**\n * Remove border when inside `a` element in IE 8/9/10.\n */\n\nimg {\n border: 0;\n}\n\n/**\n * Correct overflow not hidden in IE 9/10/11.\n */\n\nsvg:not(:root) {\n overflow: hidden;\n}\n\n/* Grouping content\n ========================================================================== */\n\n/**\n * Address margin not present in IE 8/9 and Safari.\n */\n\n//figure {\n// margin: 1em 40px;\n//}\n\n/**\n * Address differences between Firefox and other browsers.\n */\n\nhr {\n box-sizing: content-box;\n height: 0;\n}\n\n/**\n * Contain overflow in all browsers.\n */\n\npre {\n overflow: auto;\n}\n\n/**\n * Address odd `em`-unit font size rendering in all browsers.\n */\n\ncode,\n//kbd,\npre\n//samp\n{\n font-family: monospace;\n font-size: 1em;\n}\n\n/* Forms\n ========================================================================== */\n\n/**\n * Known limitation: by default, Chrome and Safari on OS X allow very limited\n * styling of `select`, unless a `border` property is set.\n */\n\n/**\n * 1. Correct color not being inherited.\n * Known issue: affects color of disabled elements.\n * 2. Correct font properties not being inherited.\n * 3. Address margins set differently in Firefox 4+, Safari, and Chrome.\n */\n\nbutton,\ninput,\n//optgroup,\nselect,\ntextarea {\n color: inherit; /* 1 */\n font: inherit; /* 2 */\n margin: 0; /* 3 */\n}\n\n/**\n * Address `overflow` set to `hidden` in IE 8/9/10/11.\n */\n\nbutton {\n overflow: visible;\n}\n\n/**\n * Address inconsistent `text-transform` inheritance for `button` and `select`.\n * All other form control elements do not inherit `text-transform` values.\n * Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera.\n * Correct `select` style inheritance in Firefox.\n */\n\nbutton,\nselect {\n text-transform: none;\n}\n\n/**\n * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`\n * and `video` controls.\n * 2. Correct inability to style clickable `input` types in iOS.\n * 3. Improve usability and consistency of cursor style between image-type\n * `input` and others.\n */\n\nbutton,\n//html input[type=\"button\"], /* 1 */\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n -webkit-appearance: button; /* 2 */\n cursor: pointer; /* 3 */\n}\n\n/**\n * Re-set default cursor for disabled elements.\n */\n\nbutton[disabled],\nhtml input[disabled] {\n cursor: default;\n}\n\n/**\n * Remove inner padding and border in Firefox 4+.\n */\n\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n border: 0;\n padding: 0;\n}\n\n/**\n * Address Firefox 4+ setting `line-height` on `input` using `!important` in\n * the UA stylesheet.\n */\n\ninput {\n line-height: normal;\n}\n\n/**\n * It's recommended that you don't attempt to style these elements.\n * Firefox's implementation doesn't respect box-sizing, padding, or width.\n *\n * 1. Address box sizing set to `content-box` in IE 8/9/10.\n * 2. Remove excess padding in IE 8/9/10.\n */\n\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n box-sizing: border-box; /* 1 */\n padding: 0; /* 2 */\n}\n\n/**\n * Fix the cursor style for Chrome's increment/decrement buttons. For certain\n * `font-size` values of the `input`, it causes the cursor style of the\n * decrement button to change from `default` to `text`.\n */\n\n//input[type=\"number\"]::-webkit-inner-spin-button,\n//input[type=\"number\"]::-webkit-outer-spin-button {\n// height: auto;\n//}\n\n/**\n * 1. Address `appearance` set to `searchfield` in Safari and Chrome.\n * 2. Address `box-sizing` set to `border-box` in Safari and Chrome.\n */\n//\n//input[type=\"search\"] {\n// -webkit-appearance: textfield; /* 1 */\n// box-sizing: content-box; /* 2 */\n//}\n\n/**\n * Remove inner padding and search cancel button in Safari and Chrome on OS X.\n * Safari (but not Chrome) clips the cancel button when the search input has\n * padding (and `textfield` appearance).\n */\n//\n//input[type=\"search\"]::-webkit-search-cancel-button,\n//input[type=\"search\"]::-webkit-search-decoration {\n// -webkit-appearance: none;\n//}\n\n/**\n * Define consistent border, margin, and padding.\n */\n//\n//fieldset {\n// border: 1px solid #c0c0c0;\n// margin: 0 2px;\n// padding: 0.35em 0.625em 0.75em;\n//}\n\n/**\n * 1. Correct `color` not being inherited in IE 8/9/10/11.\n * 2. Remove padding so people aren't caught out if they zero out fieldsets.\n */\n\nlegend {\n border: 0; /* 1 */\n padding: 0; /* 2 */\n}\n\n/**\n * Remove default vertical scrollbar in IE 8/9/10/11.\n */\n\ntextarea {\n overflow: auto;\n}\n\n/**\n * Don't inherit the `font-weight` (applied by a rule above).\n * NOTE: the default cannot safely be changed in Chrome and Safari on OS X.\n */\n//\n//optgroup {\n// font-weight: bold;\n//}\n\n/* Tables\n ========================================================================== */\n\n/**\n * Remove most spacing between table cells.\n */\n\ntable {\n border-collapse: collapse;\n border-spacing: 0;\n}\n\ntd,\nth {\n padding: 0;\n}\n","@charset \"UTF-8\";\n\n@if $border-box-sizing == true {\n html { // http://bit.ly/1qk2tVR\n box-sizing: border-box;\n }\n\n * {\n &,\n &::after,\n &::before {\n box-sizing: inherit;\n }\n }\n}\n","@import \"chartist-settings\";\n\n@mixin ct-responsive-svg-container($width: 100%, $ratio: $ct-container-ratio) {\n\tdisplay: block;\n\tposition: relative;\n\twidth: $width;\n\n\t&:before {\n\t\tdisplay: block;\n\t\tfloat: left;\n\t\tcontent: \"\";\n\t\twidth: 0;\n\t\theight: 0;\n\t\tpadding-bottom: $ratio * 100%;\n\t}\n\n\t&:after {\n\t\tcontent: \"\";\n\t\tdisplay: table;\n\t\tclear: both;\n\t}\n\n\t> svg {\n\t\tdisplay: block;\n\t\tposition: absolute;\n\t\ttop: 0;\n\t\tleft: 0;\n\t}\n}\n\n@mixin ct-align-justify($ct-text-align: $ct-text-align, $ct-text-justify: $ct-text-justify) {\n\talign-items: $ct-text-align;\n\tjustify-content: $ct-text-justify;\n\n\t// Fallback to text-align for non-flex browsers\n\t@if ($ct-text-justify == 'flex-start') {\n\t\ttext-align: left;\n\t} @else if ($ct-text-justify == 'flex-end') {\n\t\ttext-align: right;\n\t} @else {\n\t\ttext-align: center;\n\t}\n}\n\n@mixin ct-chart-label($ct-text-color: $ct-text-color, $ct-text-size: $ct-text-size, $ct-text-line-height: $ct-text-line-height) {\n\tfill: $ct-text-color;\n\tcolor: $ct-text-color;\n\tfont-size: $ct-text-size;\n\tline-height: $ct-text-line-height;\n}\n\n@mixin ct-chart-grid($ct-grid-color: $ct-grid-color, $ct-grid-width: $ct-grid-width, $ct-grid-dasharray: $ct-grid-dasharray) {\n\tstroke: $ct-grid-color;\n\tstroke-width: $ct-grid-width;\n\n\t@if ($ct-grid-dasharray) {\n\t\tstroke-dasharray: $ct-grid-dasharray;\n\t}\n}\n\n@mixin ct-chart-point($ct-point-size: $ct-point-size, $ct-point-shape: $ct-point-shape) {\n\tstroke-width: $ct-point-size;\n\tstroke-linecap: $ct-point-shape;\n}\n\n@mixin ct-chart-line($ct-line-width: $ct-line-width, $ct-line-dasharray: $ct-line-dasharray) {\n\tfill: none;\n\tstroke-width: $ct-line-width;\n\n\t@if ($ct-line-dasharray) {\n\t\tstroke-dasharray: $ct-line-dasharray;\n\t}\n}\n\n@mixin ct-chart-area($ct-area-opacity: $ct-area-opacity) {\n\tstroke: none;\n\tfill-opacity: $ct-area-opacity;\n}\n\n@mixin ct-chart-bar($ct-bar-width: $ct-bar-width) {\n\tfill: none;\n\tstroke-width: $ct-bar-width;\n}\n\n//@mixin ct-chart-donut($ct-donut-width: $ct-donut-width) {\n// fill: none;\n// stroke-width: $ct-donut-width;\n//}\n\n@mixin ct-chart-series-color($color) {\n\t.ct-point, .ct-line, .ct-bar /*, .ct-slice-donut*/\n\t{\n\t\tstroke: $color;\n\t}\n\n\t.ct-slice-pie, .ct-area {\n\t\tfill: $color;\n\t}\n}\n\n@mixin ct-chart(\n\t$ct-container-ratio: $ct-container-ratio,\n\t$ct-text-color: $ct-text-color,\n\t$ct-text-size: $ct-text-size,\n\t$ct-grid-color: $ct-grid-color,\n\t$ct-grid-width: $ct-grid-width,\n\t$ct-grid-dasharray: $ct-grid-dasharray,\n\t$ct-point-size: $ct-point-size,\n\t$ct-point-shape: $ct-point-shape,\n\t$ct-line-width: $ct-line-width,\n\t$ct-bar-width: $ct-bar-width,\n\t//$ct-donut-width: $ct-donut-width,\n\t$ct-series-names: $ct-series-names,\n\t$ct-series-colors: $ct-series-colors) {\n\n\t.ct-zoom-rect {\n\t\tfill: rgba(200, 100, 100, 0.3);\n\t\tstroke: #ff2b12;\n\t}\n\n\t.ct-axis-title {\n\t\tfill: $ct-axis-label-color;\n\t\t@include noselect;\n\t}\n\n\t// --- Label ---\n\t.ct-label {\n\t\t@include ct-chart-label($ct-text-color, $ct-text-size);\n\n\t\t&.ct-horizontal.ct-start {\n\t\t\t@include ct-align-justify(flex-end, flex-start);\n\t\t\ttext-anchor: start; // Fallback for browsers that don't support foreignObjects\n\t\t}\n\n\t\t&.ct-horizontal.ct-end {\n\t\t\t@include ct-align-justify(flex-start, flex-start);\n\t\t\ttext-anchor: start;\n\n\t\t\t// EDIT: added for angled horiz labels\n\t\t\ttransform: translate(-4px, 0%) rotate(45deg);\n\t\t}\n\n\t\t&.ct-vertical.ct-start {\n\t\t\t@include ct-align-justify(flex-end, flex-end);\n\t\t\ttext-anchor: end;\n\n\t\t\ttransform: translate(0, 20%);\n\t\t}\n\n\t\t&.ct-vertical.ct-end {\n\t\t\t@include ct-align-justify(flex-end, flex-start);\n\t\t\ttext-anchor: start;\n\t\t}\n\t}\n\n\t.ct-chart-line .ct-label,\n\t.ct-chart-bar .ct-label {\n\t\tdisplay: flex;\n\t}\n\n\t// --- Bar labels ---\n\n\t.ct-chart-bar {\n\t\t.ct-label.ct-horizontal.ct-start {\n\t\t\t@include ct-align-justify(flex-end, center);\n\t\t\ttext-anchor: start;\n\t\t}\n\n\t\t.ct-label.ct-horizontal.ct-end {\n\t\t\t@include ct-align-justify(flex-start, center);\n\t\t\ttext-anchor: start;\n\t\t}\n\n\t\t&.ct-horizontal-bars .ct-label {\n\t\t\t&.ct-horizontal.ct-start {\n\t\t\t\t@include ct-align-justify(flex-end, flex-start);\n\t\t\t\ttext-anchor: start;\n\t\t\t}\n\n\t\t\t&.ct-horizontal.ct-end {\n\t\t\t\t@include ct-align-justify(flex-start, flex-start);\n\t\t\t\ttext-anchor: start;\n\t\t\t}\n\n\t\t\t&.ct-vertical.ct-start {\n\t\t\t\t//@include ct-chart-label($ct-text-color, $ct-text-size, center, $ct-vertical-text-justify);\n\t\t\t\t@include ct-align-justify(center, flex-end);\n\t\t\t\ttext-anchor: end;\n\t\t\t}\n\n\t\t\t&.ct-vertical.ct-end {\n\t\t\t\t@include ct-align-justify(center, flex-start);\n\t\t\t\ttext-anchor: end;\n\t\t\t}\n\t\t}\n\t}\n\n\t.ct-grid {\n\t\t@include ct-chart-grid($ct-grid-color, $ct-grid-width, $ct-grid-dasharray);\n\t}\n\n\t.ct-point {\n\t\t@include ct-chart-point($ct-point-size, $ct-point-shape);\n\t}\n\n\t.ct-line {\n\t\t@include ct-chart-line($ct-line-width);\n\t}\n\n\t.ct-with-area .ct-line {\n\t\tstroke-width: 1px;\n\t}\n\n\t.ct-area {\n\t\t@include ct-chart-area();\n\t}\n\n\t.ct-bar {\n\t\t@include ct-chart-bar($ct-bar-width);\n\t}\n\n\t//.ct-slice-donut {\n\t// @include ct-chart-donut($ct-donut-width);\n\t//}\n\n\t@if $ct-include-colored-series {\n\t\t@for $i from 0 to length($ct-series-names) {\n\t\t\t.ct-series-#{nth($ct-series-names, $i + 1)} {\n\t\t\t\t$color: nth($ct-series-colors, $i + 1);\n\t\t\t\t@include ct-chart-series-color($color);\n\t\t\t}\n\t\t}\n\t}\n}\n\n@if $ct-include-classes {\n\t@include ct-chart();\n\n\t@if $ct-include-alternative-responsive-containers {\n\t\t@for $i from 0 to length($ct-scales-names) {\n\t\t\t.#{nth($ct-scales-names, $i + 1)} {\n\t\t\t\t@include ct-responsive-svg-container($ratio: nth($ct-scales, $i + 1));\n\t\t\t}\n\t\t}\n\t}\n}\n","// Scales for responsive SVG containers\n$ct-scales_orig: ((1), (15/16), (8/9), (5/6), (4/5), (3/4), (2/3), (5/8), (1/1.618), (3/5), (9/16), (8/15), (1/2), (2/5), (3/8), (1/3), (1/4)) !default;\n$ct-scales-names_orig: (ct-square, ct-minor-second, ct-major-second, ct-minor-third, ct-major-third, ct-perfect-fourth, ct-perfect-fifth, ct-minor-sixth, ct-golden-section, ct-major-sixth, ct-minor-seventh, ct-major-seventh, ct-octave, ct-major-tenth, ct-major-eleventh, ct-major-twelfth, ct-double-octave) !default;\n\n$ct-scales: ((10/16), (2/3));\n$ct-scales-names: (ct-wide, ct-narrow);\n\n\n// Container ratio\n$ct-container-ratio: (1/1.618) !default;\n\n// Text styles for labels\n$ct-text-color: rgba(white, 0.8) !default;\n$ct-text-size: 0.75rem !default;\n$ct-text-align: flex-start !default;\n$ct-text-justify: flex-start !default;\n$ct-text-line-height: 1;\n\n$ct-axis-label-color: rgba(white, 0.8) !default;\n\n// Grid styles\n$ct-grid-color: rgba(white, 0.3) !default;\n$ct-grid-dasharray: 2px !default;\n$ct-grid-width: 1px !default;\n\n// Line chart properties\n$ct-line-width: 2px !default;\n$ct-line-dasharray: false !default;\n$ct-point-size: 4px !default;\n// Line chart point, can be either round or square\n$ct-point-shape: round !default;\n// Area fill transparency between 0 and 1\n$ct-area-opacity: 0.3 !default;\n\n// Bar chart bar width\n$ct-bar-width: 10px !default;\n\n// Donut width (If donut width is to big it can cause issues where the shape gets distorted)\n$ct-donut-width: 60px !default;\n\n// If set to true it will include the default classes and generate CSS output. If you're planning to use the mixins you\n// should set this property to false\n$ct-include-classes: true !default;\n\n// If this is set to true the CSS will contain colored series. You can extend or change the color with the\n// properties below\n$ct-include-colored-series: $ct-include-classes !default;\n\n// If set to true this will include all responsive container variations using the scales defined at the top of the script\n$ct-include-alternative-responsive-containers: $ct-include-classes !default;\n\n// Series names and colors. This can be extended or customized as desired. Just add more series and colors.\n$ct-series-names: (a, b, c, d, e) !default;\n$ct-series-colors: (\n #f05b4f,\n #6188e2,\n #59922b,\n #eacf7d,\n #a748ca\n) !default;\n","\n@mixin click-through() {\n\tpointer-events: none;\n}\n\n\n// Disallow text selection\n@mixin noselect() {\n\t-webkit-user-select: none;\n\t-khtml-user-select: none;\n\t-moz-user-select: none;\n\t-ms-user-select: none;\n\tuser-select: none;\n}\n\n\n// Allow text selection\n@mixin can-select() {\n\t-webkit-user-select: text;\n\t-khtml-user-select: text;\n\t-moz-user-select: text;\n\t-ms-user-select: text;\n\tuser-select: text;\n\n\tcursor: text;\n}\n","@import \"normalize\";\n@import \"lib/bourbon/bourbon\";\n\n@import \"grid-settings\";\n@import \"lib/neat/neat\";\n\n@import \"utils/index\";\n\n@import \"lib/chartist/chartist\";\n\n$form-label-w: 130px;\n$form-label-gap: 8px;\n$form-field-w: 250px;\n\n$c-form-label-fg: white;\n$c-form-field-bg: #303030;\n$c-form-field-fg: white;\n$c-form-highlight: #217b3a;\n$c-form-highlight-a: #28bc65;\n\n@function dist($x) {\n\t@return modular-scale($x, 1rem, $golden);\n}\n\n@function fsize($x) {\n\t@return modular-scale($x, 1em, $major-second);\n}\n\n.center {\n\ttext-align: center;\n}\n\n.invis {\n\tvisibility: hidden;\n}\n\n.hidden {\n\tdisplay: none;\n}\n\n@import \"layout/index\";\n@import \"form/index\";\n\n// import all our pages\n@import \"pages/wifi\";\n@import \"pages/home\";\n@import \"pages/wfm\";\n@import \"pages/about\";\n\n@include media($tablet-min) {\n\t.mq-phone { display: none; }\n}\n\n@include media($phone) {\n\t.mq-tablet-min { display: none; }\n}\n\n@include media($normal-min) {\n\t.mq-tablet-max { display: none; }\n}\n\n@include media($tablet-max) {\n\t.mq-normal-min { display: none; }\n}\n","html {\n\tfont-family: Arial, sans-serif;\n\tcolor: #D0D0D0;\n\tbackground: #131315;\n}\n\nhtml, body {\n\t@include naked();\n\twidth: 100%;\n\theight: 100%;\n\toverflow: hidden;\n}\n\na, a:visited, a:link {\n\tcolor: #5abfff;\n\ttext-decoration: none;\n}\n\na:hover {\n\tcolor: #5abfff;\n\ttext-decoration: underline;\n}\n","// Add a highlight for debugging\n@mixin highlight($color) {\n\toutline: 1px solid $color;\n\tbackground: rgba($color, .05);\n\tbox-shadow: 0 0 2px 2px rgba($color, .2), inset 0 0 2px 2px rgba($color, .2);\n}\n\n// Ellipsis, but for block elements\n@mixin block-ellipsis($width: 100%) {\n\tdisplay: block;\n\tmax-width: $width;\n\toverflow: hidden;\n\ttext-overflow: ellipsis;\n\twhite-space: nowrap;\n\tword-wrap: normal;\n}\n\n// No margins, padding, borders\n@mixin naked() {\n\tborder: 0 none;\n\tmargin: 0;\n\tpadding: 0;\n\ttext-decoration: none;\n}\n\n@mixin translate($x, $y) {\n\t@include transform(translate($x, $y));\n}\n\n// Disallow wrapping\n@mixin nowrap() {\n\twhite-space: nowrap;\n\tword-wrap: normal;\n}\n","/* Main outer container */\n#outer {\n\tdisplay: flex;\n\n\tposition: absolute;\n\twidth: 100%;\n\theight: 100%;\n\tleft: 0;\n\tright: 0;\n\ttop: 0;\n\tbottom: 0;\n\toverflow: hidden;\n\n\tflex-direction: row;\n}\n\n@include media($phone) {\n\t#outer {\n\t\tdisplay: block;\n\t\toverflow-y: scroll;\n\t}\n}\n","@charset \"UTF-8\";\n\n/// Outputs a media-query block with an optional grid context (the total number of columns used in the grid).\n///\n/// @param {List} $query\n/// A list of media query features and values, where each `$feature` should have a corresponding `$value`.\n/// For a list of valid values for `$feature`, click [here](http://www.w3.org/TR/css3-mediaqueries/#media1).\n///\n/// If there is only a single `$value` in `$query`, `$default-feature` is going to be used.\n///\n/// The number of total columns in the grid can be set by passing `$columns` at the end of the list (overrides `$total-columns`).\n///\n///\n/// @param {Number (unitless)} $total-columns [$grid-columns]\n/// - Number of columns to use in the new grid context. Can be set as a shorthand in the first parameter.\n///\n/// @example scss - Usage\n/// .responsive-element {\n/// @include media(769px) {\n/// @include span-columns(6);\n/// }\n/// }\n///\n/// .new-context-element {\n/// @include media(min-width 320px max-width 480px, 6) {\n/// @include span-columns(6);\n/// }\n/// }\n///\n/// @example css - CSS Output\n/// @media screen and (min-width: 769px) {\n/// .responsive-element {\n/// display: block;\n/// float: left;\n/// margin-right: 2.35765%;\n/// width: 48.82117%;\n/// }\n///\n/// .responsive-element:last-child {\n/// margin-right: 0;\n/// }\n/// }\n///\n/// @media screen and (min-width: 320px) and (max-width: 480px) {\n/// .new-context-element {\n/// display: block;\n/// float: left;\n/// margin-right: 4.82916%;\n/// width: 100%;\n/// }\n///\n/// .new-context-element:last-child {\n/// margin-right: 0;\n/// }\n/// }\n\n@mixin media($query: $feature $value $columns, $total-columns: $grid-columns) {\n @if length($query) == 1 {\n @media screen and ($default-feature: nth($query, 1)) {\n $default-grid-columns: $grid-columns;\n $grid-columns: $total-columns !global;\n @content;\n $grid-columns: $default-grid-columns !global;\n }\n } @else {\n $loop-to: length($query);\n $media-query: \"screen and \";\n $default-grid-columns: $grid-columns;\n $grid-columns: $total-columns !global;\n\n @if is-not(is-even(length($query))) {\n $grid-columns: nth($query, $loop-to) !global;\n $loop-to: $loop-to - 1;\n }\n\n $i: 1;\n @while $i <= $loop-to {\n $media-query: $media-query + \"(\" + nth($query, $i) + \": \" + nth($query, $i + 1) + \") \";\n\n @if ($i + 1) != $loop-to {\n $media-query: $media-query + \"and \";\n }\n\n $i: $i + 2;\n }\n\n @media #{$media-query} {\n @content;\n $grid-columns: $default-grid-columns !global;\n }\n }\n}\n","#menu {\n\t$menu-bg: #2bab5f;\n\n\tflex: 0 0 15rem;\n\tbackground: $menu-bg;\n\n\t& > * {\n\t\tdisplay: block;\n\t\ttext-decoration: none;\n\t\tpadding: dist(-1) dist(0);\n\n\t\t@include nowrap;\n\t\t@include noselect;\n\t}\n\n\t#brand {\n\t\tcolor: white;\n\t\tbackground: darken($menu-bg, 10%);\n\t\tfont-size: 120%;\n\t\ttext-align: center;\n\t\tposition:relative;\n\n\t\tmargin-bottom: dist(0);\n\n\t\t@include media($phone) {\n\t\t\tbackground: $menu-bg;\n\t\t\tcursor: pointer;\n\n\t\t\t&:after {\n\t\t\t\tposition: absolute;\n\t\t\t\tcolor: rgba(black, .2);\n\t\t\t\tright: dist(0);\n\t\t\t\tcontent: '>';\n\t\t\t\ttop:50%;\n\t\t\t\tfont-size: 120%;\n\t\t\t\tfont-weight: bold;\n\t\t\t\ttransform: translate(0,-50%) rotate(90deg);\n\t\t\t}\n\t\t}\n\t}\n\t&.expanded #brand {\n\t\tbackground: darken($menu-bg, 10%);\n\n\t\t@include media($phone) {\n\t\t\t&:after { transform: translate(0,-50%) rotate(-90deg) }\n\t\t}\n\t}\n\n\n\ta {\n\t\tfont-size: 130%;\n\t\tcolor: white;\n\n\t\t$hl: #1bd886;\n\t\ttransition: background-color 0.2s;\n\t\ttext-shadow: 0 0 5px rgba(black, .4);\n\n\t\t&:hover, &.selected {\n\t\t\tbackground: $hl;\n\t\t\ttext-shadow: 0 0 5px rgba(black, .6);\n\t\t}\n\n\t\t&.selected {\n\t\t\tposition: relative;\n\t\t\tbox-shadow: 0 0 5px rgba(black, .5);\n\t\t}\n\n\t\t&:before {\n\t\t\tcontent: \"▸\";\n\t\t\tpadding-right: .5rem;\n\t\t\tposition: relative;\n\t\t\ttop: -0.1rem;\n\t\t}\n\n\t\t@include media($phone) {\n\t\t\tdisplay: none;\n\t\t}\n\t}\n\n\t&.expanded a { display:block }\n\n\t@include media($tablet) {\n\t\t#brand {\n\t\t\tfont-size: 95%;\n\t\t\tmargin-bottom: dist(-1);\n\t\t}\n\n\t\ta { font-size: 105%; }\n\n\t\tflex-basis: 10rem;\n\n\t\t& > * { padding: dist(-2) dist(-1);\t}\n\t}\n}\n","// Scaling Variables\n$golden: 1.618;\n$minor-second: 1.067;\n$major-second: 1.125;\n$minor-third: 1.2;\n$major-third: 1.25;\n$perfect-fourth: 1.333;\n$augmented-fourth: 1.414;\n$perfect-fifth: 1.5;\n$minor-sixth: 1.6;\n$major-sixth: 1.667;\n$minor-seventh: 1.778;\n$major-seventh: 1.875;\n$octave: 2;\n$major-tenth: 2.5;\n$major-eleventh: 2.667;\n$major-twelfth: 3;\n$double-octave: 4;\n\n$modular-scale-ratio: $perfect-fourth !default;\n$modular-scale-base: em($em-base) !default;\n\n@function modular-scale($increment, $value: $modular-scale-base, $ratio: $modular-scale-ratio) {\n $v1: nth($value, 1);\n $v2: nth($value, length($value));\n $value: $v1;\n\n // scale $v2 to just above $v1\n @while $v2 > $v1 {\n $v2: ($v2 / $ratio); // will be off-by-1\n }\n @while $v2 < $v1 {\n $v2: ($v2 * $ratio); // will fix off-by-1\n }\n\n // check AFTER scaling $v2 to prevent double-counting corner-case\n $double-stranded: $v2 > $v1;\n\n @if $increment > 0 {\n @for $i from 1 through $increment {\n @if $double-stranded and ($v1 * $ratio) > $v2 {\n $value: $v2;\n $v2: ($v2 * $ratio);\n } @else {\n $v1: ($v1 * $ratio);\n $value: $v1;\n }\n }\n }\n\n @if $increment < 0 {\n // adjust $v2 to just below $v1\n @if $double-stranded {\n $v2: ($v2 / $ratio);\n }\n\n @for $i from $increment through -1 {\n @if $double-stranded and ($v1 / $ratio) < $v2 {\n $value: $v2;\n $v2: ($v2 / $ratio);\n } @else {\n $v1: ($v1 / $ratio);\n $value: $v1;\n }\n }\n }\n\n @return $value;\n}\n","#content {\n\tflex-grow: 1;\n\tposition: relative;\n\n\tpadding: dist(0);\n\t@include media($phone) {\n\t\tpadding: dist(-1);\n\t}\n\n\toverflow-y: auto;\n\n\t& > * {\n\t\tmargin-left: auto;\n\t\tmargin-right: auto;\n\t}\n\n\th1 {\n\t\ttext-align: center;\n\t\tfont-size: fsize(7);\n\t\tmargin-top: 0;\n\t\tmargin-bottom: dist(0);\n\t}\n\n\th2 {\n\t\tfont-size: fsize(3);\n\t\tmargin-bottom: dist(-1);\n\t}\n\n\ttd, th {\n\t\tpadding: dist(-2);\n\t}\n\n\ttbody th {\n\t\ttext-align: right;\n\t\twidth: $form-label-w;\n\t\tcolor: $c-form-label-fg;\n\t}\n}\n\n// Loader wheel in top right corner\n#loader {\n\tposition: absolute;\n\tright: dist(1);\n\ttop: dist(1);\n\n\ttransition: opacity .2s;\n\topacity: 0;\n\n\t@include media($phone) {\n\t\ttop: dist(0);\n\t\tright: dist(0);\n\t}\n\n\t&.show {\n\t\topacity:1;\n\t}\n}\n",".Box {\n\tdisplay: block;\n\tmax-width: 900px;\n\n\tmargin-top: dist(0);\n\tpadding: dist(-1) dist(0);\n\n\t@include media($phone) {\n\t\tmargin-top: dist(-1);\n\t}\n\n\th1 + & {\n\t\tmargin-top: 0;\n\t}\n\n\th2 {\n\t\tmargin-top: 0;\n\t}\n\n\tborder-radius: 3px;\n\tbackground-color: rgba(white, .07);\n\n\t&.wide {\n\t\twidth: initial;\n\t\tmax-width: initial;\n\t}\n\n\t&.medium {\n\t\tmax-width: 1200px;\n\t}\n}\n",".Modal {\n\tposition: fixed;\n\twidth: 100%; height: 100%;\n\tleft: 0; top: 0; right: 0; bottom: 0;\n\n\tdisplay: flex;\n\tjustify-content: center;\n\talign-items: center;\n\n\ttransition: opacity .5s;\n\tbackground: rgba(black, .65);\n\topacity: 0;\n\t&.visible { opacity: 1 }\n\t&.hidden { display: none }\n}\n\n.Dialog {\n\tmargin: dist(-1);\n\tpadding: dist(0);\n\toverflow: hidden;\n\n\tmax-width: 100%;\n\tmax-height: 100%;\n\tflex: 0 1 30rem;\n\t//min-height: 15rem;\n\n\tbackground: #1c1c1e;\n\tborder-left: 6px solid $c-form-highlight;\n\tborder-right: 6px solid $c-form-highlight;\n\tbox-shadow: 0 0 2px 0 #434349, 0 0 6px 0 black;\n\n\tborder-radius: 6px;\n\n\th1,h2 {\n\t\tmargin-top:0;\n\t}\n\n\tp:last-child {\n\t\tmargin-bottom: 0;\n\t}\n}\n\n// \"toast\"\n.ErrMsg {\n\tposition: fixed;\n\tbottom: dist(2);\n\tpadding: dist(-1) dist(0);\n\n\t// center horizontally\n\tleft: 50%;\n\t@include translate(-50%,0);\n\t// hack to remove blur in chrome\n\t-webkit-font-smoothing: subpixel-antialiased;\n\t-webkit-transform: translateZ(0) scale(1.0, 1.0);\n\n\tbackground: #d03e42;\n\tcolor: white;\n\ttext-shadow: 0 0 2px black;\n\tbox-shadow: 0 0 6px 0 rgba(black, .6);\n\tborder-radius: 5px;\n\n\tmax-width: 80%;\n\n\t@include media($phone) {\n\t\twidth: calc(100% - #{dist(0)});\n\t}\n\n\ttransition: opacity .5s;\n\topacity: 0;\n\t&.visible { opacity: 1 }\n\t&.hidden { display: none }\n}\n","@charset \"UTF-8\";\n\n/// A mixin for generating vendor prefixes on non-standardized properties.\n///\n/// @param {String} $property\n/// Property to prefix\n///\n/// @param {*} $value\n/// Value to use\n///\n/// @param {List} $prefixes\n/// Prefixes to define\n///\n/// @example scss - Usage\n/// .element {\n/// @include prefixer(border-radius, 10px, webkit ms spec);\n/// }\n///\n/// @example css - CSS Output\n/// .element {\n/// -webkit-border-radius: 10px;\n/// -moz-border-radius: 10px;\n/// border-radius: 10px;\n/// }\n///\n/// @require {variable} $prefix-for-webkit\n/// @require {variable} $prefix-for-mozilla\n/// @require {variable} $prefix-for-microsoft\n/// @require {variable} $prefix-for-opera\n/// @require {variable} $prefix-for-spec\n\n@mixin prefixer($property, $value, $prefixes) {\n @each $prefix in $prefixes {\n @if $prefix == webkit {\n @if $prefix-for-webkit {\n -webkit-#{$property}: $value;\n }\n } @else if $prefix == moz {\n @if $prefix-for-mozilla {\n -moz-#{$property}: $value;\n }\n } @else if $prefix == ms {\n @if $prefix-for-microsoft {\n -ms-#{$property}: $value;\n }\n } @else if $prefix == o {\n @if $prefix-for-opera {\n -o-#{$property}: $value;\n }\n } @else if $prefix == spec {\n @if $prefix-for-spec {\n #{$property}: $value;\n }\n } @else {\n @warn \"Unrecognized prefix: #{$prefix}\";\n }\n }\n}\n\n@mixin disable-prefix-for-all() {\n $prefix-for-webkit: false !global;\n $prefix-for-mozilla: false !global;\n $prefix-for-microsoft: false !global;\n $prefix-for-opera: false !global;\n $prefix-for-spec: false !global;\n}\n","@import \"fancy_button_mixins\";\n\n#{$all-buttons}, .button {\n\t@include fancy-btn-base();\n\n\t// fontello\n/*\t&::before {\n\t\tmargin-right: .4em;\n\t}\n\n\t&.icononly::before {\n\t\tmargin-right: 0;\n\t}*/\n\n\t&.narrow {\n\t\tmin-width: initial;\n\t}\n\n\ttext-shadow: 1.5px 1.5px 2px rgba(black, 0.8);\n}\n\n\n\n\n$btn-gray-f: #DDDDDD;\n$btn-gray-b: #505050;\n$btn-gray-l: #343434; // line\n\n$btn-green-f: #FEFEFE;\n$btn-green-b: #2ca94b;\n$btn-green-fa: #FEFEFE;\n$btn-green-ba: #28ba5c;\n\n$btn-red-f: #FEFEFE;\n$btn-red-b: #D04E51;\n$btn-red-fa: #FEFEFE;\n$btn-red-ba: #d4403f;\n\n$btn-blue-f: #FEFEFE;\n$btn-blue-b: #3983cd;\n$btn-blue-fa: #FEFEFE;\n$btn-blue-ba: #2076C6;\n\n$btn-orange-f: #FEFEFE;\n$btn-orange-b: #dd8751;\n$btn-orange-fa: #FEFEFE;\n$btn-orange-ba: #C6733F;\n\n\ninput[type=\"submit\"], .btn-green {\n\t@include fancy-btn-colors($btn-green-f, $btn-green-b, $btn-green-fa, $btn-green-ba)\n}\n\ninput[type=\"reset\"], .btn-red {\n\t@include fancy-btn-colors($btn-red-f, $btn-red-b, $btn-red-fa, $btn-red-ba)\n}\n\n&.btn-blue {@include fancy-btn-colors($btn-blue-f, $btn-blue-b, $btn-blue-fa, $btn-blue-ba)}\n//&, &.orange {@include fancy-btn-colors($btn-orange-f, $btn-orange-b, $btn-orange-fa, $btn-orange-ba)}\n\n/*\n\n&[type=\"submit\"],\n&.gray-green {\n\t@include fancy-btn-colors-full(\n\t\t\t$btn-gray-f, $btn-gray-b, $btn-gray-l,\n\t\t\t$btn-green-fa, $btn-green-ba, darken($btn-green-ba, 16)\n\t)\n}\n\n&.gray-blue {\n\t@include fancy-btn-colors-full(\n\t\t\t$btn-gray-f, $btn-gray-b, $btn-gray-l,\n\t\t\t$btn-blue-fa, $btn-blue-ba, darken($btn-blue-ba, 16)\n\t)\n}\n\n&.gray-red {\n\t@include fancy-btn-colors-full(\n\t\t\t$btn-gray-f, $btn-gray-b, $btn-gray-l,\n\t\t\t$btn-red-fa, $btn-red-ba, darken($btn-red-ba, 16)\n\t)\n}\n\n&.gray-orange {\n\t@include fancy-btn-colors-full(\n\t\t\t$btn-gray-f, $btn-gray-b, $btn-gray-l,\n\t\t\t$btn-orange-fa, $btn-orange-ba, darken($btn-orange-ba, 16)\n\t)\n}\n\n// No change on hover - to be used for disabled buttons\n&.gray-gray {\n\t@include fancy-btn-colors-full(\n\t\t\t$btn-gray-f, $btn-gray-b, $btn-gray-l,\n\t\t\t$btn-gray-f, $btn-gray-b, $btn-gray-l\n\t)\n}\n\n*/\n","\n// Button styling\n@mixin fancy-btn-base() {\n\ttext-align: center;\n\tcursor: pointer;\n\tdisplay: inline-block;\n\tborder-radius: 2px;\n\tpadding: 0 0.6em;\n\tborder: 0 none;\n\toutline: 0 none !important;\n\tline-height: 1.8em;\n\tfont-size: 1.1em;\n\tmargin-bottom: 3px;\n\tmin-width: 5em;\n\n\t@include noselect();\n\n\t//&[class^=\"icon-\"]::before, &[class*=\" icon-\"]::before {\n\t//\tmargin-left:0;\n\t//}\n\n\t&:active {\n\t\tposition: relative;\n\t\ttop: 2px;\n\t}\n\n\t//&, &:active, &:hover, &:visited {\n\t//\ttext-decoration: none;\n\t//}\n}\n\n@mixin fancy-btn-colors-full($text_p, $back_p, $side_p, $text_a, $back_a, $side_a) {\n\tbackground-color: $back_p;\n\tbox-shadow: 0 3px 0 $side_p;\n\ttext-decoration: none !important;\n\n\t&, &:link, &:visited {\n\t\tcolor: $text_p;\n\t}\n\n\t&:hover, &:active, &.active, &.selected {\n\t\tbackground-color: $back_a;\n\t\tcolor: $text_a;\n\t}\n\n\t&:hover, &.selected, &.active {\n\t\tbox-shadow: 0 3px 0 $side_a;\n\t}\n\n\t// thinner shadow\n\t&:active {\n\t\tbox-shadow: 0 1px 0 $side_a;\n\t}\n}\n\n@mixin fancy-btn-colors($text_p, $back_p, $text_a, $back_a) {\n\t@include fancy-btn-colors-full($text_p, $back_p, darken($back_p, 14), $text_a, $back_a, darken($back_a, 16));\n}\n","@import \"buttons\";\n\n#{$all-text-inputs}, select {\n\tborder: 0 none;\n\tborder-bottom: 2px solid $c-form-highlight;\n\tbackground-color: $c-form-field-bg;\n\tcolor: $c-form-field-fg;\n\tpadding: 6px;\n\tline-height: 1em;\n\toutline: 0 none !important;\n\t-moz-outline: 0 none !important;\n\tfont-weight: normal;\n\n\t&:focus, &:hover {\n\t\tborder-bottom-color: $c-form-highlight-a;\n\t}\n}\n\n#{$all-text-inputs} {\n\t@include can-select();\n}\n\ntextarea {\n\tfont-family: monospace;\n\tline-height: 1.2em;\n\tdisplay: block; // fixes weird bottom margin\n}\n\n@import \"select\";\n","\n// target chrome only\n@media screen and (-webkit-min-device-pixel-ratio: 0) {\n\tselect { padding-right: 18px }\n}\n\nselect {\n\t-webkit-appearance: none;\n\t-moz-appearance: none;\n\tappearance: none;\n\n\tcursor: pointer;\n\tline-height: 1.4em;\n\tpadding: 3.5px;\n\n\tpadding-right: 1em;\n\n\t// hack for firefox to disable dotted outline\n\t&:-moz-focusring {\n\t\tcolor: transparent;\n\t\ttext-shadow: 0 0 0 $c-form-field-fg;\n\t}\n\n\toption {\n\t\tbackground: $c-form-field-bg;\n\t}\n}\n\nlabel.select-wrap {\n\tposition: relative;\n\tdisplay: inline !important;\n\tmargin: 0 !important;\n\tpadding: 0 !important;\n\twidth: auto !important;\n\n\t&:after {\n\t\tcontent: '<>'; /* will be rotated */\n\t\tfont-family: \"Consolas\", monospace;\n\t\tfont-weight: bold;\n\t\tcolor: $c-form-highlight-a;\n\n\t\ttop: 50%;\n\t\t@include transform(translate(0, -50%) rotate(90deg));\n\n\t\tright: 2px;\n\n\t\tposition:absolute;\n\t\tz-index: 100;\n\n\t\tpointer-events: none;\n\t}\n}\n","// Unified Form wrapper\nform { @include naked(); }\n\n#{$all-text-inputs}, select, label.select-wrap {\n\twidth: $form-field-w;\n}\n\nform .Row {\n\tvertical-align: middle;\n\tmargin: 14px auto;\n\ttext-align: left;\n\n\tdisplay: flex;\n\tflex-direction: row;\n\n\t&:first-child {\n\t\tmargin-top: 0;\n\t}\n\n\t&:last-child {\n\t\tmargin-bottom: 0;\n\t}\n\n\t.spacer {\n\t\twidth: $form-label-w;\n\n\t\t@include media($phone) {\n\t\t\tdisplay: none;\n\t\t}\n\t}\n\n\t&.buttons {\n\t\tinput, .button {\n\t\t\tmargin-right: dist(-1);\n\t\t}\n\t}\n\n\t&.centered {\n\t\tjustify-content: center;\n\t}\n\n\t&.message {\n\t\tfont-size: 1em;\n\t\t//margin-left: $label-gap + $w-labels;\n\t\ttext-shadow: 1px 1px 3px black;\n\t\ttext-align: center;\n\n\t\t&.error {\n\t\t\tcolor: crimson;\n\t\t}\n\n\t\t&.ok {\n\t\t\tcolor: #0fe851;\n\t\t}\n\t}\n\n\t&.separator {\n\t\tpadding-top: 14px;\n\t\tborder-top: 2px solid rgba(255, 255, 255, 0.1);\n\t}\n\n\ttextarea {\n\t\tdisplay: inline-block;\n\t\tvertical-align: top;\n\t\tmin-height: 10rem;\n\t\tflex-grow: 1;\n\n\t\tresize: vertical;\n\t}\n\n\tlabel {\n\t\tfont-weight: bold;\n\t\tcolor: $c-form-label-fg;\n\t\tdisplay: inline-block;\n\t\twidth: $form-label-w;\n\t\ttext-align: right;\n\t\ttext-shadow: 1px 1px 3px black;\n\n\t\tpadding: $form-label-gap;\n\t\talign-self: flex-start;\n\n\t\t@include noselect;\n\t}\n\n\t.checkbox-wrap {\n\t\tdisplay: inline-block;\n\t\twidth: $form-label-w;\n\t\tpadding: $form-label-gap;\n\t\ttext-align: right;\n\t\talign-self: flex-start;\n\n\t\tinput[type=checkbox] {\n\t\t\tmargin: auto;\n\t\t\twidth: auto;\n\t\t\theight: auto;\n\t\t}\n\n\t\t& + label {\n\t\t\twidth: $form-field-w;\n\t\t\tpadding-left: 0;\n\t\t\ttext-align: left;\n\t\t\tcursor: pointer;\n\t\t}\n\t}\n\n\t// special phone style\n\t@include media($phone) {\n\t\tflex-direction: column;\n\n\t\t&.buttons, &.centered {\n\t\t\tflex-direction: row;\n\t\t}\n\n\t\t&.buttons {\n\t\t\tjustify-content: center;\n\n\t\t\t// remove margin on lats button\n\t\t\t:last-child {\n\t\t\t\tmargin-right:0;\n\t\t\t}\n\t\t}\n\n\t\tlabel {\n\t\t\tpadding-left: 0;\n\t\t\ttext-align: left;\n\t\t\twidth: auto;\n\t\t}\n\n\t\t.checkbox-wrap {\n\t\t\torder: 1;\n\t\t\ttext-align: left;\n\t\t\tpadding-bottom: 0;\n\n\t\t\tborder-radius: .4px;\n\t\t\twidth: auto;\n\n\t\t\t& + label {\n\t\t\t\twidth: auto;\n\t\t\t}\n\t\t}\n\n\t\t#{$all-text-inputs}, textarea {\n\t\t\twidth: 100%;\n\t\t}\n\t}\n}\n\n// red asterisk\nform span.required {\n\tcolor: red;\n}\n\n.RadioGroup {\n\tdisplay: inline-block;\n\tline-height: 1.5em;\n\tvertical-align: middle;\n\n\tlabel {\n\t\twidth: auto;\n\t\ttext-align: left;\n\t\tcursor: pointer;\n\t\tfont-weight: normal;\n\t}\n\n\tinput[type=\"radio\"] {\n\t\tvertical-align: middle;\n\t\tmargin: 0 0 0 5px;\n\t}\n}\n","#ap-list {\n\tcolumn-count: 3;\n\tcolumn-gap: 0;\n\n\t@include media($tablet) {\n\t\tcolumn-count: 2;\n\t}\n\n\t@include media($phone) {\n\t\tcolumn-count: 1;\n\t}\n\n\tmargin: 0 (- dist(-3));\n}\n\n#ap-loader {\n\tbackground: rgba(white, .1);\n\tborder-radius: 5px;\n\tpadding: dist(-2);\n\tmargin-bottom: dist(-2);\n}\n\n#ap-box {\n\tpadding-bottom: dist(-2);\n}\n\n\n#psk-modal form {\n\tdisplay: flex;\n\talign-items: center;\n\tmargin: dist(-2);\n\n\t& > * {\n\t\tmargin-left: dist(-2);\n\t\tmargin-right: dist(-2);\n\t\t&:first-child { margin-left: 0 }\n\t\t&:last-child { margin-right: 0 }\n\t}\n\n\tinput[type=password] {\n\t\tmin-width: 5rem;\n\t}\n}\n\n.AP {\n\t// can't use margins inside a column\n\n\tbreak-inside: avoid-column;\n\tmax-width: 500px;\n\tpadding: dist(-3);\n\n\t&.selected .inner {//#70dfa3\n\t\tbackground: #43de81 !important; // override the hover effect\n\t\tcursor: default;\n\t\ttop: 0 !important; // no click effect\n\t}\n\n\t// the actual silver box\n\t.inner {\n\t\tcursor: pointer;\n\t\t@include noselect;\n\n\t\tposition: relative;\n\t\t&:active {\n\t\t\tleft: 0;\n\t\t\ttop: 1px;\n\t\t}\n\n\t\tborder-radius: 3px;\n\t\tcolor: #222;\n\n\t\tbackground: #afafaf;\n\t\ttransition: background-color 0.5s;\n\t\t&:hover { background: white }\n\n\t\tdisplay: flex;\n\n\t\t& > * {\n\t\t\tpadding: dist(-1);\n\t\t\t@include nowrap;\n\t\t}\n\n\t\t.rssi {\n\t\t\tmin-width: 2rem;\n\t\t\tflex: 0 0 15%;\n\t\t\ttext-align: right;\n\n\t\t\t&:after {\n\t\t\t\tpadding-left: dist(-5);\n\t\t\t\tcontent: '%';\n\t\t\t\tfont-size: fsize(-1);\n\t\t\t}\n\t\t}\n\n\t\t.essid {\n\t\t\tflex: 1 1 70%;\n\t\t\tmin-width: 0;\n\t\t\ttext-overflow: ellipsis;\n\t\t\toverflow: hidden;\n\t\t\tfont-weight: bold;\n\t\t}\n\n\t\t.auth {\n\t\t\tflex: 0 0 15%;\n\t\t}\n\t}\n}\n",".page-home #staRSSIperc:after {\n\tpadding-left: dist(-4);\n\tcontent: '%';\n\tfont-size: fsize(-1);\n}\n\n.page-home #staRSSI:after {\n\tpadding-left: dist(-4);\n\tcontent: 'dBm';\n\tfont-size: fsize(-1);\n}\n","#samp-ctrl {\n\tdisplay: flex;\n\tpadding: dist(-2);\n\n\tflex-direction: row;\n\t@include media($phone) {\n\t\tflex-direction: column;\n\t}\n\n\tjustify-content: center;\n\talign-items: stretch;\n\n\t> div {\n\t\tmargin: dist(-2) dist(-1);\n\t}\n\n\tlabel {\n\t\tline-height: 1.8;\n\t\tfont-weight: bold;\n\t}\n\n\tinput,select {\n\t\twidth: 6em;\n\n\t\t@include media($phone) {\n\t\t\twidth: 100%;\n\t\t}\n\t}\n}\n\n.Box.chartbox {\n\tdisplay: flex;\n\tflex-direction: row;\n\n\t@include media($phone) {\n\t\tflex-direction: column;\n\t}\n\n\t.stats {\n\t\tflex: 0 1;\n\t\tposition: relative;\n\n\t\t@include media($phone) {\n\t\t\ttable {\n\t\t\t\tmargin: 0 auto;\n\t\t\t} // center the table\n\n\t\t\ttd,th {\n\t\t\t\twidth: 50%;\n\t\t\t}\n\t\t}\n\n\t\tth,td {\n\t\t\t@include nowrap;\n\t\t}\n\n\t\tth sub { font-weight: normal;}\n\n\t\ttd {\n\t\t\tmin-width: 100px;\n\t\t}\n\n\t\ttd:after {\n\t\t\tfont-size: 90%;\n\t\t\tpadding-left: .5em;\n\t\t}\n\n\t\t//#stat-count\n\t\t#stat-f-s:after {content: \"Hz\"}\n\t\t#stat-i-peak:after {content: \"mA\"}\n\t\t#stat-i-rms:after {content: \"mA\"}\n\n\t\t// auto reload box\n\t\t.ar {\n\t\t\tposition: absolute;\n\t\t\tbottom:dist(-2);\n\t\t\twidth:100%;\n\t\t\ttext-align: center;\n\n\t\t\tinput[type=number] {\n\t\t\t\twidth: 4em;\n\t\t\t}\n\n\t\t\tinput[type=button] {\n\t\t\t\tmargin-left: dist(-2);\n\t\t\t}\n\t\t}\n\t}\n}\n",".page-about {\n\t.Box {\n\t\tpadding-left:dist(0);\n\t\tpadding-right:dist(0);\n\n\t\ta {font-weight: bold;}\n\t}\n\n\t#logo {\n\t\tfloat:right;\n\t\theight: 130px;\n\t}\n\n\t#logo2 {\n\t\tmax-width: 150px;\n\t}\n}\n"],"sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["app.css","_normalize.scss","lib/neat/grid/_box-sizing.scss","lib/chartist/_chartist.scss","lib/chartist/_chartist-settings.scss","utils/_pointer.scss","app.scss","layout/_base.scss","utils/_misc.scss","layout/_outer-wrap.scss","lib/neat/grid/_media.scss","layout/_menu.scss","lib/bourbon/functions/_modular-scale.scss","layout/_content.scss","layout/_box.scss","layout/_modal.scss","lib/bourbon/addons/_prefixer.scss","form/_buttons.scss","form/_fancy_button_mixins.scss","form/_form_elements.scss","form/_select.scss","form/_form_layout.scss","pages/_wifi.scss","pages/_home.scss","pages/_wfm.scss","pages/_about.scss"],"names":[],"mappings":"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","file":"app.css","sourcesContent":["@charset \"UTF-8\";\n/* normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */\n/**\n * 1. Set default font family to sans-serif.\n * 2. Prevent iOS and IE text size adjust after device orientation change,\n * without disabling user zoom.\n */\n*, *:before, *:after {\n box-sizing: border-box; }\n\nhtml {\n font-family: sans-serif;\n /* 1 */\n -ms-text-size-adjust: 100%;\n /* 2 */\n -webkit-text-size-adjust: 100%;\n /* 2 */ }\n\n/**\n * Remove default margin.\n */\nbody {\n margin: 0; }\n\n/* HTML5 display definitions\n ========================================================================== */\n/**\n * Correct `block` display not defined for any HTML5 element in IE 8/9.\n * Correct `block` display not defined for `details` or `summary` in IE 10/11\n * and Firefox.\n * Correct `block` display not defined for `main` in IE 11.\n */\nfigure,\nnav {\n display: block; }\n\n/**\n * 1. Correct `inline-block` display not defined in IE 8/9.\n * 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera.\n */\ncanvas,\nprogress {\n display: inline-block;\n /* 1 */\n vertical-align: baseline;\n /* 2 */ }\n\n/**\n * Prevent modern browsers from displaying `audio` without controls.\n * Remove excess height in iOS 5 devices.\n */\n/**\n * Address `[hidden]` styling not present in IE 8/9/10.\n * Hide the `template` element in IE 8/9/10/11, Safari, and Firefox < 22.\n */\n[hidden] {\n display: none; }\n\n/* Links\n ========================================================================== */\n/**\n * Remove the gray background color from active links in IE 10.\n */\na {\n background-color: transparent; }\n\n/**\n * Improve readability of focused elements when they are also in an\n * active/hover state.\n */\na:active,\na:hover {\n outline: 0; }\n\n/* Text-level semantics\n ========================================================================== */\n/**\n * Address styling not present in IE 8/9/10/11, Safari, and Chrome.\n */\n/**\n * Address style set to `bolder` in Firefox 4+, Safari, and Chrome.\n */\nb {\n font-weight: bold; }\n\n/**\n * Address styling not present in Safari and Chrome.\n */\n/**\n * Address variable `h1` font-size and margin within `section` and `article`\n * contexts in Firefox 4+, Safari, and Chrome.\n */\nh1 {\n font-size: 2em;\n margin: 0.67em 0; }\n\nh2 {\n font-size: 2em;\n margin: 0.67em 0; }\n\n/**\n * Address styling not present in IE 8/9.\n */\n/**\n * Address inconsistent and variable font size in all browsers.\n */\nsmall {\n font-size: 80%; }\n\n/**\n * Prevent `sub` and `sup` affecting `line-height` in all browsers.\n */\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline; }\n\nsup {\n top: -0.5em; }\n\nsub {\n bottom: -0.25em; }\n\n/* Embedded content\n ========================================================================== */\n/**\n * Remove border when inside `a` element in IE 8/9/10.\n */\nimg {\n border: 0; }\n\n/**\n * Correct overflow not hidden in IE 9/10/11.\n */\nsvg:not(:root) {\n overflow: hidden; }\n\n/* Grouping content\n ========================================================================== */\n/**\n * Address margin not present in IE 8/9 and Safari.\n */\n/**\n * Address differences between Firefox and other browsers.\n */\nhr {\n box-sizing: content-box;\n height: 0; }\n\n/**\n * Contain overflow in all browsers.\n */\npre {\n overflow: auto; }\n\n/**\n * Address odd `em`-unit font size rendering in all browsers.\n */\ncode,\npre {\n font-family: monospace;\n font-size: 1em; }\n\n/* Forms\n ========================================================================== */\n/**\n * Known limitation: by default, Chrome and Safari on OS X allow very limited\n * styling of `select`, unless a `border` property is set.\n */\n/**\n * 1. Correct color not being inherited.\n * Known issue: affects color of disabled elements.\n * 2. Correct font properties not being inherited.\n * 3. Address margins set differently in Firefox 4+, Safari, and Chrome.\n */\nbutton,\ninput,\nselect,\ntextarea {\n color: inherit;\n /* 1 */\n font: inherit;\n /* 2 */\n margin: 0;\n /* 3 */ }\n\n/**\n * Address `overflow` set to `hidden` in IE 8/9/10/11.\n */\nbutton {\n overflow: visible; }\n\n/**\n * Address inconsistent `text-transform` inheritance for `button` and `select`.\n * All other form control elements do not inherit `text-transform` values.\n * Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera.\n * Correct `select` style inheritance in Firefox.\n */\nbutton,\nselect {\n text-transform: none; }\n\n/**\n * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`\n * and `video` controls.\n * 2. Correct inability to style clickable `input` types in iOS.\n * 3. Improve usability and consistency of cursor style between image-type\n * `input` and others.\n */\nbutton,\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n -webkit-appearance: button;\n /* 2 */\n cursor: pointer;\n /* 3 */ }\n\n/**\n * Re-set default cursor for disabled elements.\n */\nbutton[disabled],\nhtml input[disabled] {\n cursor: default; }\n\n/**\n * Remove inner padding and border in Firefox 4+.\n */\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n border: 0;\n padding: 0; }\n\n/**\n * Address Firefox 4+ setting `line-height` on `input` using `!important` in\n * the UA stylesheet.\n */\ninput {\n line-height: normal; }\n\n/**\n * It's recommended that you don't attempt to style these elements.\n * Firefox's implementation doesn't respect box-sizing, padding, or width.\n *\n * 1. Address box sizing set to `content-box` in IE 8/9/10.\n * 2. Remove excess padding in IE 8/9/10.\n */\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n box-sizing: border-box;\n /* 1 */\n padding: 0;\n /* 2 */ }\n\n/**\n * Fix the cursor style for Chrome's increment/decrement buttons. For certain\n * `font-size` values of the `input`, it causes the cursor style of the\n * decrement button to change from `default` to `text`.\n */\n/**\n * 1. Address `appearance` set to `searchfield` in Safari and Chrome.\n * 2. Address `box-sizing` set to `border-box` in Safari and Chrome.\n */\n/**\n * Remove inner padding and search cancel button in Safari and Chrome on OS X.\n * Safari (but not Chrome) clips the cancel button when the search input has\n * padding (and `textfield` appearance).\n */\n/**\n * Define consistent border, margin, and padding.\n */\n/**\n * 1. Correct `color` not being inherited in IE 8/9/10/11.\n * 2. Remove padding so people aren't caught out if they zero out fieldsets.\n */\nlegend {\n border: 0;\n /* 1 */\n padding: 0;\n /* 2 */ }\n\n/**\n * Remove default vertical scrollbar in IE 8/9/10/11.\n */\ntextarea {\n overflow: auto; }\n\n/**\n * Don't inherit the `font-weight` (applied by a rule above).\n * NOTE: the default cannot safely be changed in Chrome and Safari on OS X.\n */\n/* Tables\n ========================================================================== */\n/**\n * Remove most spacing between table cells.\n */\ntable {\n border-collapse: collapse;\n border-spacing: 0; }\n\ntd,\nth {\n padding: 0; }\n\nhtml {\n box-sizing: border-box; }\n\n*, *::after, *::before {\n box-sizing: inherit; }\n\n.ct-zoom-rect {\n fill: rgba(200, 100, 100, 0.3);\n stroke: #ff2b12; }\n\n.ct-axis-title {\n fill: rgba(255, 255, 255, 0.8);\n -webkit-user-select: none;\n -khtml-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none; }\n\n.ct-label {\n fill: rgba(255, 255, 255, 0.8);\n color: rgba(255, 255, 255, 0.8);\n font-size: 0.75rem;\n line-height: 1; }\n .ct-label.ct-horizontal.ct-start {\n align-items: flex-end;\n justify-content: flex-start;\n text-align: left;\n text-anchor: start; }\n .ct-label.ct-horizontal.ct-end {\n align-items: flex-start;\n justify-content: flex-start;\n text-align: left;\n text-anchor: start;\n transform: translate(-4px, 0%) rotate(45deg); }\n .ct-label.ct-vertical.ct-start {\n align-items: flex-end;\n justify-content: flex-end;\n text-align: right;\n text-anchor: end;\n transform: translate(0, 20%); }\n .ct-label.ct-vertical.ct-end {\n align-items: flex-end;\n justify-content: flex-start;\n text-align: left;\n text-anchor: start; }\n\n.ct-chart-line .ct-label,\n.ct-chart-bar .ct-label {\n display: flex; }\n\n.ct-chart-bar .ct-label.ct-horizontal.ct-start {\n align-items: flex-end;\n justify-content: center;\n text-align: center;\n text-anchor: start; }\n\n.ct-chart-bar .ct-label.ct-horizontal.ct-end {\n align-items: flex-start;\n justify-content: center;\n text-align: center;\n text-anchor: start; }\n\n.ct-chart-bar.ct-horizontal-bars .ct-label.ct-horizontal.ct-start {\n align-items: flex-end;\n justify-content: flex-start;\n text-align: left;\n text-anchor: start; }\n\n.ct-chart-bar.ct-horizontal-bars .ct-label.ct-horizontal.ct-end {\n align-items: flex-start;\n justify-content: flex-start;\n text-align: left;\n text-anchor: start; }\n\n.ct-chart-bar.ct-horizontal-bars .ct-label.ct-vertical.ct-start {\n align-items: center;\n justify-content: flex-end;\n text-align: right;\n text-anchor: end; }\n\n.ct-chart-bar.ct-horizontal-bars .ct-label.ct-vertical.ct-end {\n align-items: center;\n justify-content: flex-start;\n text-align: left;\n text-anchor: end; }\n\n.ct-grid {\n stroke: rgba(255, 255, 255, 0.3);\n stroke-width: 1px;\n stroke-dasharray: 2px; }\n\n.ct-point {\n stroke-width: 4px;\n stroke-linecap: round; }\n\n.ct-line {\n fill: none;\n stroke-width: 2px; }\n\n.ct-with-area .ct-line {\n stroke-width: 1px; }\n\n.ct-area {\n stroke: none;\n fill-opacity: 0.3; }\n\n.ct-bar {\n fill: none;\n stroke-width: 10px; }\n\n.ct-series-a .ct-point, .ct-series-a .ct-line, .ct-series-a .ct-bar {\n stroke: #f05b4f; }\n\n.ct-series-a .ct-slice-pie, .ct-series-a .ct-area {\n fill: #f05b4f; }\n\n.ct-series-b .ct-point, .ct-series-b .ct-line, .ct-series-b .ct-bar {\n stroke: #6188e2; }\n\n.ct-series-b .ct-slice-pie, .ct-series-b .ct-area {\n fill: #6188e2; }\n\n.ct-series-c .ct-point, .ct-series-c .ct-line, .ct-series-c .ct-bar {\n stroke: #59922b; }\n\n.ct-series-c .ct-slice-pie, .ct-series-c .ct-area {\n fill: #59922b; }\n\n.ct-series-d .ct-point, .ct-series-d .ct-line, .ct-series-d .ct-bar {\n stroke: #eacf7d; }\n\n.ct-series-d .ct-slice-pie, .ct-series-d .ct-area {\n fill: #eacf7d; }\n\n.ct-series-e .ct-point, .ct-series-e .ct-line, .ct-series-e .ct-bar {\n stroke: #a748ca; }\n\n.ct-series-e .ct-slice-pie, .ct-series-e .ct-area {\n fill: #a748ca; }\n\n.ct-wide {\n display: block;\n position: relative;\n width: 100%; }\n .ct-wide:before {\n display: block;\n float: left;\n content: \"\";\n width: 0;\n height: 0;\n padding-bottom: 62.5%; }\n .ct-wide:after {\n content: \"\";\n display: table;\n clear: both; }\n .ct-wide > svg {\n display: block;\n position: absolute;\n top: 0;\n left: 0; }\n\n.ct-narrow {\n display: block;\n position: relative;\n width: 100%; }\n .ct-narrow:before {\n display: block;\n float: left;\n content: \"\";\n width: 0;\n height: 0;\n padding-bottom: 66.6666666667%; }\n .ct-narrow:after {\n content: \"\";\n display: table;\n clear: both; }\n .ct-narrow > svg {\n display: block;\n position: absolute;\n top: 0;\n left: 0; }\n\n.center {\n text-align: center; }\n\n.invis {\n visibility: hidden; }\n\n.hidden {\n display: none; }\n\nhtml {\n font-family: Arial, sans-serif;\n color: #D0D0D0;\n background: #131315; }\n\nhtml, body {\n border: 0 none;\n margin: 0;\n padding: 0;\n text-decoration: none;\n width: 100%;\n height: 100%;\n overflow: hidden; }\n\na, a:visited, a:link {\n color: #5abfff;\n text-decoration: none; }\n\na:hover {\n color: #5abfff;\n text-decoration: underline; }\n\n/* Main outer container */\n#outer {\n display: flex;\n position: absolute;\n width: 100%;\n height: 100%;\n left: 0;\n right: 0;\n top: 0;\n bottom: 0;\n overflow: hidden;\n flex-direction: row; }\n\n@media screen and (max-width: 544px) {\n #outer {\n display: block;\n overflow-y: scroll; } }\n\n#menu {\n flex: 0 0 15rem;\n background: #2bab5f; }\n #menu > * {\n display: block;\n text-decoration: none;\n padding: 0.6180469716rem 1rem;\n white-space: nowrap;\n word-wrap: normal;\n -webkit-user-select: none;\n -khtml-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none; }\n #menu #brand {\n color: white;\n background: #218248;\n font-size: 120%;\n text-align: center;\n position: relative;\n margin-bottom: 1rem; }\n @media screen and (max-width: 544px) {\n #menu #brand {\n background: #2bab5f;\n cursor: pointer; }\n #menu #brand:after {\n position: absolute;\n color: rgba(0, 0, 0, 0.2);\n right: 1rem;\n content: '>';\n top: 50%;\n font-size: 120%;\n font-weight: bold;\n transform: translate(0, -50%) rotate(90deg); } }\n #menu.expanded #brand {\n background: #218248; }\n @media screen and (max-width: 544px) {\n #menu.expanded #brand:after {\n transform: translate(0, -50%) rotate(-90deg); } }\n #menu a {\n font-size: 130%;\n color: white;\n transition: background-color 0.2s;\n text-shadow: 0 0 5px rgba(0, 0, 0, 0.4); }\n #menu a:hover, #menu a.selected {\n background: #1bd886;\n text-shadow: 0 0 5px rgba(0, 0, 0, 0.6); }\n #menu a.selected {\n position: relative;\n box-shadow: 0 0 5px rgba(0, 0, 0, 0.5); }\n #menu a:before {\n content: \"▸\";\n padding-right: .5rem;\n position: relative;\n top: -0.1rem; }\n @media screen and (max-width: 544px) {\n #menu a {\n display: none; } }\n #menu.expanded a {\n display: block; }\n @media screen and (min-width: 545px) and (max-width: 1000px) {\n #menu {\n flex-basis: 10rem; }\n #menu #brand {\n font-size: 95%;\n margin-bottom: 0.6180469716rem; }\n #menu a {\n font-size: 105%; }\n #menu > * {\n padding: 0.3819820591rem 0.6180469716rem; } }\n\n#content {\n flex-grow: 1;\n position: relative;\n padding: 1rem;\n overflow-y: auto; }\n @media screen and (max-width: 544px) {\n #content {\n padding: 0.6180469716rem; } }\n #content > * {\n margin-left: auto;\n margin-right: auto; }\n #content h1 {\n text-align: center;\n font-size: 2.2806973457em;\n margin-top: 0;\n margin-bottom: 1rem; }\n #content h2 {\n font-size: 1.423828125em;\n margin-bottom: 0.6180469716rem; }\n #content td, #content th {\n padding: 0.3819820591rem; }\n #content tbody th {\n text-align: right;\n width: 130px;\n color: white; }\n\n#loader {\n position: absolute;\n right: 1.618rem;\n top: 1.618rem;\n transition: opacity .2s;\n opacity: 0; }\n @media screen and (max-width: 544px) {\n #loader {\n top: 1rem;\n right: 1rem; } }\n #loader.show {\n opacity: 1; }\n\n.Box {\n display: block;\n max-width: 900px;\n margin-top: 1rem;\n padding: 0.6180469716rem 1rem;\n border-radius: 3px;\n background-color: rgba(255, 255, 255, 0.07); }\n @media screen and (max-width: 544px) {\n .Box {\n margin-top: 0.6180469716rem; } }\n h1 + .Box {\n margin-top: 0; }\n .Box h2 {\n margin-top: 0; }\n .Box.wide {\n width: initial;\n max-width: initial; }\n .Box.medium {\n max-width: 1200px; }\n\n.Modal {\n position: fixed;\n width: 100%;\n height: 100%;\n left: 0;\n top: 0;\n right: 0;\n bottom: 0;\n display: flex;\n justify-content: center;\n align-items: center;\n transition: opacity .5s;\n background: rgba(0, 0, 0, 0.65);\n opacity: 0; }\n .Modal.visible {\n opacity: 1; }\n .Modal.hidden {\n display: none; }\n\n.Dialog {\n margin: 0.6180469716rem;\n padding: 1rem;\n overflow: hidden;\n max-width: 100%;\n max-height: 100%;\n flex: 0 1 30rem;\n background: #1c1c1e;\n border-left: 6px solid #217b3a;\n border-right: 6px solid #217b3a;\n box-shadow: 0 0 2px 0 #434349, 0 0 6px 0 black;\n border-radius: 6px; }\n .Dialog h1, .Dialog h2 {\n margin-top: 0; }\n .Dialog p:last-child {\n margin-bottom: 0; }\n\n.ErrMsg {\n position: fixed;\n bottom: 2.617924rem;\n padding: 0.6180469716rem 1rem;\n left: 50%;\n -webkit-transform: translate(-50%, 0);\n -moz-transform: translate(-50%, 0);\n -ms-transform: translate(-50%, 0);\n -o-transform: translate(-50%, 0);\n transform: translate(-50%, 0);\n -webkit-font-smoothing: subpixel-antialiased;\n -webkit-transform: translateZ(0) scale(1, 1);\n background: #d03e42;\n color: white;\n text-shadow: 0 0 2px black;\n box-shadow: 0 0 6px 0 rgba(0, 0, 0, 0.6);\n border-radius: 5px;\n max-width: 80%;\n transition: opacity .5s;\n opacity: 0; }\n @media screen and (max-width: 544px) {\n .ErrMsg {\n width: calc(100% - 1rem); } }\n .ErrMsg.visible {\n opacity: 1; }\n .ErrMsg.hidden {\n display: none; }\n\nbutton, input[type=\"button\"], input[type=\"reset\"], input[type=\"submit\"], .button {\n text-align: center;\n cursor: pointer;\n display: inline-block;\n border-radius: 2px;\n padding: 0 0.6em;\n border: 0 none;\n outline: 0 none !important;\n line-height: 1.8em;\n font-size: 1.1em;\n margin-bottom: 3px;\n min-width: 5em;\n -webkit-user-select: none;\n -khtml-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n /*\t&::before {\n\t\tmargin-right: .4em;\n\t}\n\n\t&.icononly::before {\n\t\tmargin-right: 0;\n\t}*/\n text-shadow: 1.5px 1.5px 2px rgba(0, 0, 0, 0.8); }\n button:active, input[type=\"button\"]:active, input[type=\"reset\"]:active, input[type=\"submit\"]:active, .button:active {\n position: relative;\n top: 2px; }\n button.narrow, input[type=\"button\"].narrow, input[type=\"reset\"].narrow, input[type=\"submit\"].narrow, .button.narrow {\n min-width: initial; }\n\ninput[type=\"submit\"], .btn-green {\n background-color: #2ca94b;\n box-shadow: 0 3px 0 #1d7032;\n text-decoration: none !important; }\n input[type=\"submit\"], input[type=\"submit\"]:link, input[type=\"submit\"]:visited, .btn-green, .btn-green:link, .btn-green:visited {\n color: #FEFEFE; }\n input[type=\"submit\"]:hover, input[type=\"submit\"]:active, input[type=\"submit\"].active, input[type=\"submit\"].selected, .btn-green:hover, .btn-green:active, .btn-green.active, .btn-green.selected {\n background-color: #28ba5c;\n color: #FEFEFE; }\n input[type=\"submit\"]:hover, input[type=\"submit\"].selected, input[type=\"submit\"].active, .btn-green:hover, .btn-green.selected, .btn-green.active {\n box-shadow: 0 3px 0 #1a773b; }\n input[type=\"submit\"]:active, .btn-green:active {\n box-shadow: 0 1px 0 #1a773b; }\n\ninput[type=\"reset\"], .btn-red {\n background-color: #D04E51;\n box-shadow: 0 3px 0 #aa2d30;\n text-decoration: none !important; }\n input[type=\"reset\"], input[type=\"reset\"]:link, input[type=\"reset\"]:visited, .btn-red, .btn-red:link, .btn-red:visited {\n color: #FEFEFE; }\n input[type=\"reset\"]:hover, input[type=\"reset\"]:active, input[type=\"reset\"].active, input[type=\"reset\"].selected, .btn-red:hover, .btn-red:active, .btn-red.active, .btn-red.selected {\n background-color: #d4403f;\n color: #FEFEFE; }\n input[type=\"reset\"]:hover, input[type=\"reset\"].selected, input[type=\"reset\"].active, .btn-red:hover, .btn-red.selected, .btn-red.active {\n box-shadow: 0 3px 0 #9e2423; }\n input[type=\"reset\"]:active, .btn-red:active {\n box-shadow: 0 1px 0 #9e2423; }\n\n.btn-blue {\n background-color: #3983cd;\n box-shadow: 0 3px 0 #265f98;\n text-decoration: none !important; }\n .btn-blue, .btn-blue:link, .btn-blue:visited {\n color: #FEFEFE; }\n .btn-blue:hover, .btn-blue:active, .btn-blue.active, .btn-blue.selected {\n background-color: #2076C6;\n color: #FEFEFE; }\n .btn-blue:hover, .btn-blue.selected, .btn-blue.active {\n box-shadow: 0 3px 0 #154c80; }\n .btn-blue:active {\n box-shadow: 0 1px 0 #154c80; }\n\n/*\n\n&[type=\"submit\"],\n&.gray-green {\n\t@include fancy-btn-colors-full(\n\t\t\t$btn-gray-f, $btn-gray-b, $btn-gray-l,\n\t\t\t$btn-green-fa, $btn-green-ba, darken($btn-green-ba, 16)\n\t)\n}\n\n&.gray-blue {\n\t@include fancy-btn-colors-full(\n\t\t\t$btn-gray-f, $btn-gray-b, $btn-gray-l,\n\t\t\t$btn-blue-fa, $btn-blue-ba, darken($btn-blue-ba, 16)\n\t)\n}\n\n&.gray-red {\n\t@include fancy-btn-colors-full(\n\t\t\t$btn-gray-f, $btn-gray-b, $btn-gray-l,\n\t\t\t$btn-red-fa, $btn-red-ba, darken($btn-red-ba, 16)\n\t)\n}\n\n&.gray-orange {\n\t@include fancy-btn-colors-full(\n\t\t\t$btn-gray-f, $btn-gray-b, $btn-gray-l,\n\t\t\t$btn-orange-fa, $btn-orange-ba, darken($btn-orange-ba, 16)\n\t)\n}\n\n// No change on hover - to be used for disabled buttons\n&.gray-gray {\n\t@include fancy-btn-colors-full(\n\t\t\t$btn-gray-f, $btn-gray-b, $btn-gray-l,\n\t\t\t$btn-gray-f, $btn-gray-b, $btn-gray-l\n\t)\n}\n\n*/\nbutton, input[type=\"button\"], input[type=\"reset\"], input[type=\"submit\"], .button {\n text-align: center;\n cursor: pointer;\n display: inline-block;\n border-radius: 2px;\n padding: 0 0.6em;\n border: 0 none;\n outline: 0 none !important;\n line-height: 1.8em;\n font-size: 1.1em;\n margin-bottom: 3px;\n min-width: 5em;\n -webkit-user-select: none;\n -khtml-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n /*\t&::before {\n\t\tmargin-right: .4em;\n\t}\n\n\t&.icononly::before {\n\t\tmargin-right: 0;\n\t}*/\n text-shadow: 1.5px 1.5px 2px rgba(0, 0, 0, 0.8); }\n button:active, input[type=\"button\"]:active, input[type=\"reset\"]:active, input[type=\"submit\"]:active, .button:active {\n position: relative;\n top: 2px; }\n button.narrow, input[type=\"button\"].narrow, input[type=\"reset\"].narrow, input[type=\"submit\"].narrow, .button.narrow {\n min-width: initial; }\n\ninput[type=\"submit\"], .btn-green {\n background-color: #2ca94b;\n box-shadow: 0 3px 0 #1d7032;\n text-decoration: none !important; }\n input[type=\"submit\"], input[type=\"submit\"]:link, input[type=\"submit\"]:visited, .btn-green, .btn-green:link, .btn-green:visited {\n color: #FEFEFE; }\n input[type=\"submit\"]:hover, input[type=\"submit\"]:active, input[type=\"submit\"].active, input[type=\"submit\"].selected, .btn-green:hover, .btn-green:active, .btn-green.active, .btn-green.selected {\n background-color: #28ba5c;\n color: #FEFEFE; }\n input[type=\"submit\"]:hover, input[type=\"submit\"].selected, input[type=\"submit\"].active, .btn-green:hover, .btn-green.selected, .btn-green.active {\n box-shadow: 0 3px 0 #1a773b; }\n input[type=\"submit\"]:active, .btn-green:active {\n box-shadow: 0 1px 0 #1a773b; }\n\ninput[type=\"reset\"], .btn-red {\n background-color: #D04E51;\n box-shadow: 0 3px 0 #aa2d30;\n text-decoration: none !important; }\n input[type=\"reset\"], input[type=\"reset\"]:link, input[type=\"reset\"]:visited, .btn-red, .btn-red:link, .btn-red:visited {\n color: #FEFEFE; }\n input[type=\"reset\"]:hover, input[type=\"reset\"]:active, input[type=\"reset\"].active, input[type=\"reset\"].selected, .btn-red:hover, .btn-red:active, .btn-red.active, .btn-red.selected {\n background-color: #d4403f;\n color: #FEFEFE; }\n input[type=\"reset\"]:hover, input[type=\"reset\"].selected, input[type=\"reset\"].active, .btn-red:hover, .btn-red.selected, .btn-red.active {\n box-shadow: 0 3px 0 #9e2423; }\n input[type=\"reset\"]:active, .btn-red:active {\n box-shadow: 0 1px 0 #9e2423; }\n\n.btn-blue {\n background-color: #3983cd;\n box-shadow: 0 3px 0 #265f98;\n text-decoration: none !important; }\n .btn-blue, .btn-blue:link, .btn-blue:visited {\n color: #FEFEFE; }\n .btn-blue:hover, .btn-blue:active, .btn-blue.active, .btn-blue.selected {\n background-color: #2076C6;\n color: #FEFEFE; }\n .btn-blue:hover, .btn-blue.selected, .btn-blue.active {\n box-shadow: 0 3px 0 #154c80; }\n .btn-blue:active {\n box-shadow: 0 1px 0 #154c80; }\n\n/*\n\n&[type=\"submit\"],\n&.gray-green {\n\t@include fancy-btn-colors-full(\n\t\t\t$btn-gray-f, $btn-gray-b, $btn-gray-l,\n\t\t\t$btn-green-fa, $btn-green-ba, darken($btn-green-ba, 16)\n\t)\n}\n\n&.gray-blue {\n\t@include fancy-btn-colors-full(\n\t\t\t$btn-gray-f, $btn-gray-b, $btn-gray-l,\n\t\t\t$btn-blue-fa, $btn-blue-ba, darken($btn-blue-ba, 16)\n\t)\n}\n\n&.gray-red {\n\t@include fancy-btn-colors-full(\n\t\t\t$btn-gray-f, $btn-gray-b, $btn-gray-l,\n\t\t\t$btn-red-fa, $btn-red-ba, darken($btn-red-ba, 16)\n\t)\n}\n\n&.gray-orange {\n\t@include fancy-btn-colors-full(\n\t\t\t$btn-gray-f, $btn-gray-b, $btn-gray-l,\n\t\t\t$btn-orange-fa, $btn-orange-ba, darken($btn-orange-ba, 16)\n\t)\n}\n\n// No change on hover - to be used for disabled buttons\n&.gray-gray {\n\t@include fancy-btn-colors-full(\n\t\t\t$btn-gray-f, $btn-gray-b, $btn-gray-l,\n\t\t\t$btn-gray-f, $btn-gray-b, $btn-gray-l\n\t)\n}\n\n*/\ninput[type=\"number\"], input[type=\"password\"], input[type=\"text\"], textarea, select {\n border: 0 none;\n border-bottom: 2px solid #217b3a;\n background-color: #303030;\n color: white;\n padding: 6px;\n line-height: 1em;\n outline: 0 none !important;\n -moz-outline: 0 none !important;\n font-weight: normal; }\n input[type=\"number\"]:focus, input[type=\"number\"]:hover, input[type=\"password\"]:focus, input[type=\"password\"]:hover, input[type=\"text\"]:focus, input[type=\"text\"]:hover, textarea:focus, textarea:hover, select:focus, select:hover {\n border-bottom-color: #28bc65; }\n\ninput[type=\"number\"], input[type=\"password\"], input[type=\"text\"], textarea {\n -webkit-user-select: text;\n -khtml-user-select: text;\n -moz-user-select: text;\n -ms-user-select: text;\n user-select: text;\n cursor: text; }\n\ntextarea {\n font-family: monospace;\n line-height: 1.2em;\n display: block; }\n\n@media screen and (-webkit-min-device-pixel-ratio: 0) {\n select {\n padding-right: 18px; } }\n\nselect {\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n cursor: pointer;\n line-height: 1.4em;\n padding: 3.5px;\n padding-right: 1em; }\n select:-moz-focusring {\n color: transparent;\n text-shadow: 0 0 0 white; }\n select option {\n background: #303030; }\n\nlabel.select-wrap {\n position: relative;\n display: inline !important;\n margin: 0 !important;\n padding: 0 !important;\n width: auto !important; }\n label.select-wrap:after {\n content: '<>';\n /* will be rotated */\n font-family: \"Consolas\", monospace;\n font-weight: bold;\n color: #28bc65;\n top: 50%;\n -webkit-transform: translate(0, -50%) rotate(90deg);\n -moz-transform: translate(0, -50%) rotate(90deg);\n -ms-transform: translate(0, -50%) rotate(90deg);\n -o-transform: translate(0, -50%) rotate(90deg);\n transform: translate(0, -50%) rotate(90deg);\n right: 2px;\n position: absolute;\n z-index: 100;\n pointer-events: none; }\n\nform {\n border: 0 none;\n margin: 0;\n padding: 0;\n text-decoration: none; }\n\ninput[type=\"number\"], input[type=\"password\"], input[type=\"text\"], textarea, select, label.select-wrap {\n width: 250px; }\n\nform .Row {\n vertical-align: middle;\n margin: 14px auto;\n text-align: left;\n display: flex;\n flex-direction: row; }\n form .Row:first-child {\n margin-top: 0; }\n form .Row:last-child {\n margin-bottom: 0; }\n form .Row .spacer {\n width: 130px; }\n @media screen and (max-width: 544px) {\n form .Row .spacer {\n display: none; } }\n form .Row.buttons input, form .Row.buttons .button {\n margin-right: 0.6180469716rem; }\n form .Row.centered {\n justify-content: center; }\n form .Row.message {\n font-size: 1em;\n text-shadow: 1px 1px 3px black;\n text-align: center; }\n form .Row.message.error {\n color: crimson; }\n form .Row.message.ok {\n color: #0fe851; }\n form .Row.separator {\n padding-top: 14px;\n border-top: 2px solid rgba(255, 255, 255, 0.1); }\n form .Row textarea {\n display: inline-block;\n vertical-align: top;\n min-height: 10rem;\n flex-grow: 1;\n resize: vertical; }\n form .Row label {\n font-weight: bold;\n color: white;\n display: inline-block;\n width: 130px;\n text-align: right;\n text-shadow: 1px 1px 3px black;\n padding: 8px;\n align-self: flex-start;\n -webkit-user-select: none;\n -khtml-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none; }\n form .Row .checkbox-wrap {\n display: inline-block;\n width: 130px;\n padding: 8px;\n text-align: right;\n align-self: flex-start; }\n form .Row .checkbox-wrap input[type=checkbox] {\n margin: auto;\n width: auto;\n height: auto; }\n form .Row .checkbox-wrap + label {\n width: 250px;\n padding-left: 0;\n text-align: left;\n cursor: pointer; }\n @media screen and (max-width: 544px) {\n form .Row {\n flex-direction: column; }\n form .Row.buttons, form .Row.centered {\n flex-direction: row; }\n form .Row.buttons {\n justify-content: center; }\n form .Row.buttons :last-child {\n margin-right: 0; }\n form .Row label {\n padding-left: 0;\n text-align: left;\n width: auto; }\n form .Row .checkbox-wrap {\n order: 1;\n text-align: left;\n padding-bottom: 0;\n border-radius: .4px;\n width: auto; }\n form .Row .checkbox-wrap + label {\n width: auto; }\n form .Row input[type=\"number\"], form .Row input[type=\"password\"], form .Row input[type=\"text\"], form .Row textarea, form .Row textarea {\n width: 100%; } }\n\nform span.required {\n color: red; }\n\n.RadioGroup {\n display: inline-block;\n line-height: 1.5em;\n vertical-align: middle; }\n .RadioGroup label {\n width: auto;\n text-align: left;\n cursor: pointer;\n font-weight: normal; }\n .RadioGroup input[type=\"radio\"] {\n vertical-align: middle;\n margin: 0 0 0 5px; }\n\n@media screen and (-webkit-min-device-pixel-ratio: 0) {\n select {\n padding-right: 18px; } }\n\nselect {\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n cursor: pointer;\n line-height: 1.4em;\n padding: 3.5px;\n padding-right: 1em; }\n select:-moz-focusring {\n color: transparent;\n text-shadow: 0 0 0 white; }\n select option {\n background: #303030; }\n\nlabel.select-wrap {\n position: relative;\n display: inline !important;\n margin: 0 !important;\n padding: 0 !important;\n width: auto !important; }\n label.select-wrap:after {\n content: '<>';\n /* will be rotated */\n font-family: \"Consolas\", monospace;\n font-weight: bold;\n color: #28bc65;\n top: 50%;\n -webkit-transform: translate(0, -50%) rotate(90deg);\n -moz-transform: translate(0, -50%) rotate(90deg);\n -ms-transform: translate(0, -50%) rotate(90deg);\n -o-transform: translate(0, -50%) rotate(90deg);\n transform: translate(0, -50%) rotate(90deg);\n right: 2px;\n position: absolute;\n z-index: 100;\n pointer-events: none; }\n\n#ap-list {\n column-count: 3;\n column-gap: 0;\n margin: 0 -0.2360828548rem; }\n @media screen and (min-width: 545px) and (max-width: 1000px) {\n #ap-list {\n column-count: 2; } }\n @media screen and (max-width: 544px) {\n #ap-list {\n column-count: 1; } }\n\n#ap-loader {\n background: rgba(255, 255, 255, 0.1);\n border-radius: 5px;\n padding: 0.3819820591rem;\n margin-bottom: 0.3819820591rem; }\n\n#ap-box {\n padding-bottom: 0.3819820591rem; }\n\n#psk-modal form {\n display: flex;\n align-items: center;\n margin: 0.3819820591rem; }\n #psk-modal form > * {\n margin-left: 0.3819820591rem;\n margin-right: 0.3819820591rem; }\n #psk-modal form > *:first-child {\n margin-left: 0; }\n #psk-modal form > *:last-child {\n margin-right: 0; }\n #psk-modal form input[type=password] {\n min-width: 5rem; }\n\n.AP {\n break-inside: avoid-column;\n max-width: 500px;\n padding: 0.2360828548rem; }\n .AP.selected .inner {\n background: #43de81 !important;\n cursor: default;\n top: 0 !important; }\n .AP .inner {\n cursor: pointer;\n -webkit-user-select: none;\n -khtml-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n user-select: none;\n position: relative;\n border-radius: 3px;\n color: #222;\n background: #afafaf;\n transition: background-color 0.5s;\n display: flex; }\n .AP .inner:active {\n left: 0;\n top: 1px; }\n .AP .inner:hover {\n background: white; }\n .AP .inner > * {\n padding: 0.6180469716rem;\n white-space: nowrap;\n word-wrap: normal; }\n .AP .inner .rssi {\n min-width: 2rem;\n flex: 0 0 15%;\n text-align: right; }\n .AP .inner .rssi:after {\n padding-left: 0.090179415rem;\n content: '%';\n font-size: 0.8888888889em; }\n .AP .inner .essid {\n flex: 1 1 70%;\n min-width: 0;\n text-overflow: ellipsis;\n overflow: hidden;\n font-weight: bold; }\n .AP .inner .auth {\n flex: 0 0 15%; }\n\n.page-home #staRSSIperc:after {\n padding-left: 0.1459102934rem;\n content: '%';\n font-size: 0.8888888889em; }\n\n.page-home #staRSSI:after {\n padding-left: 0.1459102934rem;\n content: 'dBm';\n font-size: 0.8888888889em; }\n\n#samp-ctrl {\n display: flex;\n padding: 0.3819820591rem;\n flex-direction: row;\n justify-content: center;\n align-items: stretch; }\n @media screen and (max-width: 544px) {\n #samp-ctrl {\n flex-direction: column; } }\n #samp-ctrl > div {\n margin: 0.3819820591rem 0.6180469716rem; }\n #samp-ctrl label {\n line-height: 1.8;\n font-weight: bold; }\n #samp-ctrl input, #samp-ctrl select {\n width: 6em; }\n @media screen and (max-width: 544px) {\n #samp-ctrl input, #samp-ctrl select {\n width: 100%; } }\n\n.Box.chartbox {\n display: flex;\n flex-direction: row; }\n @media screen and (max-width: 544px) {\n .Box.chartbox {\n flex-direction: column; } }\n .Box.chartbox .stats {\n flex: 0 1;\n position: relative;\n padding-bottom: 50px; }\n @media screen and (max-width: 544px) {\n .Box.chartbox .stats table {\n margin: 0 auto; }\n .Box.chartbox .stats td, .Box.chartbox .stats th {\n width: 50%; } }\n .Box.chartbox .stats th, .Box.chartbox .stats td {\n white-space: nowrap;\n word-wrap: normal; }\n .Box.chartbox .stats th sub {\n font-weight: normal; }\n .Box.chartbox .stats td {\n min-width: 100px; }\n .Box.chartbox .stats td:after {\n font-size: 90%;\n padding-left: .5em; }\n .Box.chartbox .stats #stat-f-s:after {\n content: \"Hz\"; }\n .Box.chartbox .stats #stat-i-peak:after {\n content: \"mA\"; }\n .Box.chartbox .stats #stat-i-rms:after {\n content: \"mA\"; }\n .Box.chartbox .stats .ar {\n position: absolute;\n bottom: 0.3819820591rem;\n width: 100%;\n text-align: center; }\n .Box.chartbox .stats .ar input[type=number] {\n width: 4em; }\n .Box.chartbox .stats .ar input[type=button] {\n margin-left: 0.3819820591rem; }\n\n.page-about .Box {\n padding-left: 1rem;\n padding-right: 1rem; }\n .page-about .Box a {\n font-weight: bold; }\n\n.page-about #logo {\n float: right;\n height: 130px; }\n\n.page-about #logo2 {\n max-width: 150px; }\n\n@media screen and (min-width: 545px) {\n .mq-phone {\n display: none; } }\n\n@media screen and (max-width: 544px) {\n .mq-tablet-min {\n display: none; } }\n\n@media screen and (min-width: 1001px) {\n .mq-tablet-max {\n display: none; } }\n\n@media screen and (max-width: 1000px) {\n .mq-normal-min {\n display: none; } }\n","/* normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */\n\n/**\n * 1. Set default font family to sans-serif.\n * 2. Prevent iOS and IE text size adjust after device orientation change,\n * without disabling user zoom.\n */\n\n*, *:before, *:after {\n\tbox-sizing: border-box;\n}\n\n\nhtml {\n font-family: sans-serif; /* 1 */\n -ms-text-size-adjust: 100%; /* 2 */\n -webkit-text-size-adjust: 100%; /* 2 */\n}\n\n/**\n * Remove default margin.\n */\n\nbody {\n margin: 0;\n}\n\n/* HTML5 display definitions\n ========================================================================== */\n\n/**\n * Correct `block` display not defined for any HTML5 element in IE 8/9.\n * Correct `block` display not defined for `details` or `summary` in IE 10/11\n * and Firefox.\n * Correct `block` display not defined for `main` in IE 11.\n */\n\n//article,\n//aside,\n//details,\n//figcaption,\nfigure,\n//footer,\n//header,\n//hgroup,\n//main,\n//menu,\nnav\n//section,\n//summary\n{\n display: block;\n}\n\n/**\n * 1. Correct `inline-block` display not defined in IE 8/9.\n * 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera.\n */\n\n//audio,\ncanvas,\nprogress\n//video\n{\n display: inline-block; /* 1 */\n vertical-align: baseline; /* 2 */\n}\n\n/**\n * Prevent modern browsers from displaying `audio` without controls.\n * Remove excess height in iOS 5 devices.\n */\n//\n//audio:not([controls]) {\n// display: none;\n// height: 0;\n//}\n\n/**\n * Address `[hidden]` styling not present in IE 8/9/10.\n * Hide the `template` element in IE 8/9/10/11, Safari, and Firefox < 22.\n */\n\n[hidden]\n//template\n{\n display: none;\n}\n\n/* Links\n ========================================================================== */\n\n/**\n * Remove the gray background color from active links in IE 10.\n */\n\na {\n background-color: transparent;\n}\n\n/**\n * Improve readability of focused elements when they are also in an\n * active/hover state.\n */\n\na:active,\na:hover {\n outline: 0;\n}\n\n/* Text-level semantics\n ========================================================================== */\n\n/**\n * Address styling not present in IE 8/9/10/11, Safari, and Chrome.\n */\n\n//abbr[title] {\n// border-bottom: 1px dotted;\n//}\n\n/**\n * Address style set to `bolder` in Firefox 4+, Safari, and Chrome.\n */\n\nb\n//strong\n{\n font-weight: bold;\n}\n\n/**\n * Address styling not present in Safari and Chrome.\n */\n//\n//dfn {\n// font-style: italic;\n//}\n\n/**\n * Address variable `h1` font-size and margin within `section` and `article`\n * contexts in Firefox 4+, Safari, and Chrome.\n */\n\nh1 {\n font-size: 2em;\n margin: 0.67em 0;\n}\n\nh2 {\n font-size: 2em;\n margin: 0.67em 0;\n}\n\n/**\n * Address styling not present in IE 8/9.\n */\n//\n//mark {\n// background: #ff0;\n// color: #000;\n//}\n\n/**\n * Address inconsistent and variable font size in all browsers.\n */\n\nsmall {\n font-size: 80%;\n}\n\n/**\n * Prevent `sub` and `sup` affecting `line-height` in all browsers.\n */\n\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\n\nsup {\n top: -0.5em;\n}\n\nsub {\n bottom: -0.25em;\n}\n\n/* Embedded content\n ========================================================================== */\n\n/**\n * Remove border when inside `a` element in IE 8/9/10.\n */\n\nimg {\n border: 0;\n}\n\n/**\n * Correct overflow not hidden in IE 9/10/11.\n */\n\nsvg:not(:root) {\n overflow: hidden;\n}\n\n/* Grouping content\n ========================================================================== */\n\n/**\n * Address margin not present in IE 8/9 and Safari.\n */\n\n//figure {\n// margin: 1em 40px;\n//}\n\n/**\n * Address differences between Firefox and other browsers.\n */\n\nhr {\n box-sizing: content-box;\n height: 0;\n}\n\n/**\n * Contain overflow in all browsers.\n */\n\npre {\n overflow: auto;\n}\n\n/**\n * Address odd `em`-unit font size rendering in all browsers.\n */\n\ncode,\n//kbd,\npre\n//samp\n{\n font-family: monospace;\n font-size: 1em;\n}\n\n/* Forms\n ========================================================================== */\n\n/**\n * Known limitation: by default, Chrome and Safari on OS X allow very limited\n * styling of `select`, unless a `border` property is set.\n */\n\n/**\n * 1. Correct color not being inherited.\n * Known issue: affects color of disabled elements.\n * 2. Correct font properties not being inherited.\n * 3. Address margins set differently in Firefox 4+, Safari, and Chrome.\n */\n\nbutton,\ninput,\n//optgroup,\nselect,\ntextarea {\n color: inherit; /* 1 */\n font: inherit; /* 2 */\n margin: 0; /* 3 */\n}\n\n/**\n * Address `overflow` set to `hidden` in IE 8/9/10/11.\n */\n\nbutton {\n overflow: visible;\n}\n\n/**\n * Address inconsistent `text-transform` inheritance for `button` and `select`.\n * All other form control elements do not inherit `text-transform` values.\n * Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera.\n * Correct `select` style inheritance in Firefox.\n */\n\nbutton,\nselect {\n text-transform: none;\n}\n\n/**\n * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`\n * and `video` controls.\n * 2. Correct inability to style clickable `input` types in iOS.\n * 3. Improve usability and consistency of cursor style between image-type\n * `input` and others.\n */\n\nbutton,\n//html input[type=\"button\"], /* 1 */\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n -webkit-appearance: button; /* 2 */\n cursor: pointer; /* 3 */\n}\n\n/**\n * Re-set default cursor for disabled elements.\n */\n\nbutton[disabled],\nhtml input[disabled] {\n cursor: default;\n}\n\n/**\n * Remove inner padding and border in Firefox 4+.\n */\n\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n border: 0;\n padding: 0;\n}\n\n/**\n * Address Firefox 4+ setting `line-height` on `input` using `!important` in\n * the UA stylesheet.\n */\n\ninput {\n line-height: normal;\n}\n\n/**\n * It's recommended that you don't attempt to style these elements.\n * Firefox's implementation doesn't respect box-sizing, padding, or width.\n *\n * 1. Address box sizing set to `content-box` in IE 8/9/10.\n * 2. Remove excess padding in IE 8/9/10.\n */\n\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n box-sizing: border-box; /* 1 */\n padding: 0; /* 2 */\n}\n\n/**\n * Fix the cursor style for Chrome's increment/decrement buttons. For certain\n * `font-size` values of the `input`, it causes the cursor style of the\n * decrement button to change from `default` to `text`.\n */\n\n//input[type=\"number\"]::-webkit-inner-spin-button,\n//input[type=\"number\"]::-webkit-outer-spin-button {\n// height: auto;\n//}\n\n/**\n * 1. Address `appearance` set to `searchfield` in Safari and Chrome.\n * 2. Address `box-sizing` set to `border-box` in Safari and Chrome.\n */\n//\n//input[type=\"search\"] {\n// -webkit-appearance: textfield; /* 1 */\n// box-sizing: content-box; /* 2 */\n//}\n\n/**\n * Remove inner padding and search cancel button in Safari and Chrome on OS X.\n * Safari (but not Chrome) clips the cancel button when the search input has\n * padding (and `textfield` appearance).\n */\n//\n//input[type=\"search\"]::-webkit-search-cancel-button,\n//input[type=\"search\"]::-webkit-search-decoration {\n// -webkit-appearance: none;\n//}\n\n/**\n * Define consistent border, margin, and padding.\n */\n//\n//fieldset {\n// border: 1px solid #c0c0c0;\n// margin: 0 2px;\n// padding: 0.35em 0.625em 0.75em;\n//}\n\n/**\n * 1. Correct `color` not being inherited in IE 8/9/10/11.\n * 2. Remove padding so people aren't caught out if they zero out fieldsets.\n */\n\nlegend {\n border: 0; /* 1 */\n padding: 0; /* 2 */\n}\n\n/**\n * Remove default vertical scrollbar in IE 8/9/10/11.\n */\n\ntextarea {\n overflow: auto;\n}\n\n/**\n * Don't inherit the `font-weight` (applied by a rule above).\n * NOTE: the default cannot safely be changed in Chrome and Safari on OS X.\n */\n//\n//optgroup {\n// font-weight: bold;\n//}\n\n/* Tables\n ========================================================================== */\n\n/**\n * Remove most spacing between table cells.\n */\n\ntable {\n border-collapse: collapse;\n border-spacing: 0;\n}\n\ntd,\nth {\n padding: 0;\n}\n","@charset \"UTF-8\";\n\n@if $border-box-sizing == true {\n html { // http://bit.ly/1qk2tVR\n box-sizing: border-box;\n }\n\n * {\n &,\n &::after,\n &::before {\n box-sizing: inherit;\n }\n }\n}\n","@import \"chartist-settings\";\n\n@mixin ct-responsive-svg-container($width: 100%, $ratio: $ct-container-ratio) {\n\tdisplay: block;\n\tposition: relative;\n\twidth: $width;\n\n\t&:before {\n\t\tdisplay: block;\n\t\tfloat: left;\n\t\tcontent: \"\";\n\t\twidth: 0;\n\t\theight: 0;\n\t\tpadding-bottom: $ratio * 100%;\n\t}\n\n\t&:after {\n\t\tcontent: \"\";\n\t\tdisplay: table;\n\t\tclear: both;\n\t}\n\n\t> svg {\n\t\tdisplay: block;\n\t\tposition: absolute;\n\t\ttop: 0;\n\t\tleft: 0;\n\t}\n}\n\n@mixin ct-align-justify($ct-text-align: $ct-text-align, $ct-text-justify: $ct-text-justify) {\n\talign-items: $ct-text-align;\n\tjustify-content: $ct-text-justify;\n\n\t// Fallback to text-align for non-flex browsers\n\t@if ($ct-text-justify == 'flex-start') {\n\t\ttext-align: left;\n\t} @else if ($ct-text-justify == 'flex-end') {\n\t\ttext-align: right;\n\t} @else {\n\t\ttext-align: center;\n\t}\n}\n\n@mixin ct-chart-label($ct-text-color: $ct-text-color, $ct-text-size: $ct-text-size, $ct-text-line-height: $ct-text-line-height) {\n\tfill: $ct-text-color;\n\tcolor: $ct-text-color;\n\tfont-size: $ct-text-size;\n\tline-height: $ct-text-line-height;\n}\n\n@mixin ct-chart-grid($ct-grid-color: $ct-grid-color, $ct-grid-width: $ct-grid-width, $ct-grid-dasharray: $ct-grid-dasharray) {\n\tstroke: $ct-grid-color;\n\tstroke-width: $ct-grid-width;\n\n\t@if ($ct-grid-dasharray) {\n\t\tstroke-dasharray: $ct-grid-dasharray;\n\t}\n}\n\n@mixin ct-chart-point($ct-point-size: $ct-point-size, $ct-point-shape: $ct-point-shape) {\n\tstroke-width: $ct-point-size;\n\tstroke-linecap: $ct-point-shape;\n}\n\n@mixin ct-chart-line($ct-line-width: $ct-line-width, $ct-line-dasharray: $ct-line-dasharray) {\n\tfill: none;\n\tstroke-width: $ct-line-width;\n\n\t@if ($ct-line-dasharray) {\n\t\tstroke-dasharray: $ct-line-dasharray;\n\t}\n}\n\n@mixin ct-chart-area($ct-area-opacity: $ct-area-opacity) {\n\tstroke: none;\n\tfill-opacity: $ct-area-opacity;\n}\n\n@mixin ct-chart-bar($ct-bar-width: $ct-bar-width) {\n\tfill: none;\n\tstroke-width: $ct-bar-width;\n}\n\n//@mixin ct-chart-donut($ct-donut-width: $ct-donut-width) {\n// fill: none;\n// stroke-width: $ct-donut-width;\n//}\n\n@mixin ct-chart-series-color($color) {\n\t.ct-point, .ct-line, .ct-bar /*, .ct-slice-donut*/\n\t{\n\t\tstroke: $color;\n\t}\n\n\t.ct-slice-pie, .ct-area {\n\t\tfill: $color;\n\t}\n}\n\n@mixin ct-chart(\n\t$ct-container-ratio: $ct-container-ratio,\n\t$ct-text-color: $ct-text-color,\n\t$ct-text-size: $ct-text-size,\n\t$ct-grid-color: $ct-grid-color,\n\t$ct-grid-width: $ct-grid-width,\n\t$ct-grid-dasharray: $ct-grid-dasharray,\n\t$ct-point-size: $ct-point-size,\n\t$ct-point-shape: $ct-point-shape,\n\t$ct-line-width: $ct-line-width,\n\t$ct-bar-width: $ct-bar-width,\n\t//$ct-donut-width: $ct-donut-width,\n\t$ct-series-names: $ct-series-names,\n\t$ct-series-colors: $ct-series-colors) {\n\n\t.ct-zoom-rect {\n\t\tfill: rgba(200, 100, 100, 0.3);\n\t\tstroke: #ff2b12;\n\t}\n\n\t.ct-axis-title {\n\t\tfill: $ct-axis-label-color;\n\t\t@include noselect;\n\t}\n\n\t// --- Label ---\n\t.ct-label {\n\t\t@include ct-chart-label($ct-text-color, $ct-text-size);\n\n\t\t&.ct-horizontal.ct-start {\n\t\t\t@include ct-align-justify(flex-end, flex-start);\n\t\t\ttext-anchor: start; // Fallback for browsers that don't support foreignObjects\n\t\t}\n\n\t\t&.ct-horizontal.ct-end {\n\t\t\t@include ct-align-justify(flex-start, flex-start);\n\t\t\ttext-anchor: start;\n\n\t\t\t// EDIT: added for angled horiz labels\n\t\t\ttransform: translate(-4px, 0%) rotate(45deg);\n\t\t}\n\n\t\t&.ct-vertical.ct-start {\n\t\t\t@include ct-align-justify(flex-end, flex-end);\n\t\t\ttext-anchor: end;\n\n\t\t\ttransform: translate(0, 20%);\n\t\t}\n\n\t\t&.ct-vertical.ct-end {\n\t\t\t@include ct-align-justify(flex-end, flex-start);\n\t\t\ttext-anchor: start;\n\t\t}\n\t}\n\n\t.ct-chart-line .ct-label,\n\t.ct-chart-bar .ct-label {\n\t\tdisplay: flex;\n\t}\n\n\t// --- Bar labels ---\n\n\t.ct-chart-bar {\n\t\t.ct-label.ct-horizontal.ct-start {\n\t\t\t@include ct-align-justify(flex-end, center);\n\t\t\ttext-anchor: start;\n\t\t}\n\n\t\t.ct-label.ct-horizontal.ct-end {\n\t\t\t@include ct-align-justify(flex-start, center);\n\t\t\ttext-anchor: start;\n\t\t}\n\n\t\t&.ct-horizontal-bars .ct-label {\n\t\t\t&.ct-horizontal.ct-start {\n\t\t\t\t@include ct-align-justify(flex-end, flex-start);\n\t\t\t\ttext-anchor: start;\n\t\t\t}\n\n\t\t\t&.ct-horizontal.ct-end {\n\t\t\t\t@include ct-align-justify(flex-start, flex-start);\n\t\t\t\ttext-anchor: start;\n\t\t\t}\n\n\t\t\t&.ct-vertical.ct-start {\n\t\t\t\t//@include ct-chart-label($ct-text-color, $ct-text-size, center, $ct-vertical-text-justify);\n\t\t\t\t@include ct-align-justify(center, flex-end);\n\t\t\t\ttext-anchor: end;\n\t\t\t}\n\n\t\t\t&.ct-vertical.ct-end {\n\t\t\t\t@include ct-align-justify(center, flex-start);\n\t\t\t\ttext-anchor: end;\n\t\t\t}\n\t\t}\n\t}\n\n\t.ct-grid {\n\t\t@include ct-chart-grid($ct-grid-color, $ct-grid-width, $ct-grid-dasharray);\n\t}\n\n\t.ct-point {\n\t\t@include ct-chart-point($ct-point-size, $ct-point-shape);\n\t}\n\n\t.ct-line {\n\t\t@include ct-chart-line($ct-line-width);\n\t}\n\n\t.ct-with-area .ct-line {\n\t\tstroke-width: 1px;\n\t}\n\n\t.ct-area {\n\t\t@include ct-chart-area();\n\t}\n\n\t.ct-bar {\n\t\t@include ct-chart-bar($ct-bar-width);\n\t}\n\n\t//.ct-slice-donut {\n\t// @include ct-chart-donut($ct-donut-width);\n\t//}\n\n\t@if $ct-include-colored-series {\n\t\t@for $i from 0 to length($ct-series-names) {\n\t\t\t.ct-series-#{nth($ct-series-names, $i + 1)} {\n\t\t\t\t$color: nth($ct-series-colors, $i + 1);\n\t\t\t\t@include ct-chart-series-color($color);\n\t\t\t}\n\t\t}\n\t}\n}\n\n@if $ct-include-classes {\n\t@include ct-chart();\n\n\t@if $ct-include-alternative-responsive-containers {\n\t\t@for $i from 0 to length($ct-scales-names) {\n\t\t\t.#{nth($ct-scales-names, $i + 1)} {\n\t\t\t\t@include ct-responsive-svg-container($ratio: nth($ct-scales, $i + 1));\n\t\t\t}\n\t\t}\n\t}\n}\n","// Scales for responsive SVG containers\n$ct-scales_orig: ((1), (15/16), (8/9), (5/6), (4/5), (3/4), (2/3), (5/8), (1/1.618), (3/5), (9/16), (8/15), (1/2), (2/5), (3/8), (1/3), (1/4)) !default;\n$ct-scales-names_orig: (ct-square, ct-minor-second, ct-major-second, ct-minor-third, ct-major-third, ct-perfect-fourth, ct-perfect-fifth, ct-minor-sixth, ct-golden-section, ct-major-sixth, ct-minor-seventh, ct-major-seventh, ct-octave, ct-major-tenth, ct-major-eleventh, ct-major-twelfth, ct-double-octave) !default;\n\n$ct-scales: ((10/16), (2/3));\n$ct-scales-names: (ct-wide, ct-narrow);\n\n\n// Container ratio\n$ct-container-ratio: (1/1.618) !default;\n\n// Text styles for labels\n$ct-text-color: rgba(white, 0.8) !default;\n$ct-text-size: 0.75rem !default;\n$ct-text-align: flex-start !default;\n$ct-text-justify: flex-start !default;\n$ct-text-line-height: 1;\n\n$ct-axis-label-color: rgba(white, 0.8) !default;\n\n// Grid styles\n$ct-grid-color: rgba(white, 0.3) !default;\n$ct-grid-dasharray: 2px !default;\n$ct-grid-width: 1px !default;\n\n// Line chart properties\n$ct-line-width: 2px !default;\n$ct-line-dasharray: false !default;\n$ct-point-size: 4px !default;\n// Line chart point, can be either round or square\n$ct-point-shape: round !default;\n// Area fill transparency between 0 and 1\n$ct-area-opacity: 0.3 !default;\n\n// Bar chart bar width\n$ct-bar-width: 10px !default;\n\n// Donut width (If donut width is to big it can cause issues where the shape gets distorted)\n$ct-donut-width: 60px !default;\n\n// If set to true it will include the default classes and generate CSS output. If you're planning to use the mixins you\n// should set this property to false\n$ct-include-classes: true !default;\n\n// If this is set to true the CSS will contain colored series. You can extend or change the color with the\n// properties below\n$ct-include-colored-series: $ct-include-classes !default;\n\n// If set to true this will include all responsive container variations using the scales defined at the top of the script\n$ct-include-alternative-responsive-containers: $ct-include-classes !default;\n\n// Series names and colors. This can be extended or customized as desired. Just add more series and colors.\n$ct-series-names: (a, b, c, d, e) !default;\n$ct-series-colors: (\n #f05b4f,\n #6188e2,\n #59922b,\n #eacf7d,\n #a748ca\n) !default;\n","\n@mixin click-through() {\n\tpointer-events: none;\n}\n\n\n// Disallow text selection\n@mixin noselect() {\n\t-webkit-user-select: none;\n\t-khtml-user-select: none;\n\t-moz-user-select: none;\n\t-ms-user-select: none;\n\tuser-select: none;\n}\n\n\n// Allow text selection\n@mixin can-select() {\n\t-webkit-user-select: text;\n\t-khtml-user-select: text;\n\t-moz-user-select: text;\n\t-ms-user-select: text;\n\tuser-select: text;\n\n\tcursor: text;\n}\n","@import \"normalize\";\n@import \"lib/bourbon/bourbon\";\n\n@import \"grid-settings\";\n@import \"lib/neat/neat\";\n\n@import \"utils/index\";\n\n@import \"lib/chartist/chartist\";\n\n$form-label-w: 130px;\n$form-label-gap: 8px;\n$form-field-w: 250px;\n\n$c-form-label-fg: white;\n$c-form-field-bg: #303030;\n$c-form-field-fg: white;\n$c-form-highlight: #217b3a;\n$c-form-highlight-a: #28bc65;\n\n@function dist($x) {\n\t@return modular-scale($x, 1rem, $golden);\n}\n\n@function fsize($x) {\n\t@return modular-scale($x, 1em, $major-second);\n}\n\n.center {\n\ttext-align: center;\n}\n\n.invis {\n\tvisibility: hidden;\n}\n\n.hidden {\n\tdisplay: none;\n}\n\n@import \"layout/index\";\n@import \"form/index\";\n\n// import all our pages\n@import \"pages/wifi\";\n@import \"pages/home\";\n@import \"pages/wfm\";\n@import \"pages/about\";\n\n@include media($tablet-min) {\n\t.mq-phone { display: none; }\n}\n\n@include media($phone) {\n\t.mq-tablet-min { display: none; }\n}\n\n@include media($normal-min) {\n\t.mq-tablet-max { display: none; }\n}\n\n@include media($tablet-max) {\n\t.mq-normal-min { display: none; }\n}\n","html {\n\tfont-family: Arial, sans-serif;\n\tcolor: #D0D0D0;\n\tbackground: #131315;\n}\n\nhtml, body {\n\t@include naked();\n\twidth: 100%;\n\theight: 100%;\n\toverflow: hidden;\n}\n\na, a:visited, a:link {\n\tcolor: #5abfff;\n\ttext-decoration: none;\n}\n\na:hover {\n\tcolor: #5abfff;\n\ttext-decoration: underline;\n}\n","// Add a highlight for debugging\n@mixin highlight($color) {\n\toutline: 1px solid $color;\n\tbackground: rgba($color, .05);\n\tbox-shadow: 0 0 2px 2px rgba($color, .2), inset 0 0 2px 2px rgba($color, .2);\n}\n\n// Ellipsis, but for block elements\n@mixin block-ellipsis($width: 100%) {\n\tdisplay: block;\n\tmax-width: $width;\n\toverflow: hidden;\n\ttext-overflow: ellipsis;\n\twhite-space: nowrap;\n\tword-wrap: normal;\n}\n\n// No margins, padding, borders\n@mixin naked() {\n\tborder: 0 none;\n\tmargin: 0;\n\tpadding: 0;\n\ttext-decoration: none;\n}\n\n@mixin translate($x, $y) {\n\t@include transform(translate($x, $y));\n}\n\n// Disallow wrapping\n@mixin nowrap() {\n\twhite-space: nowrap;\n\tword-wrap: normal;\n}\n","/* Main outer container */\n#outer {\n\tdisplay: flex;\n\n\tposition: absolute;\n\twidth: 100%;\n\theight: 100%;\n\tleft: 0;\n\tright: 0;\n\ttop: 0;\n\tbottom: 0;\n\toverflow: hidden;\n\n\tflex-direction: row;\n}\n\n@include media($phone) {\n\t#outer {\n\t\tdisplay: block;\n\t\toverflow-y: scroll;\n\t}\n}\n","@charset \"UTF-8\";\n\n/// Outputs a media-query block with an optional grid context (the total number of columns used in the grid).\n///\n/// @param {List} $query\n/// A list of media query features and values, where each `$feature` should have a corresponding `$value`.\n/// For a list of valid values for `$feature`, click [here](http://www.w3.org/TR/css3-mediaqueries/#media1).\n///\n/// If there is only a single `$value` in `$query`, `$default-feature` is going to be used.\n///\n/// The number of total columns in the grid can be set by passing `$columns` at the end of the list (overrides `$total-columns`).\n///\n///\n/// @param {Number (unitless)} $total-columns [$grid-columns]\n/// - Number of columns to use in the new grid context. Can be set as a shorthand in the first parameter.\n///\n/// @example scss - Usage\n/// .responsive-element {\n/// @include media(769px) {\n/// @include span-columns(6);\n/// }\n/// }\n///\n/// .new-context-element {\n/// @include media(min-width 320px max-width 480px, 6) {\n/// @include span-columns(6);\n/// }\n/// }\n///\n/// @example css - CSS Output\n/// @media screen and (min-width: 769px) {\n/// .responsive-element {\n/// display: block;\n/// float: left;\n/// margin-right: 2.35765%;\n/// width: 48.82117%;\n/// }\n///\n/// .responsive-element:last-child {\n/// margin-right: 0;\n/// }\n/// }\n///\n/// @media screen and (min-width: 320px) and (max-width: 480px) {\n/// .new-context-element {\n/// display: block;\n/// float: left;\n/// margin-right: 4.82916%;\n/// width: 100%;\n/// }\n///\n/// .new-context-element:last-child {\n/// margin-right: 0;\n/// }\n/// }\n\n@mixin media($query: $feature $value $columns, $total-columns: $grid-columns) {\n @if length($query) == 1 {\n @media screen and ($default-feature: nth($query, 1)) {\n $default-grid-columns: $grid-columns;\n $grid-columns: $total-columns !global;\n @content;\n $grid-columns: $default-grid-columns !global;\n }\n } @else {\n $loop-to: length($query);\n $media-query: \"screen and \";\n $default-grid-columns: $grid-columns;\n $grid-columns: $total-columns !global;\n\n @if is-not(is-even(length($query))) {\n $grid-columns: nth($query, $loop-to) !global;\n $loop-to: $loop-to - 1;\n }\n\n $i: 1;\n @while $i <= $loop-to {\n $media-query: $media-query + \"(\" + nth($query, $i) + \": \" + nth($query, $i + 1) + \") \";\n\n @if ($i + 1) != $loop-to {\n $media-query: $media-query + \"and \";\n }\n\n $i: $i + 2;\n }\n\n @media #{$media-query} {\n @content;\n $grid-columns: $default-grid-columns !global;\n }\n }\n}\n","#menu {\n\t$menu-bg: #2bab5f;\n\n\tflex: 0 0 15rem;\n\tbackground: $menu-bg;\n\n\t& > * {\n\t\tdisplay: block;\n\t\ttext-decoration: none;\n\t\tpadding: dist(-1) dist(0);\n\n\t\t@include nowrap;\n\t\t@include noselect;\n\t}\n\n\t#brand {\n\t\tcolor: white;\n\t\tbackground: darken($menu-bg, 10%);\n\t\tfont-size: 120%;\n\t\ttext-align: center;\n\t\tposition:relative;\n\n\t\tmargin-bottom: dist(0);\n\n\t\t@include media($phone) {\n\t\t\tbackground: $menu-bg;\n\t\t\tcursor: pointer;\n\n\t\t\t&:after {\n\t\t\t\tposition: absolute;\n\t\t\t\tcolor: rgba(black, .2);\n\t\t\t\tright: dist(0);\n\t\t\t\tcontent: '>';\n\t\t\t\ttop:50%;\n\t\t\t\tfont-size: 120%;\n\t\t\t\tfont-weight: bold;\n\t\t\t\ttransform: translate(0,-50%) rotate(90deg);\n\t\t\t}\n\t\t}\n\t}\n\t&.expanded #brand {\n\t\tbackground: darken($menu-bg, 10%);\n\n\t\t@include media($phone) {\n\t\t\t&:after { transform: translate(0,-50%) rotate(-90deg) }\n\t\t}\n\t}\n\n\n\ta {\n\t\tfont-size: 130%;\n\t\tcolor: white;\n\n\t\t$hl: #1bd886;\n\t\ttransition: background-color 0.2s;\n\t\ttext-shadow: 0 0 5px rgba(black, .4);\n\n\t\t&:hover, &.selected {\n\t\t\tbackground: $hl;\n\t\t\ttext-shadow: 0 0 5px rgba(black, .6);\n\t\t}\n\n\t\t&.selected {\n\t\t\tposition: relative;\n\t\t\tbox-shadow: 0 0 5px rgba(black, .5);\n\t\t}\n\n\t\t&:before {\n\t\t\tcontent: \"▸\";\n\t\t\tpadding-right: .5rem;\n\t\t\tposition: relative;\n\t\t\ttop: -0.1rem;\n\t\t}\n\n\t\t@include media($phone) {\n\t\t\tdisplay: none;\n\t\t}\n\t}\n\n\t&.expanded a { display:block }\n\n\t@include media($tablet) {\n\t\t#brand {\n\t\t\tfont-size: 95%;\n\t\t\tmargin-bottom: dist(-1);\n\t\t}\n\n\t\ta { font-size: 105%; }\n\n\t\tflex-basis: 10rem;\n\n\t\t& > * { padding: dist(-2) dist(-1);\t}\n\t}\n}\n","// Scaling Variables\n$golden: 1.618;\n$minor-second: 1.067;\n$major-second: 1.125;\n$minor-third: 1.2;\n$major-third: 1.25;\n$perfect-fourth: 1.333;\n$augmented-fourth: 1.414;\n$perfect-fifth: 1.5;\n$minor-sixth: 1.6;\n$major-sixth: 1.667;\n$minor-seventh: 1.778;\n$major-seventh: 1.875;\n$octave: 2;\n$major-tenth: 2.5;\n$major-eleventh: 2.667;\n$major-twelfth: 3;\n$double-octave: 4;\n\n$modular-scale-ratio: $perfect-fourth !default;\n$modular-scale-base: em($em-base) !default;\n\n@function modular-scale($increment, $value: $modular-scale-base, $ratio: $modular-scale-ratio) {\n $v1: nth($value, 1);\n $v2: nth($value, length($value));\n $value: $v1;\n\n // scale $v2 to just above $v1\n @while $v2 > $v1 {\n $v2: ($v2 / $ratio); // will be off-by-1\n }\n @while $v2 < $v1 {\n $v2: ($v2 * $ratio); // will fix off-by-1\n }\n\n // check AFTER scaling $v2 to prevent double-counting corner-case\n $double-stranded: $v2 > $v1;\n\n @if $increment > 0 {\n @for $i from 1 through $increment {\n @if $double-stranded and ($v1 * $ratio) > $v2 {\n $value: $v2;\n $v2: ($v2 * $ratio);\n } @else {\n $v1: ($v1 * $ratio);\n $value: $v1;\n }\n }\n }\n\n @if $increment < 0 {\n // adjust $v2 to just below $v1\n @if $double-stranded {\n $v2: ($v2 / $ratio);\n }\n\n @for $i from $increment through -1 {\n @if $double-stranded and ($v1 / $ratio) < $v2 {\n $value: $v2;\n $v2: ($v2 / $ratio);\n } @else {\n $v1: ($v1 / $ratio);\n $value: $v1;\n }\n }\n }\n\n @return $value;\n}\n","#content {\n\tflex-grow: 1;\n\tposition: relative;\n\n\tpadding: dist(0);\n\t@include media($phone) {\n\t\tpadding: dist(-1);\n\t}\n\n\toverflow-y: auto;\n\n\t& > * {\n\t\tmargin-left: auto;\n\t\tmargin-right: auto;\n\t}\n\n\th1 {\n\t\ttext-align: center;\n\t\tfont-size: fsize(7);\n\t\tmargin-top: 0;\n\t\tmargin-bottom: dist(0);\n\t}\n\n\th2 {\n\t\tfont-size: fsize(3);\n\t\tmargin-bottom: dist(-1);\n\t}\n\n\ttd, th {\n\t\tpadding: dist(-2);\n\t}\n\n\ttbody th {\n\t\ttext-align: right;\n\t\twidth: $form-label-w;\n\t\tcolor: $c-form-label-fg;\n\t}\n}\n\n// Loader wheel in top right corner\n#loader {\n\tposition: absolute;\n\tright: dist(1);\n\ttop: dist(1);\n\n\ttransition: opacity .2s;\n\topacity: 0;\n\n\t@include media($phone) {\n\t\ttop: dist(0);\n\t\tright: dist(0);\n\t}\n\n\t&.show {\n\t\topacity:1;\n\t}\n}\n",".Box {\n\tdisplay: block;\n\tmax-width: 900px;\n\n\tmargin-top: dist(0);\n\tpadding: dist(-1) dist(0);\n\n\t@include media($phone) {\n\t\tmargin-top: dist(-1);\n\t}\n\n\th1 + & {\n\t\tmargin-top: 0;\n\t}\n\n\th2 {\n\t\tmargin-top: 0;\n\t}\n\n\tborder-radius: 3px;\n\tbackground-color: rgba(white, .07);\n\n\t&.wide {\n\t\twidth: initial;\n\t\tmax-width: initial;\n\t}\n\n\t&.medium {\n\t\tmax-width: 1200px;\n\t}\n}\n",".Modal {\n\tposition: fixed;\n\twidth: 100%; height: 100%;\n\tleft: 0; top: 0; right: 0; bottom: 0;\n\n\tdisplay: flex;\n\tjustify-content: center;\n\talign-items: center;\n\n\ttransition: opacity .5s;\n\tbackground: rgba(black, .65);\n\topacity: 0;\n\t&.visible { opacity: 1 }\n\t&.hidden { display: none }\n}\n\n.Dialog {\n\tmargin: dist(-1);\n\tpadding: dist(0);\n\toverflow: hidden;\n\n\tmax-width: 100%;\n\tmax-height: 100%;\n\tflex: 0 1 30rem;\n\t//min-height: 15rem;\n\n\tbackground: #1c1c1e;\n\tborder-left: 6px solid $c-form-highlight;\n\tborder-right: 6px solid $c-form-highlight;\n\tbox-shadow: 0 0 2px 0 #434349, 0 0 6px 0 black;\n\n\tborder-radius: 6px;\n\n\th1,h2 {\n\t\tmargin-top:0;\n\t}\n\n\tp:last-child {\n\t\tmargin-bottom: 0;\n\t}\n}\n\n// \"toast\"\n.ErrMsg {\n\tposition: fixed;\n\tbottom: dist(2);\n\tpadding: dist(-1) dist(0);\n\n\t// center horizontally\n\tleft: 50%;\n\t@include translate(-50%,0);\n\t// hack to remove blur in chrome\n\t-webkit-font-smoothing: subpixel-antialiased;\n\t-webkit-transform: translateZ(0) scale(1.0, 1.0);\n\n\tbackground: #d03e42;\n\tcolor: white;\n\ttext-shadow: 0 0 2px black;\n\tbox-shadow: 0 0 6px 0 rgba(black, .6);\n\tborder-radius: 5px;\n\n\tmax-width: 80%;\n\n\t@include media($phone) {\n\t\twidth: calc(100% - #{dist(0)});\n\t}\n\n\ttransition: opacity .5s;\n\topacity: 0;\n\t&.visible { opacity: 1 }\n\t&.hidden { display: none }\n}\n","@charset \"UTF-8\";\n\n/// A mixin for generating vendor prefixes on non-standardized properties.\n///\n/// @param {String} $property\n/// Property to prefix\n///\n/// @param {*} $value\n/// Value to use\n///\n/// @param {List} $prefixes\n/// Prefixes to define\n///\n/// @example scss - Usage\n/// .element {\n/// @include prefixer(border-radius, 10px, webkit ms spec);\n/// }\n///\n/// @example css - CSS Output\n/// .element {\n/// -webkit-border-radius: 10px;\n/// -moz-border-radius: 10px;\n/// border-radius: 10px;\n/// }\n///\n/// @require {variable} $prefix-for-webkit\n/// @require {variable} $prefix-for-mozilla\n/// @require {variable} $prefix-for-microsoft\n/// @require {variable} $prefix-for-opera\n/// @require {variable} $prefix-for-spec\n\n@mixin prefixer($property, $value, $prefixes) {\n @each $prefix in $prefixes {\n @if $prefix == webkit {\n @if $prefix-for-webkit {\n -webkit-#{$property}: $value;\n }\n } @else if $prefix == moz {\n @if $prefix-for-mozilla {\n -moz-#{$property}: $value;\n }\n } @else if $prefix == ms {\n @if $prefix-for-microsoft {\n -ms-#{$property}: $value;\n }\n } @else if $prefix == o {\n @if $prefix-for-opera {\n -o-#{$property}: $value;\n }\n } @else if $prefix == spec {\n @if $prefix-for-spec {\n #{$property}: $value;\n }\n } @else {\n @warn \"Unrecognized prefix: #{$prefix}\";\n }\n }\n}\n\n@mixin disable-prefix-for-all() {\n $prefix-for-webkit: false !global;\n $prefix-for-mozilla: false !global;\n $prefix-for-microsoft: false !global;\n $prefix-for-opera: false !global;\n $prefix-for-spec: false !global;\n}\n","@import \"fancy_button_mixins\";\n\n#{$all-buttons}, .button {\n\t@include fancy-btn-base();\n\n\t// fontello\n/*\t&::before {\n\t\tmargin-right: .4em;\n\t}\n\n\t&.icononly::before {\n\t\tmargin-right: 0;\n\t}*/\n\n\t&.narrow {\n\t\tmin-width: initial;\n\t}\n\n\ttext-shadow: 1.5px 1.5px 2px rgba(black, 0.8);\n}\n\n\n\n\n$btn-gray-f: #DDDDDD;\n$btn-gray-b: #505050;\n$btn-gray-l: #343434; // line\n\n$btn-green-f: #FEFEFE;\n$btn-green-b: #2ca94b;\n$btn-green-fa: #FEFEFE;\n$btn-green-ba: #28ba5c;\n\n$btn-red-f: #FEFEFE;\n$btn-red-b: #D04E51;\n$btn-red-fa: #FEFEFE;\n$btn-red-ba: #d4403f;\n\n$btn-blue-f: #FEFEFE;\n$btn-blue-b: #3983cd;\n$btn-blue-fa: #FEFEFE;\n$btn-blue-ba: #2076C6;\n\n$btn-orange-f: #FEFEFE;\n$btn-orange-b: #dd8751;\n$btn-orange-fa: #FEFEFE;\n$btn-orange-ba: #C6733F;\n\n\ninput[type=\"submit\"], .btn-green {\n\t@include fancy-btn-colors($btn-green-f, $btn-green-b, $btn-green-fa, $btn-green-ba)\n}\n\ninput[type=\"reset\"], .btn-red {\n\t@include fancy-btn-colors($btn-red-f, $btn-red-b, $btn-red-fa, $btn-red-ba)\n}\n\n&.btn-blue {@include fancy-btn-colors($btn-blue-f, $btn-blue-b, $btn-blue-fa, $btn-blue-ba)}\n//&, &.orange {@include fancy-btn-colors($btn-orange-f, $btn-orange-b, $btn-orange-fa, $btn-orange-ba)}\n\n/*\n\n&[type=\"submit\"],\n&.gray-green {\n\t@include fancy-btn-colors-full(\n\t\t\t$btn-gray-f, $btn-gray-b, $btn-gray-l,\n\t\t\t$btn-green-fa, $btn-green-ba, darken($btn-green-ba, 16)\n\t)\n}\n\n&.gray-blue {\n\t@include fancy-btn-colors-full(\n\t\t\t$btn-gray-f, $btn-gray-b, $btn-gray-l,\n\t\t\t$btn-blue-fa, $btn-blue-ba, darken($btn-blue-ba, 16)\n\t)\n}\n\n&.gray-red {\n\t@include fancy-btn-colors-full(\n\t\t\t$btn-gray-f, $btn-gray-b, $btn-gray-l,\n\t\t\t$btn-red-fa, $btn-red-ba, darken($btn-red-ba, 16)\n\t)\n}\n\n&.gray-orange {\n\t@include fancy-btn-colors-full(\n\t\t\t$btn-gray-f, $btn-gray-b, $btn-gray-l,\n\t\t\t$btn-orange-fa, $btn-orange-ba, darken($btn-orange-ba, 16)\n\t)\n}\n\n// No change on hover - to be used for disabled buttons\n&.gray-gray {\n\t@include fancy-btn-colors-full(\n\t\t\t$btn-gray-f, $btn-gray-b, $btn-gray-l,\n\t\t\t$btn-gray-f, $btn-gray-b, $btn-gray-l\n\t)\n}\n\n*/\n","\n// Button styling\n@mixin fancy-btn-base() {\n\ttext-align: center;\n\tcursor: pointer;\n\tdisplay: inline-block;\n\tborder-radius: 2px;\n\tpadding: 0 0.6em;\n\tborder: 0 none;\n\toutline: 0 none !important;\n\tline-height: 1.8em;\n\tfont-size: 1.1em;\n\tmargin-bottom: 3px;\n\tmin-width: 5em;\n\n\t@include noselect();\n\n\t//&[class^=\"icon-\"]::before, &[class*=\" icon-\"]::before {\n\t//\tmargin-left:0;\n\t//}\n\n\t&:active {\n\t\tposition: relative;\n\t\ttop: 2px;\n\t}\n\n\t//&, &:active, &:hover, &:visited {\n\t//\ttext-decoration: none;\n\t//}\n}\n\n@mixin fancy-btn-colors-full($text_p, $back_p, $side_p, $text_a, $back_a, $side_a) {\n\tbackground-color: $back_p;\n\tbox-shadow: 0 3px 0 $side_p;\n\ttext-decoration: none !important;\n\n\t&, &:link, &:visited {\n\t\tcolor: $text_p;\n\t}\n\n\t&:hover, &:active, &.active, &.selected {\n\t\tbackground-color: $back_a;\n\t\tcolor: $text_a;\n\t}\n\n\t&:hover, &.selected, &.active {\n\t\tbox-shadow: 0 3px 0 $side_a;\n\t}\n\n\t// thinner shadow\n\t&:active {\n\t\tbox-shadow: 0 1px 0 $side_a;\n\t}\n}\n\n@mixin fancy-btn-colors($text_p, $back_p, $text_a, $back_a) {\n\t@include fancy-btn-colors-full($text_p, $back_p, darken($back_p, 14), $text_a, $back_a, darken($back_a, 16));\n}\n","@import \"buttons\";\n\n#{$all-text-inputs}, select {\n\tborder: 0 none;\n\tborder-bottom: 2px solid $c-form-highlight;\n\tbackground-color: $c-form-field-bg;\n\tcolor: $c-form-field-fg;\n\tpadding: 6px;\n\tline-height: 1em;\n\toutline: 0 none !important;\n\t-moz-outline: 0 none !important;\n\tfont-weight: normal;\n\n\t&:focus, &:hover {\n\t\tborder-bottom-color: $c-form-highlight-a;\n\t}\n}\n\n#{$all-text-inputs} {\n\t@include can-select();\n}\n\ntextarea {\n\tfont-family: monospace;\n\tline-height: 1.2em;\n\tdisplay: block; // fixes weird bottom margin\n}\n\n@import \"select\";\n","\n// target chrome only\n@media screen and (-webkit-min-device-pixel-ratio: 0) {\n\tselect { padding-right: 18px }\n}\n\nselect {\n\t-webkit-appearance: none;\n\t-moz-appearance: none;\n\tappearance: none;\n\n\tcursor: pointer;\n\tline-height: 1.4em;\n\tpadding: 3.5px;\n\n\tpadding-right: 1em;\n\n\t// hack for firefox to disable dotted outline\n\t&:-moz-focusring {\n\t\tcolor: transparent;\n\t\ttext-shadow: 0 0 0 $c-form-field-fg;\n\t}\n\n\toption {\n\t\tbackground: $c-form-field-bg;\n\t}\n}\n\nlabel.select-wrap {\n\tposition: relative;\n\tdisplay: inline !important;\n\tmargin: 0 !important;\n\tpadding: 0 !important;\n\twidth: auto !important;\n\n\t&:after {\n\t\tcontent: '<>'; /* will be rotated */\n\t\tfont-family: \"Consolas\", monospace;\n\t\tfont-weight: bold;\n\t\tcolor: $c-form-highlight-a;\n\n\t\ttop: 50%;\n\t\t@include transform(translate(0, -50%) rotate(90deg));\n\n\t\tright: 2px;\n\n\t\tposition:absolute;\n\t\tz-index: 100;\n\n\t\tpointer-events: none;\n\t}\n}\n","// Unified Form wrapper\nform { @include naked(); }\n\n#{$all-text-inputs}, select, label.select-wrap {\n\twidth: $form-field-w;\n}\n\nform .Row {\n\tvertical-align: middle;\n\tmargin: 14px auto;\n\ttext-align: left;\n\n\tdisplay: flex;\n\tflex-direction: row;\n\n\t&:first-child {\n\t\tmargin-top: 0;\n\t}\n\n\t&:last-child {\n\t\tmargin-bottom: 0;\n\t}\n\n\t.spacer {\n\t\twidth: $form-label-w;\n\n\t\t@include media($phone) {\n\t\t\tdisplay: none;\n\t\t}\n\t}\n\n\t&.buttons {\n\t\tinput, .button {\n\t\t\tmargin-right: dist(-1);\n\t\t}\n\t}\n\n\t&.centered {\n\t\tjustify-content: center;\n\t}\n\n\t&.message {\n\t\tfont-size: 1em;\n\t\t//margin-left: $label-gap + $w-labels;\n\t\ttext-shadow: 1px 1px 3px black;\n\t\ttext-align: center;\n\n\t\t&.error {\n\t\t\tcolor: crimson;\n\t\t}\n\n\t\t&.ok {\n\t\t\tcolor: #0fe851;\n\t\t}\n\t}\n\n\t&.separator {\n\t\tpadding-top: 14px;\n\t\tborder-top: 2px solid rgba(255, 255, 255, 0.1);\n\t}\n\n\ttextarea {\n\t\tdisplay: inline-block;\n\t\tvertical-align: top;\n\t\tmin-height: 10rem;\n\t\tflex-grow: 1;\n\n\t\tresize: vertical;\n\t}\n\n\tlabel {\n\t\tfont-weight: bold;\n\t\tcolor: $c-form-label-fg;\n\t\tdisplay: inline-block;\n\t\twidth: $form-label-w;\n\t\ttext-align: right;\n\t\ttext-shadow: 1px 1px 3px black;\n\n\t\tpadding: $form-label-gap;\n\t\talign-self: flex-start;\n\n\t\t@include noselect;\n\t}\n\n\t.checkbox-wrap {\n\t\tdisplay: inline-block;\n\t\twidth: $form-label-w;\n\t\tpadding: $form-label-gap;\n\t\ttext-align: right;\n\t\talign-self: flex-start;\n\n\t\tinput[type=checkbox] {\n\t\t\tmargin: auto;\n\t\t\twidth: auto;\n\t\t\theight: auto;\n\t\t}\n\n\t\t& + label {\n\t\t\twidth: $form-field-w;\n\t\t\tpadding-left: 0;\n\t\t\ttext-align: left;\n\t\t\tcursor: pointer;\n\t\t}\n\t}\n\n\t// special phone style\n\t@include media($phone) {\n\t\tflex-direction: column;\n\n\t\t&.buttons, &.centered {\n\t\t\tflex-direction: row;\n\t\t}\n\n\t\t&.buttons {\n\t\t\tjustify-content: center;\n\n\t\t\t// remove margin on lats button\n\t\t\t:last-child {\n\t\t\t\tmargin-right:0;\n\t\t\t}\n\t\t}\n\n\t\tlabel {\n\t\t\tpadding-left: 0;\n\t\t\ttext-align: left;\n\t\t\twidth: auto;\n\t\t}\n\n\t\t.checkbox-wrap {\n\t\t\torder: 1;\n\t\t\ttext-align: left;\n\t\t\tpadding-bottom: 0;\n\n\t\t\tborder-radius: .4px;\n\t\t\twidth: auto;\n\n\t\t\t& + label {\n\t\t\t\twidth: auto;\n\t\t\t}\n\t\t}\n\n\t\t#{$all-text-inputs}, textarea {\n\t\t\twidth: 100%;\n\t\t}\n\t}\n}\n\n// red asterisk\nform span.required {\n\tcolor: red;\n}\n\n.RadioGroup {\n\tdisplay: inline-block;\n\tline-height: 1.5em;\n\tvertical-align: middle;\n\n\tlabel {\n\t\twidth: auto;\n\t\ttext-align: left;\n\t\tcursor: pointer;\n\t\tfont-weight: normal;\n\t}\n\n\tinput[type=\"radio\"] {\n\t\tvertical-align: middle;\n\t\tmargin: 0 0 0 5px;\n\t}\n}\n","#ap-list {\n\tcolumn-count: 3;\n\tcolumn-gap: 0;\n\n\t@include media($tablet) {\n\t\tcolumn-count: 2;\n\t}\n\n\t@include media($phone) {\n\t\tcolumn-count: 1;\n\t}\n\n\tmargin: 0 (- dist(-3));\n}\n\n#ap-loader {\n\tbackground: rgba(white, .1);\n\tborder-radius: 5px;\n\tpadding: dist(-2);\n\tmargin-bottom: dist(-2);\n}\n\n#ap-box {\n\tpadding-bottom: dist(-2);\n}\n\n\n#psk-modal form {\n\tdisplay: flex;\n\talign-items: center;\n\tmargin: dist(-2);\n\n\t& > * {\n\t\tmargin-left: dist(-2);\n\t\tmargin-right: dist(-2);\n\t\t&:first-child { margin-left: 0 }\n\t\t&:last-child { margin-right: 0 }\n\t}\n\n\tinput[type=password] {\n\t\tmin-width: 5rem;\n\t}\n}\n\n.AP {\n\t// can't use margins inside a column\n\n\tbreak-inside: avoid-column;\n\tmax-width: 500px;\n\tpadding: dist(-3);\n\n\t&.selected .inner {//#70dfa3\n\t\tbackground: #43de81 !important; // override the hover effect\n\t\tcursor: default;\n\t\ttop: 0 !important; // no click effect\n\t}\n\n\t// the actual silver box\n\t.inner {\n\t\tcursor: pointer;\n\t\t@include noselect;\n\n\t\tposition: relative;\n\t\t&:active {\n\t\t\tleft: 0;\n\t\t\ttop: 1px;\n\t\t}\n\n\t\tborder-radius: 3px;\n\t\tcolor: #222;\n\n\t\tbackground: #afafaf;\n\t\ttransition: background-color 0.5s;\n\t\t&:hover { background: white }\n\n\t\tdisplay: flex;\n\n\t\t& > * {\n\t\t\tpadding: dist(-1);\n\t\t\t@include nowrap;\n\t\t}\n\n\t\t.rssi {\n\t\t\tmin-width: 2rem;\n\t\t\tflex: 0 0 15%;\n\t\t\ttext-align: right;\n\n\t\t\t&:after {\n\t\t\t\tpadding-left: dist(-5);\n\t\t\t\tcontent: '%';\n\t\t\t\tfont-size: fsize(-1);\n\t\t\t}\n\t\t}\n\n\t\t.essid {\n\t\t\tflex: 1 1 70%;\n\t\t\tmin-width: 0;\n\t\t\ttext-overflow: ellipsis;\n\t\t\toverflow: hidden;\n\t\t\tfont-weight: bold;\n\t\t}\n\n\t\t.auth {\n\t\t\tflex: 0 0 15%;\n\t\t}\n\t}\n}\n",".page-home #staRSSIperc:after {\n\tpadding-left: dist(-4);\n\tcontent: '%';\n\tfont-size: fsize(-1);\n}\n\n.page-home #staRSSI:after {\n\tpadding-left: dist(-4);\n\tcontent: 'dBm';\n\tfont-size: fsize(-1);\n}\n","#samp-ctrl {\n\tdisplay: flex;\n\tpadding: dist(-2);\n\n\tflex-direction: row;\n\t@include media($phone) {\n\t\tflex-direction: column;\n\t}\n\n\tjustify-content: center;\n\talign-items: stretch;\n\n\t> div {\n\t\tmargin: dist(-2) dist(-1);\n\t}\n\n\tlabel {\n\t\tline-height: 1.8;\n\t\tfont-weight: bold;\n\t}\n\n\tinput,select {\n\t\twidth: 6em;\n\n\t\t@include media($phone) {\n\t\t\twidth: 100%;\n\t\t}\n\t}\n}\n\n.Box.chartbox {\n\tdisplay: flex;\n\tflex-direction: row;\n\n\t@include media($phone) {\n\t\tflex-direction: column;\n\t}\n\n\t.stats {\n\t\tflex: 0 1;\n\t\tposition: relative;\n\n\t\t@include media($phone) {\n\t\t\ttable {\n\t\t\t\tmargin: 0 auto;\n\t\t\t} // center the table\n\n\t\t\ttd,th {\n\t\t\t\twidth: 50%;\n\t\t\t}\n\t\t}\n\n\t\tth,td {\n\t\t\t@include nowrap;\n\t\t}\n\n\t\tth sub { font-weight: normal;}\n\n\t\ttd {\n\t\t\tmin-width: 100px;\n\t\t}\n\n\t\ttd:after {\n\t\t\tfont-size: 90%;\n\t\t\tpadding-left: .5em;\n\t\t}\n\n\t\t//#stat-count\n\t\t#stat-f-s:after {content: \"Hz\"}\n\t\t#stat-i-peak:after {content: \"mA\"}\n\t\t#stat-i-rms:after {content: \"mA\"}\n\n\t\tpadding-bottom: 50px;\n\n\t\t// auto reload box\n\t\t.ar {\n\t\t\tposition: absolute;\n\t\t\tbottom:dist(-2);\n\t\t\twidth:100%;\n\t\t\ttext-align: center;\n\n\t\t\tinput[type=number] {\n\t\t\t\twidth: 4em;\n\t\t\t}\n\n\t\t\tinput[type=button] {\n\t\t\t\tmargin-left: dist(-2);\n\t\t\t}\n\t\t}\n\t}\n}\n",".page-about {\n\t.Box {\n\t\tpadding-left:dist(0);\n\t\tpadding-right:dist(0);\n\n\t\ta {font-weight: bold;}\n\t}\n\n\t#logo {\n\t\tfloat:right;\n\t\theight: 130px;\n\t}\n\n\t#logo2 {\n\t\tmax-width: 150px;\n\t}\n}\n"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/html_src/js-src/page_status.js b/html_src/js-src/page_status.js index a470478..f782549 100644 --- a/html_src/js-src/page_status.js +++ b/html_src/js-src/page_status.js @@ -8,14 +8,14 @@ var page_status = (function() { st.trigReset = function() { var modal_sel = '#reset-modal'; - $().get(_root + '/reset.cgi', function(resp, status) { + $().get(_root + '/system/reset', function(resp, status) { if (status == 200) { modal.show(modal_sel); updateInhibited = true; var ping_i = setInterval(function() { - $().get(_root+'/ping.cgi', function(resp, code){ + $().get(_root+'/system/ping', function(resp, code){ if (code == 200) { // device is ready modal.hide(modal_sel); @@ -77,7 +77,7 @@ var page_status = (function() { } function requestUpdate() { - $().get(_root+'/api/status.json', onUpdate); + $().get(_root+'/system/status', onUpdate); } st.init = function() { diff --git a/html_src/js-src/page_waveform.js b/html_src/js-src/page_waveform.js index d82f0e3..fd3e531 100644 --- a/html_src/js-src/page_waveform.js +++ b/html_src/js-src/page_waveform.js @@ -168,7 +168,7 @@ var page_waveform = (function () { var n = $('#count').val(); var fs = $('#freq').val(); - var url = _root+'/api/{fmt}.json?n={n}&fs={fs}'.format({ + var url = _root+'/measure/{fmt}?n={n}&fs={fs}'.format({ fmt: dataFormat, // fft or raw n: n, fs: fs diff --git a/html_src/js-src/page_wifi.js b/html_src/js-src/page_wifi.js index bbc53fc..5dc0f24 100644 --- a/html_src/js-src/page_wifi.js +++ b/html_src/js-src/page_wifi.js @@ -76,7 +76,7 @@ var page_wifi = (function () { /** Ask the CGI what APs are visible (async) */ function scanAPs() { - $().get(_root+'/wifi/scan.cgi', onScan); // no cache, no jsonp + $().get(_root+'/wifi/scan', onScan); // no cache, no jsonp } function rescan(time) { diff --git a/html_src/js/all.js b/html_src/js/all.js index 2b8ab52..b5575f5 100644 --- a/html_src/js/all.js +++ b/html_src/js/all.js @@ -1,3 +1,3 @@ function bool(t){return 1===t||"1"===t||t===!0||"true"===t}function numfmt(t,e){var n=Math.pow(10,e);return Math.round(t*n)/n}function errorMsg(t){notify.show(t,3e3)}!function(){"use strict";function t(){var t;for(p=!0,t=0;t=0;n-=1)t(e[n])}function r(t){return t.replace(/-\w/g,function(t){return t.charAt(1).toUpperCase()})}function i(t,e){return t.currentStyle?t.currentStyle[r(e)]:g.getComputedStyle?g.getComputedStyle(t,null).getPropertyValue(e):null}function a(t,e){return encodeURIComponent(t).replace(/%20/g,"+")+"="+encodeURIComponent(e).replace(/%20/g,"+")}function s(t,e,n){try{t.style[r(e)]=n}catch(i){}}function o(t){t.style.display="","none"===i(t,"display")&&(t.style.display="block")}function u(t){var e,r,i,s="";if(t.constructor===Object){for(e in t)if(t.hasOwnProperty(e))if(t[e].constructor===Array)for(r=0;r0&&(s+="&"+a(e.name,e.value));break;case"select-multiple":for(i=0;i0?s.substring(1):""}function c(t,e,r){var i,a,s,o=!1;return t&&(i=t.split(/\s+/),n(function(t){for(s=0;s0?y[0].className.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,"").replace(/\s+/," "):void 0},e.setClass=function(t){return(t||""===t)&&n(function(e){e.className=t},y),e},e.addClass=function(t){return t&&n(function(e){e.className+=" "+t},y),e},e.removeClass=function(t){return c(t,"remove",y),e},e.toggleClass=function(t){return c(t,"toggle",y),e},e.hasClass=function(t){return c(t,"has",y)},e.html=function(t){return t||""===t?(n(function(e){e.innerHTML=t},y),e):y[0]?y[0].innerHTML:void 0},e.htmlBefore=function(t){return l(t,"before",y),e},e.htmlAfter=function(t){return l(t,"after",y),e},e.htmlAppend=function(t){return l(t,"append",y),e},e.htmlPrepend=function(t){return l(t,"prepend",y),e},e.attr=function(t,r){if(t){if(t=t.toLowerCase(),"undefined"!=typeof r)return n(function(e){"style"===t?e.style.cssText=r:"class"===t?e.className=r:e.setAttribute(t,r)},y),e;if(y[0])if("style"===t){if(y[0].style.cssText)return y[0].style.cssText}else if("class"===t){if(y[0].className)return y[0].className}else if(y[0].getAttribute(t))return y[0].getAttribute(t)}},e.data=function(t,n){return t?e.attr("data-"+t,n):void 0},e.val=function(t){var r,i,a;if(t||""===t)return n(function(e){switch(e.nodeName){case"SELECT":for("string"!=typeof t&&"number"!=typeof t||(t=[t]),i=0;i1?r:r[0];case"INPUT":case"TEXTAREA":case"BUTTON":return y[0].value}},e.checked=function(t){return"boolean"==typeof t?(n(function(e){"INPUT"!==e.nodeName||"checkbox"!==e.type&&"radio"!==e.type||(e.checked=t)},y),e):!y[0]||"INPUT"!==y[0].nodeName||"checkbox"!==y[0].type&&"radio"!==y[0].type?void 0:!!y[0].checked},e.on=function(r,i){return t!==g&&t!==v||(y=[t]),n(function(t){v.addEventListener?t.addEventListener(r,i,!1):v.attachEvent&&(t[r+i]=function(){return i.apply(t,arguments)},t.attachEvent("on"+r,t[r+i]))},y),e},e.off=function(r,i){return t!==g&&t!==v||(y=[t]),n(function(t){v.addEventListener?t.removeEventListener(r,i,!1):v.attachEvent&&(t.detachEvent("on"+r,t[r+i]),t[r+i]=null)},y),e},e.ajax=function(t,n,r,i){var a,s=u(y),o=n?n.toUpperCase():"GET",c="_ts="+ +new Date,l=Chartist.extend({},{nocache:!0,timeout:5e3,loader:!0},i);return console.log("ajax to = "+l.timeout),s&&"GET"===o&&(t+=-1===t.indexOf("?")?"?"+s:"&"+s,s=null),a=new XMLHttpRequest,a&&(l.nocache&&(t+=-1===t.indexOf("?")?"?"+c:"&"+c),l.loader&&$("#loader").addClass("show"),a.open(o,t,!0),a.timeout=l.timeout,a.onreadystatechange=function(){4===a.readyState&&(l.loader&&$("#loader").removeClass("show"),r&&0!=a.status&&r(a.responseText,a.status))},a.setRequestHeader("X-Requested-With","XMLHttpRequest"),"POST"===o&&a.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),a.send(s)),e},e.get=function(t,n,r){return e.ajax(t,"get",n,r)},e.post=function(t,n,r){return e.ajax(t,"post",n,r)},e}var f=[],d=[],p=!1,m=!1,v=document,g=window;v.addEventListener?(v.addEventListener("DOMContentLoaded",t,!1),g.addEventListener("load",e,!1)):v.attachEvent?(v.attachEvent("onreadystatechange",t),g.attachEvent("onload",e)):g.onload=e,g.$=h}(),function(t,e){t.Chartist=e()}(this,function(){var t={version:"0.9.7"};return function(t,e,n){"use strict";n.namespaces={svg:"http://www.w3.org/2000/svg",xmlns:"http://www.w3.org/2000/xmlns/",xhtml:"http://www.w3.org/1999/xhtml",xlink:"http://www.w3.org/1999/xlink",ct:"http://gionkunz.github.com/chartist-js/ct"},n.noop=function(t){return t},n.alphaNumerate=function(t){return String.fromCharCode(97+t%26)},n.extend=function(t){t=t||{};var e=Array.prototype.slice.call(arguments,1);return e.forEach(function(e){for(var r in e)"object"!=typeof e[r]||null===e[r]||e[r]instanceof Array?t[r]=e[r]:t[r]=n.extend({},t[r],e[r])}),t},n.replaceAll=function(t,e,n){return t.replace(new RegExp(e,"g"),n)},n.ensureUnit=function(t,e){return"number"==typeof t&&(t+=e),t},n.quantity=function(t){if("string"==typeof t){var e=/^(\d+)\s*(.*)$/g.exec(t);return{value:+e[1],unit:e[2]||void 0}}return{value:t}},n.querySelector=function(t){return t instanceof Node?t:e.querySelector(t)},n.times=function(t){return Array.apply(null,new Array(t))},n.sum=function(t,e){return t+(e?e:0)},n.mapMultiply=function(t){return function(e){return e*t}},n.mapAdd=function(t){return function(e){return e+t}},n.serialMap=function(t,e){var r=[],i=Math.max.apply(null,t.map(function(t){return t.length}));return n.times(i).forEach(function(n,i){var a=t.map(function(t){return t[i]});r[i]=e.apply(null,a)}),r},n.roundWithPrecision=function(t,e){var r=Math.pow(10,e||n.precision);return Math.round(t*r)/r},n.precision=8,n.serialize=function(t){return null===t||void 0===t?t:("number"==typeof t?t=""+t:"object"==typeof t&&(t=JSON.stringify({data:t})),_.escape(t))},n.deserialize=function(t){if("string"!=typeof t)return t;t=_.unescape(t);try{t=JSON.parse(t),t=void 0!==t.data?t.data:t}catch(e){}return t},n.createSvg=function(t,e,r,i){var a;return e=e||"100%",r=r||"100%",Array.prototype.slice.call(t.querySelectorAll("svg")).filter(function(t){return t.getAttributeNS(n.namespaces.xmlns,"ct")}).forEach(function(e){t.removeChild(e)}),a=new n.Svg("svg").attr({width:e,height:r}).addClass(i).attr({style:"width: "+e+"; height: "+r+";"}),t.appendChild(a._node),a},n.normalizeData=function(t){if(t=t||{series:[],labels:[]},t.series=t.series||[],t.labels=t.labels||[],t.series.length>0&&0===t.labels.length){var e,r=n.getDataArray(t);e=r.every(function(t){return t instanceof Array})?Math.max.apply(null,r.map(function(t){return t.length})):r.length,t.labels=n.times(e).map(function(){return""})}return t},n.reverseData=function(t){t.labels.reverse(),t.series.reverse();for(var e=0;ea.high&&(a.high=n),o&&n0?a.low=0:(a.high=1,a.low=0)),a},n.isNum=function(t){return!isNaN(t)&&isFinite(t)},n.isFalseyButZero=function(t){return!t&&0!==t},n.getNumberOrUndefined=function(t){return isNaN(+t)?void 0:+t},n.getMultiValue=function(t,e){return n.isNum(t)?+t:t?t[e||"y"]||0:0},n.rho=function(t){function e(t,n){return t%n===0?n:e(n,t%n)}function n(t){return t*t+1}if(1===t)return t;var r,i=2,a=2;if(t%2===0)return 2;do i=n(i)%t,a=n(n(a))%t,r=e(Math.abs(i-a),t);while(1===r);return r},n.getBounds=function(t,e,r,i){var a,s,o,u=0,c={high:e.high,low:e.low};c.valueRange=c.high-c.low,c.oom=n.orderOfMagnitude(c.valueRange),c.step=Math.pow(10,c.oom),c.min=Math.floor(c.low/c.step)*c.step,c.max=Math.ceil(c.high/c.step)*c.step,c.range=c.max-c.min,c.numberOfSteps=Math.round(c.range/c.step);var l=n.projectLength(t,c.step,c),h=r>l,f=i?n.rho(c.range):0;if(i&&n.projectLength(t,1,c)>=r)c.step=1;else if(i&&f=r)c.step=f;else for(;;){if(h&&n.projectLength(t,c.step,c)<=r)c.step*=2;else{if(h||!(n.projectLength(t,c.step/2,c)>=r))break;if(c.step/=2,i&&c.step%1!==0){c.step*=2;break}}if(u++>1e3)throw new Error("Exceeded maximum number of iterations while optimizing scale step!")}for(s=c.min,o=c.max;s+c.step<=c.low;)s+=c.step;for(;o-c.step>=c.high;)o-=c.step;for(c.min=s,c.max=o,c.range=c.max-c.min,c.values=[],a=c.min;a<=c.max;a+=c.step)c.values.push(n.roundWithPrecision(a));return c},n.createChartRect=function(t,e,r){var i=!(!e.axisX&&!e.axisY),a=i?e.axisY.offset:0,s=i?e.axisX.offset:0,o=t.width()||n.quantity(e.width).value||0,u=t.height()||n.quantity(e.height).value||0,c=n.normalizePadding(e.chartPadding,r);o=Math.max(o,a+c.left+c.right),u=Math.max(u,s+c.top+c.bottom);var l={padding:c,width:function(){return this.x2-this.x1},height:function(){return this.y1-this.y2}};return i?("start"===e.axisX.position?(l.y2=c.top+s,l.y1=Math.max(u-c.bottom,l.y2+1)):(l.y2=c.top,l.y1=Math.max(u-c.bottom-s,l.y2+1)),"start"===e.axisY.position?(l.x1=c.left+a,l.x2=Math.max(o-c.right,l.x1+1)):(l.x1=c.left,l.x2=Math.max(o-c.right-a,l.x1+1))):(l.x1=c.left,l.x2=Math.max(o-c.right,l.x1+1),l.y2=c.top,l.y1=Math.max(u-c.bottom,l.y2+1)),l},n.createGrid=function(t,e,r,i,a,s,o,u){var c={};c[r.units.pos+"1"]=Math.round(t)+.5,c[r.units.pos+"2"]=Math.round(t)+.5,c[r.counterUnits.pos+"1"]=i,c[r.counterUnits.pos+"2"]=i+a;var l=s.elem("line",c,o.join(" "));u.emit("draw",n.extend({type:"grid",axis:r,index:e,group:s,element:l},c))},n.createLabel=function(t,e,r,i,a,s,o,u,c,l,h){var f,d={};d[a.units.pos]=t+o[a.units.pos],d[a.counterUnits.pos]=o[a.counterUnits.pos],d[a.units.len]=e,d[a.counterUnits.len]=s-10;var p=i[r];if(_.isNumber(p)&&(p=n.roundWithPrecision(p,2)),l){var m=''+p+"";f=u.foreignObject(m,n.extend({style:"overflow: visible;"},d))}else f=u.elem("text",d,c.join(" ")).text(p);h.emit("draw",n.extend({type:"label",axis:a,index:r,group:u,element:f,text:p},d))},n.getSeriesOption=function(t,e,n){if(t.name&&e.series&&e.series[t.name]){var r=e.series[t.name];return r.hasOwnProperty(n)?r[n]:e[n]}return e[n]},n.optionsProvider=function(e,r,i){function a(e){var a=o;if(o=n.extend({},c),r)for(u=0;u=2&&e[a]<=e[a-2]?i=!0:(i&&(r.push({pathCoordinates:[],valueData:[]}),i=!1),r[r.length-1].pathCoordinates.push(e[a],e[a+1]),r[r.length-1].valueData.push(n[a/2]));return r}var r={fillHoles:!1};return t=n.extend({},r,t),function i(t,r){var a=e(t,r);if(a.length){if(a.length>1){var s=[];return a.forEach(function(t){s.push(i(t.pathCoordinates,t.valueData))}),n.Svg.Path.join(s)}if(t=a[0].pathCoordinates,r=a[0].valueData,t.length<=4)return n.Interpolation.none()(t,r);var o,u,c=[],l=[],h=t.length/2,f=[],d=[],p=[],m=[];for(o=0;h>o;o++)c[o]=t[2*o],l[o]=t[2*o+1];for(o=0;h-1>o;o++)p[o]=l[o+1]-l[o],m[o]=c[o+1]-c[o],d[o]=p[o]/m[o];for(f[0]=d[0],f[h-1]=d[h-2],o=1;h-1>o;o++)0===d[o]||0===d[o-1]||d[o-1]>0!=d[o]>0?f[o]=0:(f[o]=3*(m[o-1]+m[o])/((2*m[o]+m[o-1])/d[o-1]+(m[o]+2*m[o-1])/d[o]),isFinite(f[o])||(f[o]=0));for(u=(new n.Svg.Path).move(c[0],l[0],!1,r[0]),o=0;h-1>o;o++)u.curve(c[o]+m[o]/3,l[o]+f[o]*m[o]/3,c[o+1]-m[o]/3,l[o+1]-f[o+1]*m[o]/3,c[o+1],l[o+1],!1,r[o+1]);return u}return n.Interpolation.none()([])}},n.Interpolation.step=function(t){var e={postpone:!0,fillHoles:!1};return t=n.extend({},e,t),function(e,r){for(var i,a,s,o=new n.Svg.Path,u=0;u1}).map(function(t){var e=t.pathElements[0],n=t.pathElements[t.pathElements.length-1];return t.clone(!0).position(0).remove(1).move(e.x,g).line(e.x,e.y).position(t.pathElements.length+1).line(n.x,g)}).forEach(function(n){var o=u.elem("path",{d:n.stringify()},t.classNames.area,!0);this.eventEmitter.emit("draw",{type:"area",values:e.normalized[s],path:n.clone(),series:a,seriesIndex:s,axisX:r,axisY:i,chartRect:c,index:s,group:u,element:o})}.bind(this))}}.bind(this)),this.eventEmitter.emit("created",{bounds:i.bounds,chartRect:c,axisX:r,axisY:i,svg:this.svg,options:t})}function i(t,e,r,i){n.Line["super"].constructor.call(this,t,e,a,n.extend({},a,r),i)}var a={axisX:{offset:30,position:"end",labelOffset:{x:0,y:0},showLabel:!0,showGrid:!0,labelInterpolationFnc:n.noop,type:void 0},axisY:{offset:40,position:"start",labelOffset:{x:0,y:0},showLabel:!0,showGrid:!0,labelInterpolationFnc:n.noop,type:void 0,scaleMinSpace:20,onlyInteger:!1},width:void 0,height:void 0,showLine:!0,showPoint:!0,showArea:!1,areaBase:0,lineSmooth:!0,low:void 0,high:void 0,chartPadding:{top:15,right:15,bottom:5,left:10},fullWidth:!1,reverseData:!1,classNames:{chart:"ct-chart-line",label:"ct-label",labelGroup:"ct-labels",series:"ct-series",line:"ct-line",point:"ct-point",area:"ct-area",grid:"ct-grid",gridGroup:"ct-grids",vertical:"ct-vertical",horizontal:"ct-horizontal",start:"ct-start",end:"ct-end"}};n.Line=n.Base.extend({constructor:i,createChart:r})}(window,document,t),function(t,e,n){"use strict";function r(t){this.data=n.normalizeData(this.data);var e,r={raw:this.data,normalized:t.distributeSeries?n.getDataArray(this.data,t.reverseData,t.horizontalBars?"x":"y").map(function(t){return[t]}):n.getDataArray(this.data,t.reverseData,t.horizontalBars?"x":"y")};this.svg=n.createSvg(this.container,t.width,t.height,t.classNames.chart+(t.horizontalBars?" "+t.classNames.horizontalBars:""));var i=this.svg.elem("g").addClass(t.classNames.gridGroup),s=this.svg.elem("g"),o=this.svg.elem("g").addClass(t.classNames.labelGroup);if(t.stackBars&&0!==r.normalized.length){var u=n.serialMap(r.normalized,function(){return Array.prototype.slice.call(arguments).map(function(t){return t}).reduce(function(t,e){return{x:t.x+(e&&e.x)||0,y:t.y+(e&&e.y)||0}},{x:0,y:0})});e=n.getHighLow([u],n.extend({},t,{referenceValue:0}),t.horizontalBars?"x":"y")}else e=n.getHighLow(r.normalized,n.extend({},t,{referenceValue:0}),t.horizontalBars?"x":"y");e.high=+t.high||(0===t.high?0:e.high),e.low=+t.low||(0===t.low?0:e.low);var c,l,h,f,d,p=n.createChartRect(this.svg,t,a.padding);l=t.distributeSeries&&t.stackBars?r.raw.labels.slice(0,1):r.raw.labels,t.horizontalBars?(c=f=void 0===t.axisX.type?new n.AutoScaleAxis(n.Axis.units.x,r,p,n.extend({},t.axisX,{highLow:e,referenceValue:0})):t.axisX.type.call(n,n.Axis.units.x,r,p,n.extend({},t.axisX,{highLow:e,referenceValue:0})),h=d=void 0===t.axisY.type?new n.StepAxis(n.Axis.units.y,r,p,{ticks:l}):t.axisY.type.call(n,n.Axis.units.y,r,p,t.axisY)):(h=f=void 0===t.axisX.type?new n.StepAxis(n.Axis.units.x,r,p,{ticks:l}):t.axisX.type.call(n,n.Axis.units.x,r,p,t.axisX),c=d=void 0===t.axisY.type?new n.AutoScaleAxis(n.Axis.units.y,r,p,n.extend({},t.axisY,{highLow:e,referenceValue:0})):t.axisY.type.call(n,n.Axis.units.y,r,p,n.extend({},t.axisY,{highLow:e,referenceValue:0})));var m=t.horizontalBars?p.x1+c.projectValue(0):p.y1-c.projectValue(0),v=[];h.createGridAndLabels(i,o,this.supportsForeignObject,t,this.eventEmitter),c.createGridAndLabels(i,o,this.supportsForeignObject,t,this.eventEmitter),r.raw.series.forEach(function(e,i){var a,o,u=i-(r.raw.series.length-1)/2;a=t.distributeSeries&&!t.stackBars?h.axisLength/r.normalized.length/2:t.distributeSeries&&t.stackBars?h.axisLength/2:h.axisLength/r.normalized[i].length/2,o=s.elem("g"),o.attr({"ct:series-name":e.name,"ct:meta":n.serialize(e.meta)}),o.addClass([t.classNames.series,e.className||t.classNames.series+"-"+n.alphaNumerate(i)].join(" ")),r.normalized[i].forEach(function(s,l){var g,x,y,b;if(b=t.distributeSeries&&!t.stackBars?i:t.distributeSeries&&t.stackBars?0:l,g=t.horizontalBars?{x:p.x1+c.projectValue(s&&s.x?s.x:0,l,r.normalized[i]),y:p.y1-h.projectValue(s&&s.y?s.y:0,b,r.normalized[i])}:{x:p.x1+h.projectValue(s&&s.x?s.x:0,b,r.normalized[i]),y:p.y1-c.projectValue(s&&s.y?s.y:0,l,r.normalized[i])},h instanceof n.StepAxis&&(h.options.stretch||(g[h.units.pos]+=a*(t.horizontalBars?-1:1)),g[h.units.pos]+=t.stackBars||t.distributeSeries?0:u*t.seriesBarDistance*(t.horizontalBars?-1:1)),y=v[l]||m,v[l]=y-(m-g[h.counterUnits.pos]),void 0!==s){var w={};w[h.units.pos+"1"]=g[h.units.pos],w[h.units.pos+"2"]=g[h.units.pos],!t.stackBars||"accumulate"!==t.stackMode&&t.stackMode?(w[h.counterUnits.pos+"1"]=m,w[h.counterUnits.pos+"2"]=g[h.counterUnits.pos]):(w[h.counterUnits.pos+"1"]=y,w[h.counterUnits.pos+"2"]=v[l]),w.x1=Math.min(Math.max(w.x1,p.x1),p.x2),w.x2=Math.min(Math.max(w.x2,p.x1),p.x2),w.y1=Math.min(Math.max(w.y1,p.y2),p.y1),w.y2=Math.min(Math.max(w.y2,p.y2),p.y1),x=o.elem("line",w,t.classNames.bar).attr({"ct:value":[s.x,s.y].filter(n.isNum).join(","),"ct:meta":n.getMetaData(e,l)}),this.eventEmitter.emit("draw",n.extend({type:"bar",value:s,index:l,meta:n.getMetaData(e,l),series:e,seriesIndex:i,axisX:f,axisY:d,chartRect:p,group:o,element:x},w))}}.bind(this))}.bind(this)),this.eventEmitter.emit("created",{bounds:c.bounds,chartRect:p,axisX:f,axisY:d,svg:this.svg,options:t})}function i(t,e,r,i){n.Bar["super"].constructor.call(this,t,e,a,n.extend({},a,r),i)}var a={axisX:{offset:30,position:"end",labelOffset:{x:0,y:0},showLabel:!0,showGrid:!0,labelInterpolationFnc:n.noop,scaleMinSpace:30,onlyInteger:!1},axisY:{offset:40,position:"start",labelOffset:{x:0,y:0},showLabel:!0,showGrid:!0,labelInterpolationFnc:n.noop,scaleMinSpace:20,onlyInteger:!1},width:void 0,height:void 0,high:void 0,low:void 0,chartPadding:{top:15,right:15,bottom:5,left:10},seriesBarDistance:15,stackBars:!1,stackMode:"accumulate",horizontalBars:!1,distributeSeries:!1,reverseData:!1,classNames:{chart:"ct-chart-bar",horizontalBars:"ct-horizontal-bars",label:"ct-label",labelGroup:"ct-labels",series:"ct-series",bar:"ct-bar",grid:"ct-grid",gridGroup:"ct-grids",vertical:"ct-vertical",horizontal:"ct-horizontal",start:"ct-start",end:"ct-end"}};n.Bar=n.Base.extend({constructor:i,createChart:r})}(window,document,t),t}),function(t,e){t["Chartist.plugins.ctAxisTitle"]=e()}(this,function(){return function(t,e,n){"use strict";var r={axisTitle:"",axisClass:"ct-axis-title",offset:{x:0,y:0},textAnchor:"middle",flipText:!1},i={axisX:r,axisY:r};n.plugins=n.plugins||{},n.plugins.ctAxisTitle=function(t){return t=n.extend({},i,t),function(e){e.on("created",function(e){var r,i,a;if(t.axisX.axisTitle&&e.axisX&&(r=e.axisX.axisLength/2+e.options.axisY.offset+e.options.chartPadding.left,i=e.options.chartPadding.top,"end"===e.options.axisY.position&&(r-=e.options.axisY.offset),"end"===e.options.axisX.position&&(i+=e.axisY.axisLength),a=new n.Svg("text"),a.addClass(t.axisX.axisClass),a.text(t.axisX.axisTitle),a.attr({x:r+t.axisX.offset.x,y:i+t.axisX.offset.y,"text-anchor":t.axisX.textAnchor}),e.svg.append(a,!0)),t.axisY.axisTitle&&e.axisY){r=0,i=e.axisY.axisLength/2+e.options.chartPadding.top,"start"===e.options.axisX.position&&(i+=e.options.axisX.offset),"end"===e.options.axisY.position&&(r=e.axisX.axisLength);var s="rotate("+(t.axisY.flipText?-90:90)+", "+r+", "+i+")";a=new n.Svg("text"),a.addClass(t.axisY.axisClass),a.text(t.axisY.axisTitle),a.attr({x:r+t.axisY.offset.x,y:i+t.axisY.offset.y,transform:s,"text-anchor":t.axisY.textAnchor}),e.svg.append(a,!0)}})}}}(window,document,Chartist),Chartist.plugins.ctAxisTitle}),function(t,e){t["Chartist.plugins.zoom"]=e()}(this,function(){return function(t,e,n){"use strict";function r(t){t.attr({style:"display:none"})}function i(t){t.attr({style:"display:block"})}function a(t,e){var n=t.x,r=t.y,i=e.x-n,a=e.y-r;return 0>i&&(i=-i,n=e.x),0>a&&(a=-a,r=e.y),{x:n,y:r,width:i,height:a}}function s(t,e){return o(t.clientX,t.clientY,e)}function o(t,e,n){var r="svg"===n.tagName?n:n.ownerSVGElement,i=r.getScreenCTM(),a=r.createSVGPoint();return a.x=t,a.y=e,a=a.matrixTransform(i.inverse()),a||{x:0,y:0}}function u(t,e){var n=e.bounds.max,r=e.bounds.min;if(e.scale&&"log"===e.scale.type){var i=e.scale.base;return Math.pow(i,t*c(n/r,i)/e.axisLength)*r}return t*e.bounds.range/e.axisLength+r}function c(t,e){return Math.log(t)/Math.log(e)}var l={};n.plugins=n.plugins||{},n.plugins.zoom=function(t){return t=n.extend({},l,t),function(e){function o(t){var e=s(t,b);return e.id=t.identifier,e}function c(t){for(var e=0;e1&&(y.attr(a(O[0],O[1])),i(y))}function h(t){for(var e=t.changedTouches,n=0;n1&&(y.attr(a(O[0],O[1])),i(y),t.preventDefault())}function f(t){d(t.changedTouches)}function d(t){for(var e=0;e=0&&O.splice(n,1)}}function p(t){O.length>1&&g(a(O[0],O[1])),d(t.changedTouches),r(y)}function m(t){0===t.button&&(S=s(t,b),y.attr(a(S,S)),i(y),t.preventDefault())}function v(e){if(0===e.button){var n=a(S,s(e,b));g(n),S=null,r(y),e.preventDefault()}else t.resetOnRightMouseBtn&&2===e.button&&(L(),e.preventDefault())}function g(t){if(t.width>5&&t.height>5){var n=t.x-E.x1,r=n+t.width,i=E.y1-t.y,a=i-t.height,s=u(n,w),o=u(r,w),c=u(a,A),l=u(i,A),h=e.options.explicitBounds;_.isUndefined(h)||(_.isUndefined(h.xLow)||(s=Math.max(h.xLow,s)),_.isUndefined(h.xHigh)||(o=Math.min(h.xHigh,o)),_.isUndefined(h.yLow)||(c=Math.max(h.yLow,c)),_.isUndefined(h.yHigh)||(l=Math.min(h.yHigh,l))),e.options.axisX.highLow={low:s,high:o},e.options.axisY.highLow={low:c,high:l},e.update(e.data,e.options),C&&C(e,L)}}function x(t){if(S){var e=s(t,b);y.attr(a(S,e)),t.preventDefault()}}if(e instanceof n.Line){var y,b,w,A,E,S,C=t.onZoom,O=[];e.on("draw",function(t){var e=t.type;"line"!==e&&"bar"!==e&&"area"!==e&&"point"!==e||t.element.attr({"clip-path":"url(#zoom-mask)"})}),e.on("created",function(t){w=t.axisX,A=t.axisY,E=t.chartRect,b=t.svg._node,y=t.svg.elem("rect",{x:10,y:10,width:100,height:100},"ct-zoom-rect"),r(y);var e=t.svg.querySelector("defs")||t.svg.elem("defs"),n=E.width(),i=E.height();e.elem("clipPath",{id:"zoom-mask"}).elem("rect",{x:E.x1,y:E.y2,width:n,height:i,fill:"white"}),b.addEventListener("mousedown",m),b.addEventListener("mouseup",v),b.addEventListener("mousemove",x),b.addEventListener("touchstart",l),b.addEventListener("touchmove",h),b.addEventListener("touchend",p),b.addEventListener("touchcancel",f)});var L=function(){e.options.axisX.highLow=null,e.options.axisY.highLow=null,e.update(e.data,e.options)}}}}}(window,document,Chartist),Chartist.plugins.zoom}),function(){function t(t,e){return t.set(e[0],e[1]),t}function e(t,e){return t.add(e),t}function n(t,e){for(var n=-1,r=t.length;++n-1&&t%1==0&&e>t}function f(t){var e=-1,n=Array(t.size);return t.forEach(function(t,r){n[++e]=[r,t]}),n}function d(t){var e=-1,n=Array(t.size);return t.forEach(function(t){n[++e]=t}),n}function p(t){return gn[t]}function m(){}function v(){}function g(t,e){return y(t,e)&&delete t[e]}function x(t,e){if(Gn){var n=t[e];return n===ye?ve:n}return Nn.call(t,e)?t[e]:ve}function y(t,e){return Gn?t[e]!==ve:Nn.call(t,e)}function b(t,e,n){t[e]=Gn&&n===ve?ye:n}function w(t){var e=-1,n=t?t.length:0;for(this.clear();++en)return!1;var r=t.length-1;return n==r?t.pop():Yn.call(t,n,1),!0}function z(t,e){var n=T(t,e);return 0>n?ve:t[n][1]}function P(t,e){return T(t,e)>-1}function T(t,e){for(var n=t.length;n--;)if(Rt(t[n][0],e))return n;return-1}function I(t,e,n){var r=T(t,e);0>r?t.push([e,n]):t[r][1]=n}function B(t,e,n){var r=t[e];Nn.call(t,e)&&Rt(r,n)&&(n!==ve||e in t)||(t[e]=n)}function U(t,e){return t&&pt(e,se(e),t)}function X(t){return"function"==typeof t?t:de}function Y(t){return ar(t)?t:Bt(t)}function R(t,e,r,i,a,s,o){var u;if(i&&(u=s?i(t,a,s,o):i(t)),u!==ve)return u;if(!Gt(t))return t;var c=ar(t);if(c){if(u=Lt(t),!e)return dt(t,u)}else{var h=Ct(t),f=h==je||h==Ne;if(sr(t))return st(t,e);if(h==ze||h==_e||f&&!s){if(l(t))return s?t:{};if(u=Mt(f?{}:t),!e)return u=U(u,t),r?vt(t,u):u}else{if(!mn[h])return s?t:{};u=jt(t,h,e)}}o||(o=new O);var d=o.get(t);return d?d:(o.set(t,u),(c?n:F)(t,function(n,a){B(u,a,R(n,e,r,i,a,t,o))}),r&&!c?vt(t,u):u)}function D(t){return Gt(t)?Un(t):{}}function F(t,e){return t&&nr(t,e,se)}function q(t,e){e=kt(e,t)?[e+""]:Y(e);for(var n=0,r=e.length;null!=t&&r>n;)t=t[e[n++]];return n&&n==r?t:ve}function V(t,e){return Nn.call(t,e)||"object"==typeof t&&e in t&&null===In(t)}function H(t,e){return e in Object(t)}function G(t,e,n,r,i){return t===e?!0:null==t||null==e||!Gt(t)&&!Wt(e)?t!==t&&e!==e:W(t,e,G,n,r,i)}function W(t,e,n,r,i,a){var s=ar(t),o=ar(e),u=Ce,c=Ce;s||(u=Ct(t),u=u==_e?ze:u),o||(c=Ct(e),c=c==_e?ze:c);var h=u==ze&&!l(t),f=c==ze&&!l(e),d=u==c;if(d&&!h)return a||(a=new O),s||te(t)?bt(t,e,n,r,i,a):wt(t,e,u,n,r,i,a);if(!(i&we)){var p=h&&Nn.call(t,"__wrapped__"),m=f&&Nn.call(e,"__wrapped__");if(p||m)return a||(a=new O),n(p?t.value():t,m?e.value():e,r,i,a)}return d?(a||(a=new O),At(t,e,n,r,i,a)):!1}function Q(t,e,n,r){var i=n.length,a=i,s=!r;if(null==t)return!a;for(t=Object(t);i--;){var o=n[i];if(s&&o[2]?o[1]!==t[o[0]]:!(o[0]in t))return!1}for(;++ie&&(e=-e>i?0:i+e),n=n>i?i:n,0>n&&(n+=i),i=e>n?0:n-e>>>0,e>>>=0;for(var a=Array(i);++re?1:-1:ne(r)||0,it(e,n,r,t)}}function bt(t,e,n,r,i,s){var o=-1,u=i&we,c=i&be,l=t.length,h=e.length;if(l!=h&&!(u&&h>l))return!1;var f=s.get(t);if(f)return f==e;var d=!0;for(s.set(t,e);++o-1&&t%1==0&&Ee>=t}function Gt(t){var e=typeof t;return!!t&&("object"==e||"function"==e)}function Wt(t){return!!t&&"object"==typeof t}function Qt(t){return null==t?!1:Vt(t)?kn.test(jn.call(t)):Wt(t)&&(l(t)?kn:hn).test(t)}function Zt(t){return"number"==typeof t||Wt(t)&&$n.call(t)==ke}function Jt(t){return"string"==typeof t||!ar(t)&&Wt(t)&&$n.call(t)==Ie}function Kt(t){return"symbol"==typeof t||Wt(t)&&$n.call(t)==Be}function te(t){return Wt(t)&&Ht(t.length)&&!!pn[$n.call(t)]}function ee(t){return t===ve}function ne(t){if(Gt(t)){var e=Vt(t.valueOf)?t.valueOf():t;t=Gt(e)?e+"":e}if("string"!=typeof t)return 0===t?t:+t;t=t.replace(sn,"");var n=ln.test(t);return n||fn.test(t)?yn(t.slice(2),n?2:8):cn.test(t)?Se:+t}function re(t){if("string"==typeof t)return t;if(null==t)return"";if(Kt(t))return tr?tr.call(t):"";var e=t+"";return"0"==e&&1/t==-Ae?"-0":e}function ie(t,e,n){var r=null==t?ve:q(t,e);return r===ve?n:r}function ae(t,e){return Ot(t,e,H)}function se(t){var e=Pt(t);if(!e&&!Ft(t))return J(t);var n=Nt(t),r=!!n,i=n||[],a=i.length;for(var s in t)!V(t,s)||r&&("length"==s||h(s,a))||e&&"constructor"==s||i.push(s);return i}function oe(t){return o(t,se(t))}function ue(t){return t=re(t),t&&Ke.test(t)?t.replace(Ze,c):t}function ce(t){return t=re(t),t&&an.test(t)?t.replace(rn,"\\$&"):t}function le(){var t=arguments,e=re(t[0]);return t.length<3?e:e.replace(t[1],t[2])}function he(t){return t=re(t),t&&Je.test(t)?t.replace(Qe,p):t}function fe(t){return function(){return t}}function de(t){return t}function pe(t){return Z("function"==typeof t?t:R(t,!0))}function me(t){return kt(t)?nt(t):rt(t)}var ve,ge="4.6.1",xe=200,ye="__lodash_hash_undefined__",be=1,we=2,Ae=1/0,Ee=9007199254740991,Se=NaN,_e="[object Arguments]",Ce="[object Array]",Oe="[object Boolean]",Le="[object Date]",Me="[object Error]",je="[object Function]",Ne="[object GeneratorFunction]",$e="[object Map]",ke="[object Number]",ze="[object Object]",Pe="[object RegExp]",Te="[object Set]",Ie="[object String]",Be="[object Symbol]",Ue="[object WeakMap]",Xe="[object ArrayBuffer]",Ye="[object Float32Array]",Re="[object Float64Array]",De="[object Int8Array]",Fe="[object Int16Array]",qe="[object Int32Array]",Ve="[object Uint8Array]",He="[object Uint8ClampedArray]",Ge="[object Uint16Array]",We="[object Uint32Array]",Qe=/&(?:amp|lt|gt|quot|#39|#96);/g,Ze=/[&<>"'`]/g,Je=RegExp(Qe.source),Ke=RegExp(Ze.source),tn=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,en=/^\w*$/,nn=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]/g,rn=/[\\^$.*+?()[\]{}|]/g,an=RegExp(rn.source),sn=/^\s+|\s+$/g,on=/\\(\\)?/g,un=/\w*$/,cn=/^[-+]0x[0-9a-f]+$/i,ln=/^0b[01]+$/i,hn=/^\[object .+?Constructor\]$/,fn=/^0o[0-7]+$/i,dn=/^(?:0|[1-9]\d*)$/,pn={};pn[Ye]=pn[Re]=pn[De]=pn[Fe]=pn[qe]=pn[Ve]=pn[He]=pn[Ge]=pn[We]=!0,pn[_e]=pn[Ce]=pn[Xe]=pn[Oe]=pn[Le]=pn[Me]=pn[je]=pn[$e]=pn[ke]=pn[ze]=pn[Pe]=pn[Te]=pn[Ie]=pn[Ue]=!1;var mn={};mn[_e]=mn[Ce]=mn[Xe]=mn[Oe]=mn[Le]=mn[Ye]=mn[Re]=mn[De]=mn[Fe]=mn[qe]=mn[$e]=mn[ke]=mn[ze]=mn[Pe]=mn[Te]=mn[Ie]=mn[Be]=mn[Ve]=mn[He]=mn[Ge]=mn[We]=!0,mn[Me]=mn[je]=mn[Ue]=!1;var vn={"&":"&","<":"<",">":">",'"':""","'":"'","`":"`"},gn={"&":"&","<":"<",">":">",""":'"',"'":"'","`":"`"},xn={"function":!0,object:!0},yn=parseInt,bn=xn[typeof exports]&&exports&&!exports.nodeType?exports:ve,wn=xn[typeof module]&&module&&!module.nodeType?module:ve,An=wn&&wn.exports===bn?bn:ve,En=u(bn&&wn&&"object"==typeof global&&global),Sn=u(xn[typeof self]&&self),_n=u(xn[typeof window]&&window),Cn=u(xn[typeof this]&&this),On=En||_n!==(Cn&&Cn.window)&&_n||Sn||Cn||Function("return this")(),Ln=Array.prototype,Mn=Object.prototype,jn=Function.prototype.toString,Nn=Mn.hasOwnProperty,$n=Mn.toString,kn=RegExp("^"+jn.call(Nn).replace(rn,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),zn=An?On.Buffer:ve,Pn=On.Symbol,Tn=On.Uint8Array,In=Object.getPrototypeOf,Bn=Object.getOwnPropertySymbols,Un=Object.create,Xn=Mn.propertyIsEnumerable,Yn=Ln.splice,Rn=Math.ceil,Dn=Object.keys,Fn=Math.max,qn=_t(On,"Map"),Vn=_t(On,"Set"),Hn=_t(On,"WeakMap"),Gn=_t(Object,"create"),Wn=qn?jn.call(qn):"",Qn=Vn?jn.call(Vn):"",Zn=Hn?jn.call(Hn):"",Jn=Pn?Pn.prototype:ve,Kn=Jn?Jn.valueOf:ve,tr=Jn?Jn.toString:ve,er=gt(F),nr=xt(),rr=nt("length"),ir=Bn||function(){return[]};(qn&&Ct(new qn)!=$e||Vn&&Ct(new Vn)!=Te||Hn&&Ct(new Hn)!=Ue)&&(Ct=function(t){var e=$n.call(t),n=e==ze?t.constructor:null,r="function"==typeof n?jn.call(n):"";if(r)switch(r){case Wn:return $e;case Qn:return Te;case Zn:return Ue}return e});var ar=Array.isArray,sr=zn?function(t){return t instanceof zn}:fe(!1),or=yt();v.prototype=Gn?Gn(null):Mn,w.prototype.clear=A,w.prototype["delete"]=E,w.prototype.get=S,w.prototype.has=_,w.prototype.set=C,O.prototype.clear=L,O.prototype["delete"]=M,O.prototype.get=j,O.prototype.has=N,O.prototype.set=$,m.constant=fe,m.iteratee=pe,m.keys=se,m.map=Yt,m.property=me,m.range=or,m.toPairs=oe,m.eq=Rt,m.escape=ue,m.escapeRegExp=ce,m.forEach=Xt,m.get=ie,m.hasIn=ae,m.identity=de,m.isArguments=Dt,m.isArray=ar,m.isArrayLike=Ft,m.isArrayLikeObject=qt,m.isBuffer=sr,m.isFunction=Vt,m.isLength=Ht,m.isNative=Qt,m.isNumber=Zt,m.isObject=Gt,m.isObjectLike=Wt,m.isString=Jt,m.isSymbol=Kt,m.isTypedArray=te,m.isUndefined=ee,m.last=Ut,m.replace=le,m.toNumber=ne,m.toString=re,m.unescape=he,m.each=Xt,m.VERSION=ge,(_n||Sn||{})._=m,On._=m}.call(this),String.prototype.format=function(){var t=this,e=arguments;1==arguments.length&&(_.isArray(arguments[0])||_.isObject(arguments[0]))&&(e=arguments[0]);for(var n in e)if(e.hasOwnProperty(n)){var r=n;n.match(/^\{.*\}$/)||(n="{"+n+"}");var i=new RegExp(_.escapeRegExp(n),"g");t=t.replace(i,e[r])}return t};var modal=function(){var t={};return t.show=function(t){var e=$(t);e.removeClass("hidden visible"),setTimeout(function(){e.addClass("visible")},1)},t.hide=function(t){var e=$(t);e.removeClass("visible"),setTimeout(function(){e.addClass("hidden")},500)},t.init=function(){$(".Modal").on("click",function(){$(this).hasClass("no-close")||t.hide(this)}),$(".Dialog").on("click",function(t){t.stopImmediatePropagation()}),$(window).on("keydown",function(e){27==e.which&&t.hide(".Modal")})},t}(),notify=function(){var t={},e="#notif";return t.show=function(n,r){$(e).html(n),modal.show(e),_.isUndefined(r)||setTimeout(t.hide,r)},t.hide=function(){var t=$(e);t.removeClass("visible"),setTimeout(function(){t.addClass("hidden")},250)},t.init=function(){$(e).on("click",function(){t.hide(this)})},t}();$().ready(function(){setInterval(function(){$(".anim-dots").each(function(t){var e=$(t),n=e.html()+".";5==n.length&&(n="."),e.html(n)})},1e3),modal.init(),notify.init()});var page_wifi=function(){function t(t,e){if(200!=e)return void n(5e3);t=JSON.parse(t);var a=!bool(t.result.inProgress)&&t.result.APs.length>0;if(n(a?15e3:1e3),a){var s=$("#ap-list");$(".AP").remove(),s.toggle(a),$("#ap-loader").toggle(!a),t.result.APs.sort(function(t,e){return e.rssi-t.rssi}).forEach(function(t){if(t.enc=parseInt(t.enc),!(t.enc>4)){var e=document.createElement("div"),n=$(e).data("ssid",t.essid).data("pwd",0!=t.enc).addClass("AP");t.essid==r.current&&n.addClass("selected");var a=document.createElement("div");$(a).addClass("inner").htmlAppend('
{0}
'.format(t.rssi_perc)).htmlAppend('
{0}
'.format(_.escape(t.essid))).htmlAppend('
{0}
'.format(i[t.enc]));n.on("click",function(){var t=$(this);$("#conn-essid").val(t.data("ssid")),$("#conn-passwd").val(""),t.data("pwd")?modal.show("#psk-modal"):$("#conn-form").submit()}),e.appendChild(a),s[0].appendChild(e)}})}}function e(){$().get(_root+"/wifi/scan.cgi",t)}function n(t){setTimeout(e,t)}var r={},i=["Open","WEP","WPA","WPA2","WPA/WPA2"];return r.init=function(){e()},r}(),page_waveform=function(){function t(t){var e,n,r=window.matchMedia("screen and (min-width: 544px)"),a=!r.matches,u="FFT"==t.stats.format;u?(e="Frequency - [ Hz ]",n="Magnitude - [ mA ]"):(e="Sample time - [ ms ]",n="Current - [ mA ]");var c=Math.max(-t.stats.min,t.stats.max),l=Math.max(c,10);$("#stat-count").html(t.stats.count),$("#stat-f-s").html(numfmt(t.stats.freq,2)),$("#stat-i-peak").html(numfmt(c,2)),$("#stat-i-rms").html(numfmt(t.stats.rms,2)),$(".stats").removeClass("invis");var h=u?t.stats.freq/t.stats.count:1e3/t.stats.freq,f=_.map(t.samples,function(t,e){return{x:e*h,y:t}}),d=[Chartist.plugins.zoom({resetOnRightMouseBtn:!0,onZoom:function(t,e){i=e,s=t.options.axisX.highLow,o=t.options.axisY.highLow}})];a||d.push(Chartist.plugins.ctAxisTitle({axisX:{axisTitle:e,offset:{x:0,y:55}},axisY:{axisTitle:n,flipText:!0,offset:{x:0,y:15}}}));var p,m,v,g;s?(p=s.high,m=s.low,v=o.high,g=o.low):(v=u?void 0:l,g=u?0:-l),new Chartist.Line("#chart",{series:[{name:"a",data:f}]},{showPoint:!1,showArea:u,fullWidth:!0,chartPadding:a?{right:20,bottom:5,left:0}:{right:25,bottom:30,left:25},series:{a:{lineSmooth:Chartist.Interpolation.monotoneCubic()}},axisX:{type:Chartist.AutoScaleAxis,high:p,low:m},axisY:{type:Chartist.AutoScaleAxis, -high:v,low:g},explicitBounds:{xLow:0,yLow:u?0:void 0,xHigh:f[f.length-1].x},plugins:d})}function e(e,i){if(c=!1,200!=i)errorMsg("Request failed."),l&&r();else{var a=JSON.parse(e);if(!a.success)return errorMsg("Sampling / readout failed."),void(l&&r());t(a),l&&(f=setTimeout(n,h))}}function n(){if(c)return!1;c=!0;var t=$("#count").val(),n=$("#freq").val(),r=_root+"/api/{fmt}.json?n={n}&fs={fs}".format({fmt:a,n:t,fs:n});return $().get(r,e,{timeout:1e3/n*t+1500}),!0}function r(){h=1e3*+$("#ar-time").val(),l=!l,l?n():clearTimeout(f),$("#ar-btn").toggleClass("btn-blue").toggleClass("btn-red").val(l?"Stop":"Auto")}var i,a,s,o,u={},c=!1,l=!1,h=1,f=-1;return u.init=function(t){a=t,$("#load").on("click",n),$("#count,#freq").on("keyup",function(t){13==t.which&&n()}),$("#chart").on("contextmenu",function(t){return i&&i(),i=null,s=null,o=null,t.preventDefault(),!1}),$("input[type=number]").on("mousewheel",function(t){var e=+$(this).val(),n=+($(this).attr("step")||1);t.wheelDelta>0?e+=n:e-=n,$(this).val(e)}),$("#ar-btn").on("click",r)},u}(),page_status=function(){function t(t,a){if(200!=a)errorMsg("Update failed.");else try{var s=JSON.parse(t);n.j=s,$(".sta-only").toggle(s.sta),$(".ap-only").toggle(s.ap),$("#uptime").html(s.uptime),$("#heap").html(s.heap+" bytes"),$("#wmode").html(s.wifiMode),s.sta&&($("#staSSID").html(s.sta.SSID),$("#staRSSIperc").html(s.sta.RSSIperc),$("#staRSSI").html(s.sta.RSSI),$("#staMAC").html(s.sta.MAC)),s.ap&&($("#apSSID").html(s.ap.SSID),$("#apHidden").html(s.ap.hidden?"Yes":"No"),$("#apAuth").html(s.ap.auth),$(".ap-auth-only").toggle("Open"!=s.ap.auth),$("#apPwd").html(s.ap.pwd),$("#apChan").html(s.ap.chan),$("#apMAC").html(s.ap.MAC))}catch(o){errorMsg(o)}i||setTimeout(e,r)}function e(){$().get(_root+"/api/status.json",t)}var n={};n.j={};var r=1e4,i=!1;return n.trigReset=function(){var t="#reset-modal";$().get(_root+"/reset.cgi",function(n,r){if(200==r){modal.show(t),i=!0;var a=setInterval(function(){$().get(_root+"/ping.cgi",function(n,r){200==r&&(modal.hide(t),e(),clearInterval(a),i=!1)},{timeout:500})},1e3)}})},n.init=function(){e()},n}(); \ No newline at end of file +ticks:e.raw.labels,stretch:t.fullWidth})):t.axisX.type.call(n,n.Axis.units.x,e,c,t.axisX),i=void 0===t.axisY.type?new n.AutoScaleAxis(n.Axis.units.y,e,c,n.extend({},t.axisY,{high:n.isNum(t.high)?t.high:t.axisY.high,low:n.isNum(t.low)?t.low:t.axisY.low})):t.axisY.type.call(n,n.Axis.units.y,e,c,t.axisY),r.createGridAndLabels(s,u,this.supportsForeignObject,t,this.eventEmitter),i.createGridAndLabels(s,u,this.supportsForeignObject,t,this.eventEmitter),e.raw.series.forEach(function(a,s){var u=o.elem("g");u.attr({"ct:series-name":a.name,"ct:meta":n.serialize(a.meta)}),u.addClass([t.classNames.series,a.className||t.classNames.series+"-"+n.alphaNumerate(s)].join(" "));var l=[],h=[];e.normalized[s].forEach(function(t,o){var u={x:c.x1+r.projectValue(t,o,e.normalized[s]),y:c.y1-i.projectValue(t,o,e.normalized[s])};l.push(u.x,u.y),h.push({value:t,valueIndex:o,meta:n.getMetaData(a,o)})}.bind(this));var f={lineSmooth:n.getSeriesOption(a,t,"lineSmooth"),showPoint:n.getSeriesOption(a,t,"showPoint"),showLine:n.getSeriesOption(a,t,"showLine"),showArea:n.getSeriesOption(a,t,"showArea"),areaBase:n.getSeriesOption(a,t,"areaBase")},d="function"==typeof f.lineSmooth?f.lineSmooth:f.lineSmooth?n.Interpolation.cardinal():n.Interpolation.none(),p=d(l,h);if(f.showPoint&&p.pathElements.forEach(function(e){var o=u.elem("line",{x1:e.x,y1:e.y,x2:e.x+.01,y2:e.y},t.classNames.point).attr({"ct:value":[e.data.value.x,e.data.value.y].filter(n.isNum).join(","),"ct:meta":e.data.meta});this.eventEmitter.emit("draw",{type:"point",value:e.data.value,index:e.data.valueIndex,meta:e.data.meta,series:a,seriesIndex:s,axisX:r,axisY:i,group:u,element:o,x:e.x,y:e.y})}.bind(this)),f.showLine){var m=u.elem("path",{d:p.stringify()},t.classNames.line,!0);this.eventEmitter.emit("draw",{type:"line",values:e.normalized[s],path:p.clone(),chartRect:c,index:s,series:a,seriesIndex:s,axisX:r,axisY:i,group:u,element:m})}if(f.showArea&&i.range){var v=Math.max(Math.min(f.areaBase,i.range.max),i.range.min),g=c.y1-i.projectValue(v);p.splitByCommand("M").filter(function(t){return t.pathElements.length>1}).map(function(t){var e=t.pathElements[0],n=t.pathElements[t.pathElements.length-1];return t.clone(!0).position(0).remove(1).move(e.x,g).line(e.x,e.y).position(t.pathElements.length+1).line(n.x,g)}).forEach(function(n){var o=u.elem("path",{d:n.stringify()},t.classNames.area,!0);this.eventEmitter.emit("draw",{type:"area",values:e.normalized[s],path:n.clone(),series:a,seriesIndex:s,axisX:r,axisY:i,chartRect:c,index:s,group:u,element:o})}.bind(this))}}.bind(this)),this.eventEmitter.emit("created",{bounds:i.bounds,chartRect:c,axisX:r,axisY:i,svg:this.svg,options:t})}function i(t,e,r,i){n.Line["super"].constructor.call(this,t,e,a,n.extend({},a,r),i)}var a={axisX:{offset:30,position:"end",labelOffset:{x:0,y:0},showLabel:!0,showGrid:!0,labelInterpolationFnc:n.noop,type:void 0},axisY:{offset:40,position:"start",labelOffset:{x:0,y:0},showLabel:!0,showGrid:!0,labelInterpolationFnc:n.noop,type:void 0,scaleMinSpace:20,onlyInteger:!1},width:void 0,height:void 0,showLine:!0,showPoint:!0,showArea:!1,areaBase:0,lineSmooth:!0,low:void 0,high:void 0,chartPadding:{top:15,right:15,bottom:5,left:10},fullWidth:!1,reverseData:!1,classNames:{chart:"ct-chart-line",label:"ct-label",labelGroup:"ct-labels",series:"ct-series",line:"ct-line",point:"ct-point",area:"ct-area",grid:"ct-grid",gridGroup:"ct-grids",vertical:"ct-vertical",horizontal:"ct-horizontal",start:"ct-start",end:"ct-end"}};n.Line=n.Base.extend({constructor:i,createChart:r})}(window,document,t),function(t,e,n){"use strict";function r(t){this.data=n.normalizeData(this.data);var e,r={raw:this.data,normalized:t.distributeSeries?n.getDataArray(this.data,t.reverseData,t.horizontalBars?"x":"y").map(function(t){return[t]}):n.getDataArray(this.data,t.reverseData,t.horizontalBars?"x":"y")};this.svg=n.createSvg(this.container,t.width,t.height,t.classNames.chart+(t.horizontalBars?" "+t.classNames.horizontalBars:""));var i=this.svg.elem("g").addClass(t.classNames.gridGroup),s=this.svg.elem("g"),o=this.svg.elem("g").addClass(t.classNames.labelGroup);if(t.stackBars&&0!==r.normalized.length){var u=n.serialMap(r.normalized,function(){return Array.prototype.slice.call(arguments).map(function(t){return t}).reduce(function(t,e){return{x:t.x+(e&&e.x)||0,y:t.y+(e&&e.y)||0}},{x:0,y:0})});e=n.getHighLow([u],n.extend({},t,{referenceValue:0}),t.horizontalBars?"x":"y")}else e=n.getHighLow(r.normalized,n.extend({},t,{referenceValue:0}),t.horizontalBars?"x":"y");e.high=+t.high||(0===t.high?0:e.high),e.low=+t.low||(0===t.low?0:e.low);var c,l,h,f,d,p=n.createChartRect(this.svg,t,a.padding);l=t.distributeSeries&&t.stackBars?r.raw.labels.slice(0,1):r.raw.labels,t.horizontalBars?(c=f=void 0===t.axisX.type?new n.AutoScaleAxis(n.Axis.units.x,r,p,n.extend({},t.axisX,{highLow:e,referenceValue:0})):t.axisX.type.call(n,n.Axis.units.x,r,p,n.extend({},t.axisX,{highLow:e,referenceValue:0})),h=d=void 0===t.axisY.type?new n.StepAxis(n.Axis.units.y,r,p,{ticks:l}):t.axisY.type.call(n,n.Axis.units.y,r,p,t.axisY)):(h=f=void 0===t.axisX.type?new n.StepAxis(n.Axis.units.x,r,p,{ticks:l}):t.axisX.type.call(n,n.Axis.units.x,r,p,t.axisX),c=d=void 0===t.axisY.type?new n.AutoScaleAxis(n.Axis.units.y,r,p,n.extend({},t.axisY,{highLow:e,referenceValue:0})):t.axisY.type.call(n,n.Axis.units.y,r,p,n.extend({},t.axisY,{highLow:e,referenceValue:0})));var m=t.horizontalBars?p.x1+c.projectValue(0):p.y1-c.projectValue(0),v=[];h.createGridAndLabels(i,o,this.supportsForeignObject,t,this.eventEmitter),c.createGridAndLabels(i,o,this.supportsForeignObject,t,this.eventEmitter),r.raw.series.forEach(function(e,i){var a,o,u=i-(r.raw.series.length-1)/2;a=t.distributeSeries&&!t.stackBars?h.axisLength/r.normalized.length/2:t.distributeSeries&&t.stackBars?h.axisLength/2:h.axisLength/r.normalized[i].length/2,o=s.elem("g"),o.attr({"ct:series-name":e.name,"ct:meta":n.serialize(e.meta)}),o.addClass([t.classNames.series,e.className||t.classNames.series+"-"+n.alphaNumerate(i)].join(" ")),r.normalized[i].forEach(function(s,l){var g,x,y,b;if(b=t.distributeSeries&&!t.stackBars?i:t.distributeSeries&&t.stackBars?0:l,g=t.horizontalBars?{x:p.x1+c.projectValue(s&&s.x?s.x:0,l,r.normalized[i]),y:p.y1-h.projectValue(s&&s.y?s.y:0,b,r.normalized[i])}:{x:p.x1+h.projectValue(s&&s.x?s.x:0,b,r.normalized[i]),y:p.y1-c.projectValue(s&&s.y?s.y:0,l,r.normalized[i])},h instanceof n.StepAxis&&(h.options.stretch||(g[h.units.pos]+=a*(t.horizontalBars?-1:1)),g[h.units.pos]+=t.stackBars||t.distributeSeries?0:u*t.seriesBarDistance*(t.horizontalBars?-1:1)),y=v[l]||m,v[l]=y-(m-g[h.counterUnits.pos]),void 0!==s){var w={};w[h.units.pos+"1"]=g[h.units.pos],w[h.units.pos+"2"]=g[h.units.pos],!t.stackBars||"accumulate"!==t.stackMode&&t.stackMode?(w[h.counterUnits.pos+"1"]=m,w[h.counterUnits.pos+"2"]=g[h.counterUnits.pos]):(w[h.counterUnits.pos+"1"]=y,w[h.counterUnits.pos+"2"]=v[l]),w.x1=Math.min(Math.max(w.x1,p.x1),p.x2),w.x2=Math.min(Math.max(w.x2,p.x1),p.x2),w.y1=Math.min(Math.max(w.y1,p.y2),p.y1),w.y2=Math.min(Math.max(w.y2,p.y2),p.y1),x=o.elem("line",w,t.classNames.bar).attr({"ct:value":[s.x,s.y].filter(n.isNum).join(","),"ct:meta":n.getMetaData(e,l)}),this.eventEmitter.emit("draw",n.extend({type:"bar",value:s,index:l,meta:n.getMetaData(e,l),series:e,seriesIndex:i,axisX:f,axisY:d,chartRect:p,group:o,element:x},w))}}.bind(this))}.bind(this)),this.eventEmitter.emit("created",{bounds:c.bounds,chartRect:p,axisX:f,axisY:d,svg:this.svg,options:t})}function i(t,e,r,i){n.Bar["super"].constructor.call(this,t,e,a,n.extend({},a,r),i)}var a={axisX:{offset:30,position:"end",labelOffset:{x:0,y:0},showLabel:!0,showGrid:!0,labelInterpolationFnc:n.noop,scaleMinSpace:30,onlyInteger:!1},axisY:{offset:40,position:"start",labelOffset:{x:0,y:0},showLabel:!0,showGrid:!0,labelInterpolationFnc:n.noop,scaleMinSpace:20,onlyInteger:!1},width:void 0,height:void 0,high:void 0,low:void 0,chartPadding:{top:15,right:15,bottom:5,left:10},seriesBarDistance:15,stackBars:!1,stackMode:"accumulate",horizontalBars:!1,distributeSeries:!1,reverseData:!1,classNames:{chart:"ct-chart-bar",horizontalBars:"ct-horizontal-bars",label:"ct-label",labelGroup:"ct-labels",series:"ct-series",bar:"ct-bar",grid:"ct-grid",gridGroup:"ct-grids",vertical:"ct-vertical",horizontal:"ct-horizontal",start:"ct-start",end:"ct-end"}};n.Bar=n.Base.extend({constructor:i,createChart:r})}(window,document,t),t}),function(t,e){t["Chartist.plugins.ctAxisTitle"]=e()}(this,function(){return function(t,e,n){"use strict";var r={axisTitle:"",axisClass:"ct-axis-title",offset:{x:0,y:0},textAnchor:"middle",flipText:!1},i={axisX:r,axisY:r};n.plugins=n.plugins||{},n.plugins.ctAxisTitle=function(t){return t=n.extend({},i,t),function(e){e.on("created",function(e){var r,i,a;if(t.axisX.axisTitle&&e.axisX&&(r=e.axisX.axisLength/2+e.options.axisY.offset+e.options.chartPadding.left,i=e.options.chartPadding.top,"end"===e.options.axisY.position&&(r-=e.options.axisY.offset),"end"===e.options.axisX.position&&(i+=e.axisY.axisLength),a=new n.Svg("text"),a.addClass(t.axisX.axisClass),a.text(t.axisX.axisTitle),a.attr({x:r+t.axisX.offset.x,y:i+t.axisX.offset.y,"text-anchor":t.axisX.textAnchor}),e.svg.append(a,!0)),t.axisY.axisTitle&&e.axisY){r=0,i=e.axisY.axisLength/2+e.options.chartPadding.top,"start"===e.options.axisX.position&&(i+=e.options.axisX.offset),"end"===e.options.axisY.position&&(r=e.axisX.axisLength);var s="rotate("+(t.axisY.flipText?-90:90)+", "+r+", "+i+")";a=new n.Svg("text"),a.addClass(t.axisY.axisClass),a.text(t.axisY.axisTitle),a.attr({x:r+t.axisY.offset.x,y:i+t.axisY.offset.y,transform:s,"text-anchor":t.axisY.textAnchor}),e.svg.append(a,!0)}})}}}(window,document,Chartist),Chartist.plugins.ctAxisTitle}),function(t,e){t["Chartist.plugins.zoom"]=e()}(this,function(){return function(t,e,n){"use strict";function r(t){t.attr({style:"display:none"})}function i(t){t.attr({style:"display:block"})}function a(t,e){var n=t.x,r=t.y,i=e.x-n,a=e.y-r;return 0>i&&(i=-i,n=e.x),0>a&&(a=-a,r=e.y),{x:n,y:r,width:i,height:a}}function s(t,e){return o(t.clientX,t.clientY,e)}function o(t,e,n){var r="svg"===n.tagName?n:n.ownerSVGElement,i=r.getScreenCTM(),a=r.createSVGPoint();return a.x=t,a.y=e,a=a.matrixTransform(i.inverse()),a||{x:0,y:0}}function u(t,e){var n=e.bounds.max,r=e.bounds.min;if(e.scale&&"log"===e.scale.type){var i=e.scale.base;return Math.pow(i,t*c(n/r,i)/e.axisLength)*r}return t*e.bounds.range/e.axisLength+r}function c(t,e){return Math.log(t)/Math.log(e)}var l={};n.plugins=n.plugins||{},n.plugins.zoom=function(t){return t=n.extend({},l,t),function(e){function o(t){var e=s(t,b);return e.id=t.identifier,e}function c(t){for(var e=0;e1&&(y.attr(a(O[0],O[1])),i(y))}function h(t){for(var e=t.changedTouches,n=0;n1&&(y.attr(a(O[0],O[1])),i(y),t.preventDefault())}function f(t){d(t.changedTouches)}function d(t){for(var e=0;e=0&&O.splice(n,1)}}function p(t){O.length>1&&g(a(O[0],O[1])),d(t.changedTouches),r(y)}function m(t){0===t.button&&(S=s(t,b),y.attr(a(S,S)),i(y),t.preventDefault())}function v(e){if(0===e.button){var n=a(S,s(e,b));g(n),S=null,r(y),e.preventDefault()}else t.resetOnRightMouseBtn&&2===e.button&&(L(),e.preventDefault())}function g(t){if(t.width>5&&t.height>5){var n=t.x-E.x1,r=n+t.width,i=E.y1-t.y,a=i-t.height,s=u(n,w),o=u(r,w),c=u(a,A),l=u(i,A),h=e.options.explicitBounds;_.isUndefined(h)||(_.isUndefined(h.xLow)||(s=Math.max(h.xLow,s)),_.isUndefined(h.xHigh)||(o=Math.min(h.xHigh,o)),_.isUndefined(h.yLow)||(c=Math.max(h.yLow,c)),_.isUndefined(h.yHigh)||(l=Math.min(h.yHigh,l))),e.options.axisX.highLow={low:s,high:o},e.options.axisY.highLow={low:c,high:l},e.update(e.data,e.options),C&&C(e,L)}}function x(t){if(S){var e=s(t,b);y.attr(a(S,e)),t.preventDefault()}}if(e instanceof n.Line){var y,b,w,A,E,S,C=t.onZoom,O=[];e.on("draw",function(t){var e=t.type;"line"!==e&&"bar"!==e&&"area"!==e&&"point"!==e||t.element.attr({"clip-path":"url(#zoom-mask)"})}),e.on("created",function(t){w=t.axisX,A=t.axisY,E=t.chartRect,b=t.svg._node,y=t.svg.elem("rect",{x:10,y:10,width:100,height:100},"ct-zoom-rect"),r(y);var e=t.svg.querySelector("defs")||t.svg.elem("defs"),n=E.width(),i=E.height();e.elem("clipPath",{id:"zoom-mask"}).elem("rect",{x:E.x1,y:E.y2,width:n,height:i,fill:"white"}),b.addEventListener("mousedown",m),b.addEventListener("mouseup",v),b.addEventListener("mousemove",x),b.addEventListener("touchstart",l),b.addEventListener("touchmove",h),b.addEventListener("touchend",p),b.addEventListener("touchcancel",f)});var L=function(){e.options.axisX.highLow=null,e.options.axisY.highLow=null,e.update(e.data,e.options)}}}}}(window,document,Chartist),Chartist.plugins.zoom}),function(){function t(t,e){return t.set(e[0],e[1]),t}function e(t,e){return t.add(e),t}function n(t,e){for(var n=-1,r=t.length;++n-1&&t%1==0&&e>t}function f(t){var e=-1,n=Array(t.size);return t.forEach(function(t,r){n[++e]=[r,t]}),n}function d(t){var e=-1,n=Array(t.size);return t.forEach(function(t){n[++e]=t}),n}function p(t){return gn[t]}function m(){}function v(){}function g(t,e){return y(t,e)&&delete t[e]}function x(t,e){if(Gn){var n=t[e];return n===ye?ve:n}return Nn.call(t,e)?t[e]:ve}function y(t,e){return Gn?t[e]!==ve:Nn.call(t,e)}function b(t,e,n){t[e]=Gn&&n===ve?ye:n}function w(t){var e=-1,n=t?t.length:0;for(this.clear();++en)return!1;var r=t.length-1;return n==r?t.pop():Yn.call(t,n,1),!0}function z(t,e){var n=T(t,e);return 0>n?ve:t[n][1]}function P(t,e){return T(t,e)>-1}function T(t,e){for(var n=t.length;n--;)if(Rt(t[n][0],e))return n;return-1}function I(t,e,n){var r=T(t,e);0>r?t.push([e,n]):t[r][1]=n}function B(t,e,n){var r=t[e];Nn.call(t,e)&&Rt(r,n)&&(n!==ve||e in t)||(t[e]=n)}function U(t,e){return t&&pt(e,se(e),t)}function X(t){return"function"==typeof t?t:de}function Y(t){return ar(t)?t:Bt(t)}function R(t,e,r,i,a,s,o){var u;if(i&&(u=s?i(t,a,s,o):i(t)),u!==ve)return u;if(!Gt(t))return t;var c=ar(t);if(c){if(u=Lt(t),!e)return dt(t,u)}else{var h=Ct(t),f=h==je||h==Ne;if(sr(t))return st(t,e);if(h==ze||h==_e||f&&!s){if(l(t))return s?t:{};if(u=Mt(f?{}:t),!e)return u=U(u,t),r?vt(t,u):u}else{if(!mn[h])return s?t:{};u=jt(t,h,e)}}o||(o=new O);var d=o.get(t);return d?d:(o.set(t,u),(c?n:F)(t,function(n,a){B(u,a,R(n,e,r,i,a,t,o))}),r&&!c?vt(t,u):u)}function D(t){return Gt(t)?Un(t):{}}function F(t,e){return t&&nr(t,e,se)}function q(t,e){e=kt(e,t)?[e+""]:Y(e);for(var n=0,r=e.length;null!=t&&r>n;)t=t[e[n++]];return n&&n==r?t:ve}function V(t,e){return Nn.call(t,e)||"object"==typeof t&&e in t&&null===In(t)}function H(t,e){return e in Object(t)}function G(t,e,n,r,i){return t===e?!0:null==t||null==e||!Gt(t)&&!Wt(e)?t!==t&&e!==e:W(t,e,G,n,r,i)}function W(t,e,n,r,i,a){var s=ar(t),o=ar(e),u=Ce,c=Ce;s||(u=Ct(t),u=u==_e?ze:u),o||(c=Ct(e),c=c==_e?ze:c);var h=u==ze&&!l(t),f=c==ze&&!l(e),d=u==c;if(d&&!h)return a||(a=new O),s||te(t)?bt(t,e,n,r,i,a):wt(t,e,u,n,r,i,a);if(!(i&we)){var p=h&&Nn.call(t,"__wrapped__"),m=f&&Nn.call(e,"__wrapped__");if(p||m)return a||(a=new O),n(p?t.value():t,m?e.value():e,r,i,a)}return d?(a||(a=new O),At(t,e,n,r,i,a)):!1}function Q(t,e,n,r){var i=n.length,a=i,s=!r;if(null==t)return!a;for(t=Object(t);i--;){var o=n[i];if(s&&o[2]?o[1]!==t[o[0]]:!(o[0]in t))return!1}for(;++ie&&(e=-e>i?0:i+e),n=n>i?i:n,0>n&&(n+=i),i=e>n?0:n-e>>>0,e>>>=0;for(var a=Array(i);++re?1:-1:ne(r)||0,it(e,n,r,t)}}function bt(t,e,n,r,i,s){var o=-1,u=i&we,c=i&be,l=t.length,h=e.length;if(l!=h&&!(u&&h>l))return!1;var f=s.get(t);if(f)return f==e;var d=!0;for(s.set(t,e);++o-1&&t%1==0&&Ee>=t}function Gt(t){var e=typeof t;return!!t&&("object"==e||"function"==e)}function Wt(t){return!!t&&"object"==typeof t}function Qt(t){return null==t?!1:Vt(t)?kn.test(jn.call(t)):Wt(t)&&(l(t)?kn:hn).test(t)}function Zt(t){return"number"==typeof t||Wt(t)&&$n.call(t)==ke}function Jt(t){return"string"==typeof t||!ar(t)&&Wt(t)&&$n.call(t)==Ie}function Kt(t){return"symbol"==typeof t||Wt(t)&&$n.call(t)==Be}function te(t){return Wt(t)&&Ht(t.length)&&!!pn[$n.call(t)]}function ee(t){return t===ve}function ne(t){if(Gt(t)){var e=Vt(t.valueOf)?t.valueOf():t;t=Gt(e)?e+"":e}if("string"!=typeof t)return 0===t?t:+t;t=t.replace(sn,"");var n=ln.test(t);return n||fn.test(t)?yn(t.slice(2),n?2:8):cn.test(t)?Se:+t}function re(t){if("string"==typeof t)return t;if(null==t)return"";if(Kt(t))return tr?tr.call(t):"";var e=t+"";return"0"==e&&1/t==-Ae?"-0":e}function ie(t,e,n){var r=null==t?ve:q(t,e);return r===ve?n:r}function ae(t,e){return Ot(t,e,H)}function se(t){var e=Pt(t);if(!e&&!Ft(t))return J(t);var n=Nt(t),r=!!n,i=n||[],a=i.length;for(var s in t)!V(t,s)||r&&("length"==s||h(s,a))||e&&"constructor"==s||i.push(s);return i}function oe(t){return o(t,se(t))}function ue(t){return t=re(t),t&&Ke.test(t)?t.replace(Ze,c):t}function ce(t){return t=re(t),t&&an.test(t)?t.replace(rn,"\\$&"):t}function le(){var t=arguments,e=re(t[0]);return t.length<3?e:e.replace(t[1],t[2])}function he(t){return t=re(t),t&&Je.test(t)?t.replace(Qe,p):t}function fe(t){return function(){return t}}function de(t){return t}function pe(t){return Z("function"==typeof t?t:R(t,!0))}function me(t){return kt(t)?nt(t):rt(t)}var ve,ge="4.6.1",xe=200,ye="__lodash_hash_undefined__",be=1,we=2,Ae=1/0,Ee=9007199254740991,Se=NaN,_e="[object Arguments]",Ce="[object Array]",Oe="[object Boolean]",Le="[object Date]",Me="[object Error]",je="[object Function]",Ne="[object GeneratorFunction]",$e="[object Map]",ke="[object Number]",ze="[object Object]",Pe="[object RegExp]",Te="[object Set]",Ie="[object String]",Be="[object Symbol]",Ue="[object WeakMap]",Xe="[object ArrayBuffer]",Ye="[object Float32Array]",Re="[object Float64Array]",De="[object Int8Array]",Fe="[object Int16Array]",qe="[object Int32Array]",Ve="[object Uint8Array]",He="[object Uint8ClampedArray]",Ge="[object Uint16Array]",We="[object Uint32Array]",Qe=/&(?:amp|lt|gt|quot|#39|#96);/g,Ze=/[&<>"'`]/g,Je=RegExp(Qe.source),Ke=RegExp(Ze.source),tn=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,en=/^\w*$/,nn=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]/g,rn=/[\\^$.*+?()[\]{}|]/g,an=RegExp(rn.source),sn=/^\s+|\s+$/g,on=/\\(\\)?/g,un=/\w*$/,cn=/^[-+]0x[0-9a-f]+$/i,ln=/^0b[01]+$/i,hn=/^\[object .+?Constructor\]$/,fn=/^0o[0-7]+$/i,dn=/^(?:0|[1-9]\d*)$/,pn={};pn[Ye]=pn[Re]=pn[De]=pn[Fe]=pn[qe]=pn[Ve]=pn[He]=pn[Ge]=pn[We]=!0,pn[_e]=pn[Ce]=pn[Xe]=pn[Oe]=pn[Le]=pn[Me]=pn[je]=pn[$e]=pn[ke]=pn[ze]=pn[Pe]=pn[Te]=pn[Ie]=pn[Ue]=!1;var mn={};mn[_e]=mn[Ce]=mn[Xe]=mn[Oe]=mn[Le]=mn[Ye]=mn[Re]=mn[De]=mn[Fe]=mn[qe]=mn[$e]=mn[ke]=mn[ze]=mn[Pe]=mn[Te]=mn[Ie]=mn[Be]=mn[Ve]=mn[He]=mn[Ge]=mn[We]=!0,mn[Me]=mn[je]=mn[Ue]=!1;var vn={"&":"&","<":"<",">":">",'"':""","'":"'","`":"`"},gn={"&":"&","<":"<",">":">",""":'"',"'":"'","`":"`"},xn={"function":!0,object:!0},yn=parseInt,bn=xn[typeof exports]&&exports&&!exports.nodeType?exports:ve,wn=xn[typeof module]&&module&&!module.nodeType?module:ve,An=wn&&wn.exports===bn?bn:ve,En=u(bn&&wn&&"object"==typeof global&&global),Sn=u(xn[typeof self]&&self),_n=u(xn[typeof window]&&window),Cn=u(xn[typeof this]&&this),On=En||_n!==(Cn&&Cn.window)&&_n||Sn||Cn||Function("return this")(),Ln=Array.prototype,Mn=Object.prototype,jn=Function.prototype.toString,Nn=Mn.hasOwnProperty,$n=Mn.toString,kn=RegExp("^"+jn.call(Nn).replace(rn,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$"),zn=An?On.Buffer:ve,Pn=On.Symbol,Tn=On.Uint8Array,In=Object.getPrototypeOf,Bn=Object.getOwnPropertySymbols,Un=Object.create,Xn=Mn.propertyIsEnumerable,Yn=Ln.splice,Rn=Math.ceil,Dn=Object.keys,Fn=Math.max,qn=_t(On,"Map"),Vn=_t(On,"Set"),Hn=_t(On,"WeakMap"),Gn=_t(Object,"create"),Wn=qn?jn.call(qn):"",Qn=Vn?jn.call(Vn):"",Zn=Hn?jn.call(Hn):"",Jn=Pn?Pn.prototype:ve,Kn=Jn?Jn.valueOf:ve,tr=Jn?Jn.toString:ve,er=gt(F),nr=xt(),rr=nt("length"),ir=Bn||function(){return[]};(qn&&Ct(new qn)!=$e||Vn&&Ct(new Vn)!=Te||Hn&&Ct(new Hn)!=Ue)&&(Ct=function(t){var e=$n.call(t),n=e==ze?t.constructor:null,r="function"==typeof n?jn.call(n):"";if(r)switch(r){case Wn:return $e;case Qn:return Te;case Zn:return Ue}return e});var ar=Array.isArray,sr=zn?function(t){return t instanceof zn}:fe(!1),or=yt();v.prototype=Gn?Gn(null):Mn,w.prototype.clear=A,w.prototype["delete"]=E,w.prototype.get=S,w.prototype.has=_,w.prototype.set=C,O.prototype.clear=L,O.prototype["delete"]=M,O.prototype.get=j,O.prototype.has=N,O.prototype.set=$,m.constant=fe,m.iteratee=pe,m.keys=se,m.map=Yt,m.property=me,m.range=or,m.toPairs=oe,m.eq=Rt,m.escape=ue,m.escapeRegExp=ce,m.forEach=Xt,m.get=ie,m.hasIn=ae,m.identity=de,m.isArguments=Dt,m.isArray=ar,m.isArrayLike=Ft,m.isArrayLikeObject=qt,m.isBuffer=sr,m.isFunction=Vt,m.isLength=Ht,m.isNative=Qt,m.isNumber=Zt,m.isObject=Gt,m.isObjectLike=Wt,m.isString=Jt,m.isSymbol=Kt,m.isTypedArray=te,m.isUndefined=ee,m.last=Ut,m.replace=le,m.toNumber=ne,m.toString=re,m.unescape=he,m.each=Xt,m.VERSION=ge,(_n||Sn||{})._=m,On._=m}.call(this),String.prototype.format=function(){var t=this,e=arguments;1==arguments.length&&(_.isArray(arguments[0])||_.isObject(arguments[0]))&&(e=arguments[0]);for(var n in e)if(e.hasOwnProperty(n)){var r=n;n.match(/^\{.*\}$/)||(n="{"+n+"}");var i=new RegExp(_.escapeRegExp(n),"g");t=t.replace(i,e[r])}return t};var modal=function(){var t={};return t.show=function(t){var e=$(t);e.removeClass("hidden visible"),setTimeout(function(){e.addClass("visible")},1)},t.hide=function(t){var e=$(t);e.removeClass("visible"),setTimeout(function(){e.addClass("hidden")},500)},t.init=function(){$(".Modal").on("click",function(){$(this).hasClass("no-close")||t.hide(this)}),$(".Dialog").on("click",function(t){t.stopImmediatePropagation()}),$(window).on("keydown",function(e){27==e.which&&t.hide(".Modal")})},t}(),notify=function(){var t={},e="#notif";return t.show=function(n,r){$(e).html(n),modal.show(e),_.isUndefined(r)||setTimeout(t.hide,r)},t.hide=function(){var t=$(e);t.removeClass("visible"),setTimeout(function(){t.addClass("hidden")},250)},t.init=function(){$(e).on("click",function(){t.hide(this)})},t}();$().ready(function(){setInterval(function(){$(".anim-dots").each(function(t){var e=$(t),n=e.html()+".";5==n.length&&(n="."),e.html(n)})},1e3),modal.init(),notify.init()});var page_wifi=function(){function t(t,e){if(200!=e)return void n(5e3);t=JSON.parse(t);var a=!bool(t.result.inProgress)&&t.result.APs.length>0;if(n(a?15e3:1e3),a){var s=$("#ap-list");$(".AP").remove(),s.toggle(a),$("#ap-loader").toggle(!a),t.result.APs.sort(function(t,e){return e.rssi-t.rssi}).forEach(function(t){if(t.enc=parseInt(t.enc),!(t.enc>4)){var e=document.createElement("div"),n=$(e).data("ssid",t.essid).data("pwd",0!=t.enc).addClass("AP");t.essid==r.current&&n.addClass("selected");var a=document.createElement("div");$(a).addClass("inner").htmlAppend('
{0}
'.format(t.rssi_perc)).htmlAppend('
{0}
'.format(_.escape(t.essid))).htmlAppend('
{0}
'.format(i[t.enc]));n.on("click",function(){var t=$(this);$("#conn-essid").val(t.data("ssid")),$("#conn-passwd").val(""),t.data("pwd")?modal.show("#psk-modal"):$("#conn-form").submit()}),e.appendChild(a),s[0].appendChild(e)}})}}function e(){$().get(_root+"/wifi/scan",t)}function n(t){setTimeout(e,t)}var r={},i=["Open","WEP","WPA","WPA2","WPA/WPA2"];return r.init=function(){e()},r}(),page_waveform=function(){function t(t){var e,n,r=window.matchMedia("screen and (min-width: 544px)"),a=!r.matches,u="FFT"==t.stats.format;u?(e="Frequency - [ Hz ]",n="Magnitude - [ mA ]"):(e="Sample time - [ ms ]",n="Current - [ mA ]");var c=Math.max(-t.stats.min,t.stats.max),l=Math.max(c,10);$("#stat-count").html(t.stats.count),$("#stat-f-s").html(numfmt(t.stats.freq,2)),$("#stat-i-peak").html(numfmt(c,2)),$("#stat-i-rms").html(numfmt(t.stats.rms,2)),$(".stats").removeClass("invis");var h=u?t.stats.freq/t.stats.count:1e3/t.stats.freq,f=_.map(t.samples,function(t,e){return{x:e*h,y:t}}),d=[Chartist.plugins.zoom({resetOnRightMouseBtn:!0,onZoom:function(t,e){i=e,s=t.options.axisX.highLow,o=t.options.axisY.highLow}})];a||d.push(Chartist.plugins.ctAxisTitle({axisX:{axisTitle:e,offset:{x:0,y:55}},axisY:{axisTitle:n,flipText:!0,offset:{x:0,y:15}}}));var p,m,v,g;s?(p=s.high,m=s.low,v=o.high,g=o.low):(v=u?void 0:l,g=u?0:-l),new Chartist.Line("#chart",{series:[{name:"a",data:f}]},{showPoint:!1,showArea:u,fullWidth:!0,chartPadding:a?{right:20,bottom:5,left:0}:{right:25,bottom:30,left:25},series:{a:{lineSmooth:Chartist.Interpolation.monotoneCubic()}},axisX:{type:Chartist.AutoScaleAxis,high:p,low:m},axisY:{type:Chartist.AutoScaleAxis, +high:v,low:g},explicitBounds:{xLow:0,yLow:u?0:void 0,xHigh:f[f.length-1].x},plugins:d})}function e(e,i){if(c=!1,200!=i)errorMsg("Request failed."),l&&r();else{var a=JSON.parse(e);if(!a.success)return errorMsg("Sampling / readout failed."),void(l&&r());t(a),l&&(f=setTimeout(n,h))}}function n(){if(c)return!1;c=!0;var t=$("#count").val(),n=$("#freq").val(),r=_root+"/measure/{fmt}?n={n}&fs={fs}".format({fmt:a,n:t,fs:n});return $().get(r,e,{timeout:1e3/n*t+1500}),!0}function r(){h=1e3*+$("#ar-time").val(),l=!l,l?n():clearTimeout(f),$("#ar-btn").toggleClass("btn-blue").toggleClass("btn-red").val(l?"Stop":"Auto")}var i,a,s,o,u={},c=!1,l=!1,h=1,f=-1;return u.init=function(t){a=t,$("#load").on("click",n),$("#count,#freq").on("keyup",function(t){13==t.which&&n()}),$("#chart").on("contextmenu",function(t){return i&&i(),i=null,s=null,o=null,t.preventDefault(),!1}),$("input[type=number]").on("mousewheel",function(t){var e=+$(this).val(),n=+($(this).attr("step")||1);t.wheelDelta>0?e+=n:e-=n,$(this).val(e)}),$("#ar-btn").on("click",r)},u}(),page_status=function(){function t(t,a){if(200!=a)errorMsg("Update failed.");else try{var s=JSON.parse(t);n.j=s,$(".sta-only").toggle(s.sta),$(".ap-only").toggle(s.ap),$("#uptime").html(s.uptime),$("#heap").html(s.heap+" bytes"),$("#wmode").html(s.wifiMode),s.sta&&($("#staSSID").html(s.sta.SSID),$("#staRSSIperc").html(s.sta.RSSIperc),$("#staRSSI").html(s.sta.RSSI),$("#staMAC").html(s.sta.MAC)),s.ap&&($("#apSSID").html(s.ap.SSID),$("#apHidden").html(s.ap.hidden?"Yes":"No"),$("#apAuth").html(s.ap.auth),$(".ap-auth-only").toggle("Open"!=s.ap.auth),$("#apPwd").html(s.ap.pwd),$("#apChan").html(s.ap.chan),$("#apMAC").html(s.ap.MAC))}catch(o){errorMsg(o)}i||setTimeout(e,r)}function e(){$().get(_root+"/system/status",t)}var n={};n.j={};var r=1e4,i=!1;return n.trigReset=function(){var t="#reset-modal";$().get(_root+"/system/reset",function(n,r){if(200==r){modal.show(t),i=!0;var a=setInterval(function(){$().get(_root+"/system/ping",function(n,r){200==r&&(modal.hide(t),e(),clearInterval(a),i=!1)},{timeout:500})},1e3)}})},n.init=function(){e()},n}(); \ No newline at end of file diff --git a/html_src/sass/pages/_wfm.scss b/html_src/sass/pages/_wfm.scss index 82a4607..3904f93 100644 --- a/html_src/sass/pages/_wfm.scss +++ b/html_src/sass/pages/_wfm.scss @@ -70,6 +70,8 @@ #stat-i-peak:after {content: "mA"} #stat-i-rms:after {content: "mA"} + padding-bottom: 50px; + // auto reload box .ar { position: absolute; diff --git a/libesphttpd/util/cgiwifi.c b/libesphttpd/util/cgiwifi.c index 139e0f1..d032297 100644 --- a/libesphttpd/util/cgiwifi.c +++ b/libesphttpd/util/cgiwifi.c @@ -165,7 +165,7 @@ int ICACHE_FLASH_ATTR cgiWiFiScan(HttpdConnData *connData) { } httpdStartResponse(connData, 200); - httpdHeader(connData, "Content-Type", "text/json"); + httpdHeader(connData, "Content-Type", "application/json"); httpdEndHeaders(connData); if (cgiWifiAps.scanInProgress==1) { @@ -251,7 +251,7 @@ int ICACHE_FLASH_ATTR cgiWiFiConnect(HttpdConnData *connData) { httpdRedirect(connData, "/wifi"); #else os_timer_arm(&reassTimer, 500, 0); - httpdRedirect(connData, "connecting.html"); // TODO custom page. Also diff. b/w sta & ap. + httpdRedirect(connData, "/wifi/connecting.html"); // TODO custom page. Also diff. b/w sta & ap. #endif return HTTPD_CGI_DONE; } @@ -288,7 +288,7 @@ int ICACHE_FLASH_ATTR cgiWiFiConnStatus(HttpdConnData *connData) { struct ip_info info; int st=wifi_station_get_connect_status(); httpdStartResponse(connData, 200); - httpdHeader(connData, "Content-Type", "text/json"); + httpdHeader(connData, "Content-Type", "application/json"); httpdEndHeaders(connData); if (connTryStatus==CONNTRY_IDLE) { len=sprintf(buff, "{\"status\":\"idle\"}"); @@ -332,9 +332,9 @@ int ICACHE_FLASH_ATTR tplWlan(HttpdConnData *connData, char *token, void **arg) } else if (strcmp(token, "WiFiapwarn")==0) { x=wifi_get_opmode(); if (x==2) { - strcpy(buff, "Can't scan in this mode. Click here to go to STA+AP mode."); + strcpy(buff, "Can't scan in this mode. Click here to go to STA+AP mode."); } else { - strcpy(buff, "Click here to go to stand-alone AP mode."); + strcpy(buff, "Click here to go to stand-alone AP mode."); } } httpdSend(connData, buff, -1); diff --git a/user/routes.c b/user/routes.c index a82a0f2..889c63b 100644 --- a/user/routes.c +++ b/user/routes.c @@ -37,45 +37,36 @@ static int FLASH_FN myPassFn(HttpdConnData *connData, int no, char *user, int us HttpdBuiltInUrl builtInUrls[] = { ROUTE_CGI_ARG("*", cgiRedirectApClientToHostname, "esp8266.nonet"), // redirect func for the captive portal - // ! Templates in the JSON folder will have application/json content type ! - // otherwise they're encoded the same like the HTML ones -> no heatshrink, no gzip + // --- System control --- + ROUTE_CGI("/system/reset", cgiResetDevice), + ROUTE_CGI("/system/ping", cgiPing), + ROUTE_TPL_FILE("/system/status", tplSystemStatus, "/json/status.tpl"), - // --- UI pages --- - ROUTE_CGI("/reset.cgi", cgiResetDevice), - ROUTE_CGI("/ping.cgi", cgiPing), + // --- Measurement --- + ROUTE_TPL_FILE("/measure/raw", tplWaveformJSON, "/json/samples.tpl"), + ROUTE_TPL_FILE("/measure/fft", tplFourierJSON, "/json/samples.tpl"), + // --- UI pages --- // System Status page - ROUTE_TPL_FILE("/", tplSystemStatus, "/pages/status.tpl"), + ROUTE_TPL_FILE("/", tplSystemStatus, "/pages/status.tpl"), ROUTE_TPL_FILE("/status", tplSystemStatus, "/pages/status.tpl"), - - ROUTE_TPL_FILE("/api/status.json", tplSystemStatus, "/json/status.tpl"), - - // About ROUTE_TPL_FILE("/about", tplAbout, "/pages/about.tpl"), - - // Waveform page ROUTE_FILE("/waveform", "/pages/wfm.html"), // static file, html -> can use gzip - // FFT ROUTE_FILE("/fft", "/pages/fft.html"), // static file, html -> can use gzip - ROUTE_TPL_FILE("/api/raw.json", tplWaveformJSON, "/json/samples.tpl"), - ROUTE_TPL_FILE("/api/fft.json", tplFourierJSON, "/json/samples.tpl"), - // --- WiFi config --- - #if WIFI_PROTECT - ROUTE_AUTH("/wifi/*", myPassFn), + ROUTE_AUTH("/wifi*", myPassFn), #endif - + ROUTE_REDIRECT("/wifi/", "/wifi"), ROUTE_TPL_FILE("/wifi", tplWlan, "/pages/wifi.tpl"), - ROUTE_CGI("/wifi/scan.cgi", cgiWiFiScan), - ROUTE_CGI("/wifi/connect.cgi", cgiWiFiConnect), - ROUTE_CGI("/wifi/connstatus.cgi", cgiWiFiConnStatus), - ROUTE_CGI("/wifi/setmode.cgi", cgiWiFiSetMode), + ROUTE_CGI("/wifi/scan", cgiWiFiScan), + ROUTE_CGI("/wifi/connect", cgiWiFiConnect), + ROUTE_CGI("/wifi/connstatus", cgiWiFiConnStatus), + ROUTE_CGI("/wifi/setmode", cgiWiFiSetMode), // --- FS --- - ROUTE_FS("*"), //Catch-all cgi function for the filesystem NOTE: unsafe, lets user read templates. ROUTE_END()