diff --git a/data/www/css/compiled/main-dark-mode.css b/data/www/css/compiled/main-dark-mode.css index 5b87016..e096af3 100644 --- a/data/www/css/compiled/main-dark-mode.css +++ b/data/www/css/compiled/main-dark-mode.css @@ -1 +1 @@ -.warning{color:#e56723!important}.bg-warning{background-color:#e56723!important}.border-warning{border-color:#e56723!important}.info{color:#027bff!important}.bg-info{background-color:#027bff!important}.border-info{border-color:#027bff!important}.info-alt{color:#075cb7!important}.bg-info-alt{background-color:#075cb7!important}.border-info-alt{border-color:#075cb7!important}.success{color:#0eef5f!important}.bg-success{background-color:#0eef5f!important}.border-success{border-color:#0eef5f!important}.success-alt{color:#11a948!important}.bg-success-alt{background-color:#11a948!important}.border-success-alt{border-color:#11a948!important}.error{color:#ef0e5d!important}.bg-error{background-color:#ef0e5d!important}.border-error{border-color:#ef0e5d!important}.error-alt{color:#c20941!important}.bg-error-alt{background-color:#c20941!important}.border-error-alt{border-color:#c20941!important}.danger{color:#ef0e5d!important}.bg-danger{background-color:#ef0e5d!important}.border-danger{border-color:#ef0e5d!important}.danger-alt{color:#c20941!important}.bg-danger-alt{background-color:#c20941!important}.border-danger-alt{border-color:#c20941!important}.purple{color:#bc48ff!important}.bg-purple{background-color:#bc48ff!important}.border-purple{border-color:#bc48ff!important}.purple-alt{color:#692fbd!important}.bg-purple-alt{background-color:#692fbd!important}.border-purple-alt{border-color:#692fbd!important}.neutral{color:#464646!important}.bg-neutral{background-color:#464646!important}.border-neutral{border-color:#464646!important}.yellow{color:#e5a123!important}.bg-yellow{background-color:#e5a123!important}.border-yellow{border-color:#e5a123!important}.white{color:#fff!important}.bg-white{background-color:#fff!important}.border-white{border-color:#fff!important}.black{color:#000!important}.bg-black{background-color:#000!important}.border-black{border-color:#000!important}.youtube{color:#fd3c01!important}.bg-youtube{background-color:#fd3c01!important}.border-youtube{border-color:#fd3c01!important}.raspbian{color:#b61240!important}.bg-raspbian{background-color:#b61240!important}.border-raspbian{border-color:#b61240!important}.windows{color:#12a7e3!important}.bg-windows{background-color:#12a7e3!important}.border-windows{border-color:#12a7e3!important}.macos{color:#b3bcc2!important}.bg-macos{background-color:#b3bcc2!important}.border-macos{border-color:#b3bcc2!important}.debian{color:#cf084e!important}.bg-debian{background-color:#cf084e!important}.border-debian{border-color:#cf084e!important}.fedora{color:#52a2da!important}.bg-fedora{background-color:#52a2da!important}.border-fedora{border-color:#52a2da!important}.ubuntu{color:#d64514!important}.bg-ubuntu{background-color:#d64514!important}.border-ubuntu{border-color:#d64514!important}.suse{color:#6fb425!important}.bg-suse{background-color:#6fb425!important}.border-suse{border-color:#6fb425!important}.redhat{color:#c60200!important}.bg-redhat{background-color:#c60200!important}.border-redhat{border-color:#c60200!important}.centos{color:#9b4c88!important}.bg-centos{background-color:#9b4c88!important}.border-centos{border-color:#9b4c88!important}.other{color:#e5a123!important}.bg-other{background-color:#e5a123!important}.border-other{border-color:#e5a123!important}button.btn-warning,.btn.btn-warning{background:#e56723;box-shadow:0 2px #913e11}button.btn-warning:hover,.btn.btn-warning:hover{box-shadow:0 2px 0 1px #913e11 inset}button.btn-warning:focus,.btn.btn-warning:focus{background:#913e11}button.btn-wire-warning,.btn.btn-wire-warning{background:transparent;box-shadow:none;border:2px solid rgb(229,103,35);color:#fffc}button.btn-wire-warning i.btn-match,.btn.btn-wire-warning i.btn-match{color:#e56723}button.btn-wire-warning:hover,.btn.btn-wire-warning:hover{background:#e567230d;border-color:#be5117;color:#be5117;box-shadow:none}button.btn-wire-warning:focus,.btn.btn-wire-warning:focus{border-color:#913e11;background:transparent}button.btn-info,.btn.btn-info{background:#027bff;box-shadow:0 2px #004a9b}button.btn-info:hover,.btn.btn-info:hover{box-shadow:0 2px 0 1px #004a9b inset}button.btn-info:focus,.btn.btn-info:focus{background:#004a9b}button.btn-wire-info,.btn.btn-wire-info{background:transparent;box-shadow:none;border:2px solid rgb(2,123,255);color:#fffc}button.btn-wire-info i.btn-match,.btn.btn-wire-info i.btn-match{color:#027bff}button.btn-wire-info:hover,.btn.btn-wire-info:hover{background:#027bff0d;border-color:#0063ce;color:#0063ce;box-shadow:none}button.btn-wire-info:focus,.btn.btn-wire-info:focus{border-color:#004a9b;background:transparent}button.btn-info-alt,.btn.btn-info-alt{background:#075cb7;box-shadow:0 2px #032b55}button.btn-info-alt:hover,.btn.btn-info-alt:hover{box-shadow:0 2px 0 1px #032b55 inset}button.btn-info-alt:focus,.btn.btn-info-alt:focus{background:#032b55}button.btn-wire-info-alt,.btn.btn-wire-info-alt{background:transparent;box-shadow:none;border:2px solid rgb(7,92,183);color:#fffc}button.btn-wire-info-alt i.btn-match,.btn.btn-wire-info-alt i.btn-match{color:#075cb7}button.btn-wire-info-alt:hover,.btn.btn-wire-info-alt:hover{background:#075cb70d;border-color:#054386;color:#054386;box-shadow:none}button.btn-wire-info-alt:focus,.btn.btn-wire-info-alt:focus{border-color:#032b55;background:transparent}button.btn-success,.btn.btn-success{background:#0eef5f;box-shadow:0 2px #088f39}button.btn-success:hover,.btn.btn-success:hover{box-shadow:0 2px 0 1px #088f39 inset}button.btn-success:focus,.btn.btn-success:focus{background:#088f39}button.btn-wire-success,.btn.btn-wire-success{background:transparent;box-shadow:none;border:2px solid rgb(14,239,95);color:#fffc}button.btn-wire-success i.btn-match,.btn.btn-wire-success i.btn-match{color:#0eef5f}button.btn-wire-success:hover,.btn.btn-wire-success:hover{background:#0eef5f0d;border-color:#0bbf4c;color:#0bbf4c;box-shadow:none}button.btn-wire-success:focus,.btn.btn-wire-success:focus{border-color:#088f39;background:transparent}button.btn-success-alt,.btn.btn-success-alt{background:#11a948;box-shadow:0 2px #084c21}button.btn-success-alt:hover,.btn.btn-success-alt:hover{box-shadow:0 2px 0 1px #084c21 inset}button.btn-success-alt:focus,.btn.btn-success-alt:focus{background:#084c21}button.btn-wire-success-alt,.btn.btn-wire-success-alt{background:transparent;box-shadow:none;border:2px solid rgb(17,169,72);color:#fffc}button.btn-wire-success-alt i.btn-match,.btn.btn-wire-success-alt i.btn-match{color:#11a948}button.btn-wire-success-alt:hover,.btn.btn-wire-success-alt:hover{background:#11a9480d;border-color:#0c7b34;color:#0c7b34;box-shadow:none}button.btn-wire-success-alt:focus,.btn.btn-wire-success-alt:focus{border-color:#084c21;background:transparent}button.btn-error,.btn.btn-error{background:#ef0e5d;box-shadow:0 2px #8f0838}button.btn-error:hover,.btn.btn-error:hover{box-shadow:0 2px 0 1px #8f0838 inset}button.btn-error:focus,.btn.btn-error:focus{background:#8f0838}button.btn-wire-error,.btn.btn-wire-error{background:transparent;box-shadow:none;border:2px solid rgb(239,14,93);color:#fffc}button.btn-wire-error i.btn-match,.btn.btn-wire-error i.btn-match{color:#ef0e5d}button.btn-wire-error:hover,.btn.btn-wire-error:hover{background:#ef0e5d0d;border-color:#bf0b4a;color:#bf0b4a;box-shadow:none}button.btn-wire-error:focus,.btn.btn-wire-error:focus{border-color:#8f0838;background:transparent}button.btn-error-alt,.btn.btn-error-alt{background:#c20941;box-shadow:0 2px #610420}button.btn-error-alt:hover,.btn.btn-error-alt:hover{box-shadow:0 2px 0 1px #610420 inset}button.btn-error-alt:focus,.btn.btn-error-alt:focus{background:#610420}button.btn-wire-error-alt,.btn.btn-wire-error-alt{background:transparent;box-shadow:none;border:2px solid rgb(194,9,65);color:#fffc}button.btn-wire-error-alt i.btn-match,.btn.btn-wire-error-alt i.btn-match{color:#c20941}button.btn-wire-error-alt:hover,.btn.btn-wire-error-alt:hover{background:#c209410d;border-color:#910731;color:#910731;box-shadow:none}button.btn-wire-error-alt:focus,.btn.btn-wire-error-alt:focus{border-color:#610420;background:transparent}button.btn-danger,.btn.btn-danger{background:#ef0e5d;box-shadow:0 2px #8f0838}button.btn-danger:hover,.btn.btn-danger:hover{box-shadow:0 2px 0 1px #8f0838 inset}button.btn-danger:focus,.btn.btn-danger:focus{background:#8f0838}button.btn-wire-danger,.btn.btn-wire-danger{background:transparent;box-shadow:none;border:2px solid rgb(239,14,93);color:#fffc}button.btn-wire-danger i.btn-match,.btn.btn-wire-danger i.btn-match{color:#ef0e5d}button.btn-wire-danger:hover,.btn.btn-wire-danger:hover{background:#ef0e5d0d;border-color:#bf0b4a;color:#bf0b4a;box-shadow:none}button.btn-wire-danger:focus,.btn.btn-wire-danger:focus{border-color:#8f0838;background:transparent}button.btn-danger-alt,.btn.btn-danger-alt{background:#c20941;box-shadow:0 2px #610420}button.btn-danger-alt:hover,.btn.btn-danger-alt:hover{box-shadow:0 2px 0 1px #610420 inset}button.btn-danger-alt:focus,.btn.btn-danger-alt:focus{background:#610420}button.btn-wire-danger-alt,.btn.btn-wire-danger-alt{background:transparent;box-shadow:none;border:2px solid rgb(194,9,65);color:#fffc}button.btn-wire-danger-alt i.btn-match,.btn.btn-wire-danger-alt i.btn-match{color:#c20941}button.btn-wire-danger-alt:hover,.btn.btn-wire-danger-alt:hover{background:#c209410d;border-color:#910731;color:#910731;box-shadow:none}button.btn-wire-danger-alt:focus,.btn.btn-wire-danger-alt:focus{border-color:#610420;background:transparent}button.btn-purple,.btn.btn-purple{background:#bc48ff;box-shadow:0 2px #8f00e1}button.btn-purple:hover,.btn.btn-purple:hover{box-shadow:0 2px 0 1px #8f00e1 inset}button.btn-purple:focus,.btn.btn-purple:focus{background:#8f00e1}button.btn-wire-purple,.btn.btn-wire-purple{background:transparent;box-shadow:none;border:2px solid rgb(188,72,255);color:#fffc}button.btn-wire-purple i.btn-match,.btn.btn-wire-purple i.btn-match{color:#bc48ff}button.btn-wire-purple:hover,.btn.btn-wire-purple:hover{background:#bc48ff0d;border-color:#a915ff;color:#a915ff;box-shadow:none}button.btn-wire-purple:focus,.btn.btn-wire-purple:focus{border-color:#8f00e1;background:transparent}button.btn-purple-alt,.btn.btn-purple-alt{background:#692fbd;box-shadow:0 2px #3c1b6b}button.btn-purple-alt:hover,.btn.btn-purple-alt:hover{box-shadow:0 2px 0 1px #3c1b6b inset}button.btn-purple-alt:focus,.btn.btn-purple-alt:focus{background:#3c1b6b}button.btn-wire-purple-alt,.btn.btn-wire-purple-alt{background:transparent;box-shadow:none;border:2px solid rgb(105,47,189);color:#fffc}button.btn-wire-purple-alt i.btn-match,.btn.btn-wire-purple-alt i.btn-match{color:#692fbd}button.btn-wire-purple-alt:hover,.btn.btn-wire-purple-alt:hover{background:#692fbd0d;border-color:#522594;color:#522594;box-shadow:none}button.btn-wire-purple-alt:focus,.btn.btn-wire-purple-alt:focus{border-color:#3c1b6b;background:transparent}button.btn-neutral,.btn.btn-neutral{background:#464646;box-shadow:0 2px #131313}button.btn-neutral:hover,.btn.btn-neutral:hover{box-shadow:0 2px 0 1px #131313 inset}button.btn-neutral:focus,.btn.btn-neutral:focus{background:#131313}button.btn-wire-neutral,.btn.btn-wire-neutral{background:transparent;box-shadow:none;border:2px solid rgb(70,70,70);color:#fffc}button.btn-wire-neutral i.btn-match,.btn.btn-wire-neutral i.btn-match{color:#464646}button.btn-wire-neutral:hover,.btn.btn-wire-neutral:hover{background:#4646460d;border-color:#2d2d2d;color:#2d2d2d;box-shadow:none}button.btn-wire-neutral:focus,.btn.btn-wire-neutral:focus{border-color:#131313;background:transparent}button.btn-yellow,.btn.btn-yellow{background:#e5a123;box-shadow:0 2px #916411}button.btn-yellow:hover,.btn.btn-yellow:hover{box-shadow:0 2px 0 1px #916411 inset}button.btn-yellow:focus,.btn.btn-yellow:focus{background:#916411}button.btn-wire-yellow,.btn.btn-wire-yellow{background:transparent;box-shadow:none;border:2px solid rgb(229,161,35);color:#fffc}button.btn-wire-yellow i.btn-match,.btn.btn-wire-yellow i.btn-match{color:#e5a123}button.btn-wire-yellow:hover,.btn.btn-wire-yellow:hover{background:#e5a1230d;border-color:#be8417;color:#be8417;box-shadow:none}button.btn-wire-yellow:focus,.btn.btn-wire-yellow:focus{border-color:#916411;background:transparent}button.btn-white,.btn.btn-white{background:#fff;box-shadow:0 2px #ccc}button.btn-white:hover,.btn.btn-white:hover{box-shadow:0 2px 0 1px #ccc inset}button.btn-white:focus,.btn.btn-white:focus{background:#ccc}button.btn-wire-white,.btn.btn-wire-white{background:transparent;box-shadow:none;border:2px solid rgb(255,255,255);color:#fffc}button.btn-wire-white i.btn-match,.btn.btn-wire-white i.btn-match{color:#fff}button.btn-wire-white:hover,.btn.btn-wire-white:hover{background:#ffffff0d;border-color:#e6e6e6;color:#e6e6e6;box-shadow:none}button.btn-wire-white:focus,.btn.btn-wire-white:focus{border-color:#ccc;background:transparent}button.btn-black,.btn.btn-black{background:#000;box-shadow:0 2px #000}button.btn-black:hover,.btn.btn-black:hover{box-shadow:0 2px 0 1px #000 inset}button.btn-black:focus,.btn.btn-black:focus{background:#000}button.btn-wire-black,.btn.btn-wire-black{background:transparent;box-shadow:none;border:2px solid rgb(0,0,0);color:#fffc}button.btn-wire-black i.btn-match,.btn.btn-wire-black i.btn-match{color:#000}button.btn-wire-black:hover,.btn.btn-wire-black:hover{background:#0000000d;border-color:#000;color:#000;box-shadow:none}button.btn-wire-black:focus,.btn.btn-wire-black:focus{border-color:#000;background:transparent}button.btn-youtube,.btn.btn-youtube{background:#fd3c01;box-shadow:0 2px #972401}button.btn-youtube:hover,.btn.btn-youtube:hover{box-shadow:0 2px 0 1px #972401 inset}button.btn-youtube:focus,.btn.btn-youtube:focus{background:#972401}button.btn-wire-youtube,.btn.btn-wire-youtube{background:transparent;box-shadow:none;border:2px solid rgb(253,60,1);color:#fffc}button.btn-wire-youtube i.btn-match,.btn.btn-wire-youtube i.btn-match{color:#fd3c01}button.btn-wire-youtube:hover,.btn.btn-wire-youtube:hover{background:#fd3c010d;border-color:#ca3001;color:#ca3001;box-shadow:none}button.btn-wire-youtube:focus,.btn.btn-wire-youtube:focus{border-color:#972401;background:transparent}button.btn-raspbian,.btn.btn-raspbian{background:#b61240;box-shadow:0 2px #59091f}button.btn-raspbian:hover,.btn.btn-raspbian:hover{box-shadow:0 2px 0 1px #59091f inset}button.btn-raspbian:focus,.btn.btn-raspbian:focus{background:#59091f}button.btn-wire-raspbian,.btn.btn-wire-raspbian{background:transparent;box-shadow:none;border:2px solid rgb(182,18,64);color:#fffc}button.btn-wire-raspbian i.btn-match,.btn.btn-wire-raspbian i.btn-match{color:#b61240}button.btn-wire-raspbian:hover,.btn.btn-wire-raspbian:hover{background:#b612400d;border-color:#880d30;color:#880d30;box-shadow:none}button.btn-wire-raspbian:focus,.btn.btn-wire-raspbian:focus{border-color:#59091f;background:transparent}button.btn-windows,.btn.btn-windows{background:#12a7e3;box-shadow:0 2px #0b6184}button.btn-windows:hover,.btn.btn-windows:hover{box-shadow:0 2px 0 1px #0b6184 inset}button.btn-windows:focus,.btn.btn-windows:focus{background:#0b6184}button.btn-wire-windows,.btn.btn-wire-windows{background:transparent;box-shadow:none;border:2px solid rgb(18,167,227);color:#fffc}button.btn-wire-windows i.btn-match,.btn.btn-wire-windows i.btn-match{color:#12a7e3}button.btn-wire-windows:hover,.btn.btn-wire-windows:hover{background:#12a7e30d;border-color:#0e84b4;color:#0e84b4;box-shadow:none}button.btn-wire-windows:focus,.btn.btn-wire-windows:focus{border-color:#0b6184;background:transparent}button.btn-macos,.btn.btn-macos{background:#b3bcc2;box-shadow:0 2px #7a8a95}button.btn-macos:hover,.btn.btn-macos:hover{box-shadow:0 2px 0 1px #7a8a95 inset}button.btn-macos:focus,.btn.btn-macos:focus{background:#7a8a95}button.btn-wire-macos,.btn.btn-wire-macos{background:transparent;box-shadow:none;border:2px solid rgb(179,188,194);color:#fffc}button.btn-wire-macos i.btn-match,.btn.btn-wire-macos i.btn-match{color:#b3bcc2}button.btn-wire-macos:hover,.btn.btn-wire-macos:hover{background:#b3bcc20d;border-color:#97a3ab;color:#97a3ab;box-shadow:none}button.btn-wire-macos:focus,.btn.btn-wire-macos:focus{border-color:#7a8a95;background:transparent}button.btn-debian,.btn.btn-debian{background:#cf084e;box-shadow:0 2px #6d0429}button.btn-debian:hover,.btn.btn-debian:hover{box-shadow:0 2px 0 1px #6d0429 inset}button.btn-debian:focus,.btn.btn-debian:focus{background:#6d0429}button.btn-wire-debian,.btn.btn-wire-debian{background:transparent;box-shadow:none;border:2px solid rgb(207,8,78);color:#fffc}button.btn-wire-debian i.btn-match,.btn.btn-wire-debian i.btn-match{color:#cf084e}button.btn-wire-debian:hover,.btn.btn-wire-debian:hover{background:#cf084e0d;border-color:#9e063b;color:#9e063b;box-shadow:none}button.btn-wire-debian:focus,.btn.btn-wire-debian:focus{border-color:#6d0429;background:transparent}button.btn-fedora,.btn.btn-fedora{background:#52a2da;box-shadow:0 2px #236ea3}button.btn-fedora:hover,.btn.btn-fedora:hover{box-shadow:0 2px 0 1px #236ea3 inset}button.btn-fedora:focus,.btn.btn-fedora:focus{background:#236ea3}button.btn-wire-fedora,.btn.btn-wire-fedora{background:transparent;box-shadow:none;border:2px solid rgb(82,162,218);color:#fffc}button.btn-wire-fedora i.btn-match,.btn.btn-wire-fedora i.btn-match{color:#52a2da}button.btn-wire-fedora:hover,.btn.btn-wire-fedora:hover{background:#52a2da0d;border-color:#2c8bcd;color:#2c8bcd;box-shadow:none}button.btn-wire-fedora:focus,.btn.btn-wire-fedora:focus{border-color:#236ea3;background:transparent}button.btn-ubuntu,.btn.btn-ubuntu{background:#d64514;box-shadow:0 2px #79270b}button.btn-ubuntu:hover,.btn.btn-ubuntu:hover{box-shadow:0 2px 0 1px #79270b inset}button.btn-ubuntu:focus,.btn.btn-ubuntu:focus{background:#79270b}button.btn-wire-ubuntu,.btn.btn-wire-ubuntu{background:transparent;box-shadow:none;border:2px solid rgb(214,69,20);color:#fffc}button.btn-wire-ubuntu i.btn-match,.btn.btn-wire-ubuntu i.btn-match{color:#d64514}button.btn-wire-ubuntu:hover,.btn.btn-wire-ubuntu:hover{background:#d645140d;border-color:#a73610;color:#a73610;box-shadow:none}button.btn-wire-ubuntu:focus,.btn.btn-wire-ubuntu:focus{border-color:#79270b;background:transparent}button.btn-suse,.btn.btn-suse{background:#6fb425;box-shadow:0 2px #3b5f14}button.btn-suse:hover,.btn.btn-suse:hover{box-shadow:0 2px 0 1px #3b5f14 inset}button.btn-suse:focus,.btn.btn-suse:focus{background:#3b5f14}button.btn-wire-suse,.btn.btn-wire-suse{background:transparent;box-shadow:none;border:2px solid rgb(111,180,37);color:#fffc}button.btn-wire-suse i.btn-match,.btn.btn-wire-suse i.btn-match{color:#6fb425}button.btn-wire-suse:hover,.btn.btn-wire-suse:hover{background:#6fb4250d;border-color:#558a1c;color:#558a1c;box-shadow:none}button.btn-wire-suse:focus,.btn.btn-wire-suse:focus{border-color:#3b5f14;background:transparent}button.btn-redhat,.btn.btn-redhat{background:#c60200;box-shadow:0 2px #600100}button.btn-redhat:hover,.btn.btn-redhat:hover{box-shadow:0 2px 0 1px #600100 inset}button.btn-redhat:focus,.btn.btn-redhat:focus{background:#600100}button.btn-wire-redhat,.btn.btn-wire-redhat{background:transparent;box-shadow:none;border:2px solid rgb(198,2,0);color:#fffc}button.btn-wire-redhat i.btn-match,.btn.btn-wire-redhat i.btn-match{color:#c60200}button.btn-wire-redhat:hover,.btn.btn-wire-redhat:hover{background:#c602000d;border-color:#930100;color:#930100;box-shadow:none}button.btn-wire-redhat:focus,.btn.btn-wire-redhat:focus{border-color:#600100;background:transparent}button.btn-centos,.btn.btn-centos{background:#9b4c88;box-shadow:0 2px #572a4c}button.btn-centos:hover,.btn.btn-centos:hover{box-shadow:0 2px 0 1px #572a4c inset}button.btn-centos:focus,.btn.btn-centos:focus{background:#572a4c}button.btn-wire-centos,.btn.btn-wire-centos{background:transparent;box-shadow:none;border:2px solid rgb(155,76,136);color:#fffc}button.btn-wire-centos i.btn-match,.btn.btn-wire-centos i.btn-match{color:#9b4c88}button.btn-wire-centos:hover,.btn.btn-wire-centos:hover{background:#9b4c880d;border-color:#793b6a;color:#793b6a;box-shadow:none}button.btn-wire-centos:focus,.btn.btn-wire-centos:focus{border-color:#572a4c;background:transparent}button.btn-other,.btn.btn-other{background:#e5a123;box-shadow:0 2px #916411}button.btn-other:hover,.btn.btn-other:hover{box-shadow:0 2px 0 1px #916411 inset}button.btn-other:focus,.btn.btn-other:focus{background:#916411}button.btn-wire-other,.btn.btn-wire-other{background:transparent;box-shadow:none;border:2px solid rgb(229,161,35);color:#fffc}button.btn-wire-other i.btn-match,.btn.btn-wire-other i.btn-match{color:#e5a123}button.btn-wire-other:hover,.btn.btn-wire-other:hover{background:#e5a1230d;border-color:#be8417;color:#be8417;box-shadow:none}button.btn-wire-other:focus,.btn.btn-wire-other:focus{border-color:#916411;background:transparent}.alert.alert-warning{color:#e56723;background:#e5672333}.alert.alert-info{color:#027bff;background:#027bff33}.alert.alert-info-alt{color:#075cb7;background:#075cb733}.alert.alert-success{color:#0eef5f;background:#0eef5f33}.alert.alert-success-alt{color:#11a948;background:#11a94833}.alert.alert-error{color:#ef0e5d;background:#ef0e5d33}.alert.alert-error-alt{color:#c20941;background:#c2094133}.alert.alert-danger{color:#ef0e5d;background:#ef0e5d33}.alert.alert-danger-alt{color:#c20941;background:#c2094133}.alert.alert-purple{color:#bc48ff;background:#bc48ff33}.alert.alert-purple-alt{color:#692fbd;background:#692fbd33}.alert.alert-neutral{color:#464646;background:#46464633}.alert.alert-yellow{color:#e5a123;background:#e5a12333}.alert.alert-white{color:#fff;background:#fff3}.alert.alert-black{color:#000;background:#0003}.alert.alert-youtube{color:#fd3c01;background:#fd3c0133}.alert.alert-raspbian{color:#b61240;background:#b6124033}.alert.alert-windows{color:#12a7e3;background:#12a7e333}.alert.alert-macos{color:#b3bcc2;background:#b3bcc233}.alert.alert-debian{color:#cf084e;background:#cf084e33}.alert.alert-fedora{color:#52a2da;background:#52a2da33}.alert.alert-ubuntu{color:#d64514;background:#d6451433}.alert.alert-suse{color:#6fb425;background:#6fb42533}.alert.alert-redhat{color:#c60200;background:#c6020033}.alert.alert-centos{color:#9b4c88;background:#9b4c8833}.alert.alert-other{color:#e5a123;background:#e5a12333}@font-face{font-family:Sixtyfour;src:url(../../webfonts/Sixtyfour-Regular.ttf) format("truetype")}*{font-family:Roboto,Arial,"sans-serif";margin:0;padding:0;box-sizing:border-box}html{background-color:#111}body,html{height:100%;font-family:Arial,sans-serif}.container{display:flex;height:100vh}.horizontal{display:flex;flex-direction:row;justify-content:flex-start;align-items:flex-start;flex:1;align-self:stretch}.vertical{display:flex;flex-direction:column;justify-content:flex-start;align-items:flex-start;flex:1;align-self:stretch}main{flex:1;display:flex;flex-direction:column}main .main-container{display:flex;flex-direction:column;flex:1;overflow:hidden;align-self:stretch}main .main-container .top-content{display:flex;flex-direction:row;justify-content:flex-start;align-items:center;align-self:stretch;padding:10px 10px 10px 15px;background:transparent;border-bottom:1px solid #222}main .main-container .top-content h1{color:#fff;font-weight:600;font-size:24px}main .main-container .top-content .top-actions{flex:1;display:flex;flex-direction:row;justify-content:flex-start;align-items:center}main .main-container .top-content .top-actions.align-right{justify-content:flex-end;margin-right:10px}main .main-container .top-content .top-actions .btn:first-child{margin-left:0!important}main .main-container .top-content .top-actions .btn,main .main-container .top-content .top-actions button{margin-left:10px}main .main-container .bottom-content{display:flex;flex-direction:row;align-self:stretch;justify-content:flex-start;align-items:flex-start;flex:1;overflow-y:auto;background:radial-gradient(circle at 0% 53%,rgba(239,14,93,.8) 10%,transparent 45%),radial-gradient(circle at 135% 53%,rgba(2,123,255,.8) 10%,transparent 95%),radial-gradient(circle at 50% 80%,rgba(14,239,95,.8) 40%,transparent 95%)}main .main-container .bottom-content .page-content{flex:2;overflow-y:auto;align-self:stretch;display:flex;flex-direction:column;justify-content:flex-start;align-items:flex-start;background:#000c;padding:5px}main .main-container .bottom-content .page-content .inner{flex:1;display:flex;flex-direction:column;justify-content:flex-start;align-items:flex-start;padding:10px 10px 40px;background:#111;align-self:stretch}main .main-container .bottom-content .page-content .inner h1,main .main-container .bottom-content .page-content .inner h2,main .main-container .bottom-content .page-content .inner h3,main .main-container .bottom-content .page-content .inner h4,main .main-container .bottom-content .page-content .inner h5,main .main-container .bottom-content .page-content .inner h6{color:#ddd}main .main-container .bottom-content .page-content .inner p{font-size:12px;line-height:18px;display:flex;margin-bottom:5px;flex-direction:row;justify-content:flex-start;align-items:center;color:#666}main .main-container .bottom-content .page-panel{flex:1;overflow-y:auto;align-self:stretch;background:#111;border-top:none}main .main-container .bottom-content .page-panel.left-panel{border-right:1px solid #222;border-left:none}main .main-container .bottom-content .page-panel.left-panel.explr-explorer{flex:.5;overflow-y:auto;padding:0;background:#111;box-shadow:1px 1px .5px .5px inset #0003;max-width:250px}main .main-container .bottom-content .page-panel.right-panel{border-left:1px solid #222;border-right:none}.invisible{visibility:hidden!important}.hidden{display:none!important}.tac{text-align:center!important}.tar{text-align:right!important}a{text-decoration:none}.normal{font-weight:400!important}.bold{font-weight:700!important}.col{display:flex;flex:1;flex-direction:column;align-self:stretch}main .context-bar{padding:10px;position:sticky;top:0;z-index:1000;max-height:80px;border-bottom:1px solid #222;display:flex;flex-direction:row;align-items:center}main .context-bar .context-menu{flex:1}main .context-bar .context-menu .inner{display:flex}main .context-bar .context-menu .inner ul.pills{margin:0}main .context-bar .context-divider{width:1px;height:100%;background:#222;margin-left:20px;margin-right:20px}main .context-bar .contex-tail{margin-right:20px}main .context-bar .contex-tail .btn{margin-right:0}main .context-bar .context-user{display:flex;margin-right:20px}main .context-bar .context-user .trigger{color:#fff}main .context-bar .context-user .trigger .avatar{width:32px;height:32px;border-radius:4px;background:#aaa;margin-right:10px;display:flex;flex-direction:row;justify-content:center;align-items:center;text-align:center;font-weight:700;font-size:14px;border:1px solid #444;color:#000}main .context-bar .context-user .trigger i{margin-top:-5px;margin-left:10px}menu{width:300px;background:#111;overflow-y:auto;overflow-x:visible;padding:20px;z-index:2000;display:flex;flex-direction:column;justify-content:flex-start;align-items:flex-start;border-right:1px solid #222;min-width:64px}menu h1.logo{margin:40px 0 0 10px;align-self:stretch;display:flex}menu h1.logo a{text-align:center;text-shadow:0px 0 0 rgb(255,255,255),0px 2px 0 #444,0 0px 0 rgb(14,239,95),-0px 0 0 rgb(2,123,255),0 -0px 0 rgb(239,14,93);text-decoration:none;background:linear-gradient(90deg,#a0a0a0 0,#bebebe 46%,#dcdcdc);-webkit-background-clip:text;color:transparent;flex:1;font-family:Sixtyfour,Work Sans,Arial,"sans-serif";align-self:stretch;padding-right:3px;font-size:20px;text-transform:uppercase;transition:all .55s cubic-bezier(.19,1,.22,1);display:flex;flex-direction:row;justify-content:center;align-items:center;position:relative;color:#fff}menu h1.logo a img{flex-shrink:0;width:30px;margin-right:10px;position:absolute;left:5px;transition:all .55s cubic-bezier(.19,1,.22,1)}menu h1.logo a img.after{opacity:0}menu:hover h1.logo a{text-align:center;text-shadow:3px 0 0 rgb(255,255,255),3px 2px 0 #444,0 3px 0 rgb(14,239,95),-3px 0 0 rgb(2,123,255),0 -3px 0 rgb(239,14,93);text-decoration:none;background:linear-gradient(90deg,#a0a0a0 0,#bebebe 46%,#dcdcdc);-webkit-background-clip:text;color:transparent}menu:hover h1.logo a img.before{opacity:0}menu:hover h1.logo a img.after{animation-duration:.2s;animation-name:logotouch}menu nav{display:flex;align-self:stretch;flex:1}menu nav ul{margin:60px 0 20px;flex:1;align-self:flex-start;display:flex;flex-direction:column;list-style:none}menu nav ul li{align-self:stretch;overflow:hidden;position:relative;transition:all .55s cubic-bezier(.19,1,.22,1);margin:10px 0;border-radius:4px}menu nav ul li a{color:#ffffffe6;font-size:16px;display:flex;flex-direction:row;justify-content:flex-start;align-items:center;align-self:stretch;flex:1;padding-top:5px;padding-bottom:5px;padding-left:10px}menu nav ul li a i{color:#fff;opacity:.2;background:transparent;display:flex;justify-content:center;align-items:center;align-self:stretch;padding:10px;width:40px;border-radius:4px;text-align:center;margin-right:20px}menu nav ul li:after{background:#fff;content:"";height:195px;left:-200px;opacity:.2;position:absolute;top:-50px;transform:rotate(35deg);transition:all .55s cubic-bezier(.19,1,.22,1);width:50px;z-index:-2;cursor:pointer}menu nav ul li.active a{color:#027bff;font-weight:700}menu nav ul li.active a i{opacity:1;color:#fff;background:#ffffffe6;background:#027bff}menu nav ul li:hover{background:#027bff}menu nav ul li:hover:after{z-index:2;left:120%;transition:all .55s cubic-bezier(.19,1,.22,1)}menu nav ul li:hover a{color:#fff;font-weight:700}menu nav ul li:hover a i{color:#fff;opacity:1}menu footer{background:#ffffff03;padding:20px 0;display:flex;flex-direction:row;align-self:stretch;text-align:center;justify-content:center}menu footer p{color:#444}menu footer p.version a{color:#777;font-weight:700}.dropdown{position:relative;display:flex;align-self:stretch}.dropdown.dropdown-show ul.dropdown-menu{display:flex;flex-direction:column}.dropdown .trigger{cursor:pointer;display:flex;flex-direction:row;justify-content:flex-start;align-items:center;align-self:stretch;flex:1}.dropdown ul.dropdown-menu{position:absolute;top:100%;left:0;display:none;background-color:#222;box-shadow:0 8px 16px #0003;z-index:1000;list-style-type:none;margin:0;overflow:hidden;border-radius:4px}.dropdown ul.dropdown-menu li{padding:8px 16px;cursor:pointer;display:flex;flex-direction:row;justify-content:flex-start;align-items:center;transition:all .55s cubic-bezier(.19,1,.22,1)}.dropdown ul.dropdown-menu li.danger:hover{background-color:#ef0e5d}.dropdown ul.dropdown-menu li:hover{background-color:#027bff}.dropdown ul.dropdown-menu li a{padding:8px 16px 8px 8px;color:#fff;display:flex;flex-direction:row;justify-content:flex-start;align-items:center;align-self:stretch}.dropdown ul.dropdown-menu li a i{margin-right:15px}@keyframes logotouch{0%{opacity:0}50%{opacity:1}to{opacity:0;left:27px}}@keyframes shakednd{0%{transform:rotate(-2deg)}to{transform:rotate(2deg)}}@keyframes blinkfade{0%{opacity:1}50%{opacity:0}to{opacity:1}}button,.btn{position:relative;padding:10px 10px 8px;font-size:14px;color:#fff;cursor:pointer;border:none;border-radius:4px;background:#027bff;box-shadow:0 2px #004a9b;font-weight:700;letter-spacing:-.5px;margin-top:-2px;min-width:38px;min-height:34px;text-align:center;justify-content:center}button i.icon-left,.btn i.icon-left{margin-right:5px}button:hover,.btn:hover{box-shadow:0 2px 0 1px #004a9b inset;color:#fffc}button:focus,.btn:focus{background:#004a9b;color:#ffffff80;box-shadow:none}button.btn-pixel,.btn.btn-pixel{background:#ccc;border:1px solid transparent;transition:all .55s cubic-bezier(.19,1,.22,1);text-transform:uppercase;font-size:12px;box-shadow:4px 0 #fff,0 4px #0eef5f,-4px 0 #027bff,0 -4px #ef0e5d;color:#222;overflow:hidden}button.btn-pixel:hover,.btn.btn-pixel:hover{box-shadow:6px 0 #fff,0 6px #0eef5f,-6px 0 #027bff,0 -6px #ef0e5d;text-align:center;text-shadow:4px 0 0 rgb(255,255,255),4px 2px 0 #444,0 4px 0 rgb(14,239,95),-4px 0 0 rgb(2,123,255),0 -4px 0 rgb(239,14,93);text-decoration:none;background:linear-gradient(90deg,#a0a0a0 0,#bebebe 46%,#dcdcdc);-webkit-background-clip:text;color:transparent}button.btn-neutral,.btn.btn-neutral{color:#fff;background:#555;box-shadow:0 2px #3c3c3c;border:1px solid transparent}button.btn-neutral:hover,.btn.btn-neutral:hover{box-shadow:0 2px 0 1px #222 inset;background:#3c3c3c}button.btn-neutral:focus,.btn.btn-neutral:focus{background:#222;border:1px solid #AAA}button .btn-wire-neutral,.btn .btn-wire-neutral{background:transparent;border:2px solid #555;color:#fffc;box-shadow:none}button .btn-wire-neutral:hover,.btn .btn-wire-neutral:hover{background:#5555550d;border-color:#3c3c3c;color:#3c3c3c;box-shadow:none}button .btn-wire-neutral:focus,.btn .btn-wire-neutral:focus{border-color:#222;background:transparent}button.btn-naked,.btn.btn-naked{background:transparent;box-shadow:none;border:1px solid transparent;color:#fff}button.btn-naked:hover,.btn.btn-naked:hover{box-shadow:0 2px 0 1px #222 inset;background:#3c3c3c;color:#fff}button.btn-naked:focus,.btn.btn-naked:focus{background:#222;border:1px solid #AAA}button i.main,.btn i.main{font-size:18px}button sup,button sub,.btn sup,.btn sub{position:absolute;top:-4px;right:-4px;background:#777;border-bottom:2px solid #555;color:red;border-radius:4px;width:16px;height:16px;text-align:center;display:flex;justify-content:center;align-items:center;padding-top:2px;padding-bottom:1px}button sup i,button sub i,.btn sup i,.btn sub i{color:#fff;font-size:10px}button.btn-double-icon,.btn.btn-double-icon{margin-right:5px}button.disabled,.btn.disabled{cursor:default}.alert{padding:20px;align-self:stretch;display:flex;flex-direction:row;justify-content:center;align-items:center;border-radius:4px}.alert i{margin-right:13px}.alert a{color:inherit;margin-left:4px;margin-right:4px;text-decoration:underline}ul.explr-tree{height:100%!important}ul.explr-tree ul{padding-top:0!important}ul.explr-tree li{position:relative}ul.explr-tree li span{color:#555;font-size:13px;padding-left:5px;cursor:pointer}ul.explr-tree li span.explr-plus,ul.explr-tree li span.explr-minus{z-index:1}ul.explr-tree li span.explr-plus:hover,ul.explr-tree li span.explr-minus:hover{color:#aaa}ul.explr-tree li i.main{font-size:14px}ul.explr-tree li sup,ul.explr-tree li sub{position:absolute;top:0;left:5px;background:#777;border-bottom:2px solid #555;border-radius:4px;text-align:center;display:flex;justify-content:center;align-items:center;padding-top:2px;padding-bottom:1px}ul.explr-tree li sup i,ul.explr-tree li sub i{color:#fff;font-size:4px!important;margin-bottom:0}ul.explr-tree li a{color:#fff;padding-right:80px;margin-top:2px}ul.explr-tree li a:hover{color:#fff}ul.explr-tree li a.active{background:#ffffff1a;border-radius:4px;font-weight:700;text-decoration:underline;margin-left:35px;padding-left:5px;margin-right:10px}.explr-multiselection-actions,.explr-selection-actions{display:none;flex-direction:row;justify-content:flex-end;align-items:center;flex:1}.explr-multiselection-actions button,.explr-selection-actions button{display:none}body.explr-selection-actionable .explr-selection-actions,body.explr-selection-actionable.explr-selection-folder .explr-selection-actions button.explr-selection-folder,body.explr-selection-actionable.explr-selection-entity .explr-selection-actions button.explr-selection-entity,body.explr-multiselection-actionable .explr-multiselection-actions,body.explr-multiselection-actionable.explr-multiselection-folder .explr-multiselection-actions button.explr-multiselection-folder,body.explr-multiselection-actionable.explr-multiselection-entity .explr-multiselection-actions button.explr-multiselection-entity{display:flex}.selectable-zone{flex:1;align-self:stretch;border:1px solid transparent}ul.explr-dirview{display:flex;flex-direction:row;flex-wrap:wrap}ul.explr-dirview li{display:flex;flex-direction:column;justify-content:flex-start;align-items:center;flex-shrink:0;margin:10px;min-width:100px;min-height:130px;padding-top:5px;border:1px solid transparent;border-radius:4px}ul.explr-dirview li.renaming a span{display:none}ul.explr-dirview li.renaming a form{display:block}ul.explr-dirview li.highlight-drop{border:1px dotted rgba(2,123,255,.4);background:#027bff4d}ul.explr-dirview li.highlight-clicked{border:1px dotted rgba(255,255,255,.2);background:#ffffff1a}ul.explr-dirview li a{color:#bbb;text-decoration:none;flex:1;text-align:center;font-size:12px;display:flex;flex-direction:column;justify-content:flex-start;align-items:center;max-width:84px;min-width:84px;position:relative;word-break:break-all}ul.explr-dirview li a.with-thumbnail .img-holder{width:64px;height:64px;background:#000;border-radius:8px;display:flex;flex-direction:column;justify-content:center;align-items:center;overflow:hidden;margin-bottom:12px}ul.explr-dirview li a.with-thumbnail .img-holder img{max-height:100%;max-width:100%}ul.explr-dirview li a.with-thumbnail i{font-size:24px;position:absolute;top:-4px;left:-4px;text-shadow:0 .5px .5px #777}ul.explr-dirview li a i{font-size:64px;margin-bottom:12px;border-radius:8px}ul.explr-dirview li a sup,ul.explr-dirview li a sub{position:absolute;top:-2px;right:0;background:#777;border-bottom:2px solid #555;border-radius:4px;width:16px;height:16px;text-align:center;display:flex;justify-content:center;align-items:center;padding-top:2px;padding-bottom:1px}ul.explr-dirview li a sup i,ul.explr-dirview li a sub i{color:#fff;font-size:10px;margin-bottom:0}ul.explr-dirview li a input{width:100%;padding:0 3px}ul.explr-dirview li a input:focus{outline:none}ul.explr-dirview li a:hover{opacity:.8}ul.explr-dirview li a form{display:none}ul.explr-dirview li.new-folder a{color:#027bff}ul.explr-dirview li.new-folder a form{display:block}ul.explr-dirview .ui-draggable-dragging{z-index:20}ul.explr-dirview .ui-draggable-dragging a{opacity:1!important}.modal-explr-picker h2{margin-top:0}.modal-explr-picker .explr-tree{width:400px;max-width:400px;max-height:300px;overflow:auto;background:#222;padding:10px 20px;border-radius:4px;margin-top:15px}.content-explr-picker{cursor:pointer}.selection-rectangle{position:absolute;border:1px solid rgb(0,153,255);background-color:#0099ff1a;pointer-events:none;z-index:1000}ul.pills{background:#222;padding:6px 4px 5px;box-shadow:1px 1px .5px .5px inset #0003;border:1px solid #222;border-radius:4px;display:flex;flex-direction:row;justify-content:flex-start;align-items:center;list-style:none;margin:0}ul.pills li.divider{margin:0 20px;width:1px;height:100%;background:#333}ul.pills li:hover a{opacity:.9}ul.pills li a{border-radius:4px;display:flex;flex-direction:row;justify-content:center;align-items:center;color:#fff;overflow:hidden;padding-right:30px;text-align:center;background:#0003;margin-right:5px;transition:all .25s cubic-bezier(.19,1,.22,1)}ul.pills li a span{display:flex;justify-content:center;align-items:center;margin-right:20px;height:42px;background:#0003;width:42px}ul.pills li.active a{color:#333;background:#ccc;font-weight:700}ul.pills li:hover a{color:#fff;background:#027bff}ul.pills li:last-child a{margin-right:0}.breadcrumb-container{display:flex;flex-direction:row;justify-content:flex-start;align-items:center;align-self:stretch;border-bottom:1px solid #222;background:transparent;padding:10px}.breadcrumb-container ul.breadcrumb{background:#222;padding:6px 4px 5px;box-shadow:1px 1px .5px .5px inset #0003;border:1px solid #222;border-radius:4px;display:flex;flex-direction:row;justify-content:flex-start;align-items:center;list-style:none;margin:0;overflow-x:auto;max-width:65vw;white-space:nowrap}.breadcrumb-container ul.breadcrumb li{display:inline-block}.breadcrumb-container ul.breadcrumb li.divider{margin:0 5px}.breadcrumb-container ul.breadcrumb li.divider i{color:#aaa}.breadcrumb-container ul.breadcrumb li span,.breadcrumb-container ul.breadcrumb li a{border-radius:4px;display:flex;flex-direction:row;justify-content:center;align-items:center;color:#fff;text-align:center;padding:0 3px}.breadcrumb-container ul.breadcrumb li span i,.breadcrumb-container ul.breadcrumb li a i{margin-right:5px}.breadcrumb-container ul.breadcrumb li:hover a{color:#fff;background:#027bff}.breadcrumb-container ul.breadcrumb li:last-child a{margin-right:0}.pickers,.modals{position:fixed;background:#0006;top:0;right:0;bottom:0;left:0;display:flex;flex-direction:column;justify-content:center;align-items:center;z-index:10000}.pickers.pickers .modals-outer .modals-inner .modal h2,.modals.pickers .modals-outer .modals-inner .modal h2{font-size:14px;line-height:18px;display:flex;margin-bottom:5px;flex-direction:row;justify-content:flex-start;align-items:center;align-self:stretch;color:#666}.pickers .modals-outer,.modals .modals-outer{min-width:464px;max-width:464px;display:flex;flex-direction:column;overflow:auto;padding-bottom:2px}.pickers .modals-outer .modals-inner,.modals .modals-outer .modals-inner{background:#111;border-radius:10px;color:#333;padding:40px;box-shadow:0 2px #222;border:1px solid #222}.pickers .modals-outer .modals-inner .modal h2,.modals .modals-outer .modals-inner .modal h2{padding:0;margin:0 0 30px;font-weight:400;color:#999}.pickers .modals-outer .modals-inner .modal h3,.modals .modals-outer .modals-inner .modal h3{align-self:stretch;margin:0 0 10px;font-size:14px;display:flex;flex-direction:row;justify-content:flex-start;align-items:center;color:#fff;padding-bottom:10px;text-decoration:none}.pickers .modals-outer .modals-inner .modal h3.divide,.modals .modals-outer .modals-inner .modal h3.divide{border-top:1px solid #222;margin-top:20px;padding-top:20px}.toast{visibility:hidden;min-width:250px;margin-left:-125px;background-color:#333;color:#fff;text-align:center;border-radius:4px;padding:16px;position:fixed;z-index:1;left:50%;bottom:30px;font-size:17px;border:2px dashed #222}.toast.show{visibility:visible;-webkit-animation:fadein .5s,fadeout .5s 2.5s;animation:fadein .5s,fadeout .5s 2.5s}@-webkit-keyframes fadein{0%{bottom:0;opacity:0}to{bottom:30px;opacity:1}}@keyframes fadein{0%{bottom:0;opacity:0}to{bottom:30px;opacity:1}}@-webkit-keyframes fadeout{0%{bottom:30px;opacity:1}to{bottom:0;opacity:0}}@keyframes fadeout{0%{bottom:30px;opacity:1}to{bottom:0;opacity:0}}body.dragover .shakeondrag{animation:shakednd .1s linear alternate infinite}.btn-super-upload-busy,.btn-super-upload{display:flex;flex-direction:row;justify-content:center;align-items:center;margin-left:10px;position:relative}.btn-super-upload-busy.btn-super-upload-busy,.btn-super-upload.btn-super-upload-busy{border:none!important}.btn-super-upload-busy .unprogress,.btn-super-upload .unprogress{display:block}.btn-super-upload-busy .progress,.btn-super-upload .progress{display:none;width:200px;height:10px;background:#666;border-radius:4px;flex-direction:row;justify-content:flex-start;align-items:center}.btn-super-upload-busy .progress .progress-bar,.btn-super-upload .progress .progress-bar{border-radius:4px;background-color:#027bff;height:100%}.btn-super-upload-busy .progress .percent,.btn-super-upload .progress .percent{display:flex;justify-content:center;align-items:center;position:absolute;left:0;right:0;bottom:0;top:2px;font-size:15px;color:#fff;text-shadow:0 0 2px rgb(0,0,0)}.btn-super-upload-busy.uploading .progress,.btn-super-upload.uploading .progress{display:block}.btn-super-upload-busy.uploading .unprogress,.btn-super-upload.uploading .unprogress{display:none}.panes{flex:1;display:flex;flex-direction:column;justify-content:flex-start;align-items:flex-start;align-self:stretch}.panes .pane-section,.panes tbody{display:flex;flex-direction:column;justify-content:flex-start;align-items:flex-start;align-self:stretch;margin:1px 1px 28px;background:#111;border-radius:4px;border:4px solid rgba(255,255,255,.05)}.panes .pane-section:hover,.panes tbody:hover,.panes .pane-section:hover tr.title-item,.panes tbody:hover tr.title-item{border-color:#027bff0d}.panes .pane-section .pane-item,.panes .pane-section tr,.panes tbody .pane-item,.panes tbody tr{flex:1;display:flex;flex-direction:row;justify-content:flex-start;align-items:center;align-self:stretch;padding:8px 18px;background:#222}.panes .pane-section .pane-item:nth-child(odd),.panes .pane-section tr:nth-child(odd),.panes tbody .pane-item:nth-child(odd),.panes tbody tr:nth-child(odd){background-color:#111}.panes .pane-section .pane-item:nth-child(odd) td.description,.panes .pane-section tr:nth-child(odd) td.description,.panes tbody .pane-item:nth-child(odd) td.description,.panes tbody tr:nth-child(odd) td.description{color:#ffffffb3}.panes .pane-section .pane-item:nth-child(2n),.panes .pane-section tr:nth-child(2n),.panes tbody .pane-item:nth-child(2n),.panes tbody tr:nth-child(2n){background-color:#141414}.panes .pane-section .pane-item .pane-cell,.panes .pane-section .pane-item td,.panes .pane-section tr .pane-cell,.panes .pane-section tr td,.panes tbody .pane-item .pane-cell,.panes tbody .pane-item td,.panes tbody tr .pane-cell,.panes tbody tr td{color:#888;display:flex;flex-direction:row;justify-content:flex-start;align-items:center;flex:1;font-size:14px}.panes .pane-section .pane-item .pane-cell.vertical,.panes .pane-section .pane-item td.vertical,.panes .pane-section tr .pane-cell.vertical,.panes .pane-section tr td.vertical,.panes tbody .pane-item .pane-cell.vertical,.panes tbody .pane-item td.vertical,.panes tbody tr .pane-cell.vertical,.panes tbody tr td.vertical{display:flex;flex-direction:column;justify-content:flex-start;align-items:flex-start}.panes .pane-section .pane-item .pane-cell.description,.panes .pane-section .pane-item td.description,.panes .pane-section tr .pane-cell.description,.panes .pane-section tr td.description,.panes tbody .pane-item .pane-cell.description,.panes tbody .pane-item td.description,.panes tbody tr .pane-cell.description,.panes tbody tr td.description{align-self:stretch}.panes .pane-section .pane-item .pane-cell.value,.panes .pane-section .pane-item td.value,.panes .pane-section tr .pane-cell.value,.panes .pane-section tr td.value,.panes tbody .pane-item .pane-cell.value,.panes tbody .pane-item td.value,.panes tbody tr .pane-cell.value,.panes tbody tr td.value{flex:0;margin-left:20px;word-break:break-all;flex-basis:auto}.panes .pane-section .pane-item .pane-cell.value i.icon-legend,.panes .pane-section .pane-item td.value i.icon-legend,.panes .pane-section tr .pane-cell.value i.icon-legend,.panes .pane-section tr td.value i.icon-legend,.panes tbody .pane-item .pane-cell.value i.icon-legend,.panes tbody .pane-item td.value i.icon-legend,.panes tbody tr .pane-cell.value i.icon-legend,.panes tbody tr td.value i.icon-legend{font-size:10px;margin-right:10px}.panes .pane-section .pane-item .pane-cell.value i.icon-value,.panes .pane-section .pane-item td.value i.icon-value,.panes .pane-section tr .pane-cell.value i.icon-value,.panes .pane-section tr td.value i.icon-value,.panes tbody .pane-item .pane-cell.value i.icon-value,.panes tbody .pane-item td.value i.icon-value,.panes tbody tr .pane-cell.value i.icon-value,.panes tbody tr td.value i.icon-value{padding:2px 2px 1px;border-radius:2px;width:16px;text-align:center}.panes .pane-section .pane-item.title-item,.panes .pane-section tr.title-item,.panes tbody .pane-item.title-item,.panes tbody tr.title-item{border-bottom:1px solid #222}.panes .pane-section .pane-item.title-item td,.panes .pane-section tr.title-item td,.panes tbody .pane-item.title-item td,.panes tbody tr.title-item td{color:#027bffe6;font-size:16px;font-weight:700}.panes .pane-section .pane-item.title-item td i,.panes .pane-section tr.title-item td i,.panes tbody .pane-item.title-item td i,.panes tbody tr.title-item td i{margin-right:10px}.panes .pane-section .pane-item.title-item td .more,.panes .pane-section tr.title-item td .more,.panes tbody .pane-item.title-item td .more,.panes tbody tr.title-item td .more{flex:1;text-align:right;font-size:12px;color:#888;font-weight:400;font-style:italic}.panes .pane-section .pane-item.variable-item,.panes .pane-section tr.variable-item,.panes tbody .pane-item.variable-item,.panes tbody tr.variable-item{cursor:pointer}.panes .pane-section .pane-item.variable-item:hover,.panes .pane-section tr.variable-item:hover,.panes tbody .pane-item.variable-item:hover,.panes tbody tr.variable-item:hover{background-color:#027bff0d}.panes .pane-section .pane-item.variable-item:hover td,.panes .pane-section tr.variable-item:hover td,.panes tbody .pane-item.variable-item:hover td,.panes tbody tr.variable-item:hover td{font-weight:700;color:#fff}.panes .pane-section .pane-item.variable-item:hover td i.icon-legend,.panes .pane-section tr.variable-item:hover td i.icon-legend,.panes tbody .pane-item.variable-item:hover td i.icon-legend,.panes tbody tr.variable-item:hover td i.icon-legend{color:#fff}.panes .pane-section .pane-item.variable-item:hover td span,.panes .pane-section .pane-item.variable-item:hover td i.icon-value,.panes .pane-section tr.variable-item:hover td span,.panes .pane-section tr.variable-item:hover td i.icon-value,.panes tbody .pane-item.variable-item:hover td span,.panes tbody .pane-item.variable-item:hover td i.icon-value,.panes tbody tr.variable-item:hover td span,.panes tbody tr.variable-item:hover td i.icon-value{background-color:#ffffff4d;color:#fff}.panes .pane-section .pane-item.variable-item:hover td.description,.panes .pane-section tr.variable-item:hover td.description,.panes tbody .pane-item.variable-item:hover td.description,.panes tbody tr.variable-item:hover td.description{color:#027bff}.panes .pane-section .pane-item.highlighted:hover,.panes .pane-section .pane-item.highlighted,.panes .pane-section tr.highlighted:hover,.panes .pane-section tr.highlighted,.panes tbody .pane-item.highlighted:hover,.panes tbody .pane-item.highlighted,.panes tbody tr.highlighted:hover,.panes tbody tr.highlighted{background-color:#027bff}.panes .pane-section .pane-item.highlighted:hover td,.panes .pane-section .pane-item.highlighted td,.panes .pane-section tr.highlighted:hover td,.panes .pane-section tr.highlighted td,.panes tbody .pane-item.highlighted:hover td,.panes tbody .pane-item.highlighted td,.panes tbody tr.highlighted:hover td,.panes tbody tr.highlighted td{font-weight:700;color:#fff}.panes .pane-section .pane-item.highlighted:hover td i.icon-legend,.panes .pane-section .pane-item.highlighted td i.icon-legend,.panes .pane-section tr.highlighted:hover td i.icon-legend,.panes .pane-section tr.highlighted td i.icon-legend,.panes tbody .pane-item.highlighted:hover td i.icon-legend,.panes tbody .pane-item.highlighted td i.icon-legend,.panes tbody tr.highlighted:hover td i.icon-legend,.panes tbody tr.highlighted td i.icon-legend{color:#fff}.panes .pane-section .pane-item.highlighted:hover td span,.panes .pane-section .pane-item.highlighted:hover td i.icon-value,.panes .pane-section .pane-item.highlighted td span,.panes .pane-section .pane-item.highlighted td i.icon-value,.panes .pane-section tr.highlighted:hover td span,.panes .pane-section tr.highlighted:hover td i.icon-value,.panes .pane-section tr.highlighted td span,.panes .pane-section tr.highlighted td i.icon-value,.panes tbody .pane-item.highlighted:hover td span,.panes tbody .pane-item.highlighted:hover td i.icon-value,.panes tbody .pane-item.highlighted td span,.panes tbody .pane-item.highlighted td i.icon-value,.panes tbody tr.highlighted:hover td span,.panes tbody tr.highlighted:hover td i.icon-value,.panes tbody tr.highlighted td span,.panes tbody tr.highlighted td i.icon-value{background-color:#ffffff4d;color:#fff}.panes .pane-section .pane-item.highlighted:hover td.description,.panes .pane-section .pane-item.highlighted td.description,.panes .pane-section tr.highlighted:hover td.description,.panes .pane-section tr.highlighted td.description,.panes tbody .pane-item.highlighted:hover td.description,.panes tbody .pane-item.highlighted td.description,.panes tbody tr.highlighted:hover td.description,.panes tbody tr.highlighted td.description{color:#fff}.tiles{flex:1;display:flex;flex-direction:row;justify-content:flex-start;align-items:flex-start;align-self:stretch}.tiles .tiles-inner{display:flex;flex:1;flex-direction:column;flex-wrap:nowrap;justify-content:flex-start;align-items:flex-start;align-self:stretch;padding:2px}.tiles .tiles-inner .tile-item{display:flex;flex-direction:row;justify-content:flex-start;align-items:center;align-self:stretch;color:#fff;margin:1px;padding:15px 10px 15px 15px;border-radius:4px;border-bottom:1px solid transparent}.tiles .tiles-inner .tile-item:hover,.tiles .tiles-inner .tile-item.active{border-left:4px solid rgb(2,123,255);border-radius:4px;border-bottom:2px solid #171717;background:#222;color:#027bff}.tiles .tiles-inner .tile-item:hover:hover,.tiles .tiles-inner .tile-item.active:hover{opacity:1}.tiles .tiles-inner .tile-item:hover.disabled,.tiles .tiles-inner .tile-item.active.disabled{border-left-color:#444;color:#fff}.tiles .tiles-inner .tile-item:hover.starred,.tiles .tiles-inner .tile-item.active.starred{border-left-color:#e5a123;color:#e5a123}.tiles .tiles-inner .tile-item:hover.starred .tile-tail .head-icon i,.tiles .tiles-inner .tile-item.active.starred .tile-tail .head-icon i{opacity:1;color:#e5a123;font-size:8px}.tiles .tiles-inner .tile-item.starred .tile-tail .head-icon i{font-size:8px;color:#e5a123}.tiles .tiles-inner .tile-item.disabled .tile-body{opacity:.3}.tiles .tiles-inner .tile-item.disabled .tile-tail .head-icon i{color:#444;opacity:.4}.tiles .tiles-inner .tile-item .tile-tail{display:flex;flex-direction:row;justify-content:flex-end;align-items:center;align-self:stretch;margin-left:10px;min-width:10px}.tiles .tiles-inner .tile-item .tile-tail .head-icon{flex:1;display:flex;text-align:right;flex-direction:row;justify-content:center;align-items:center;align-self:stretch}.tiles .tiles-inner .tile-item .tile-tail .head-icon i{font-size:6px;display:flex}.tiles .tiles-inner .tile-item .tile-tail .status-icons{display:flex;flex-direction:row;justify-content:flex-end;align-items:center}.tiles .tiles-inner .tile-item .tile-tail .status-icons i{font-size:16px;margin-left:10px}.tiles .tiles-inner .tile-item .tile-body{flex:1;display:flex;flex-direction:row;justify-content:flex-start;align-items:center;font-size:15px;font-weight:400;letter-spacing:.8px;line-height:22px;margin:0;flex-wrap:nowrap}.tiles .tiles-inner .tile-item .tile-body i{font-size:8px;margin-right:5px}.tiles .tiles-inner .tile-item .tile-metrics{display:flex;flex-direction:row;justify-content:flex-end;align-items:center;margin:0}.tiles .tiles-inner .tile-item .tile-metrics .foot-span span,.tiles .tiles-inner .tile-item .tile-metrics .foot-span{opacity:.8;font-size:13px;font-family:Courier New}span.empty{background:#e5a1234d;color:#e5a123;text-transform:lowercase;border-radius:2px;padding:2px 4px;font-weight:700}.inner-empty{display:flex;flex:1;flex-direction:column;align-self:stretch;justify-content:center;align-items:center}.inner-empty i{font-size:90px;opacity:.3;text-shadow:0 -1px #333,0 0px .5px #444}.toggle{position:relative;display:flex;flex-direction:row;justify-content:flex-start;align-items:center}.toggle input{display:none}.toggle input:checked+label{background:#027bff;border:1px solid rgba(255,255,255,.1);box-shadow:0 2px 2px #222 inset}.toggle input:checked+label:after{content:"";display:block;border-radius:50%;margin-left:21px;width:18px;height:18px;transition:.2s;background:#9bcbff;box-shadow:0 2px #0063ce}.toggle label{width:44px;height:26px;border-radius:15px;background:#222;cursor:pointer;border:1px solid rgba(255,255,255,.1);box-shadow:0 2px 2px #111 inset}.toggle label:after{content:"";display:block;border-radius:50%;width:18px;height:18px;margin:3px;background:#777;box-shadow:0 2px #555555e6;transition:.2s}.form-holder{display:flex;flex-direction:column;justify-content:flex-start;align-items:flex-start;align-self:stretch}.form-holder form{max-width:434px}form{display:flex;flex-direction:column;justify-content:flex-start;align-items:flex-start;align-self:stretch}form .alert{padding:8px 15px;font-size:14px;margin:0 0 25px}.from-group-condition{flex-direction:column;align-self:stretch;justify-content:flex-start;align-items:flex-start;display:flex}.form-group{display:flex;flex-direction:column;justify-content:flex-start;align-items:flex-start;align-self:stretch;width:100%;flex:1;margin-bottom:20px}.form-group label{flex:1;font-size:12px;line-height:18px;display:flex;flex-direction:row;justify-content:flex-start;align-items:center;align-self:stretch;color:#666}.form-group label.btn-upload{color:#fff;font-size:14px;flex:0;flex-basis:auto;margin-top:5px}.form-group label.btn-upload input[type=file]{display:none}.form-group label.btn-upload input[type=text]{margin-bottom:2px;margin-left:10px}.form-group label.btn-upload span.btn{padding-right:20px}.form-group label.btn-upload i{margin-left:3px;margin-right:10px}.form-group .widget{margin-top:10px;align-self:stretch;display:flex;flex-direction:row}.form-group .widget.vertical{flex-direction:column}.form-group .widget.vertical select,.form-group .widget.vertical input{align-self:stretch}.form-group .widget.vertical select:first-child,.form-group .widget.vertical input:first-child{margin-bottom:10px}.form-group .widget .btn{margin-left:10px}.form-group .widget.widget-unit select,.form-group .widget.widget-unit input{flex-grow:0;background:none;box-shadow:none;border:none;border-bottom:1px solid #333;border-radius:0;max-width:80px;padding-left:0;color:#fff;text-align:center}.form-group .widget.widget-unit span{font-size:12px;display:flex;flex-direction:row;justify-content:flex-start;align-items:center;margin-left:5px;color:#555}.form-group .widget div{color:#ffffffb3;font-size:14px}.form-group .widget select,.form-group .widget input,.form-group .widget textarea{outline:none;padding:8px 0 5px 8px;border-radius:2px;border:1px solid rgba(255,255,255,.05);flex:1;background:#555;box-shadow:0 2px 1px #444,0 4px 2px #333 inset;color:#ddd;font-size:14px}.form-group .widget select.input-naked,.form-group .widget select.disabled,.form-group .widget select[disabled],.form-group .widget input.input-naked,.form-group .widget input.disabled,.form-group .widget input[disabled],.form-group .widget textarea.input-naked,.form-group .widget textarea.disabled,.form-group .widget textarea[disabled]{color:#555;background:none;box-shadow:none;border:none;border-bottom:1px solid #333;border-radius:0}.form-group .widget select.input-naked,.form-group .widget input.input-naked,.form-group .widget textarea.input-naked{padding-left:0;color:#bbb}.form-group .widget select.disabled,.form-group .widget select[disabled],.form-group .widget input.disabled,.form-group .widget input[disabled],.form-group .widget textarea.disabled,.form-group .widget textarea[disabled]{border:none;background:#000;border-radius:4px;padding-left:10px;padding-right:10px}.form-group.tab-select{border-bottom:1px solid #444;display:flex;flex-direction:row;position:relative;height:48px;padding:48px 0 0;flex:0;flex-basis:auto}.form-group.tab-select .widget{height:49px;margin-top:0;display:flex;flex-direction:row;justify-content:flex-start;align-items:center;position:absolute;top:0;left:0;border-bottom:2px solid rgb(2,123,255);color:#027bff}.form-group.tab-select .widget select{border:none;background:none;box-shadow:none;padding:10px 35px 10px 10px;margin:0;color:inherit;appearance:none;-moz-appearance:none;-webkit-appearance:none;text-align:left;font-weight:700;cursor:pointer;border-radius:4px 4px 0 0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:200px;z-index:2}.form-group.tab-select .widget i{margin-left:10px;margin-right:0}.form-group.tab-select .widget i.triangle{margin-top:-4px;margin-left:0;position:absolute;right:10px}.form-group.form-group-horizontal{margin:10px 0 20px;flex-direction:row;justify-content:flex-start;align-items:center}.form-group.form-group-horizontal .widget{margin:0;display:flex;flex-direction:row;justify-content:flex-start;align-items:center}.actions{display:flex;flex-direction:row;justify-content:flex-end;align-items:center;align-self:stretch;margin:20px 0 0}.actions.actions-intermediate{margin:0}.actions button{margin-left:25px}.actions.actions-left{justify-content:flex-start}.actions.actions-left .btn{margin-left:0;margin-right:25px}.actions.actions-right{justify-content:flex-end}.actions.actions-right .btn{margin-left:10px;margin-right:0}.actions.actions-center{justify-content:center}.actions.actions-center .btn{margin-left:0;margin-right:0}.view-content-list main .main-container .page-content .inner{padding-bottom:10px}.view-content-list main .main-container .content-object-input{margin-bottom:6px}.view-content-list.dragover main .main-container .inner .dropzone{border-radius:4px;background:#ffffff1a;border:1px dashed rgba(255,255,255,.5)}.view-content-edit main .main-container .bottom-content .page-content{flex:1}.view-content-edit main .main-container .bottom-content .page-content .form-holder{margin:20px 20px 20px 10px;flex:1}.view-content-edit main .main-container .bottom-content .page-panel.right-panel{flex:2;align-self:stretch;display:flex;flex-direction:column;overflow:hidden;justify-content:flex-start;align-items:center;padding:20px}.view-content-edit main .main-container .bottom-content .page-panel.right-panel h3{color:#fff;padding:10px 10px 10px 0;margin-bottom:20px;font-size:16px;align-self:stretch;margin-left:-8px}.view-content-edit main .main-container .bottom-content .page-panel.right-panel h3 span{border-width:1px;border-style:solid;border-radius:4px;padding:4px 10px;margin-left:5px}.view-content-edit main .main-container .bottom-content .page-panel.right-panel h3 i{font-size:16px}.view-content-edit main .main-container .bottom-content .page-panel.right-panel .iframe-wrapper{display:flex;flex-direction:column;width:100%;position:relative;padding-top:56.25%;overflow:hidden;border-radius:4px;outline:4px solid rgba(255,255,255,.1)}.view-content-edit main .main-container .bottom-content .page-panel.right-panel .iframe-wrapper iframe{position:absolute;top:0;left:0;width:100%;height:100%;border:none}.view-logs-list main .main-container .bottom-content .page-content .inner{padding-top:8px;padding-bottom:8px}.view-logs-list main .main-container .bottom-content .page-content .logs{flex:1;display:flex;flex-direction:column;align-self:stretch}.view-logs-list main .main-container .bottom-content .page-content .logs pre{flex:1;background:#000000e6;border:1px solid rgba(85,85,85,.5);border-radius:4px;font-family:monospace;color:#f2f2f2;padding:20px;overflow:auto;align-self:stretch}.view-node-player-edit main .main-container .bottom-content .page-content{flex:1}.view-node-player-edit main .main-container .bottom-content .page-content .form-holder{margin:20px 20px 20px 10px}.view-player-group-list main .main-container .players-holder ul.players{display:flex;flex-direction:column;justify-content:flex-start;align-items:flex-start;align-self:stretch;margin:10px 0 0;border:1px dashed #222;border-radius:4px;padding:10px}.view-player-group-list main .main-container .players-holder ul.players li.player-item{display:flex;flex-direction:row;justify-content:flex-start;align-items:center;align-self:stretch;margin:0 0 2px}.view-player-group-list main .main-container .players-holder ul.players li.player-item .head{display:flex;flex-direction:column;justify-content:center;align-items:center;color:#999;font-size:10px;padding:10px;cursor:default}.view-player-group-list main .main-container .players-holder ul.players li.player-item:hover .infos .title{color:#fff}.view-player-group-list main .main-container .players-holder ul.players li.player-item .infos{display:flex;flex-direction:row;justify-content:flex-start;align-items:center;color:#aaa;font-size:12px;margin-right:5px;flex:1;max-width:180px;background:#000;border:1px solid #333;border-radius:4px;padding:3px 7px}.view-player-group-list main .main-container .players-holder ul.players li.player-item .infos .title{font-size:13px;color:#aaa;display:block;word-break:break-all;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%}.view-player-group-list main .main-container .players-holder ul.players li.player-item .infos .type{display:flex;flex-direction:row;justify-content:flex-start;align-items:center;color:#aaa;font-size:12px;margin-right:5px}.view-player-group-list main .main-container .players-holder ul.players li.player-item .body{display:block;flex-direction:row;justify-content:flex-start;align-items:center;margin:0 10px;background:#1b1b1b;padding:10px;align-self:stretch;flex:1;border-radius:4px;color:#ccc;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:360px;font-size:12px}.view-player-group-list main .main-container .players-holder ul.players li.player-item .body span{opacity:.5;margin-right:7px;font-size:10px}.view-player-group-list main .main-container .players-holder ul.players li.player-item .tail{display:flex;flex-direction:row;justify-content:center;align-items:center}.view-player-group-list main .main-container .players-holder ul.players li.player-item .tail a{color:#fff}.view-playlist-list main .main-container p{font-size:12px;line-height:18px;display:flex;margin-bottom:5px;flex-direction:row;justify-content:flex-start;align-items:center;align-self:stretch;color:#666}.view-playlist-list main .main-container .modal-slide h2{font-size:20px}.view-playlist-list main .main-container .modal-slide input[disabled]{color:#aaa}.view-playlist-list main .main-container .modal-slide .slide-schedule-group select,.view-playlist-list main .main-container .modal-slide .slide-schedule-end-group select{margin-right:5px}.view-playlist-list main .main-container .modal-slide .slide-schedule-group select,.view-playlist-list main .main-container .modal-slide .slide-schedule-group input,.view-playlist-list main .main-container .modal-slide .slide-schedule-end-group select,.view-playlist-list main .main-container .modal-slide .slide-schedule-end-group input{font-size:12px;max-width:50%}.view-playlist-list main .main-container .modal-slide .slide-schedule-group select.datetimepicker,.view-playlist-list main .main-container .modal-slide .slide-schedule-group input.datetimepicker,.view-playlist-list main .main-container .modal-slide .slide-schedule-end-group select.datetimepicker,.view-playlist-list main .main-container .modal-slide .slide-schedule-end-group input.datetimepicker{margin-left:5px;padding-left:0}.view-playlist-list main .main-container .bottom-content .page-content{flex:1}.view-playlist-list main .main-container .bottom-content .page-content.with-right-panel{flex:.5}.view-playlist-list main .main-container .bottom-content .page-content .inner{padding:0}.view-playlist-list main .main-container .bottom-content .page-content .inner h3{font-size:16px;font-weight:500;color:#ddd;text-decoration:none;margin:0 0 20px}.view-playlist-list main .main-container .bottom-content .page-content .inner .playlist-holder{margin:20px 20px 20px 10px;flex:1}.view-playlist-list main .main-container .bottom-content .page-content .inner .playlist-holder .form-holder{margin:20px 0 0}.view-playlist-list main .main-container .bottom-content .page-content .inner .playlist-holder .form-holder form{max-width:initial}.view-playlist-list main .main-container .bottom-content .page-content .inner .playlist-holder .form-holder .form-group{flex-grow:0;margin-bottom:5px}.view-playlist-list main .main-container .bottom-content .page-content .inner .playlist-holder .preview-holder{position:relative}.view-playlist-list main .main-container .bottom-content .page-content .inner .playlist-holder .preview-holder .form-group{flex-grow:0;margin-bottom:0}.view-playlist-list main .main-container .bottom-content .page-content .inner .playlist-holder .preview-holder .hover-only{display:none}.view-playlist-list main .main-container .bottom-content .page-content .inner .playlist-holder .preview-holder:hover .hover-only{display:flex;position:absolute}.view-playlist-list main .main-container .bottom-content .page-content .inner .playlist-holder .preview-holder:hover .hover-only:hover{background:#ccc}.view-playlist-list main .main-container .bottom-content .page-content .inner .playlist-holder h4{font-size:14px;display:flex;flex-direction:row;justify-content:flex-start;align-items:center;align-self:stretch;color:#fff;padding-bottom:10px;text-decoration:none}.view-playlist-list main .main-container .bottom-content .page-content .inner .playlist-holder h4.divide{border-top:1px solid #222;margin-top:20px;padding-top:20px}.view-playlist-list main .main-container .bottom-content .page-content .inner .playlist-holder .qrcode-pic{margin-top:10px}.view-playlist-list main .main-container .bottom-content .page-content .inner .playlist-holder .qrcode-pic img{border:1px dashed #555;padding:5px;border-radius:4px}.view-playlist-list main .main-container .bottom-content .page-content .inner .playlist-holder .preview{background:#000;border:1px solid rgba(255,255,255,.3);border-radius:4px;justify-content:center;align-items:center;align-self:stretch;display:flex;margin:10px 0 20px;height:300px}.view-playlist-list main .main-container .bottom-content .page-content .inner .playlist-holder .preview iframe{flex:1;align-self:stretch}.view-playlist-list main .main-container .bottom-content .page-content .inner .slides-holder{align-self:stretch;border-right:1px solid #222;margin:20px 10px 20px 20px;padding-right:20px;flex:1.3}.view-playlist-list main .main-container .bottom-content .page-panel.left-panel{flex:.3;max-width:initial;justify-content:center;align-items:center;display:flex}.view-player-group-list main .main-container p{font-size:12px;line-height:18px;display:flex;margin-bottom:5px;flex-direction:row;justify-content:flex-start;align-items:center;align-self:stretch;color:#666}.view-player-group-list main .main-container .bottom-content .page-content{flex:1}.view-player-group-list main .main-container .bottom-content .page-content .inner{padding:0}.view-player-group-list main .main-container .bottom-content .page-content .inner h3{font-size:16px;font-weight:500;color:#ddd;text-decoration:none;margin:0 0 20px}.view-player-group-list main .main-container .bottom-content .page-content .inner .node-player-group-holder{margin:20px 20px 20px 10px;flex:1}.view-player-group-list main .main-container .bottom-content .page-content .inner .node-player-group-holder .form-holder{margin:20px 0 0}.view-player-group-list main .main-container .bottom-content .page-content .inner .node-player-group-holder .form-holder form{max-width:initial}.view-player-group-list main .main-container .bottom-content .page-content .inner .node-player-group-holder .form-holder .form-group{flex-grow:0;margin-bottom:15px}.view-player-group-list main .main-container .bottom-content .page-content .inner .node-player-group-holder .preview-holder{position:relative}.view-player-group-list main .main-container .bottom-content .page-content .inner .node-player-group-holder .preview-holder .form-group{flex-grow:0;margin-bottom:0}.view-player-group-list main .main-container .bottom-content .page-content .inner .node-player-group-holder .preview-holder .hover-only{display:none}.view-player-group-list main .main-container .bottom-content .page-content .inner .node-player-group-holder .preview-holder:hover .hover-only{display:flex;position:absolute}.view-player-group-list main .main-container .bottom-content .page-content .inner .node-player-group-holder .preview-holder:hover .hover-only:hover{background:#ccc}.view-player-group-list main .main-container .bottom-content .page-content .inner .node-player-group-holder h4{font-size:14px;display:flex;flex-direction:row;justify-content:flex-start;align-items:center;align-self:stretch;color:#fff;padding-bottom:10px;text-decoration:none}.view-player-group-list main .main-container .bottom-content .page-content .inner .node-player-group-holder h4.divide{border-top:1px solid #222;margin-top:20px;padding-top:20px}.view-player-group-list main .main-container .bottom-content .page-content .inner .node-player-group-holder .preview{background:#000;border:1px solid rgba(255,255,255,.3);border-radius:4px;justify-content:center;align-items:center;align-self:stretch;display:flex;margin:10px 0 20px;height:300px}.view-player-group-list main .main-container .bottom-content .page-content .inner .node-player-group-holder .preview iframe{flex:1;align-self:stretch}.view-player-group-list main .main-container .bottom-content .page-content .inner .players-holder{align-self:stretch;border-right:1px solid #222;margin:20px 10px 20px 20px;padding-right:20px;flex:1.3}.view-player-group-list main .main-container .bottom-content .page-panel.left-panel{flex:.3;max-width:initial;justify-content:center;align-items:center;display:flex}.view-playlist-list main .main-container .page-content .inner h3.divide{margin-top:50px}.view-playlist-list main .main-container .slides-holder ul.slides{display:flex;flex-direction:column;justify-content:flex-start;align-items:flex-start;align-self:stretch;margin:10px 0 0;border:1px dashed #222;border-radius:4px;padding:10px}.view-playlist-list main .main-container .slides-holder ul.slides li.slide-item{display:flex;flex-direction:row;justify-content:flex-start;align-items:center;align-self:stretch;margin:0 0 2px}.view-playlist-list main .main-container .slides-holder ul.slides li.slide-item.disabled .infos .title{color:#333}.view-playlist-list main .main-container .slides-holder ul.slides li.slide-item.disabled .infos .type i{color:#333!important}.view-playlist-list main .main-container .slides-holder ul.slides li.slide-item.disabled .body{opacity:0}.view-playlist-list main .main-container .slides-holder ul.slides li.slide-item .sort{display:flex;flex-direction:column;justify-content:center;align-items:center}.view-playlist-list main .main-container .slides-holder ul.slides li.slide-item .sort a{color:#999;font-size:10px;padding:10px;cursor:move}.view-playlist-list main .main-container .slides-holder ul.slides li.slide-item .sort a:hover{color:#027bff}.view-playlist-list main .main-container .slides-holder ul.slides li.slide-item .infos{display:flex;flex-direction:row;justify-content:flex-start;align-items:center;color:#aaa;font-size:12px;margin-right:5px;flex:1;max-width:120px;background:#000;border:1px solid #333;border-radius:4px;padding:3px 7px}.view-playlist-list main .main-container .slides-holder ul.slides li.slide-item .infos:hover .title{color:#fff}.view-playlist-list main .main-container .slides-holder ul.slides li.slide-item .infos .title{display:block;word-break:break-all;font-size:13px;color:#aaa;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%}.view-playlist-list main .main-container .slides-holder ul.slides li.slide-item .infos .type{display:flex;flex-direction:row;justify-content:flex-start;align-items:center;color:#aaa;font-size:12px;margin-right:5px}.view-playlist-list main .main-container .slides-holder ul.slides li.slide-item .body{display:flex;flex-direction:row;justify-content:flex-start;align-items:center;margin:0 10px;background:#1b1b1b;padding:10px;align-self:stretch;flex:1;border-radius:4px;font-size:13px;color:#fff}.view-playlist-list main .main-container .slides-holder ul.slides li.slide-item .body .range{display:flex;flex-direction:column;justify-content:flex-start;align-items:flex-start;flex:1;max-width:315px;overflow-x:auto;white-space:nowrap}.view-playlist-list main .main-container .slides-holder ul.slides li.slide-item .body .range .start{display:flex;flex-direction:row;justify-content:flex-start;align-items:center;margin-bottom:8px}.view-playlist-list main .main-container .slides-holder ul.slides li.slide-item .body .range .end{display:flex;flex-direction:row;justify-content:flex-start;align-items:center}.view-playlist-list main .main-container .slides-holder ul.slides li.slide-item .body .range .start .prefix,.view-playlist-list main .main-container .slides-holder ul.slides li.slide-item .body .range .end .prefix{margin-left:5px;margin-right:5px;font-size:12px;color:#ddd}.view-playlist-list main .main-container .slides-holder ul.slides li.slide-item .body .range .start .cron-description,.view-playlist-list main .main-container .slides-holder ul.slides li.slide-item .body .range .end .cron-description{display:block;word-break:break-all;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%;margin-left:5px;font-size:10px;opacity:.5}.view-playlist-list main .main-container .slides-holder ul.slides li.slide-item .tail{display:flex;flex-direction:row;justify-content:center;align-items:center}.view-playlist-list main .main-container .slides-holder ul.slides li.slide-item .tail a{color:#fff}.view-plugins-list main .main-container .bottom-content .page-content .inner{padding:10px}.view-settings-list main .main-container .bottom-content .page-content .inner{padding:10px}.view-sysinfo-list main .main-container .bottom-content .page-content .inner{padding:10px}.view-sysinfo-list .reboot{color:#ccc}.view-login main .main-container{position:relative}.view-login main .main-container .alert{position:absolute;top:0;left:0;right:0}.view-login main .main-container .login-content{display:flex;flex:1;flex-direction:column;justify-content:center;align-items:center}.view-login main .main-container .login-content .form-holder{width:400px;display:flex;justify-content:center;align-items:center;align-self:stretch;margin-left:auto;margin-right:auto}.view-login main .main-container .login-content .form-holder .card{display:flex;justify-content:center;align-items:center;align-self:stretch;border-radius:6px;padding:50px;color:#333}.view-login main .main-container .login-content .form-holder .card form{padding:0;flex:1;display:flex;justify-content:center;align-items:center;align-self:stretch}.view-login main .main-container .login-content .form-holder .card form .actions{margin-top:10px}.view-login main .main-container .login-content .form-holder .card form .actions .btn{padding-left:20px;padding-right:20px}.view-auth-user-list main .main-container .bottom-content .page-content .inner{padding:10px}.view-auth-user-list main .main-container .bottom-content .page-content .inner .tile-item.disabled .tile-body{opacity:.3;text-decoration-line:line-through}.view-auth-user-list main .main-container .bottom-content .page-content .inner .tile-item .tile-tail .btn{margin-left:10px}.view-auth-user-list main .main-container .bottom-content .page-content .inner .tile-item .tile-tail .btn:first-child{margin-left:0}.view-auth-user-list main .main-container .bottom-content .page-content .inner .tile-item .tile-metrics{flex:1;flex-direction:row;justify-content:flex-start;align-items:center}.view-auth-user-list main .main-container .bottom-content .page-content .inner .tile-item .tile-metrics .widget,.view-auth-user-list main .main-container .bottom-content .page-content .inner .tile-item .tile-metrics .form-group{margin:0}.view-auth-user-list main .main-container .bottom-content .page-content .inner .tile-item .tile-metrics label{flex-grow:0}.view-auth-user-list main .main-container .bottom-content .page-content .inner .tile-item .tile-metrics input{margin-left:10px;margin-right:10px;max-width:320px} +.warning{color:#e56723!important}.bg-warning{background-color:#e56723!important}.border-warning{border-color:#e56723!important}.orange{color:#e56723!important}.bg-orange{background-color:#e56723!important}.border-orange{border-color:#e56723!important}.info{color:#027bff!important}.bg-info{background-color:#027bff!important}.border-info{border-color:#027bff!important}.info-alt{color:#075cb7!important}.bg-info-alt{background-color:#075cb7!important}.border-info-alt{border-color:#075cb7!important}.success{color:#0eef5f!important}.bg-success{background-color:#0eef5f!important}.border-success{border-color:#0eef5f!important}.success-alt{color:#11a948!important}.bg-success-alt{background-color:#11a948!important}.border-success-alt{border-color:#11a948!important}.error{color:#ef0e5d!important}.bg-error{background-color:#ef0e5d!important}.border-error{border-color:#ef0e5d!important}.error-alt{color:#c20941!important}.bg-error-alt{background-color:#c20941!important}.border-error-alt{border-color:#c20941!important}.danger{color:#ef0e5d!important}.bg-danger{background-color:#ef0e5d!important}.border-danger{border-color:#ef0e5d!important}.danger-alt{color:#c20941!important}.bg-danger-alt{background-color:#c20941!important}.border-danger-alt{border-color:#c20941!important}.purple{color:#bc48ff!important}.bg-purple{background-color:#bc48ff!important}.border-purple{border-color:#bc48ff!important}.purple-alt{color:#692fbd!important}.bg-purple-alt{background-color:#692fbd!important}.border-purple-alt{border-color:#692fbd!important}.neutral{color:#464646!important}.bg-neutral{background-color:#464646!important}.border-neutral{border-color:#464646!important}.yellow{color:#e5a123!important}.bg-yellow{background-color:#e5a123!important}.border-yellow{border-color:#e5a123!important}.white{color:#fff!important}.bg-white{background-color:#fff!important}.border-white{border-color:#fff!important}.black{color:#000!important}.bg-black{background-color:#000!important}.border-black{border-color:#000!important}.youtube{color:#fd3c01!important}.bg-youtube{background-color:#fd3c01!important}.border-youtube{border-color:#fd3c01!important}.raspbian{color:#b61240!important}.bg-raspbian{background-color:#b61240!important}.border-raspbian{border-color:#b61240!important}.windows{color:#12a7e3!important}.bg-windows{background-color:#12a7e3!important}.border-windows{border-color:#12a7e3!important}.macos{color:#b3bcc2!important}.bg-macos{background-color:#b3bcc2!important}.border-macos{border-color:#b3bcc2!important}.debian{color:#cf084e!important}.bg-debian{background-color:#cf084e!important}.border-debian{border-color:#cf084e!important}.fedora{color:#52a2da!important}.bg-fedora{background-color:#52a2da!important}.border-fedora{border-color:#52a2da!important}.ubuntu{color:#d64514!important}.bg-ubuntu{background-color:#d64514!important}.border-ubuntu{border-color:#d64514!important}.suse{color:#6fb425!important}.bg-suse{background-color:#6fb425!important}.border-suse{border-color:#6fb425!important}.redhat{color:#c60200!important}.bg-redhat{background-color:#c60200!important}.border-redhat{border-color:#c60200!important}.centos{color:#9b4c88!important}.bg-centos{background-color:#9b4c88!important}.border-centos{border-color:#9b4c88!important}.other{color:#e5a123!important}.bg-other{background-color:#e5a123!important}.border-other{border-color:#e5a123!important}.gscale0{color:#000!important}.bg-gscale0{background-color:#000!important}.border-gscale0{border-color:#000!important}.gscaleF{color:#fff!important}.bg-gscaleF{background-color:#fff!important}.border-gscaleF{border-color:#fff!important}button.btn-warning,.btn.btn-warning{background:#e56723;box-shadow:0 2px #913e11}button.btn-warning:hover,.btn.btn-warning:hover{box-shadow:0 2px 0 1px #913e11 inset}button.btn-warning:focus,.btn.btn-warning:focus{background:#913e11}button.btn-wire-warning,.btn.btn-wire-warning{background:transparent;box-shadow:none;border:2px solid rgb(229,103,35);color:#fffc}button.btn-wire-warning i.btn-match,.btn.btn-wire-warning i.btn-match{color:#e56723}button.btn-wire-warning:hover,.btn.btn-wire-warning:hover{background:#e567230d;border-color:#be5117;color:#be5117;box-shadow:none}button.btn-wire-warning:focus,.btn.btn-wire-warning:focus{border-color:#913e11;background:transparent}button.btn-orange,.btn.btn-orange{background:#e56723;box-shadow:0 2px #913e11}button.btn-orange:hover,.btn.btn-orange:hover{box-shadow:0 2px 0 1px #913e11 inset}button.btn-orange:focus,.btn.btn-orange:focus{background:#913e11}button.btn-wire-orange,.btn.btn-wire-orange{background:transparent;box-shadow:none;border:2px solid rgb(229,103,35);color:#fffc}button.btn-wire-orange i.btn-match,.btn.btn-wire-orange i.btn-match{color:#e56723}button.btn-wire-orange:hover,.btn.btn-wire-orange:hover{background:#e567230d;border-color:#be5117;color:#be5117;box-shadow:none}button.btn-wire-orange:focus,.btn.btn-wire-orange:focus{border-color:#913e11;background:transparent}button.btn-info,.btn.btn-info{background:#027bff;box-shadow:0 2px #004a9b}button.btn-info:hover,.btn.btn-info:hover{box-shadow:0 2px 0 1px #004a9b inset}button.btn-info:focus,.btn.btn-info:focus{background:#004a9b}button.btn-wire-info,.btn.btn-wire-info{background:transparent;box-shadow:none;border:2px solid rgb(2,123,255);color:#fffc}button.btn-wire-info i.btn-match,.btn.btn-wire-info i.btn-match{color:#027bff}button.btn-wire-info:hover,.btn.btn-wire-info:hover{background:#027bff0d;border-color:#0063ce;color:#0063ce;box-shadow:none}button.btn-wire-info:focus,.btn.btn-wire-info:focus{border-color:#004a9b;background:transparent}button.btn-info-alt,.btn.btn-info-alt{background:#075cb7;box-shadow:0 2px #032b55}button.btn-info-alt:hover,.btn.btn-info-alt:hover{box-shadow:0 2px 0 1px #032b55 inset}button.btn-info-alt:focus,.btn.btn-info-alt:focus{background:#032b55}button.btn-wire-info-alt,.btn.btn-wire-info-alt{background:transparent;box-shadow:none;border:2px solid rgb(7,92,183);color:#fffc}button.btn-wire-info-alt i.btn-match,.btn.btn-wire-info-alt i.btn-match{color:#075cb7}button.btn-wire-info-alt:hover,.btn.btn-wire-info-alt:hover{background:#075cb70d;border-color:#054386;color:#054386;box-shadow:none}button.btn-wire-info-alt:focus,.btn.btn-wire-info-alt:focus{border-color:#032b55;background:transparent}button.btn-success,.btn.btn-success{background:#0eef5f;box-shadow:0 2px #088f39}button.btn-success:hover,.btn.btn-success:hover{box-shadow:0 2px 0 1px #088f39 inset}button.btn-success:focus,.btn.btn-success:focus{background:#088f39}button.btn-wire-success,.btn.btn-wire-success{background:transparent;box-shadow:none;border:2px solid rgb(14,239,95);color:#fffc}button.btn-wire-success i.btn-match,.btn.btn-wire-success i.btn-match{color:#0eef5f}button.btn-wire-success:hover,.btn.btn-wire-success:hover{background:#0eef5f0d;border-color:#0bbf4c;color:#0bbf4c;box-shadow:none}button.btn-wire-success:focus,.btn.btn-wire-success:focus{border-color:#088f39;background:transparent}button.btn-success-alt,.btn.btn-success-alt{background:#11a948;box-shadow:0 2px #084c21}button.btn-success-alt:hover,.btn.btn-success-alt:hover{box-shadow:0 2px 0 1px #084c21 inset}button.btn-success-alt:focus,.btn.btn-success-alt:focus{background:#084c21}button.btn-wire-success-alt,.btn.btn-wire-success-alt{background:transparent;box-shadow:none;border:2px solid rgb(17,169,72);color:#fffc}button.btn-wire-success-alt i.btn-match,.btn.btn-wire-success-alt i.btn-match{color:#11a948}button.btn-wire-success-alt:hover,.btn.btn-wire-success-alt:hover{background:#11a9480d;border-color:#0c7b34;color:#0c7b34;box-shadow:none}button.btn-wire-success-alt:focus,.btn.btn-wire-success-alt:focus{border-color:#084c21;background:transparent}button.btn-error,.btn.btn-error{background:#ef0e5d;box-shadow:0 2px #8f0838}button.btn-error:hover,.btn.btn-error:hover{box-shadow:0 2px 0 1px #8f0838 inset}button.btn-error:focus,.btn.btn-error:focus{background:#8f0838}button.btn-wire-error,.btn.btn-wire-error{background:transparent;box-shadow:none;border:2px solid rgb(239,14,93);color:#fffc}button.btn-wire-error i.btn-match,.btn.btn-wire-error i.btn-match{color:#ef0e5d}button.btn-wire-error:hover,.btn.btn-wire-error:hover{background:#ef0e5d0d;border-color:#bf0b4a;color:#bf0b4a;box-shadow:none}button.btn-wire-error:focus,.btn.btn-wire-error:focus{border-color:#8f0838;background:transparent}button.btn-error-alt,.btn.btn-error-alt{background:#c20941;box-shadow:0 2px #610420}button.btn-error-alt:hover,.btn.btn-error-alt:hover{box-shadow:0 2px 0 1px #610420 inset}button.btn-error-alt:focus,.btn.btn-error-alt:focus{background:#610420}button.btn-wire-error-alt,.btn.btn-wire-error-alt{background:transparent;box-shadow:none;border:2px solid rgb(194,9,65);color:#fffc}button.btn-wire-error-alt i.btn-match,.btn.btn-wire-error-alt i.btn-match{color:#c20941}button.btn-wire-error-alt:hover,.btn.btn-wire-error-alt:hover{background:#c209410d;border-color:#910731;color:#910731;box-shadow:none}button.btn-wire-error-alt:focus,.btn.btn-wire-error-alt:focus{border-color:#610420;background:transparent}button.btn-danger,.btn.btn-danger{background:#ef0e5d;box-shadow:0 2px #8f0838}button.btn-danger:hover,.btn.btn-danger:hover{box-shadow:0 2px 0 1px #8f0838 inset}button.btn-danger:focus,.btn.btn-danger:focus{background:#8f0838}button.btn-wire-danger,.btn.btn-wire-danger{background:transparent;box-shadow:none;border:2px solid rgb(239,14,93);color:#fffc}button.btn-wire-danger i.btn-match,.btn.btn-wire-danger i.btn-match{color:#ef0e5d}button.btn-wire-danger:hover,.btn.btn-wire-danger:hover{background:#ef0e5d0d;border-color:#bf0b4a;color:#bf0b4a;box-shadow:none}button.btn-wire-danger:focus,.btn.btn-wire-danger:focus{border-color:#8f0838;background:transparent}button.btn-danger-alt,.btn.btn-danger-alt{background:#c20941;box-shadow:0 2px #610420}button.btn-danger-alt:hover,.btn.btn-danger-alt:hover{box-shadow:0 2px 0 1px #610420 inset}button.btn-danger-alt:focus,.btn.btn-danger-alt:focus{background:#610420}button.btn-wire-danger-alt,.btn.btn-wire-danger-alt{background:transparent;box-shadow:none;border:2px solid rgb(194,9,65);color:#fffc}button.btn-wire-danger-alt i.btn-match,.btn.btn-wire-danger-alt i.btn-match{color:#c20941}button.btn-wire-danger-alt:hover,.btn.btn-wire-danger-alt:hover{background:#c209410d;border-color:#910731;color:#910731;box-shadow:none}button.btn-wire-danger-alt:focus,.btn.btn-wire-danger-alt:focus{border-color:#610420;background:transparent}button.btn-purple,.btn.btn-purple{background:#bc48ff;box-shadow:0 2px #8f00e1}button.btn-purple:hover,.btn.btn-purple:hover{box-shadow:0 2px 0 1px #8f00e1 inset}button.btn-purple:focus,.btn.btn-purple:focus{background:#8f00e1}button.btn-wire-purple,.btn.btn-wire-purple{background:transparent;box-shadow:none;border:2px solid rgb(188,72,255);color:#fffc}button.btn-wire-purple i.btn-match,.btn.btn-wire-purple i.btn-match{color:#bc48ff}button.btn-wire-purple:hover,.btn.btn-wire-purple:hover{background:#bc48ff0d;border-color:#a915ff;color:#a915ff;box-shadow:none}button.btn-wire-purple:focus,.btn.btn-wire-purple:focus{border-color:#8f00e1;background:transparent}button.btn-purple-alt,.btn.btn-purple-alt{background:#692fbd;box-shadow:0 2px #3c1b6b}button.btn-purple-alt:hover,.btn.btn-purple-alt:hover{box-shadow:0 2px 0 1px #3c1b6b inset}button.btn-purple-alt:focus,.btn.btn-purple-alt:focus{background:#3c1b6b}button.btn-wire-purple-alt,.btn.btn-wire-purple-alt{background:transparent;box-shadow:none;border:2px solid rgb(105,47,189);color:#fffc}button.btn-wire-purple-alt i.btn-match,.btn.btn-wire-purple-alt i.btn-match{color:#692fbd}button.btn-wire-purple-alt:hover,.btn.btn-wire-purple-alt:hover{background:#692fbd0d;border-color:#522594;color:#522594;box-shadow:none}button.btn-wire-purple-alt:focus,.btn.btn-wire-purple-alt:focus{border-color:#3c1b6b;background:transparent}button.btn-neutral,.btn.btn-neutral{background:#464646;box-shadow:0 2px #131313}button.btn-neutral:hover,.btn.btn-neutral:hover{box-shadow:0 2px 0 1px #131313 inset}button.btn-neutral:focus,.btn.btn-neutral:focus{background:#131313}button.btn-wire-neutral,.btn.btn-wire-neutral{background:transparent;box-shadow:none;border:2px solid rgb(70,70,70);color:#fffc}button.btn-wire-neutral i.btn-match,.btn.btn-wire-neutral i.btn-match{color:#464646}button.btn-wire-neutral:hover,.btn.btn-wire-neutral:hover{background:#4646460d;border-color:#2d2d2d;color:#2d2d2d;box-shadow:none}button.btn-wire-neutral:focus,.btn.btn-wire-neutral:focus{border-color:#131313;background:transparent}button.btn-yellow,.btn.btn-yellow{background:#e5a123;box-shadow:0 2px #916411}button.btn-yellow:hover,.btn.btn-yellow:hover{box-shadow:0 2px 0 1px #916411 inset}button.btn-yellow:focus,.btn.btn-yellow:focus{background:#916411}button.btn-wire-yellow,.btn.btn-wire-yellow{background:transparent;box-shadow:none;border:2px solid rgb(229,161,35);color:#fffc}button.btn-wire-yellow i.btn-match,.btn.btn-wire-yellow i.btn-match{color:#e5a123}button.btn-wire-yellow:hover,.btn.btn-wire-yellow:hover{background:#e5a1230d;border-color:#be8417;color:#be8417;box-shadow:none}button.btn-wire-yellow:focus,.btn.btn-wire-yellow:focus{border-color:#916411;background:transparent}button.btn-white,.btn.btn-white{background:#fff;box-shadow:0 2px #ccc}button.btn-white:hover,.btn.btn-white:hover{box-shadow:0 2px 0 1px #ccc inset}button.btn-white:focus,.btn.btn-white:focus{background:#ccc}button.btn-wire-white,.btn.btn-wire-white{background:transparent;box-shadow:none;border:2px solid rgb(255,255,255);color:#fffc}button.btn-wire-white i.btn-match,.btn.btn-wire-white i.btn-match{color:#fff}button.btn-wire-white:hover,.btn.btn-wire-white:hover{background:#ffffff0d;border-color:#e6e6e6;color:#e6e6e6;box-shadow:none}button.btn-wire-white:focus,.btn.btn-wire-white:focus{border-color:#ccc;background:transparent}button.btn-black,.btn.btn-black{background:#000;box-shadow:0 2px #000}button.btn-black:hover,.btn.btn-black:hover{box-shadow:0 2px 0 1px #000 inset}button.btn-black:focus,.btn.btn-black:focus{background:#000}button.btn-wire-black,.btn.btn-wire-black{background:transparent;box-shadow:none;border:2px solid rgb(0,0,0);color:#fffc}button.btn-wire-black i.btn-match,.btn.btn-wire-black i.btn-match{color:#000}button.btn-wire-black:hover,.btn.btn-wire-black:hover{background:#0000000d;border-color:#000;color:#000;box-shadow:none}button.btn-wire-black:focus,.btn.btn-wire-black:focus{border-color:#000;background:transparent}button.btn-youtube,.btn.btn-youtube{background:#fd3c01;box-shadow:0 2px #972401}button.btn-youtube:hover,.btn.btn-youtube:hover{box-shadow:0 2px 0 1px #972401 inset}button.btn-youtube:focus,.btn.btn-youtube:focus{background:#972401}button.btn-wire-youtube,.btn.btn-wire-youtube{background:transparent;box-shadow:none;border:2px solid rgb(253,60,1);color:#fffc}button.btn-wire-youtube i.btn-match,.btn.btn-wire-youtube i.btn-match{color:#fd3c01}button.btn-wire-youtube:hover,.btn.btn-wire-youtube:hover{background:#fd3c010d;border-color:#ca3001;color:#ca3001;box-shadow:none}button.btn-wire-youtube:focus,.btn.btn-wire-youtube:focus{border-color:#972401;background:transparent}button.btn-raspbian,.btn.btn-raspbian{background:#b61240;box-shadow:0 2px #59091f}button.btn-raspbian:hover,.btn.btn-raspbian:hover{box-shadow:0 2px 0 1px #59091f inset}button.btn-raspbian:focus,.btn.btn-raspbian:focus{background:#59091f}button.btn-wire-raspbian,.btn.btn-wire-raspbian{background:transparent;box-shadow:none;border:2px solid rgb(182,18,64);color:#fffc}button.btn-wire-raspbian i.btn-match,.btn.btn-wire-raspbian i.btn-match{color:#b61240}button.btn-wire-raspbian:hover,.btn.btn-wire-raspbian:hover{background:#b612400d;border-color:#880d30;color:#880d30;box-shadow:none}button.btn-wire-raspbian:focus,.btn.btn-wire-raspbian:focus{border-color:#59091f;background:transparent}button.btn-windows,.btn.btn-windows{background:#12a7e3;box-shadow:0 2px #0b6184}button.btn-windows:hover,.btn.btn-windows:hover{box-shadow:0 2px 0 1px #0b6184 inset}button.btn-windows:focus,.btn.btn-windows:focus{background:#0b6184}button.btn-wire-windows,.btn.btn-wire-windows{background:transparent;box-shadow:none;border:2px solid rgb(18,167,227);color:#fffc}button.btn-wire-windows i.btn-match,.btn.btn-wire-windows i.btn-match{color:#12a7e3}button.btn-wire-windows:hover,.btn.btn-wire-windows:hover{background:#12a7e30d;border-color:#0e84b4;color:#0e84b4;box-shadow:none}button.btn-wire-windows:focus,.btn.btn-wire-windows:focus{border-color:#0b6184;background:transparent}button.btn-macos,.btn.btn-macos{background:#b3bcc2;box-shadow:0 2px #7a8a95}button.btn-macos:hover,.btn.btn-macos:hover{box-shadow:0 2px 0 1px #7a8a95 inset}button.btn-macos:focus,.btn.btn-macos:focus{background:#7a8a95}button.btn-wire-macos,.btn.btn-wire-macos{background:transparent;box-shadow:none;border:2px solid rgb(179,188,194);color:#fffc}button.btn-wire-macos i.btn-match,.btn.btn-wire-macos i.btn-match{color:#b3bcc2}button.btn-wire-macos:hover,.btn.btn-wire-macos:hover{background:#b3bcc20d;border-color:#97a3ab;color:#97a3ab;box-shadow:none}button.btn-wire-macos:focus,.btn.btn-wire-macos:focus{border-color:#7a8a95;background:transparent}button.btn-debian,.btn.btn-debian{background:#cf084e;box-shadow:0 2px #6d0429}button.btn-debian:hover,.btn.btn-debian:hover{box-shadow:0 2px 0 1px #6d0429 inset}button.btn-debian:focus,.btn.btn-debian:focus{background:#6d0429}button.btn-wire-debian,.btn.btn-wire-debian{background:transparent;box-shadow:none;border:2px solid rgb(207,8,78);color:#fffc}button.btn-wire-debian i.btn-match,.btn.btn-wire-debian i.btn-match{color:#cf084e}button.btn-wire-debian:hover,.btn.btn-wire-debian:hover{background:#cf084e0d;border-color:#9e063b;color:#9e063b;box-shadow:none}button.btn-wire-debian:focus,.btn.btn-wire-debian:focus{border-color:#6d0429;background:transparent}button.btn-fedora,.btn.btn-fedora{background:#52a2da;box-shadow:0 2px #236ea3}button.btn-fedora:hover,.btn.btn-fedora:hover{box-shadow:0 2px 0 1px #236ea3 inset}button.btn-fedora:focus,.btn.btn-fedora:focus{background:#236ea3}button.btn-wire-fedora,.btn.btn-wire-fedora{background:transparent;box-shadow:none;border:2px solid rgb(82,162,218);color:#fffc}button.btn-wire-fedora i.btn-match,.btn.btn-wire-fedora i.btn-match{color:#52a2da}button.btn-wire-fedora:hover,.btn.btn-wire-fedora:hover{background:#52a2da0d;border-color:#2c8bcd;color:#2c8bcd;box-shadow:none}button.btn-wire-fedora:focus,.btn.btn-wire-fedora:focus{border-color:#236ea3;background:transparent}button.btn-ubuntu,.btn.btn-ubuntu{background:#d64514;box-shadow:0 2px #79270b}button.btn-ubuntu:hover,.btn.btn-ubuntu:hover{box-shadow:0 2px 0 1px #79270b inset}button.btn-ubuntu:focus,.btn.btn-ubuntu:focus{background:#79270b}button.btn-wire-ubuntu,.btn.btn-wire-ubuntu{background:transparent;box-shadow:none;border:2px solid rgb(214,69,20);color:#fffc}button.btn-wire-ubuntu i.btn-match,.btn.btn-wire-ubuntu i.btn-match{color:#d64514}button.btn-wire-ubuntu:hover,.btn.btn-wire-ubuntu:hover{background:#d645140d;border-color:#a73610;color:#a73610;box-shadow:none}button.btn-wire-ubuntu:focus,.btn.btn-wire-ubuntu:focus{border-color:#79270b;background:transparent}button.btn-suse,.btn.btn-suse{background:#6fb425;box-shadow:0 2px #3b5f14}button.btn-suse:hover,.btn.btn-suse:hover{box-shadow:0 2px 0 1px #3b5f14 inset}button.btn-suse:focus,.btn.btn-suse:focus{background:#3b5f14}button.btn-wire-suse,.btn.btn-wire-suse{background:transparent;box-shadow:none;border:2px solid rgb(111,180,37);color:#fffc}button.btn-wire-suse i.btn-match,.btn.btn-wire-suse i.btn-match{color:#6fb425}button.btn-wire-suse:hover,.btn.btn-wire-suse:hover{background:#6fb4250d;border-color:#558a1c;color:#558a1c;box-shadow:none}button.btn-wire-suse:focus,.btn.btn-wire-suse:focus{border-color:#3b5f14;background:transparent}button.btn-redhat,.btn.btn-redhat{background:#c60200;box-shadow:0 2px #600100}button.btn-redhat:hover,.btn.btn-redhat:hover{box-shadow:0 2px 0 1px #600100 inset}button.btn-redhat:focus,.btn.btn-redhat:focus{background:#600100}button.btn-wire-redhat,.btn.btn-wire-redhat{background:transparent;box-shadow:none;border:2px solid rgb(198,2,0);color:#fffc}button.btn-wire-redhat i.btn-match,.btn.btn-wire-redhat i.btn-match{color:#c60200}button.btn-wire-redhat:hover,.btn.btn-wire-redhat:hover{background:#c602000d;border-color:#930100;color:#930100;box-shadow:none}button.btn-wire-redhat:focus,.btn.btn-wire-redhat:focus{border-color:#600100;background:transparent}button.btn-centos,.btn.btn-centos{background:#9b4c88;box-shadow:0 2px #572a4c}button.btn-centos:hover,.btn.btn-centos:hover{box-shadow:0 2px 0 1px #572a4c inset}button.btn-centos:focus,.btn.btn-centos:focus{background:#572a4c}button.btn-wire-centos,.btn.btn-wire-centos{background:transparent;box-shadow:none;border:2px solid rgb(155,76,136);color:#fffc}button.btn-wire-centos i.btn-match,.btn.btn-wire-centos i.btn-match{color:#9b4c88}button.btn-wire-centos:hover,.btn.btn-wire-centos:hover{background:#9b4c880d;border-color:#793b6a;color:#793b6a;box-shadow:none}button.btn-wire-centos:focus,.btn.btn-wire-centos:focus{border-color:#572a4c;background:transparent}button.btn-other,.btn.btn-other{background:#e5a123;box-shadow:0 2px #916411}button.btn-other:hover,.btn.btn-other:hover{box-shadow:0 2px 0 1px #916411 inset}button.btn-other:focus,.btn.btn-other:focus{background:#916411}button.btn-wire-other,.btn.btn-wire-other{background:transparent;box-shadow:none;border:2px solid rgb(229,161,35);color:#fffc}button.btn-wire-other i.btn-match,.btn.btn-wire-other i.btn-match{color:#e5a123}button.btn-wire-other:hover,.btn.btn-wire-other:hover{background:#e5a1230d;border-color:#be8417;color:#be8417;box-shadow:none}button.btn-wire-other:focus,.btn.btn-wire-other:focus{border-color:#916411;background:transparent}button.btn-gscale0,.btn.btn-gscale0{background:#000;box-shadow:0 2px #000}button.btn-gscale0:hover,.btn.btn-gscale0:hover{box-shadow:0 2px 0 1px #000 inset}button.btn-gscale0:focus,.btn.btn-gscale0:focus{background:#000}button.btn-wire-gscale0,.btn.btn-wire-gscale0{background:transparent;box-shadow:none;border:2px solid #000000;color:#fffc}button.btn-wire-gscale0 i.btn-match,.btn.btn-wire-gscale0 i.btn-match{color:#000}button.btn-wire-gscale0:hover,.btn.btn-wire-gscale0:hover{background:#0000000d;border-color:#000;color:#000;box-shadow:none}button.btn-wire-gscale0:focus,.btn.btn-wire-gscale0:focus{border-color:#000;background:transparent}button.btn-gscaleF,.btn.btn-gscaleF{background:#fff;box-shadow:0 2px #ccc}button.btn-gscaleF:hover,.btn.btn-gscaleF:hover{box-shadow:0 2px 0 1px #ccc inset}button.btn-gscaleF:focus,.btn.btn-gscaleF:focus{background:#ccc}button.btn-wire-gscaleF,.btn.btn-wire-gscaleF{background:transparent;box-shadow:none;border:2px solid #FFFFFF;color:#fffc}button.btn-wire-gscaleF i.btn-match,.btn.btn-wire-gscaleF i.btn-match{color:#fff}button.btn-wire-gscaleF:hover,.btn.btn-wire-gscaleF:hover{background:#ffffff0d;border-color:#e6e6e6;color:#e6e6e6;box-shadow:none}button.btn-wire-gscaleF:focus,.btn.btn-wire-gscaleF:focus{border-color:#ccc;background:transparent}.alert.alert-warning,.alert.alert-orange{color:#e56723;background:#e5672333}.alert.alert-info{color:#027bff;background:#027bff33}.alert.alert-info-alt{color:#075cb7;background:#075cb733}.alert.alert-success{color:#0eef5f;background:#0eef5f33}.alert.alert-success-alt{color:#11a948;background:#11a94833}.alert.alert-error{color:#ef0e5d;background:#ef0e5d33}.alert.alert-error-alt{color:#c20941;background:#c2094133}.alert.alert-danger{color:#ef0e5d;background:#ef0e5d33}.alert.alert-danger-alt{color:#c20941;background:#c2094133}.alert.alert-purple{color:#bc48ff;background:#bc48ff33}.alert.alert-purple-alt{color:#692fbd;background:#692fbd33}.alert.alert-neutral{color:#464646;background:#46464633}.alert.alert-yellow{color:#e5a123;background:#e5a12333}.alert.alert-white{color:#fff;background:#fff3}.alert.alert-black{color:#000;background:#0003}.alert.alert-youtube{color:#fd3c01;background:#fd3c0133}.alert.alert-raspbian{color:#b61240;background:#b6124033}.alert.alert-windows{color:#12a7e3;background:#12a7e333}.alert.alert-macos{color:#b3bcc2;background:#b3bcc233}.alert.alert-debian{color:#cf084e;background:#cf084e33}.alert.alert-fedora{color:#52a2da;background:#52a2da33}.alert.alert-ubuntu{color:#d64514;background:#d6451433}.alert.alert-suse{color:#6fb425;background:#6fb42533}.alert.alert-redhat{color:#c60200;background:#c6020033}.alert.alert-centos{color:#9b4c88;background:#9b4c8833}.alert.alert-other{color:#e5a123;background:#e5a12333}.alert.alert-gscale0{color:#000;background:#0003}.alert.alert-gscaleF{color:#fff;background:#fff3}@font-face{font-family:Sixtyfour;src:url(../../webfonts/Sixtyfour-Regular.ttf) format("truetype")}*{font-family:Roboto,Arial,"sans-serif";margin:0;padding:0;box-sizing:border-box}html{background-color:#111}body,html{height:100%;font-family:Arial,sans-serif}.container{display:flex;height:100vh}.horizontal{display:flex;flex-direction:row;justify-content:flex-start;align-items:flex-start;flex:1;align-self:stretch}.horizontal.fx-end{justify-content:flex-end}.vertical{display:flex;flex-direction:column;justify-content:flex-start;align-items:flex-start;flex:1;align-self:stretch}main{flex:1;display:flex;flex-direction:column}main .main-container{display:flex;flex-direction:column;flex:1;overflow:hidden;align-self:stretch}main .main-container .top-content{display:flex;flex-direction:row;justify-content:flex-start;align-items:center;align-self:stretch;padding:10px 10px 10px 15px;background:transparent;border-bottom:1px solid #222}main .main-container .top-content h1{color:#fff;font-weight:600;font-size:24px}main .main-container .top-content .top-actions{flex:1;display:flex;flex-direction:row;justify-content:flex-start;align-items:center}main .main-container .top-content .top-actions.align-right{justify-content:flex-end;margin-right:10px}main .main-container .top-content .top-actions .btn:first-child{margin-left:0!important}main .main-container .top-content .top-actions .btn,main .main-container .top-content .top-actions button{margin-left:10px}main .main-container .bottom-content{display:flex;flex-direction:row;align-self:stretch;justify-content:flex-start;align-items:flex-start;flex:1;overflow-y:auto;background:radial-gradient(circle at 0% 53%,rgba(239,14,93,.8) 10%,transparent 45%),radial-gradient(circle at 135% 53%,rgba(2,123,255,.8) 10%,transparent 95%),radial-gradient(circle at 50% 80%,rgba(14,239,95,.8) 40%,transparent 95%)}main .main-container .bottom-content .page-content{flex:2;overflow-y:auto;align-self:stretch;display:flex;flex-direction:column;justify-content:flex-start;align-items:flex-start;background:#000c;padding:5px}main .main-container .bottom-content .page-content .inner{flex:1;display:flex;flex-direction:column;justify-content:flex-start;align-items:flex-start;padding:10px 10px 40px;background:#111;align-self:stretch}main .main-container .bottom-content .page-content .inner h1,main .main-container .bottom-content .page-content .inner h2,main .main-container .bottom-content .page-content .inner h3,main .main-container .bottom-content .page-content .inner h4,main .main-container .bottom-content .page-content .inner h5,main .main-container .bottom-content .page-content .inner h6{color:#ddd}main .main-container .bottom-content .page-content .inner p{font-size:12px;line-height:18px;display:flex;margin-bottom:5px;flex-direction:row;justify-content:flex-start;align-items:center;color:#666}main .main-container .bottom-content .page-panel{flex:1;overflow-y:auto;align-self:stretch;background:#111;border-top:none}main .main-container .bottom-content .page-panel.left-panel{border-right:1px solid #222;border-left:none}main .main-container .bottom-content .page-panel.left-panel.explr-explorer{flex:.5;overflow-y:auto;padding:0;background:#111;box-shadow:1px 1px .5px .5px inset #0003;max-width:250px}main .main-container .bottom-content .page-panel.right-panel{border-left:1px solid #222;border-right:none}.invisible{visibility:hidden!important}.hidden{display:none!important}.tac{text-align:center!important}.tar{text-align:right!important}a{text-decoration:none}.normal{font-weight:400!important}.bold{font-weight:700!important}.col{display:flex;flex:1;flex-direction:column;align-self:stretch}main .context-bar{padding:10px;position:sticky;top:0;z-index:1000;max-height:80px;border-bottom:1px solid #222;display:flex;flex-direction:row;align-items:center}main .context-bar .context-menu{flex:1}main .context-bar .context-menu .inner{display:flex}main .context-bar .context-menu .inner ul.pills{margin:0}main .context-bar .context-divider{width:1px;height:100%;background:#222;margin-left:20px;margin-right:20px}main .context-bar .context-tail{margin-right:30px}main .context-bar .context-tail .btn{margin-right:0}main .context-bar .context-tail-auth{margin-right:10px}main .context-bar .context-tail-auth .btn{margin-right:0}main .context-bar .context-user{display:flex;margin-right:20px}main .context-bar .context-user .trigger{color:#fff}main .context-bar .context-user .trigger .avatar{width:32px;height:32px;border-radius:4px;background:#aaa;margin-right:10px;display:flex;flex-direction:row;justify-content:center;align-items:center;text-align:center;font-weight:700;font-size:14px;border:1px solid #444;color:#000}main .context-bar .context-user .trigger i{margin-top:-5px;margin-left:10px}menu{width:300px;background:#111;overflow-y:auto;overflow-x:visible;padding:20px;z-index:2000;display:flex;flex-direction:column;justify-content:flex-start;align-items:flex-start;border-right:1px solid #222;min-width:64px}menu h1.logo{margin:40px 0 0 10px;align-self:stretch;display:flex}menu h1.logo a{text-align:center;text-shadow:0px 0 0 rgb(255,255,255),0px 2px 0 #444,0 0px 0 rgb(14,239,95),-0px 0 0 rgb(2,123,255),0 -0px 0 rgb(239,14,93);text-decoration:none;background:linear-gradient(90deg,#a0a0a0 0,#bebebe 46%,#dcdcdc);-webkit-background-clip:text;color:transparent;flex:1;font-family:Sixtyfour,Work Sans,Arial,"sans-serif";align-self:stretch;padding-right:3px;font-size:20px;text-transform:uppercase;transition:all .55s cubic-bezier(.19,1,.22,1);display:flex;flex-direction:row;justify-content:center;align-items:center;position:relative;color:#fff}menu h1.logo a img{flex-shrink:0;width:30px;margin-right:10px;position:absolute;left:5px;transition:all .55s cubic-bezier(.19,1,.22,1)}menu h1.logo a img.after{opacity:0}menu:hover h1.logo a{text-align:center;text-shadow:3px 0 0 rgb(255,255,255),3px 2px 0 #444,0 3px 0 rgb(14,239,95),-3px 0 0 rgb(2,123,255),0 -3px 0 rgb(239,14,93);text-decoration:none;background:linear-gradient(90deg,#a0a0a0 0,#bebebe 46%,#dcdcdc);-webkit-background-clip:text;color:transparent}menu:hover h1.logo a img.before{opacity:0}menu:hover h1.logo a img.after{animation-duration:.2s;animation-name:logotouch}menu nav{display:flex;align-self:stretch;flex:1}menu nav ul{margin:60px 0 20px;flex:1;align-self:flex-start;display:flex;flex-direction:column;list-style:none}menu nav ul li{align-self:stretch;overflow:hidden;position:relative;transition:all .55s cubic-bezier(.19,1,.22,1);margin:10px 0;border-radius:4px}menu nav ul li a{color:#ffffffe6;font-size:16px;display:flex;flex-direction:row;justify-content:flex-start;align-items:center;align-self:stretch;flex:1;padding-top:5px;padding-bottom:5px;padding-left:10px}menu nav ul li a i{color:#fff;opacity:.2;background:transparent;display:flex;justify-content:center;align-items:center;align-self:stretch;padding:10px;width:40px;border-radius:4px;text-align:center;margin-right:20px}menu nav ul li:after{background:#fff;content:"";height:195px;left:-200px;opacity:.2;position:absolute;top:-50px;transform:rotate(35deg);transition:all .55s cubic-bezier(.19,1,.22,1);width:50px;z-index:-2;cursor:pointer}menu nav ul li.active a{color:#027bff;font-weight:700}menu nav ul li.active a i{opacity:1;color:#fff;background:#ffffffe6;background:#027bff}menu nav ul li:hover{background:#027bff}menu nav ul li:hover:after{z-index:2;left:120%;transition:all .55s cubic-bezier(.19,1,.22,1)}menu nav ul li:hover a{color:#fff;font-weight:700}menu nav ul li:hover a i{color:#fff;opacity:1}menu footer{background:#ffffff03;padding:20px 0;display:flex;flex-direction:row;align-self:stretch;text-align:center;justify-content:center}menu footer p{color:#444}menu footer p.version a{color:#777;font-weight:700}.dropdown{position:relative;display:flex;align-self:stretch}.dropdown.dropdown-show ul.dropdown-menu{display:flex;flex-direction:column}.dropdown .trigger{cursor:pointer;display:flex;flex-direction:row;justify-content:flex-start;align-items:center;align-self:stretch;flex:1}.dropdown ul.dropdown-menu{position:absolute;top:100%;left:0;display:none;background-color:#222;box-shadow:0 8px 16px #0003;z-index:1000;list-style-type:none;margin:0;overflow:hidden;border-radius:4px}.dropdown ul.dropdown-menu li{padding:8px 16px;cursor:pointer;display:flex;flex-direction:row;justify-content:flex-start;align-items:center;transition:all .55s cubic-bezier(.19,1,.22,1)}.dropdown ul.dropdown-menu li.danger:hover{background-color:#ef0e5d}.dropdown ul.dropdown-menu li:hover{background-color:#027bff}.dropdown ul.dropdown-menu li a{padding:8px 16px 8px 8px;color:#fff;display:flex;flex-direction:row;justify-content:flex-start;align-items:center;align-self:stretch}.dropdown ul.dropdown-menu li a i{margin-right:15px}@keyframes logotouch{0%{opacity:0}50%{opacity:1}to{opacity:0;left:27px}}@keyframes shakednd{0%{transform:rotate(-2deg)}to{transform:rotate(2deg)}}@keyframes blinkfade{0%{opacity:1}50%{opacity:0}to{opacity:1}}button,.btn{position:relative;padding:10px 10px 8px;font-size:14px;color:#fff;cursor:pointer;border:none;border-radius:4px;background:#027bff;box-shadow:0 2px #004a9b;font-weight:700;letter-spacing:-.5px;margin-top:-2px;min-width:38px;min-height:34px;text-align:center;justify-content:center}button i.icon-left,.btn i.icon-left{margin-right:5px}button:hover,.btn:hover{box-shadow:0 2px 0 1px #004a9b inset;color:#fffc}button:focus,.btn:focus{background:#004a9b;color:#ffffff80;box-shadow:none}button.btn-pixel,.btn.btn-pixel{background:#ccc;border:1px solid transparent;transition:all .55s cubic-bezier(.19,1,.22,1);text-transform:uppercase;font-size:12px;box-shadow:4px 0 #fff,0 4px #0eef5f,-4px 0 #027bff,0 -4px #ef0e5d;color:#222;overflow:hidden}button.btn-pixel:hover,.btn.btn-pixel:hover{box-shadow:6px 0 #fff,0 6px #0eef5f,-6px 0 #027bff,0 -6px #ef0e5d;text-align:center;text-shadow:4px 0 0 rgb(255,255,255),4px 2px 0 #444,0 4px 0 rgb(14,239,95),-4px 0 0 rgb(2,123,255),0 -4px 0 rgb(239,14,93);text-decoration:none;background:linear-gradient(90deg,#a0a0a0 0,#bebebe 46%,#dcdcdc);-webkit-background-clip:text;color:transparent}button.btn-neutral,.btn.btn-neutral{color:#fff;background:#555;box-shadow:0 2px #3c3c3c;border:1px solid transparent}button.btn-neutral.active,button.btn-neutral:hover,.btn.btn-neutral.active,.btn.btn-neutral:hover{box-shadow:0 2px 0 1px #222 inset;background:#3c3c3c}button.btn-neutral:focus,.btn.btn-neutral:focus{background:#222;border:1px solid #AAA}button .btn-wire-neutral,.btn .btn-wire-neutral{background:transparent;border:2px solid #555;color:#fffc;box-shadow:none}button .btn-wire-neutral:hover,.btn .btn-wire-neutral:hover{background:#5555550d;border-color:#3c3c3c;color:#3c3c3c;box-shadow:none}button .btn-wire-neutral:focus,.btn .btn-wire-neutral:focus{border-color:#222;background:transparent}button.btn-naked,.btn.btn-naked{background:transparent;box-shadow:none;border:1px solid transparent;color:#fff}button.btn-naked:hover,.btn.btn-naked:hover{box-shadow:0 2px 0 1px #222 inset;background:#3c3c3c;color:#fff}button.btn-naked:focus,.btn.btn-naked:focus{background:#222;border:1px solid #AAA}button i.main,.btn i.main{font-size:18px}button sup,button sub,.btn sup,.btn sub{position:absolute;top:-4px;right:-4px;background:#777;border-bottom:2px solid #555;color:red;border-radius:4px;width:16px;height:16px;text-align:center;display:flex;justify-content:center;align-items:center;padding-top:2px;padding-bottom:1px}button sup i,button sub i,.btn sup i,.btn sub i{color:#fff;font-size:10px}button.btn-double-icon,.btn.btn-double-icon{margin-right:5px}button.disabled,.btn.disabled{cursor:default}.alert{padding:20px;align-self:stretch;display:flex;flex-direction:row;justify-content:center;align-items:center;border-radius:4px}.alert i{margin-right:13px}.alert a{color:inherit;margin-left:4px;margin-right:4px;text-decoration:underline}ul.explr-tree{height:100%!important}ul.explr-tree ul{padding-top:0!important}ul.explr-tree li{position:relative}ul.explr-tree li span{color:#555;font-size:13px;padding-left:5px;cursor:pointer}ul.explr-tree li span.explr-plus,ul.explr-tree li span.explr-minus{z-index:1}ul.explr-tree li span.explr-plus:hover,ul.explr-tree li span.explr-minus:hover{color:#aaa}ul.explr-tree li i.main{font-size:14px}ul.explr-tree li sup,ul.explr-tree li sub{position:absolute;top:0;left:5px;background:#777;border-bottom:2px solid #555;border-radius:4px;text-align:center;display:flex;justify-content:center;align-items:center;padding-top:2px;padding-bottom:1px}ul.explr-tree li sup i,ul.explr-tree li sub i{color:#fff;font-size:4px!important;margin-bottom:0}ul.explr-tree li a{color:#fff;padding-right:80px;margin-top:2px}ul.explr-tree li a:hover{color:#fff}ul.explr-tree li a.active{background:#ffffff1a;border-radius:4px;font-weight:700;text-decoration:underline;margin-left:35px;padding-left:5px;margin-right:10px}.explr-multiselection-actions,.explr-selection-actions{display:none;flex-direction:row;justify-content:flex-end;align-items:center;flex:1}.explr-multiselection-actions button,.explr-selection-actions button{display:none}body.explr-selection-actionable .explr-selection-actions,body.explr-selection-actionable.explr-selection-folder .explr-selection-actions button.explr-selection-folder,body.explr-selection-actionable.explr-selection-entity .explr-selection-actions button.explr-selection-entity,body.explr-multiselection-actionable .explr-multiselection-actions,body.explr-multiselection-actionable.explr-multiselection-folder .explr-multiselection-actions button.explr-multiselection-folder,body.explr-multiselection-actionable.explr-multiselection-entity .explr-multiselection-actions button.explr-multiselection-entity{display:flex}.selectable-zone{flex:1;align-self:stretch;border:1px solid transparent}ul.explr-dirview{display:flex;flex-direction:row;flex-wrap:wrap}ul.explr-dirview li{display:flex;flex-direction:column;justify-content:flex-start;align-items:center;flex-shrink:0;margin:10px;min-width:100px;min-height:130px;padding-top:5px;border:1px solid transparent;border-radius:4px}ul.explr-dirview li.renaming a span{display:none}ul.explr-dirview li.renaming a form{display:block}ul.explr-dirview li.highlight-drop{border:1px dotted rgba(2,123,255,.4);background:#027bff4d}ul.explr-dirview li.highlight-clicked{border:1px dotted rgba(255,255,255,.2);background:#ffffff1a}ul.explr-dirview li a{color:#bbb;text-decoration:none;flex:1;text-align:center;font-size:12px;display:flex;flex-direction:column;justify-content:flex-start;align-items:center;max-width:84px;min-width:84px;position:relative;word-break:break-all}ul.explr-dirview li a.with-thumbnail .img-holder{width:64px;height:64px;background:#000;border-radius:8px;display:flex;flex-direction:column;justify-content:center;align-items:center;overflow:hidden;margin-bottom:12px}ul.explr-dirview li a.with-thumbnail .img-holder img{max-height:100%;max-width:100%}ul.explr-dirview li a.with-thumbnail i{font-size:24px;position:absolute;top:-4px;left:-4px;text-shadow:0 .5px .5px #777}ul.explr-dirview li a i{font-size:64px;margin-bottom:12px;border-radius:8px}ul.explr-dirview li a sup,ul.explr-dirview li a sub{position:absolute;top:-2px;right:0;background:#777;border-bottom:2px solid #555;border-radius:4px;width:16px;height:16px;text-align:center;display:flex;justify-content:center;align-items:center;padding-top:2px;padding-bottom:1px}ul.explr-dirview li a sup i,ul.explr-dirview li a sub i{color:#fff;font-size:10px;margin-bottom:0}ul.explr-dirview li a input{width:100%;padding:0 3px}ul.explr-dirview li a input:focus{outline:none}ul.explr-dirview li a:hover{opacity:.8}ul.explr-dirview li a form{display:none}ul.explr-dirview li.new-folder a{color:#027bff}ul.explr-dirview li.new-folder a form{display:block}ul.explr-dirview .ui-draggable-dragging{z-index:20}ul.explr-dirview .ui-draggable-dragging a{opacity:1!important}.modal-explr-picker h2{margin-top:0}.modal-explr-picker .explr-tree{width:400px;max-width:400px;max-height:300px;overflow:auto;background:#222;padding:10px 20px;border-radius:4px;margin-top:15px}.content-explr-picker{cursor:pointer}.selection-rectangle{position:absolute;border:1px solid rgb(0,153,255);background-color:#0099ff1a;pointer-events:none;z-index:1000}ul.pills{background:#222;padding:6px 4px 5px;box-shadow:1px 1px .5px .5px inset #0003;border:1px solid #222;border-radius:4px;display:flex;flex-direction:row;justify-content:flex-start;align-items:center;list-style:none;margin:0}ul.pills li.divider{margin:0 20px;width:1px;height:100%;background:#333}ul.pills li:hover a{opacity:.9}ul.pills li a{border-radius:4px;display:flex;flex-direction:row;justify-content:center;align-items:center;color:#fff;overflow:hidden;padding-right:30px;text-align:center;background:#0003;margin-right:5px;transition:all .25s cubic-bezier(.19,1,.22,1)}ul.pills li a span{display:flex;justify-content:center;align-items:center;margin-right:20px;height:42px;background:#0003;width:42px}ul.pills li.active a{color:#333;background:#ccc;font-weight:700}ul.pills li:hover a{color:#fff;background:#027bff}ul.pills li:last-child a{margin-right:0}.breadcrumb-container{display:flex;flex-direction:row;justify-content:flex-start;align-items:center;align-self:stretch;border-bottom:1px solid #222;background:transparent;padding:10px}.breadcrumb-container ul.breadcrumb{background:#222;padding:6px 4px 5px;box-shadow:1px 1px .5px .5px inset #0003;border:1px solid #222;border-radius:4px;display:flex;flex-direction:row;justify-content:flex-start;align-items:center;list-style:none;margin:0;overflow-x:auto;max-width:65vw;white-space:nowrap}.breadcrumb-container ul.breadcrumb li{display:inline-block}.breadcrumb-container ul.breadcrumb li.divider{margin:0 5px}.breadcrumb-container ul.breadcrumb li.divider i{color:#aaa}.breadcrumb-container ul.breadcrumb li span,.breadcrumb-container ul.breadcrumb li a{border-radius:4px;display:flex;flex-direction:row;justify-content:center;align-items:center;color:#fff;text-align:center;padding:0 3px}.breadcrumb-container ul.breadcrumb li span i,.breadcrumb-container ul.breadcrumb li a i{margin-right:5px}.breadcrumb-container ul.breadcrumb li:hover a{color:#fff;background:#027bff}.breadcrumb-container ul.breadcrumb li:last-child a{margin-right:0}.pickers,.modals{position:fixed;background:#0006;top:0;right:0;bottom:0;left:0;display:flex;flex-direction:column;justify-content:center;align-items:center;z-index:10000}.pickers.pickers .modals-outer .modals-inner .modal h2,.modals.pickers .modals-outer .modals-inner .modal h2{font-size:14px;line-height:18px;display:flex;margin-bottom:5px;flex-direction:row;justify-content:flex-start;align-items:center;align-self:stretch;color:#666}.pickers .modals-outer,.modals .modals-outer{min-width:464px;max-width:464px;display:flex;flex-direction:column;overflow:auto;padding-bottom:2px}.pickers .modals-outer .modals-inner,.modals .modals-outer .modals-inner{background:#111;border-radius:10px;color:#333;padding:40px;box-shadow:0 2px #222;border:1px solid #222}.pickers .modals-outer .modals-inner .modal h2,.modals .modals-outer .modals-inner .modal h2{padding:0;margin:0 0 30px;font-weight:400;color:#999}.pickers .modals-outer .modals-inner .modal h3,.modals .modals-outer .modals-inner .modal h3{align-self:stretch;margin:0 0 10px;font-size:14px;display:flex;flex-direction:row;justify-content:flex-start;align-items:center;color:#fff;padding-bottom:10px;text-decoration:none}.pickers .modals-outer .modals-inner .modal h3.divide,.modals .modals-outer .modals-inner .modal h3.divide{border-top:1px solid #222;margin-top:20px;padding-top:20px}.toast{visibility:hidden;min-width:250px;margin-left:-125px;background-color:#333;color:#fff;text-align:center;border-radius:4px;padding:16px;position:fixed;z-index:1;left:50%;bottom:30px;font-size:17px;border:2px dashed #222}.toast.show{visibility:visible;-webkit-animation:fadein .5s,fadeout .5s 2.5s;animation:fadein .5s,fadeout .5s 2.5s}@-webkit-keyframes fadein{0%{bottom:0;opacity:0}to{bottom:30px;opacity:1}}@keyframes fadein{0%{bottom:0;opacity:0}to{bottom:30px;opacity:1}}@-webkit-keyframes fadeout{0%{bottom:30px;opacity:1}to{bottom:0;opacity:0}}@keyframes fadeout{0%{bottom:30px;opacity:1}to{bottom:0;opacity:0}}body.dragover .shakeondrag{animation:shakednd .1s linear alternate infinite}.btn-super-upload-busy,.btn-super-upload{display:flex;flex-direction:row;justify-content:center;align-items:center;margin-left:10px;position:relative}.btn-super-upload-busy.btn-super-upload-busy,.btn-super-upload.btn-super-upload-busy{border:none!important}.btn-super-upload-busy .unprogress,.btn-super-upload .unprogress{display:block}.btn-super-upload-busy .progress,.btn-super-upload .progress{display:none;width:200px;height:10px;background:#666;border-radius:4px;flex-direction:row;justify-content:flex-start;align-items:center}.btn-super-upload-busy .progress .progress-bar,.btn-super-upload .progress .progress-bar{border-radius:4px;background-color:#027bff;height:100%}.btn-super-upload-busy .progress .percent,.btn-super-upload .progress .percent{display:flex;justify-content:center;align-items:center;position:absolute;left:0;right:0;bottom:0;top:2px;font-size:15px;color:#fff;text-shadow:0 0 2px rgb(0,0,0)}.btn-super-upload-busy.uploading .progress,.btn-super-upload.uploading .progress{display:block}.btn-super-upload-busy.uploading .unprogress,.btn-super-upload.uploading .unprogress{display:none}@keyframes blink{50%{opacity:0}}.cfx-blink{animation:1.5s linear infinite blink}.cfx-ffff-speed{animation-delay:.1s}.cfx-fff-speed{animation-delay:.3s}.cfx-ff-speed{animation-delay:.5s}.cfx-f-speed{animation-delay:.8s}.cfx-m-speed{animation-delay:1s}.cfx-s-speed{animation-delay:1.3s}.cfx-ss-speed{animation-delay:1.5s}.cfx-sss-speed{animation-delay:1.8s}.cfx-ssss-speed{animation-delay:2s}.cfx-sssss-speed{animation-delay:3s}.panes{flex:1;display:flex;flex-direction:column;justify-content:flex-start;align-items:flex-start;align-self:stretch}.panes .pane-section,.panes tbody{display:flex;flex-direction:column;justify-content:flex-start;align-items:flex-start;align-self:stretch;margin:1px 1px 28px;background:#111;border-radius:4px;border:4px solid rgba(255,255,255,.05)}.panes .pane-section:hover,.panes tbody:hover,.panes .pane-section:hover tr.title-item,.panes tbody:hover tr.title-item{border-color:#027bff0d}.panes .pane-section .pane-item,.panes .pane-section tr,.panes tbody .pane-item,.panes tbody tr{flex:1;display:flex;flex-direction:row;justify-content:flex-start;align-items:center;align-self:stretch;padding:8px 18px;background:#222}.panes .pane-section .pane-item:nth-child(odd),.panes .pane-section tr:nth-child(odd),.panes tbody .pane-item:nth-child(odd),.panes tbody tr:nth-child(odd){background-color:#111}.panes .pane-section .pane-item:nth-child(odd) td.description,.panes .pane-section tr:nth-child(odd) td.description,.panes tbody .pane-item:nth-child(odd) td.description,.panes tbody tr:nth-child(odd) td.description{color:#ffffffb3}.panes .pane-section .pane-item:nth-child(2n),.panes .pane-section tr:nth-child(2n),.panes tbody .pane-item:nth-child(2n),.panes tbody tr:nth-child(2n){background-color:#141414}.panes .pane-section .pane-item .pane-cell,.panes .pane-section .pane-item td,.panes .pane-section tr .pane-cell,.panes .pane-section tr td,.panes tbody .pane-item .pane-cell,.panes tbody .pane-item td,.panes tbody tr .pane-cell,.panes tbody tr td{color:#888;display:flex;flex-direction:row;justify-content:flex-start;align-items:center;flex:1;font-size:14px}.panes .pane-section .pane-item .pane-cell.vertical,.panes .pane-section .pane-item td.vertical,.panes .pane-section tr .pane-cell.vertical,.panes .pane-section tr td.vertical,.panes tbody .pane-item .pane-cell.vertical,.panes tbody .pane-item td.vertical,.panes tbody tr .pane-cell.vertical,.panes tbody tr td.vertical{display:flex;flex-direction:column;justify-content:flex-start;align-items:flex-start}.panes .pane-section .pane-item .pane-cell.description,.panes .pane-section .pane-item td.description,.panes .pane-section tr .pane-cell.description,.panes .pane-section tr td.description,.panes tbody .pane-item .pane-cell.description,.panes tbody .pane-item td.description,.panes tbody tr .pane-cell.description,.panes tbody tr td.description{align-self:stretch}.panes .pane-section .pane-item .pane-cell.value,.panes .pane-section .pane-item td.value,.panes .pane-section tr .pane-cell.value,.panes .pane-section tr td.value,.panes tbody .pane-item .pane-cell.value,.panes tbody .pane-item td.value,.panes tbody tr .pane-cell.value,.panes tbody tr td.value{flex:0;margin-left:20px;word-break:break-all;flex-basis:auto}.panes .pane-section .pane-item .pane-cell.value i.icon-legend,.panes .pane-section .pane-item td.value i.icon-legend,.panes .pane-section tr .pane-cell.value i.icon-legend,.panes .pane-section tr td.value i.icon-legend,.panes tbody .pane-item .pane-cell.value i.icon-legend,.panes tbody .pane-item td.value i.icon-legend,.panes tbody tr .pane-cell.value i.icon-legend,.panes tbody tr td.value i.icon-legend{font-size:10px;margin-right:10px}.panes .pane-section .pane-item .pane-cell.value i.icon-value,.panes .pane-section .pane-item td.value i.icon-value,.panes .pane-section tr .pane-cell.value i.icon-value,.panes .pane-section tr td.value i.icon-value,.panes tbody .pane-item .pane-cell.value i.icon-value,.panes tbody .pane-item td.value i.icon-value,.panes tbody tr .pane-cell.value i.icon-value,.panes tbody tr td.value i.icon-value{padding:2px 2px 1px;border-radius:2px;width:16px;text-align:center}.panes .pane-section .pane-item.title-item,.panes .pane-section tr.title-item,.panes tbody .pane-item.title-item,.panes tbody tr.title-item{border-bottom:1px solid #222}.panes .pane-section .pane-item.title-item td,.panes .pane-section tr.title-item td,.panes tbody .pane-item.title-item td,.panes tbody tr.title-item td{color:#027bffe6;font-size:16px;font-weight:700}.panes .pane-section .pane-item.title-item td i,.panes .pane-section tr.title-item td i,.panes tbody .pane-item.title-item td i,.panes tbody tr.title-item td i{margin-right:10px}.panes .pane-section .pane-item.title-item td .more,.panes .pane-section tr.title-item td .more,.panes tbody .pane-item.title-item td .more,.panes tbody tr.title-item td .more{flex:1;text-align:right;font-size:12px;color:#888;font-weight:400;font-style:italic}.panes .pane-section .pane-item.variable-item,.panes .pane-section tr.variable-item,.panes tbody .pane-item.variable-item,.panes tbody tr.variable-item{cursor:pointer}.panes .pane-section .pane-item.variable-item:hover,.panes .pane-section tr.variable-item:hover,.panes tbody .pane-item.variable-item:hover,.panes tbody tr.variable-item:hover{background-color:#027bff0d}.panes .pane-section .pane-item.variable-item:hover td,.panes .pane-section tr.variable-item:hover td,.panes tbody .pane-item.variable-item:hover td,.panes tbody tr.variable-item:hover td{font-weight:700;color:#fff}.panes .pane-section .pane-item.variable-item:hover td i.icon-legend,.panes .pane-section tr.variable-item:hover td i.icon-legend,.panes tbody .pane-item.variable-item:hover td i.icon-legend,.panes tbody tr.variable-item:hover td i.icon-legend{color:#fff}.panes .pane-section .pane-item.variable-item:hover td span,.panes .pane-section .pane-item.variable-item:hover td i.icon-value,.panes .pane-section tr.variable-item:hover td span,.panes .pane-section tr.variable-item:hover td i.icon-value,.panes tbody .pane-item.variable-item:hover td span,.panes tbody .pane-item.variable-item:hover td i.icon-value,.panes tbody tr.variable-item:hover td span,.panes tbody tr.variable-item:hover td i.icon-value{background-color:#ffffff4d;color:#fff}.panes .pane-section .pane-item.variable-item:hover td.description,.panes .pane-section tr.variable-item:hover td.description,.panes tbody .pane-item.variable-item:hover td.description,.panes tbody tr.variable-item:hover td.description{color:#027bff}.panes .pane-section .pane-item.highlighted:hover,.panes .pane-section .pane-item.highlighted,.panes .pane-section tr.highlighted:hover,.panes .pane-section tr.highlighted,.panes tbody .pane-item.highlighted:hover,.panes tbody .pane-item.highlighted,.panes tbody tr.highlighted:hover,.panes tbody tr.highlighted{background-color:#027bff}.panes .pane-section .pane-item.highlighted:hover td,.panes .pane-section .pane-item.highlighted td,.panes .pane-section tr.highlighted:hover td,.panes .pane-section tr.highlighted td,.panes tbody .pane-item.highlighted:hover td,.panes tbody .pane-item.highlighted td,.panes tbody tr.highlighted:hover td,.panes tbody tr.highlighted td{font-weight:700;color:#fff}.panes .pane-section .pane-item.highlighted:hover td i.icon-legend,.panes .pane-section .pane-item.highlighted td i.icon-legend,.panes .pane-section tr.highlighted:hover td i.icon-legend,.panes .pane-section tr.highlighted td i.icon-legend,.panes tbody .pane-item.highlighted:hover td i.icon-legend,.panes tbody .pane-item.highlighted td i.icon-legend,.panes tbody tr.highlighted:hover td i.icon-legend,.panes tbody tr.highlighted td i.icon-legend{color:#fff}.panes .pane-section .pane-item.highlighted:hover td span,.panes .pane-section .pane-item.highlighted:hover td i.icon-value,.panes .pane-section .pane-item.highlighted td span,.panes .pane-section .pane-item.highlighted td i.icon-value,.panes .pane-section tr.highlighted:hover td span,.panes .pane-section tr.highlighted:hover td i.icon-value,.panes .pane-section tr.highlighted td span,.panes .pane-section tr.highlighted td i.icon-value,.panes tbody .pane-item.highlighted:hover td span,.panes tbody .pane-item.highlighted:hover td i.icon-value,.panes tbody .pane-item.highlighted td span,.panes tbody .pane-item.highlighted td i.icon-value,.panes tbody tr.highlighted:hover td span,.panes tbody tr.highlighted:hover td i.icon-value,.panes tbody tr.highlighted td span,.panes tbody tr.highlighted td i.icon-value{background-color:#ffffff4d;color:#fff}.panes .pane-section .pane-item.highlighted:hover td.description,.panes .pane-section .pane-item.highlighted td.description,.panes .pane-section tr.highlighted:hover td.description,.panes .pane-section tr.highlighted td.description,.panes tbody .pane-item.highlighted:hover td.description,.panes tbody .pane-item.highlighted td.description,.panes tbody tr.highlighted:hover td.description,.panes tbody tr.highlighted td.description{color:#fff}.tiles{flex:1;display:flex;flex-direction:row;justify-content:flex-start;align-items:flex-start;align-self:stretch}.tiles .tiles-inner{display:flex;flex:1;flex-direction:column;flex-wrap:nowrap;justify-content:flex-start;align-items:flex-start;align-self:stretch;padding:2px}.tiles .tiles-inner .tile-item{display:flex;flex-direction:row;justify-content:flex-start;align-items:center;align-self:stretch;color:#fff;margin:1px;padding:15px 10px 15px 15px;border-radius:4px;border-bottom:1px solid transparent}.tiles .tiles-inner .tile-item:hover,.tiles .tiles-inner .tile-item.active{border-left:4px solid rgb(2,123,255);border-radius:4px;border-bottom:2px solid #171717;background:#222;color:#027bff}.tiles .tiles-inner .tile-item:hover:hover,.tiles .tiles-inner .tile-item.active:hover{opacity:1}.tiles .tiles-inner .tile-item:hover.disabled,.tiles .tiles-inner .tile-item.active.disabled{border-left-color:#444;color:#fff}.tiles .tiles-inner .tile-item:hover.starred,.tiles .tiles-inner .tile-item.active.starred{border-left-color:#e5a123;color:#e5a123}.tiles .tiles-inner .tile-item:hover.starred .tile-tail .head-icon i,.tiles .tiles-inner .tile-item.active.starred .tile-tail .head-icon i{opacity:1;color:#e5a123;font-size:8px}.tiles .tiles-inner .tile-item.starred .tile-tail .head-icon i{font-size:8px;color:#e5a123}.tiles .tiles-inner .tile-item.disabled .tile-body{opacity:.3}.tiles .tiles-inner .tile-item.disabled .tile-tail .head-icon i{color:#444;opacity:.4}.tiles .tiles-inner .tile-item .tile-tail{display:flex;flex-direction:row;justify-content:flex-end;align-items:center;align-self:stretch;margin-left:10px;min-width:10px}.tiles .tiles-inner .tile-item .tile-tail .head-icon{flex:1;display:flex;text-align:right;flex-direction:row;justify-content:center;align-items:center;align-self:stretch}.tiles .tiles-inner .tile-item .tile-tail .head-icon i{font-size:6px;display:flex}.tiles .tiles-inner .tile-item .tile-tail .status-icons{display:flex;flex-direction:row;justify-content:flex-end;align-items:center}.tiles .tiles-inner .tile-item .tile-tail .status-icons i{font-size:16px;margin-left:10px}.tiles .tiles-inner .tile-item .tile-body{flex:1;display:flex;flex-direction:row;justify-content:flex-start;align-items:center;font-size:15px;font-weight:400;letter-spacing:.8px;line-height:22px;margin:0;flex-wrap:nowrap}.tiles .tiles-inner .tile-item .tile-body i{font-size:8px;margin-right:5px}.tiles .tiles-inner .tile-item .tile-metrics{display:flex;flex-direction:row;justify-content:flex-end;align-items:center;margin:0}.tiles .tiles-inner .tile-item .tile-metrics .foot-span span,.tiles .tiles-inner .tile-item .tile-metrics .foot-span{opacity:.8;font-size:13px;font-family:Courier New}span.empty{background:#e5a1234d;color:#e5a123;text-transform:lowercase;border-radius:2px;padding:2px 4px;font-weight:700}.inner-empty{display:flex;flex:1;flex-direction:column;align-self:stretch;justify-content:center;align-items:center}.inner-empty i{font-size:90px;opacity:.3;text-shadow:0 -1px #333,0 0px .5px #444}.toggle{position:relative;display:flex;flex-direction:row;justify-content:flex-start;align-items:center}.toggle input{display:none}.toggle input:checked+label{background:#027bff;border:1px solid rgba(255,255,255,.1);box-shadow:0 2px 2px #222 inset}.toggle input:checked+label:after{content:"";display:block;border-radius:50%;margin-left:21px;width:18px;height:18px;transition:.2s;background:#9bcbff;box-shadow:0 2px #0063ce}.toggle label{width:44px;height:26px;border-radius:15px;background:#222;cursor:pointer;border:1px solid rgba(255,255,255,.1);box-shadow:0 2px 2px #111 inset}.toggle label:after{content:"";display:block;border-radius:50%;width:18px;height:18px;margin:3px;background:#777;box-shadow:0 2px #555555e6;transition:.2s}.badge-inset{display:inline;color:#aaa;font-size:12px;margin-left:5px;background:#000;border:1px solid #333;border-radius:4px;padding:3px 7px}.form-holder{display:flex;flex-direction:column;justify-content:flex-start;align-items:flex-start;align-self:stretch}.form-holder form{max-width:434px}form{display:flex;flex-direction:column;justify-content:flex-start;align-items:flex-start;align-self:stretch}form .alert{padding:8px 15px;font-size:14px;margin:0 0 25px}.from-group-condition{flex-direction:column;align-self:stretch;justify-content:flex-start;align-items:flex-start;display:flex}.form-group{display:flex;flex-direction:column;justify-content:flex-start;align-items:flex-start;align-self:stretch;width:100%;flex:1;margin-bottom:20px}.form-group label{flex:1;font-size:12px;line-height:18px;display:flex;flex-direction:row;justify-content:flex-start;align-items:center;align-self:stretch;color:#666}.form-group label.btn-upload{color:#fff;font-size:14px;flex:0;flex-basis:auto;margin-top:5px}.form-group label.btn-upload input[type=file]{display:none}.form-group label.btn-upload input[type=text]{margin-bottom:2px;margin-left:10px}.form-group label.btn-upload span.btn{padding-right:20px}.form-group label.btn-upload i{margin-left:3px;margin-right:10px}.form-group .checkbox-group,.form-group .radio-group{display:flex;flex-direction:row;justify-content:flex-start;align-items:center}.form-group .checkbox-group input,.form-group .radio-group input{display:none}.form-group .checkbox-group label,.form-group .radio-group label{margin:0 5px 0 0!important;justify-content:center!important;text-align:center}.form-group .widget{margin-top:10px;align-self:stretch;display:flex;flex-direction:row}.form-group .widget.vertical{flex-direction:column}.form-group .widget.vertical select,.form-group .widget.vertical input{align-self:stretch}.form-group .widget.vertical select:first-child,.form-group .widget.vertical input:first-child{margin-bottom:10px}.form-group .widget input+.btn+.btn{margin-left:10px}.form-group .widget.widget-unit select,.form-group .widget.widget-unit input{flex-grow:0;background:none;box-shadow:none;border:none;border-bottom:1px solid #333;border-radius:0;max-width:80px;padding-left:0;color:#fff;text-align:center}.form-group .widget.widget-unit span{font-size:12px;display:flex;flex-direction:row;justify-content:flex-start;align-items:center;margin-left:5px;color:#555}.form-group .widget select.size-m,.form-group .widget input.size-m{max-width:122px}.form-group .widget select.color-picker,.form-group .widget input.color-picker{max-width:125px}.form-group .widget select.chars-4,.form-group .widget input.chars-4{max-width:50px}.form-group .widget select.chars-3,.form-group .widget input.chars-3{max-width:40px}.form-group .widget select.chars-2,.form-group .widget input.chars-2{max-width:20px}.form-group .widget select.chars-1,.form-group .widget input.chars-1{max-width:15px}.form-group .widget div{color:#ffffffb3;font-size:14px}.form-group .widget select,.form-group .widget input,.form-group .widget textarea{outline:none;padding:8px 0 5px 8px;border-radius:2px;border:1px solid rgba(255,255,255,.05);flex:1;background:#555;box-shadow:0 2px 1px #444,0 4px 2px #333 inset;color:#ddd;font-size:14px}.form-group .widget select.input-naked,.form-group .widget select.disabled,.form-group .widget select[disabled],.form-group .widget input.input-naked,.form-group .widget input.disabled,.form-group .widget input[disabled],.form-group .widget textarea.input-naked,.form-group .widget textarea.disabled,.form-group .widget textarea[disabled]{color:#555;background:none;box-shadow:none;border-radius:0}.form-group .widget select.input-naked,.form-group .widget input.input-naked,.form-group .widget textarea.input-naked{color:#bbb}.form-group .widget select.disabled,.form-group .widget select[disabled],.form-group .widget input.disabled,.form-group .widget input[disabled],.form-group .widget textarea.disabled,.form-group .widget textarea[disabled]{background:#000;border-radius:4px}.form-group.tab-select{border-bottom:1px solid #444;display:flex;flex-direction:row;position:relative;height:48px;padding:48px 0 0;flex:0;flex-basis:auto}.form-group.tab-select .widget{height:49px;margin-top:0;display:flex;flex-direction:row;justify-content:flex-start;align-items:center;position:absolute;top:0;left:0;border-bottom:2px solid rgb(2,123,255);color:#027bff}.form-group.tab-select .widget select{border:none;background:none;box-shadow:none;padding:10px 35px 10px 10px;margin:0;color:inherit;appearance:none;-moz-appearance:none;-webkit-appearance:none;text-align:left;font-weight:700;cursor:pointer;border-radius:4px 4px 0 0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:200px;z-index:2}.form-group.tab-select .widget i{margin-left:10px;margin-right:0}.form-group.tab-select .widget i.triangle{margin-top:-4px;margin-left:0;position:absolute;right:10px}.form-group.form-group-horizontal{margin:10px 0 20px;flex-direction:row;justify-content:flex-start;align-items:center}.form-group.form-group-horizontal .widget{margin:0;display:flex;flex-direction:row;justify-content:flex-start;align-items:center}.actions{display:flex;flex-direction:row;justify-content:flex-end;align-items:center;align-self:stretch;margin:20px 0 0}.actions.actions-intermediate{margin:0}.actions button{margin-left:25px}.actions.actions-left{justify-content:flex-start}.actions.actions-left .btn{margin-left:0;margin-right:25px}.actions.actions-right{justify-content:flex-end}.actions.actions-right .btn{margin-left:10px;margin-right:0}.actions.actions-center{justify-content:center}.actions.actions-center .btn{margin-left:0;margin-right:0}.view-content-list main .main-container .page-content .inner{padding-bottom:10px}.view-content-list main .main-container .content-object-input{margin-bottom:6px}.view-content-list.dragover main .main-container .inner .dropzone{border-radius:4px;background:#ffffff1a;border:1px dashed rgba(255,255,255,.5)}.view-content-edit main .main-container .top-content h3{color:#fff;padding:10px 10px 10px 0;font-size:16px;align-self:stretch;flex:1;text-align:right}.view-content-edit main .main-container .top-content h3 span{border-width:1px;border-style:solid;border-radius:4px;padding:4px 10px;margin-left:5px}.view-content-edit main .main-container .top-content h3 i{font-size:16px}.view-content-edit main .main-container .bottom-content .page-content{flex:1}.view-content-edit main .main-container .bottom-content .page-content .form-holder{margin:20px 20px 20px 10px;flex:1}.view-content-edit main .main-container .bottom-content .page-panel.right-panel{flex:2;align-self:stretch;display:flex;flex-direction:column;overflow:auto;justify-content:flex-start;align-items:center;padding:20px}.view-content-edit main .main-container .bottom-content .page-panel.right-panel .iframe-wrapper{display:flex;flex-direction:column;width:100%;position:relative;padding-top:56.25%;overflow:hidden;border-radius:4px;outline:4px solid rgba(255,255,255,.1)}.view-content-edit main .main-container .bottom-content .page-panel.right-panel .iframe-wrapper iframe{position:absolute;top:0;left:0;width:100%;height:100%;border:none}.view-content-edit.view-content-edit-composition main .main-container .page-panel.left-panel{flex:1}.view-content-edit.view-content-edit-composition main .main-container .page-panel.left-panel .form-holder{margin:20px 20px 20px 10px;flex:1}.view-content-edit.view-content-edit-composition main .main-container .page-content{flex:2}.view-content-edit.view-content-edit-composition main .main-container .page-panel.right-panel{flex:1}.view-content-edit.view-content-edit-composition main .main-container h3.main{font-size:16px;font-weight:500;color:#ddd;text-decoration:none;margin-top:5px;border-bottom:1px solid #222;margin-bottom:20px;padding-bottom:10px;align-self:stretch}.view-content-edit.view-content-edit-composition main .main-container .toolbar{margin-bottom:20px}.view-content-edit.view-content-edit-composition main .main-container .presets{display:flex;flex-direction:row;justify-content:flex-start;align-items:center;margin-bottom:20px}.view-content-edit.view-content-edit-composition main .main-container .presets h4{margin-right:5px;font-weight:400;font-size:14px;text-decoration:underline}.view-content-edit.view-content-edit-composition main .main-container .presets button:focus,.view-content-edit.view-content-edit-composition main .main-container .presets button{padding:3px 15px;margin:0 3px;font-size:12px;font-weight:400;min-height:initial;border:1px solid #333}.view-content-edit.view-content-edit-composition main .main-container .screen-holder{display:flex;flex-direction:column;width:100%;position:relative;padding-top:56.25%;overflow:hidden;border-radius:4px;outline:4px solid rgba(255,255,255,.1)}.view-content-edit.view-content-edit-composition main .main-container .screen-holder .screen{background-color:#ddd;position:absolute;top:0;left:0;width:100%;height:100%;border:none}.view-content-edit.view-content-edit-composition main .main-container .screen-holder .screen .element{position:absolute!important;background-color:#eee;outline:1px solid #CCC;text-align:center;box-sizing:border-box;display:flex;flex-direction:column;justify-content:center;align-items:center}.view-content-edit.view-content-edit-composition main .main-container .screen-holder .screen .element.focused{border:none;outline:2px solid rgb(2,123,255);z-index:89!important}.view-content-edit.view-content-edit-composition main .main-container .screen-holder .screen .element.focused .ui-resizable-handle{display:block}.view-content-edit.view-content-edit-composition main .main-container .screen-holder .screen .element i{font-size:20px;color:#ccc}.view-content-edit.view-content-edit-composition main .main-container .screen-holder .screen .element i.fa-cog{text-shadow:0 -2px #BBB,0 0px 2px #BBB}.view-content-edit.view-content-edit-composition main .main-container .screen-holder .screen .element i.gscaleF{color:#000!important}.view-content-edit.view-content-edit-composition main .main-container .screen-holder .screen .element .rotate-handle{width:10px;height:10px;background-color:red;position:absolute;top:50%;right:-15px;cursor:pointer;transform:translateY(-50%)}.view-content-edit.view-content-edit-composition main .main-container .screen-holder .screen .element .ui-resizable-handle{background:#aaa;border:1px solid #555;width:10px;height:10px;z-index:90;display:none;position:absolute}.view-content-edit.view-content-edit-composition main .main-container .screen-holder .screen .element .ui-resizable-handle.ui-resizable-n{cursor:n-resize;top:-5px;left:50%;margin-left:-5px}.view-content-edit.view-content-edit-composition main .main-container .screen-holder .screen .element .ui-resizable-handle.ui-resizable-s{cursor:s-resize;bottom:-5px;left:50%;margin-left:-5px}.view-content-edit.view-content-edit-composition main .main-container .screen-holder .screen .element .ui-resizable-handle.ui-resizable-w{cursor:w-resize;left:-5px;top:50%;margin-top:-5px}.view-content-edit.view-content-edit-composition main .main-container .screen-holder .screen .element .ui-resizable-handle.ui-resizable-e{cursor:e-resize;right:-5px;top:50%;margin-top:-5px}.view-content-edit.view-content-edit-composition main .main-container .screen-holder .screen .element .ui-resizable-handle.ui-resizable-nw{cursor:nw-resize;top:-5px;left:-5px}.view-content-edit.view-content-edit-composition main .main-container .screen-holder .screen .element .ui-resizable-handle.ui-resizable-ne{cursor:ne-resize;top:-5px;right:-5px}.view-content-edit.view-content-edit-composition main .main-container .screen-holder .screen .element .ui-resizable-handle.ui-resizable-sw{cursor:sw-resize;bottom:-5px;left:-5px}.view-content-edit.view-content-edit-composition main .main-container .screen-holder .screen .element .ui-resizable-handle.ui-resizable-se{cursor:se-resize;bottom:-5px;right:-5px}.view-content-edit.view-content-edit-composition main .main-container .elements-holder{align-self:stretch}.view-content-edit.view-content-edit-composition main .main-container .elements-holder h3{font-size:16px;font-weight:500;color:#ddd;text-decoration:none;margin:0 0 20px}.view-content-edit.view-content-edit-composition main .main-container .elements-holder h3.divide{border-top:1px solid #222;margin-top:10px;padding-top:20px}.view-content-edit.view-content-edit-composition main .main-container .elements-holder .form-elements-list{padding:10px;background:#222;border-radius:4px;display:flex;flex-direction:column;justify-content:flex-start;align-self:flex-start}.view-content-edit.view-content-edit-composition main .main-container .elements-holder .form-elements-list .element-list-item{display:flex;flex-direction:row;justify-content:flex-start;align-items:center}.view-content-edit.view-content-edit-composition main .main-container .elements-holder .form-elements-list .element-list-item>i{color:#eee;margin:0 10px 0 0;cursor:move;width:30px;text-align:center}.view-content-edit.view-content-edit-composition main .main-container .elements-holder .form-elements-list .element-list-item .inner:hover,.view-content-edit.view-content-edit-composition main .main-container .elements-holder .form-elements-list .element-list-item.focused .inner{background-color:#027bff;color:#fff;font-weight:700}.view-content-edit.view-content-edit-composition main .main-container .elements-holder .form-elements-list .element-list-item .inner:hover button.btn-naked,.view-content-edit.view-content-edit-composition main .main-container .elements-holder .form-elements-list .element-list-item.focused .inner button.btn-naked{color:#fff}.view-content-edit.view-content-edit-composition main .main-container .elements-holder .form-elements-list .element-list-item .inner{cursor:pointer;padding:5px 5px 5px 10px;margin-bottom:5px;background:#eee;border-radius:4px;display:flex;flex-direction:row;justify-content:flex-start;align-items:center;align-self:stretch;color:#222;min-height:46px;flex:1}.view-content-edit.view-content-edit-composition main .main-container .elements-holder .form-elements-list .element-list-item .inner label{flex:1;cursor:pointer;text-overflow:ellipsis;white-space:nowrap;max-width:219px;overflow:hidden}.view-content-edit.view-content-edit-composition main .main-container .elements-holder .form-elements-list .element-list-item .inner button{display:none;margin-left:5px}.view-content-edit.view-content-edit-composition main .main-container .elements-holder .form-elements-list .element-list-item .inner button.btn-naked{color:#555}.view-content-edit.view-content-edit-composition main .main-container .elements-holder .form-elements-list .element-list-item .inner:hover label{max-width:150px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.view-content-edit.view-content-edit-composition main .main-container .elements-holder .form-elements-list .element-list-item .inner:hover button{display:block}.view-content-edit.view-content-edit-composition main .main-container .form-element-properties{flex:1;align-self:stretch}.view-content-edit.view-content-edit-composition main .main-container .form-element-properties form{display:flex;flex-direction:column}.view-content-edit.view-content-edit-composition main .main-container .form-element-properties form h3{font-size:16px;font-weight:500;color:#ddd;text-decoration:none;border-bottom:1px solid #222;margin-bottom:20px;padding-bottom:10px;align-self:stretch}.view-content-edit.view-content-edit-composition main .main-container .form-element-properties form .divide{margin-top:30px;margin-bottom:10px}.view-content-edit.view-content-edit-composition main .main-container .form-element-properties form .form-group{flex-direction:row;justify-content:flex-start;align-items:center;display:flex}.view-content-edit.view-content-edit-composition main .main-container .form-element-properties form .form-group label{flex-grow:1;flex-direction:row;justify-content:flex-start;align-items:center;display:flex;font-weight:700;margin-right:10px}.view-content-edit.view-content-edit-composition main .main-container .form-element-properties form .form-group .widget{flex-grow:1;flex-direction:row;justify-content:flex-start;align-items:center;display:flex;margin:0}.view-content-edit.view-content-edit-composition main .main-container .form-element-properties form .form-group .widget input{flex:1;margin:0}.view-content-edit.view-content-edit-composition main .main-container .form-element-properties form .form-group .widget input[disabled]{padding:8px 0 5px 8px;border:1px solid rgba(255,255,255,.05)}.view-content-edit.view-content-edit-text main .main-container .page-panel.left-panel{flex:1}.view-content-edit.view-content-edit-text main .main-container .page-panel.left-panel .form-holder{margin:20px 20px 20px 10px;flex:1}.view-content-edit.view-content-edit-text main .main-container .page-content{flex:2}.view-content-edit.view-content-edit-text main .main-container .page-panel.right-panel{flex:1}.view-content-edit.view-content-edit-text main .main-container h3.main{font-size:16px;font-weight:500;color:#ddd;text-decoration:none;margin-top:5px;border-bottom:1px solid #222;margin-bottom:20px;padding-bottom:10px;align-self:stretch}.view-content-edit.view-content-edit-text main .main-container .toolbar{margin-bottom:20px}.view-content-edit.view-content-edit-text main .main-container .screen-holder{display:flex;flex-direction:column;width:100%;position:relative;padding-top:56.25%;overflow:hidden;border-radius:4px;outline:4px solid rgba(255,255,255,.1);background:repeating-conic-gradient(#eee,#eee 25%,#fff 0%,#fff 50%) 50%/20px 20px}.view-content-edit.view-content-edit-text main .main-container .screen-holder .screen{position:absolute;top:0;left:0;width:100%;height:100%;border:none;display:flex}.view-content-edit.view-content-edit-text main .main-container .screen-holder .screen .text{display:flex;justify-content:center;align-items:center;flex-direction:row;flex:1;align-self:stretch;text-align:center;max-width:100%;word-break:break-all}.view-content-edit.view-content-edit-text main .main-container .screen-holder .screen .text marquee{display:flex;align-items:center;justify-content:flex-start;flex-direction:row;flex:1;height:100%;width:100%}.view-content-edit.view-content-edit-text main .main-container .form-element-properties{flex:1;align-self:stretch}.view-content-edit.view-content-edit-text main .main-container .form-element-properties form{display:flex;flex-direction:column}.view-content-edit.view-content-edit-text main .main-container .form-element-properties form h3{font-size:16px;font-weight:500;color:#ddd;text-decoration:none;border-bottom:1px solid #222;margin-bottom:20px;padding-bottom:10px;align-self:stretch}.view-content-edit.view-content-edit-text main .main-container .form-element-properties form .divide{margin-top:30px;margin-bottom:10px}.view-content-edit.view-content-edit-text main .main-container .form-element-properties form .bar{width:100%;height:1px;background:#333;margin-bottom:20px}.view-content-edit.view-content-edit-text main .main-container .form-element-properties form .form-group label{flex-grow:1;flex-direction:row;justify-content:flex-start;align-items:center;display:flex;font-weight:700;margin-right:10px;margin-bottom:5px}.view-content-edit.view-content-edit-text main .main-container .form-element-properties form .form-group .widget{flex-grow:1;flex-direction:row;justify-content:flex-start;align-items:center;display:flex;margin:0}.view-content-edit.view-content-edit-text main .main-container .form-element-properties form .form-group .widget input{flex:1;margin:0}.view-content-edit.view-content-edit-text main .main-container .form-element-properties form .form-group .widget input[disabled]{padding:8px 0 5px 8px;border:1px solid rgba(255,255,255,.05)}.view-logs-list main .main-container .bottom-content .page-content .inner{padding-top:8px;padding-bottom:8px}.view-logs-list main .main-container .bottom-content .page-content .logs{flex:1;display:flex;flex-direction:column;align-self:stretch}.view-logs-list main .main-container .bottom-content .page-content .logs pre{flex:1;background:#000000e6;border:1px solid rgba(85,85,85,.5);border-radius:4px;font-family:monospace;color:#f2f2f2;padding:20px;overflow:auto;align-self:stretch}.view-node-player-edit main .main-container .bottom-content .page-content{flex:1}.view-node-player-edit main .main-container .bottom-content .page-content .form-holder{margin:20px 20px 20px 10px}.view-player-group-list main .main-container .players-holder ul.players{display:flex;flex-direction:column;justify-content:flex-start;align-items:flex-start;align-self:stretch;margin:10px 0 0;border:1px dashed #222;border-radius:4px;padding:10px}.view-player-group-list main .main-container .players-holder ul.players li.player-item{display:flex;flex-direction:row;justify-content:flex-start;align-items:center;align-self:stretch;margin:0 0 2px}.view-player-group-list main .main-container .players-holder ul.players li.player-item .head{display:flex;flex-direction:column;justify-content:center;align-items:center;color:#999;font-size:10px;padding:10px;cursor:default}.view-player-group-list main .main-container .players-holder ul.players li.player-item:hover .infos .title{color:#fff}.view-player-group-list main .main-container .players-holder ul.players li.player-item .infos{display:flex;flex-direction:row;justify-content:flex-start;align-items:center;color:#aaa;font-size:12px;margin-right:5px;flex:1;max-width:180px;background:#000;border:1px solid #333;border-radius:4px;padding:3px 7px}.view-player-group-list main .main-container .players-holder ul.players li.player-item .infos .title{font-size:13px;color:#aaa;display:block;word-break:break-all;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%}.view-player-group-list main .main-container .players-holder ul.players li.player-item .infos .type{display:flex;flex-direction:row;justify-content:flex-start;align-items:center;color:#aaa;font-size:12px;margin-right:5px}.view-player-group-list main .main-container .players-holder ul.players li.player-item .body{display:block;flex-direction:row;justify-content:flex-start;align-items:center;margin:0 10px;background:#1b1b1b;padding:10px;align-self:stretch;flex:1;border-radius:4px;color:#ccc;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:360px;font-size:12px}.view-player-group-list main .main-container .players-holder ul.players li.player-item .body span{opacity:.5;margin-right:7px;font-size:10px}.view-player-group-list main .main-container .players-holder ul.players li.player-item .tail{display:flex;flex-direction:row;justify-content:center;align-items:center}.view-player-group-list main .main-container .players-holder ul.players li.player-item .tail a{color:#fff}.view-playlist-list main .main-container p{font-size:12px;line-height:18px;display:flex;margin-bottom:5px;flex-direction:row;justify-content:flex-start;align-items:center;align-self:stretch;color:#666}.view-playlist-list main .main-container .modal-slide h2{font-size:20px}.view-playlist-list main .main-container .modal-slide input[disabled]{color:#aaa}.view-playlist-list main .main-container .modal-slide .slide-schedule-group select,.view-playlist-list main .main-container .modal-slide .slide-schedule-end-group select{margin-right:5px}.view-playlist-list main .main-container .modal-slide .slide-schedule-group select,.view-playlist-list main .main-container .modal-slide .slide-schedule-group input,.view-playlist-list main .main-container .modal-slide .slide-schedule-end-group select,.view-playlist-list main .main-container .modal-slide .slide-schedule-end-group input{font-size:12px;max-width:50%}.view-playlist-list main .main-container .modal-slide .slide-schedule-group select.datetimepicker,.view-playlist-list main .main-container .modal-slide .slide-schedule-group input.datetimepicker,.view-playlist-list main .main-container .modal-slide .slide-schedule-end-group select.datetimepicker,.view-playlist-list main .main-container .modal-slide .slide-schedule-end-group input.datetimepicker{margin-left:5px;padding-left:0}.view-playlist-list main .main-container .bottom-content .page-content{flex:1}.view-playlist-list main .main-container .bottom-content .page-content.with-right-panel{flex:.5}.view-playlist-list main .main-container .bottom-content .page-content .inner{padding:0}.view-playlist-list main .main-container .bottom-content .page-content .inner h3{font-size:16px;font-weight:500;color:#ddd;text-decoration:none;margin:0 0 20px}.view-playlist-list main .main-container .bottom-content .page-content .inner .playlist-holder{margin:20px 20px 20px 10px;flex:1}.view-playlist-list main .main-container .bottom-content .page-content .inner .playlist-holder .form-holder{margin:20px 0 0}.view-playlist-list main .main-container .bottom-content .page-content .inner .playlist-holder .form-holder form{max-width:initial}.view-playlist-list main .main-container .bottom-content .page-content .inner .playlist-holder .form-holder .form-group{flex-grow:0;margin-bottom:5px}.view-playlist-list main .main-container .bottom-content .page-content .inner .playlist-holder .preview-holder{position:relative}.view-playlist-list main .main-container .bottom-content .page-content .inner .playlist-holder .preview-holder .form-group{flex-grow:0;margin-bottom:0}.view-playlist-list main .main-container .bottom-content .page-content .inner .playlist-holder .preview-holder .hover-only{display:none}.view-playlist-list main .main-container .bottom-content .page-content .inner .playlist-holder .preview-holder:hover .hover-only{display:flex;position:absolute}.view-playlist-list main .main-container .bottom-content .page-content .inner .playlist-holder .preview-holder:hover .hover-only:hover{background:#ccc}.view-playlist-list main .main-container .bottom-content .page-content .inner .playlist-holder h4{font-size:14px;display:flex;flex-direction:row;justify-content:flex-start;align-items:center;align-self:stretch;color:#fff;padding-bottom:10px;text-decoration:none}.view-playlist-list main .main-container .bottom-content .page-content .inner .playlist-holder h4.divide{border-top:1px solid #222;margin-top:20px;padding-top:20px}.view-playlist-list main .main-container .bottom-content .page-content .inner .playlist-holder .qrcode-pic{margin-top:10px}.view-playlist-list main .main-container .bottom-content .page-content .inner .playlist-holder .qrcode-pic img{border:1px dashed #555;padding:5px;border-radius:4px}.view-playlist-list main .main-container .bottom-content .page-content .inner .playlist-holder .preview{background:#000;border:1px solid rgba(255,255,255,.3);border-radius:4px;justify-content:center;align-items:center;align-self:stretch;display:flex;margin:10px 0 20px;height:300px}.view-playlist-list main .main-container .bottom-content .page-content .inner .playlist-holder .preview iframe{flex:1;align-self:stretch}.view-playlist-list main .main-container .bottom-content .page-content .inner .slides-holder{align-self:stretch;border-right:1px solid #222;margin:20px 10px 20px 20px;padding-right:20px;flex:1.3}.view-playlist-list main .main-container .bottom-content .page-panel.left-panel{flex:.3;max-width:initial;justify-content:center;align-items:center;display:flex}.view-player-group-list main .main-container p{font-size:12px;line-height:18px;display:flex;margin-bottom:5px;flex-direction:row;justify-content:flex-start;align-items:center;align-self:stretch;color:#666}.view-player-group-list main .main-container .bottom-content .page-content{flex:1}.view-player-group-list main .main-container .bottom-content .page-content .inner{padding:0}.view-player-group-list main .main-container .bottom-content .page-content .inner h3{font-size:16px;font-weight:500;color:#ddd;text-decoration:none;margin:0 0 20px}.view-player-group-list main .main-container .bottom-content .page-content .inner .node-player-group-holder{margin:20px 20px 20px 10px;flex:1}.view-player-group-list main .main-container .bottom-content .page-content .inner .node-player-group-holder .form-holder{margin:20px 0 0}.view-player-group-list main .main-container .bottom-content .page-content .inner .node-player-group-holder .form-holder form{max-width:initial}.view-player-group-list main .main-container .bottom-content .page-content .inner .node-player-group-holder .form-holder .form-group{flex-grow:0;margin-bottom:15px}.view-player-group-list main .main-container .bottom-content .page-content .inner .node-player-group-holder .preview-holder{position:relative}.view-player-group-list main .main-container .bottom-content .page-content .inner .node-player-group-holder .preview-holder .form-group{flex-grow:0;margin-bottom:0}.view-player-group-list main .main-container .bottom-content .page-content .inner .node-player-group-holder .preview-holder .hover-only{display:none}.view-player-group-list main .main-container .bottom-content .page-content .inner .node-player-group-holder .preview-holder:hover .hover-only{display:flex;position:absolute}.view-player-group-list main .main-container .bottom-content .page-content .inner .node-player-group-holder .preview-holder:hover .hover-only:hover{background:#ccc}.view-player-group-list main .main-container .bottom-content .page-content .inner .node-player-group-holder h4{font-size:14px;display:flex;flex-direction:row;justify-content:flex-start;align-items:center;align-self:stretch;color:#fff;padding-bottom:10px;text-decoration:none}.view-player-group-list main .main-container .bottom-content .page-content .inner .node-player-group-holder h4.divide{border-top:1px solid #222;margin-top:20px;padding-top:20px}.view-player-group-list main .main-container .bottom-content .page-content .inner .node-player-group-holder .preview{background:#000;border:1px solid rgba(255,255,255,.3);border-radius:4px;justify-content:center;align-items:center;align-self:stretch;display:flex;margin:10px 0 20px;height:300px}.view-player-group-list main .main-container .bottom-content .page-content .inner .node-player-group-holder .preview iframe{flex:1;align-self:stretch}.view-player-group-list main .main-container .bottom-content .page-content .inner .players-holder{align-self:stretch;border-right:1px solid #222;margin:20px 10px 20px 20px;padding-right:20px;flex:1.3}.view-player-group-list main .main-container .bottom-content .page-panel.left-panel{flex:.3;max-width:initial;justify-content:center;align-items:center;display:flex}.view-playlist-list main .main-container .page-content .inner h3.divide{margin-top:50px}.view-playlist-list main .main-container .slides-holder ul.slides{display:flex;flex-direction:column;justify-content:flex-start;align-items:flex-start;align-self:stretch;margin:10px 0 0;border:1px dashed #222;border-radius:4px;padding:10px}.view-playlist-list main .main-container .slides-holder ul.slides li.slide-item{display:flex;flex-direction:row;justify-content:flex-start;align-items:center;align-self:stretch;margin:0 0 2px}.view-playlist-list main .main-container .slides-holder ul.slides li.slide-item.disabled .infos .title{color:#333}.view-playlist-list main .main-container .slides-holder ul.slides li.slide-item.disabled .infos .type i{color:#333!important}.view-playlist-list main .main-container .slides-holder ul.slides li.slide-item.disabled .body{opacity:0}.view-playlist-list main .main-container .slides-holder ul.slides li.slide-item .sort{display:flex;flex-direction:column;justify-content:center;align-items:center}.view-playlist-list main .main-container .slides-holder ul.slides li.slide-item .sort a{color:#999;font-size:10px;padding:10px;cursor:move}.view-playlist-list main .main-container .slides-holder ul.slides li.slide-item .sort a:hover{color:#027bff}.view-playlist-list main .main-container .slides-holder ul.slides li.slide-item .infos{display:flex;flex-direction:row;justify-content:flex-start;align-items:center;color:#aaa;font-size:12px;margin-right:5px;flex:1;max-width:120px;background:#000;border:1px solid #333;border-radius:4px;padding:3px 7px}.view-playlist-list main .main-container .slides-holder ul.slides li.slide-item .infos:hover .title{color:#fff}.view-playlist-list main .main-container .slides-holder ul.slides li.slide-item .infos .title{display:block;word-break:break-all;font-size:13px;color:#aaa;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%}.view-playlist-list main .main-container .slides-holder ul.slides li.slide-item .infos .type{display:flex;flex-direction:row;justify-content:flex-start;align-items:center;color:#aaa;font-size:12px;margin-right:5px}.view-playlist-list main .main-container .slides-holder ul.slides li.slide-item .body{display:flex;flex-direction:row;justify-content:flex-start;align-items:center;margin:0 10px;background:#1b1b1b;padding:10px;align-self:stretch;flex:1;border-radius:4px;font-size:13px;color:#fff}.view-playlist-list main .main-container .slides-holder ul.slides li.slide-item .body .range{display:flex;flex-direction:column;justify-content:flex-start;align-items:flex-start;flex:1;max-width:315px;overflow-x:auto;white-space:nowrap}.view-playlist-list main .main-container .slides-holder ul.slides li.slide-item .body .range .start{display:flex;flex-direction:row;justify-content:flex-start;align-items:center;margin-bottom:8px}.view-playlist-list main .main-container .slides-holder ul.slides li.slide-item .body .range .end{display:flex;flex-direction:row;justify-content:flex-start;align-items:center}.view-playlist-list main .main-container .slides-holder ul.slides li.slide-item .body .range .start .prefix,.view-playlist-list main .main-container .slides-holder ul.slides li.slide-item .body .range .end .prefix{margin-left:5px;margin-right:5px;font-size:12px;color:#ddd}.view-playlist-list main .main-container .slides-holder ul.slides li.slide-item .body .range .start .cron-description,.view-playlist-list main .main-container .slides-holder ul.slides li.slide-item .body .range .end .cron-description{display:block;word-break:break-all;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%;margin-left:5px;font-size:10px;opacity:.5}.view-playlist-list main .main-container .slides-holder ul.slides li.slide-item .tail{display:flex;flex-direction:row;justify-content:center;align-items:center}.view-playlist-list main .main-container .slides-holder ul.slides li.slide-item .tail a{color:#fff}.view-plugins-list main .main-container .bottom-content .page-content .inner{padding:10px}.view-settings-list main .main-container .bottom-content .page-content .inner{padding:10px}.view-sysinfo-list main .main-container .bottom-content .page-content .inner{padding:10px}.view-sysinfo-list .reboot{color:#ccc}.view-login main .main-container{position:relative}.view-login main .main-container .alert{position:absolute;top:0;left:0;right:0}.view-login main .main-container .login-content{display:flex;flex:1;flex-direction:column;justify-content:center;align-items:center}.view-login main .main-container .login-content .form-holder{width:400px;display:flex;justify-content:center;align-items:center;align-self:stretch;margin-left:auto;margin-right:auto}.view-login main .main-container .login-content .form-holder .card{display:flex;justify-content:center;align-items:center;align-self:stretch;border-radius:6px;padding:50px;color:#333}.view-login main .main-container .login-content .form-holder .card form{padding:0;flex:1;display:flex;justify-content:center;align-items:center;align-self:stretch}.view-login main .main-container .login-content .form-holder .card form .actions{margin-top:10px}.view-login main .main-container .login-content .form-holder .card form .actions .btn{padding-left:20px;padding-right:20px}.view-auth-user-list main .main-container .bottom-content .page-content .inner{padding:10px}.view-auth-user-list main .main-container .bottom-content .page-content .inner .tile-item.disabled .tile-body{opacity:.3;text-decoration-line:line-through}.view-auth-user-list main .main-container .bottom-content .page-content .inner .tile-item .tile-tail .btn{margin-left:10px}.view-auth-user-list main .main-container .bottom-content .page-content .inner .tile-item .tile-tail .btn:first-child{margin-left:0}.view-auth-user-list main .main-container .bottom-content .page-content .inner .tile-item .tile-metrics{flex:1;flex-direction:row;justify-content:flex-start;align-items:center}.view-auth-user-list main .main-container .bottom-content .page-content .inner .tile-item .tile-metrics .widget,.view-auth-user-list main .main-container .bottom-content .page-content .inner .tile-item .tile-metrics .form-group{margin:0}.view-auth-user-list main .main-container .bottom-content .page-content .inner .tile-item .tile-metrics label{flex-grow:0}.view-auth-user-list main .main-container .bottom-content .page-content .inner .tile-item .tile-metrics input{margin-left:10px;margin-right:10px;max-width:320px} diff --git a/data/www/css/compiled/main-light-mode.css b/data/www/css/compiled/main-light-mode.css index c5ead78..2ac28f2 100644 --- a/data/www/css/compiled/main-light-mode.css +++ b/data/www/css/compiled/main-light-mode.css @@ -1 +1 @@ -.warning{color:#e56723!important}.bg-warning{background-color:#e56723!important}.border-warning{border-color:#e56723!important}.info{color:#027bff!important}.bg-info{background-color:#027bff!important}.border-info{border-color:#027bff!important}.info-alt{color:#075cb7!important}.bg-info-alt{background-color:#075cb7!important}.border-info-alt{border-color:#075cb7!important}.success{color:#11a948!important}.bg-success{background-color:#11a948!important}.border-success{border-color:#11a948!important}.success-alt{color:#11a948!important}.bg-success-alt{background-color:#11a948!important}.border-success-alt{border-color:#11a948!important}.error{color:#ef0e5d!important}.bg-error{background-color:#ef0e5d!important}.border-error{border-color:#ef0e5d!important}.error-alt{color:#c20941!important}.bg-error-alt{background-color:#c20941!important}.border-error-alt{border-color:#c20941!important}.danger{color:#ef0e5d!important}.bg-danger{background-color:#ef0e5d!important}.border-danger{border-color:#ef0e5d!important}.danger-alt{color:#c20941!important}.bg-danger-alt{background-color:#c20941!important}.border-danger-alt{border-color:#c20941!important}.purple{color:#bc48ff!important}.bg-purple{background-color:#bc48ff!important}.border-purple{border-color:#bc48ff!important}.purple-alt{color:#692fbd!important}.bg-purple-alt{background-color:#692fbd!important}.border-purple-alt{border-color:#692fbd!important}.neutral{color:#464646!important}.bg-neutral{background-color:#464646!important}.border-neutral{border-color:#464646!important}.yellow{color:#ffa70a!important}.bg-yellow{background-color:#ffa70a!important}.border-yellow{border-color:#ffa70a!important}.white{color:#fff!important}.bg-white{background-color:#fff!important}.border-white{border-color:#fff!important}.black{color:#000!important}.bg-black{background-color:#000!important}.border-black{border-color:#000!important}.youtube{color:#fd3c01!important}.bg-youtube{background-color:#fd3c01!important}.border-youtube{border-color:#fd3c01!important}.raspbian{color:#b61240!important}.bg-raspbian{background-color:#b61240!important}.border-raspbian{border-color:#b61240!important}.windows{color:#12a7e3!important}.bg-windows{background-color:#12a7e3!important}.border-windows{border-color:#12a7e3!important}.macos{color:#b3bcc2!important}.bg-macos{background-color:#b3bcc2!important}.border-macos{border-color:#b3bcc2!important}.debian{color:#cf084e!important}.bg-debian{background-color:#cf084e!important}.border-debian{border-color:#cf084e!important}.fedora{color:#52a2da!important}.bg-fedora{background-color:#52a2da!important}.border-fedora{border-color:#52a2da!important}.ubuntu{color:#d64514!important}.bg-ubuntu{background-color:#d64514!important}.border-ubuntu{border-color:#d64514!important}.suse{color:#6fb425!important}.bg-suse{background-color:#6fb425!important}.border-suse{border-color:#6fb425!important}.redhat{color:#c60200!important}.bg-redhat{background-color:#c60200!important}.border-redhat{border-color:#c60200!important}.centos{color:#9b4c88!important}.bg-centos{background-color:#9b4c88!important}.border-centos{border-color:#9b4c88!important}.other{color:#ffa70a!important}.bg-other{background-color:#ffa70a!important}.border-other{border-color:#ffa70a!important}button.btn-warning,.btn.btn-warning{background:#e56723;box-shadow:0 2px #913e11}button.btn-warning:hover,.btn.btn-warning:hover{box-shadow:0 2px 0 1px #913e11 inset}button.btn-warning:focus,.btn.btn-warning:focus{background:#913e11}button.btn-wire-warning,.btn.btn-wire-warning{background:transparent;box-shadow:none;border:2px solid rgb(229,103,35);color:#000c}button.btn-wire-warning i.btn-match,.btn.btn-wire-warning i.btn-match{color:#e56723}button.btn-wire-warning:hover,.btn.btn-wire-warning:hover{background:#e567230d;border-color:#be5117;color:#be5117;box-shadow:none}button.btn-wire-warning:focus,.btn.btn-wire-warning:focus{border-color:#913e11;background:transparent}button.btn-info,.btn.btn-info{background:#027bff;box-shadow:0 2px #004a9b}button.btn-info:hover,.btn.btn-info:hover{box-shadow:0 2px 0 1px #004a9b inset}button.btn-info:focus,.btn.btn-info:focus{background:#004a9b}button.btn-wire-info,.btn.btn-wire-info{background:transparent;box-shadow:none;border:2px solid rgb(2,123,255);color:#000c}button.btn-wire-info i.btn-match,.btn.btn-wire-info i.btn-match{color:#027bff}button.btn-wire-info:hover,.btn.btn-wire-info:hover{background:#027bff0d;border-color:#0063ce;color:#0063ce;box-shadow:none}button.btn-wire-info:focus,.btn.btn-wire-info:focus{border-color:#004a9b;background:transparent}button.btn-info-alt,.btn.btn-info-alt{background:#075cb7;box-shadow:0 2px #032b55}button.btn-info-alt:hover,.btn.btn-info-alt:hover{box-shadow:0 2px 0 1px #032b55 inset}button.btn-info-alt:focus,.btn.btn-info-alt:focus{background:#032b55}button.btn-wire-info-alt,.btn.btn-wire-info-alt{background:transparent;box-shadow:none;border:2px solid rgb(7,92,183);color:#000c}button.btn-wire-info-alt i.btn-match,.btn.btn-wire-info-alt i.btn-match{color:#075cb7}button.btn-wire-info-alt:hover,.btn.btn-wire-info-alt:hover{background:#075cb70d;border-color:#054386;color:#054386;box-shadow:none}button.btn-wire-info-alt:focus,.btn.btn-wire-info-alt:focus{border-color:#032b55;background:transparent}button.btn-success,.btn.btn-success{background:#11a948;box-shadow:0 2px #084c21}button.btn-success:hover,.btn.btn-success:hover{box-shadow:0 2px 0 1px #084c21 inset}button.btn-success:focus,.btn.btn-success:focus{background:#084c21}button.btn-wire-success,.btn.btn-wire-success{background:transparent;box-shadow:none;border:2px solid rgb(17,169,72);color:#000c}button.btn-wire-success i.btn-match,.btn.btn-wire-success i.btn-match{color:#11a948}button.btn-wire-success:hover,.btn.btn-wire-success:hover{background:#11a9480d;border-color:#0c7b34;color:#0c7b34;box-shadow:none}button.btn-wire-success:focus,.btn.btn-wire-success:focus{border-color:#084c21;background:transparent}button.btn-success-alt,.btn.btn-success-alt{background:#11a948;box-shadow:0 2px #084c21}button.btn-success-alt:hover,.btn.btn-success-alt:hover{box-shadow:0 2px 0 1px #084c21 inset}button.btn-success-alt:focus,.btn.btn-success-alt:focus{background:#084c21}button.btn-wire-success-alt,.btn.btn-wire-success-alt{background:transparent;box-shadow:none;border:2px solid rgb(17,169,72);color:#000c}button.btn-wire-success-alt i.btn-match,.btn.btn-wire-success-alt i.btn-match{color:#11a948}button.btn-wire-success-alt:hover,.btn.btn-wire-success-alt:hover{background:#11a9480d;border-color:#0c7b34;color:#0c7b34;box-shadow:none}button.btn-wire-success-alt:focus,.btn.btn-wire-success-alt:focus{border-color:#084c21;background:transparent}button.btn-error,.btn.btn-error{background:#ef0e5d;box-shadow:0 2px #8f0838}button.btn-error:hover,.btn.btn-error:hover{box-shadow:0 2px 0 1px #8f0838 inset}button.btn-error:focus,.btn.btn-error:focus{background:#8f0838}button.btn-wire-error,.btn.btn-wire-error{background:transparent;box-shadow:none;border:2px solid rgb(239,14,93);color:#000c}button.btn-wire-error i.btn-match,.btn.btn-wire-error i.btn-match{color:#ef0e5d}button.btn-wire-error:hover,.btn.btn-wire-error:hover{background:#ef0e5d0d;border-color:#bf0b4a;color:#bf0b4a;box-shadow:none}button.btn-wire-error:focus,.btn.btn-wire-error:focus{border-color:#8f0838;background:transparent}button.btn-error-alt,.btn.btn-error-alt{background:#c20941;box-shadow:0 2px #610420}button.btn-error-alt:hover,.btn.btn-error-alt:hover{box-shadow:0 2px 0 1px #610420 inset}button.btn-error-alt:focus,.btn.btn-error-alt:focus{background:#610420}button.btn-wire-error-alt,.btn.btn-wire-error-alt{background:transparent;box-shadow:none;border:2px solid rgb(194,9,65);color:#000c}button.btn-wire-error-alt i.btn-match,.btn.btn-wire-error-alt i.btn-match{color:#c20941}button.btn-wire-error-alt:hover,.btn.btn-wire-error-alt:hover{background:#c209410d;border-color:#910731;color:#910731;box-shadow:none}button.btn-wire-error-alt:focus,.btn.btn-wire-error-alt:focus{border-color:#610420;background:transparent}button.btn-danger,.btn.btn-danger{background:#ef0e5d;box-shadow:0 2px #8f0838}button.btn-danger:hover,.btn.btn-danger:hover{box-shadow:0 2px 0 1px #8f0838 inset}button.btn-danger:focus,.btn.btn-danger:focus{background:#8f0838}button.btn-wire-danger,.btn.btn-wire-danger{background:transparent;box-shadow:none;border:2px solid rgb(239,14,93);color:#000c}button.btn-wire-danger i.btn-match,.btn.btn-wire-danger i.btn-match{color:#ef0e5d}button.btn-wire-danger:hover,.btn.btn-wire-danger:hover{background:#ef0e5d0d;border-color:#bf0b4a;color:#bf0b4a;box-shadow:none}button.btn-wire-danger:focus,.btn.btn-wire-danger:focus{border-color:#8f0838;background:transparent}button.btn-danger-alt,.btn.btn-danger-alt{background:#c20941;box-shadow:0 2px #610420}button.btn-danger-alt:hover,.btn.btn-danger-alt:hover{box-shadow:0 2px 0 1px #610420 inset}button.btn-danger-alt:focus,.btn.btn-danger-alt:focus{background:#610420}button.btn-wire-danger-alt,.btn.btn-wire-danger-alt{background:transparent;box-shadow:none;border:2px solid rgb(194,9,65);color:#000c}button.btn-wire-danger-alt i.btn-match,.btn.btn-wire-danger-alt i.btn-match{color:#c20941}button.btn-wire-danger-alt:hover,.btn.btn-wire-danger-alt:hover{background:#c209410d;border-color:#910731;color:#910731;box-shadow:none}button.btn-wire-danger-alt:focus,.btn.btn-wire-danger-alt:focus{border-color:#610420;background:transparent}button.btn-purple,.btn.btn-purple{background:#bc48ff;box-shadow:0 2px #8f00e1}button.btn-purple:hover,.btn.btn-purple:hover{box-shadow:0 2px 0 1px #8f00e1 inset}button.btn-purple:focus,.btn.btn-purple:focus{background:#8f00e1}button.btn-wire-purple,.btn.btn-wire-purple{background:transparent;box-shadow:none;border:2px solid rgb(188,72,255);color:#000c}button.btn-wire-purple i.btn-match,.btn.btn-wire-purple i.btn-match{color:#bc48ff}button.btn-wire-purple:hover,.btn.btn-wire-purple:hover{background:#bc48ff0d;border-color:#a915ff;color:#a915ff;box-shadow:none}button.btn-wire-purple:focus,.btn.btn-wire-purple:focus{border-color:#8f00e1;background:transparent}button.btn-purple-alt,.btn.btn-purple-alt{background:#692fbd;box-shadow:0 2px #3c1b6b}button.btn-purple-alt:hover,.btn.btn-purple-alt:hover{box-shadow:0 2px 0 1px #3c1b6b inset}button.btn-purple-alt:focus,.btn.btn-purple-alt:focus{background:#3c1b6b}button.btn-wire-purple-alt,.btn.btn-wire-purple-alt{background:transparent;box-shadow:none;border:2px solid rgb(105,47,189);color:#000c}button.btn-wire-purple-alt i.btn-match,.btn.btn-wire-purple-alt i.btn-match{color:#692fbd}button.btn-wire-purple-alt:hover,.btn.btn-wire-purple-alt:hover{background:#692fbd0d;border-color:#522594;color:#522594;box-shadow:none}button.btn-wire-purple-alt:focus,.btn.btn-wire-purple-alt:focus{border-color:#3c1b6b;background:transparent}button.btn-neutral,.btn.btn-neutral{background:#464646;box-shadow:0 2px #131313}button.btn-neutral:hover,.btn.btn-neutral:hover{box-shadow:0 2px 0 1px #131313 inset}button.btn-neutral:focus,.btn.btn-neutral:focus{background:#131313}button.btn-wire-neutral,.btn.btn-wire-neutral{background:transparent;box-shadow:none;border:2px solid rgb(70,70,70);color:#000c}button.btn-wire-neutral i.btn-match,.btn.btn-wire-neutral i.btn-match{color:#464646}button.btn-wire-neutral:hover,.btn.btn-wire-neutral:hover{background:#4646460d;border-color:#2d2d2d;color:#2d2d2d;box-shadow:none}button.btn-wire-neutral:focus,.btn.btn-wire-neutral:focus{border-color:#131313;background:transparent}button.btn-yellow,.btn.btn-yellow{background:#ffa70a;box-shadow:0 2px #a36800}button.btn-yellow:hover,.btn.btn-yellow:hover{box-shadow:0 2px 0 1px #a36800 inset}button.btn-yellow:focus,.btn.btn-yellow:focus{background:#a36800}button.btn-wire-yellow,.btn.btn-wire-yellow{background:transparent;box-shadow:none;border:2px solid rgb(255,167,10);color:#000c}button.btn-wire-yellow i.btn-match,.btn.btn-wire-yellow i.btn-match{color:#ffa70a}button.btn-wire-yellow:hover,.btn.btn-wire-yellow:hover{background:#ffa70a0d;border-color:#d68900;color:#d68900;box-shadow:none}button.btn-wire-yellow:focus,.btn.btn-wire-yellow:focus{border-color:#a36800;background:transparent}button.btn-white,.btn.btn-white{background:#fff;box-shadow:0 2px #ccc}button.btn-white:hover,.btn.btn-white:hover{box-shadow:0 2px 0 1px #ccc inset}button.btn-white:focus,.btn.btn-white:focus{background:#ccc}button.btn-wire-white,.btn.btn-wire-white{background:transparent;box-shadow:none;border:2px solid rgb(255,255,255);color:#000c}button.btn-wire-white i.btn-match,.btn.btn-wire-white i.btn-match{color:#fff}button.btn-wire-white:hover,.btn.btn-wire-white:hover{background:#ffffff0d;border-color:#e6e6e6;color:#e6e6e6;box-shadow:none}button.btn-wire-white:focus,.btn.btn-wire-white:focus{border-color:#ccc;background:transparent}button.btn-black,.btn.btn-black{background:#000;box-shadow:0 2px #000}button.btn-black:hover,.btn.btn-black:hover{box-shadow:0 2px 0 1px #000 inset}button.btn-black:focus,.btn.btn-black:focus{background:#000}button.btn-wire-black,.btn.btn-wire-black{background:transparent;box-shadow:none;border:2px solid rgb(0,0,0);color:#000c}button.btn-wire-black i.btn-match,.btn.btn-wire-black i.btn-match{color:#000}button.btn-wire-black:hover,.btn.btn-wire-black:hover{background:#0000000d;border-color:#000;color:#000;box-shadow:none}button.btn-wire-black:focus,.btn.btn-wire-black:focus{border-color:#000;background:transparent}button.btn-youtube,.btn.btn-youtube{background:#fd3c01;box-shadow:0 2px #972401}button.btn-youtube:hover,.btn.btn-youtube:hover{box-shadow:0 2px 0 1px #972401 inset}button.btn-youtube:focus,.btn.btn-youtube:focus{background:#972401}button.btn-wire-youtube,.btn.btn-wire-youtube{background:transparent;box-shadow:none;border:2px solid rgb(253,60,1);color:#000c}button.btn-wire-youtube i.btn-match,.btn.btn-wire-youtube i.btn-match{color:#fd3c01}button.btn-wire-youtube:hover,.btn.btn-wire-youtube:hover{background:#fd3c010d;border-color:#ca3001;color:#ca3001;box-shadow:none}button.btn-wire-youtube:focus,.btn.btn-wire-youtube:focus{border-color:#972401;background:transparent}button.btn-raspbian,.btn.btn-raspbian{background:#b61240;box-shadow:0 2px #59091f}button.btn-raspbian:hover,.btn.btn-raspbian:hover{box-shadow:0 2px 0 1px #59091f inset}button.btn-raspbian:focus,.btn.btn-raspbian:focus{background:#59091f}button.btn-wire-raspbian,.btn.btn-wire-raspbian{background:transparent;box-shadow:none;border:2px solid rgb(182,18,64);color:#000c}button.btn-wire-raspbian i.btn-match,.btn.btn-wire-raspbian i.btn-match{color:#b61240}button.btn-wire-raspbian:hover,.btn.btn-wire-raspbian:hover{background:#b612400d;border-color:#880d30;color:#880d30;box-shadow:none}button.btn-wire-raspbian:focus,.btn.btn-wire-raspbian:focus{border-color:#59091f;background:transparent}button.btn-windows,.btn.btn-windows{background:#12a7e3;box-shadow:0 2px #0b6184}button.btn-windows:hover,.btn.btn-windows:hover{box-shadow:0 2px 0 1px #0b6184 inset}button.btn-windows:focus,.btn.btn-windows:focus{background:#0b6184}button.btn-wire-windows,.btn.btn-wire-windows{background:transparent;box-shadow:none;border:2px solid rgb(18,167,227);color:#000c}button.btn-wire-windows i.btn-match,.btn.btn-wire-windows i.btn-match{color:#12a7e3}button.btn-wire-windows:hover,.btn.btn-wire-windows:hover{background:#12a7e30d;border-color:#0e84b4;color:#0e84b4;box-shadow:none}button.btn-wire-windows:focus,.btn.btn-wire-windows:focus{border-color:#0b6184;background:transparent}button.btn-macos,.btn.btn-macos{background:#b3bcc2;box-shadow:0 2px #7a8a95}button.btn-macos:hover,.btn.btn-macos:hover{box-shadow:0 2px 0 1px #7a8a95 inset}button.btn-macos:focus,.btn.btn-macos:focus{background:#7a8a95}button.btn-wire-macos,.btn.btn-wire-macos{background:transparent;box-shadow:none;border:2px solid rgb(179,188,194);color:#000c}button.btn-wire-macos i.btn-match,.btn.btn-wire-macos i.btn-match{color:#b3bcc2}button.btn-wire-macos:hover,.btn.btn-wire-macos:hover{background:#b3bcc20d;border-color:#97a3ab;color:#97a3ab;box-shadow:none}button.btn-wire-macos:focus,.btn.btn-wire-macos:focus{border-color:#7a8a95;background:transparent}button.btn-debian,.btn.btn-debian{background:#cf084e;box-shadow:0 2px #6d0429}button.btn-debian:hover,.btn.btn-debian:hover{box-shadow:0 2px 0 1px #6d0429 inset}button.btn-debian:focus,.btn.btn-debian:focus{background:#6d0429}button.btn-wire-debian,.btn.btn-wire-debian{background:transparent;box-shadow:none;border:2px solid rgb(207,8,78);color:#000c}button.btn-wire-debian i.btn-match,.btn.btn-wire-debian i.btn-match{color:#cf084e}button.btn-wire-debian:hover,.btn.btn-wire-debian:hover{background:#cf084e0d;border-color:#9e063b;color:#9e063b;box-shadow:none}button.btn-wire-debian:focus,.btn.btn-wire-debian:focus{border-color:#6d0429;background:transparent}button.btn-fedora,.btn.btn-fedora{background:#52a2da;box-shadow:0 2px #236ea3}button.btn-fedora:hover,.btn.btn-fedora:hover{box-shadow:0 2px 0 1px #236ea3 inset}button.btn-fedora:focus,.btn.btn-fedora:focus{background:#236ea3}button.btn-wire-fedora,.btn.btn-wire-fedora{background:transparent;box-shadow:none;border:2px solid rgb(82,162,218);color:#000c}button.btn-wire-fedora i.btn-match,.btn.btn-wire-fedora i.btn-match{color:#52a2da}button.btn-wire-fedora:hover,.btn.btn-wire-fedora:hover{background:#52a2da0d;border-color:#2c8bcd;color:#2c8bcd;box-shadow:none}button.btn-wire-fedora:focus,.btn.btn-wire-fedora:focus{border-color:#236ea3;background:transparent}button.btn-ubuntu,.btn.btn-ubuntu{background:#d64514;box-shadow:0 2px #79270b}button.btn-ubuntu:hover,.btn.btn-ubuntu:hover{box-shadow:0 2px 0 1px #79270b inset}button.btn-ubuntu:focus,.btn.btn-ubuntu:focus{background:#79270b}button.btn-wire-ubuntu,.btn.btn-wire-ubuntu{background:transparent;box-shadow:none;border:2px solid rgb(214,69,20);color:#000c}button.btn-wire-ubuntu i.btn-match,.btn.btn-wire-ubuntu i.btn-match{color:#d64514}button.btn-wire-ubuntu:hover,.btn.btn-wire-ubuntu:hover{background:#d645140d;border-color:#a73610;color:#a73610;box-shadow:none}button.btn-wire-ubuntu:focus,.btn.btn-wire-ubuntu:focus{border-color:#79270b;background:transparent}button.btn-suse,.btn.btn-suse{background:#6fb425;box-shadow:0 2px #3b5f14}button.btn-suse:hover,.btn.btn-suse:hover{box-shadow:0 2px 0 1px #3b5f14 inset}button.btn-suse:focus,.btn.btn-suse:focus{background:#3b5f14}button.btn-wire-suse,.btn.btn-wire-suse{background:transparent;box-shadow:none;border:2px solid rgb(111,180,37);color:#000c}button.btn-wire-suse i.btn-match,.btn.btn-wire-suse i.btn-match{color:#6fb425}button.btn-wire-suse:hover,.btn.btn-wire-suse:hover{background:#6fb4250d;border-color:#558a1c;color:#558a1c;box-shadow:none}button.btn-wire-suse:focus,.btn.btn-wire-suse:focus{border-color:#3b5f14;background:transparent}button.btn-redhat,.btn.btn-redhat{background:#c60200;box-shadow:0 2px #600100}button.btn-redhat:hover,.btn.btn-redhat:hover{box-shadow:0 2px 0 1px #600100 inset}button.btn-redhat:focus,.btn.btn-redhat:focus{background:#600100}button.btn-wire-redhat,.btn.btn-wire-redhat{background:transparent;box-shadow:none;border:2px solid rgb(198,2,0);color:#000c}button.btn-wire-redhat i.btn-match,.btn.btn-wire-redhat i.btn-match{color:#c60200}button.btn-wire-redhat:hover,.btn.btn-wire-redhat:hover{background:#c602000d;border-color:#930100;color:#930100;box-shadow:none}button.btn-wire-redhat:focus,.btn.btn-wire-redhat:focus{border-color:#600100;background:transparent}button.btn-centos,.btn.btn-centos{background:#9b4c88;box-shadow:0 2px #572a4c}button.btn-centos:hover,.btn.btn-centos:hover{box-shadow:0 2px 0 1px #572a4c inset}button.btn-centos:focus,.btn.btn-centos:focus{background:#572a4c}button.btn-wire-centos,.btn.btn-wire-centos{background:transparent;box-shadow:none;border:2px solid rgb(155,76,136);color:#000c}button.btn-wire-centos i.btn-match,.btn.btn-wire-centos i.btn-match{color:#9b4c88}button.btn-wire-centos:hover,.btn.btn-wire-centos:hover{background:#9b4c880d;border-color:#793b6a;color:#793b6a;box-shadow:none}button.btn-wire-centos:focus,.btn.btn-wire-centos:focus{border-color:#572a4c;background:transparent}button.btn-other,.btn.btn-other{background:#ffa70a;box-shadow:0 2px #a36800}button.btn-other:hover,.btn.btn-other:hover{box-shadow:0 2px 0 1px #a36800 inset}button.btn-other:focus,.btn.btn-other:focus{background:#a36800}button.btn-wire-other,.btn.btn-wire-other{background:transparent;box-shadow:none;border:2px solid rgb(255,167,10);color:#000c}button.btn-wire-other i.btn-match,.btn.btn-wire-other i.btn-match{color:#ffa70a}button.btn-wire-other:hover,.btn.btn-wire-other:hover{background:#ffa70a0d;border-color:#d68900;color:#d68900;box-shadow:none}button.btn-wire-other:focus,.btn.btn-wire-other:focus{border-color:#a36800;background:transparent}.alert.alert-warning{color:#e56723;background:#e5672333}.alert.alert-info{color:#027bff;background:#027bff33}.alert.alert-info-alt{color:#075cb7;background:#075cb733}.alert.alert-success,.alert.alert-success-alt{color:#11a948;background:#11a94833}.alert.alert-error{color:#ef0e5d;background:#ef0e5d33}.alert.alert-error-alt{color:#c20941;background:#c2094133}.alert.alert-danger{color:#ef0e5d;background:#ef0e5d33}.alert.alert-danger-alt{color:#c20941;background:#c2094133}.alert.alert-purple{color:#bc48ff;background:#bc48ff33}.alert.alert-purple-alt{color:#692fbd;background:#692fbd33}.alert.alert-neutral{color:#464646;background:#46464633}.alert.alert-yellow{color:#ffa70a;background:#ffa70a33}.alert.alert-white{color:#fff;background:#fff3}.alert.alert-black{color:#000;background:#0003}.alert.alert-youtube{color:#fd3c01;background:#fd3c0133}.alert.alert-raspbian{color:#b61240;background:#b6124033}.alert.alert-windows{color:#12a7e3;background:#12a7e333}.alert.alert-macos{color:#b3bcc2;background:#b3bcc233}.alert.alert-debian{color:#cf084e;background:#cf084e33}.alert.alert-fedora{color:#52a2da;background:#52a2da33}.alert.alert-ubuntu{color:#d64514;background:#d6451433}.alert.alert-suse{color:#6fb425;background:#6fb42533}.alert.alert-redhat{color:#c60200;background:#c6020033}.alert.alert-centos{color:#9b4c88;background:#9b4c8833}.alert.alert-other{color:#ffa70a;background:#ffa70a33}@font-face{font-family:Sixtyfour;src:url(../../webfonts/Sixtyfour-Regular.ttf) format("truetype")}*{font-family:Roboto,Arial,"sans-serif";margin:0;padding:0;box-sizing:border-box}html{background-color:#fff}body,html{height:100%;font-family:Arial,sans-serif}.container{display:flex;height:100vh}.horizontal{display:flex;flex-direction:row;justify-content:flex-start;align-items:flex-start;flex:1;align-self:stretch}.vertical{display:flex;flex-direction:column;justify-content:flex-start;align-items:flex-start;flex:1;align-self:stretch}main{flex:1;display:flex;flex-direction:column}main .main-container{display:flex;flex-direction:column;flex:1;overflow:hidden;align-self:stretch}main .main-container .top-content{display:flex;flex-direction:row;justify-content:flex-start;align-items:center;align-self:stretch;padding:10px 10px 10px 15px;background:transparent;border-bottom:1px solid #DDD}main .main-container .top-content h1{color:#000;font-weight:600;font-size:24px}main .main-container .top-content .top-actions{flex:1;display:flex;flex-direction:row;justify-content:flex-start;align-items:center}main .main-container .top-content .top-actions.align-right{justify-content:flex-end;margin-right:10px}main .main-container .top-content .top-actions .btn:first-child{margin-left:0!important}main .main-container .top-content .top-actions .btn,main .main-container .top-content .top-actions button{margin-left:10px}main .main-container .bottom-content{display:flex;flex-direction:row;align-self:stretch;justify-content:flex-start;align-items:flex-start;flex:1;overflow-y:auto;background:radial-gradient(circle at 0% 53%,rgba(2,123,255,.8) 10%,transparent 45%),radial-gradient(circle at 135% 53%,rgba(2,123,255,.8) 10%,transparent 95%),radial-gradient(circle at 50% 80%,rgba(105,47,189,.8) 40%,transparent 95%)}main .main-container .bottom-content .page-content{flex:2;overflow-y:auto;align-self:stretch;display:flex;flex-direction:column;justify-content:flex-start;align-items:flex-start;background:#fffc;padding:5px}main .main-container .bottom-content .page-content .inner{flex:1;display:flex;flex-direction:column;justify-content:flex-start;align-items:flex-start;padding:10px 10px 40px;background:#fff;align-self:stretch}main .main-container .bottom-content .page-content .inner h1,main .main-container .bottom-content .page-content .inner h2,main .main-container .bottom-content .page-content .inner h3,main .main-container .bottom-content .page-content .inner h4,main .main-container .bottom-content .page-content .inner h5,main .main-container .bottom-content .page-content .inner h6{color:#222}main .main-container .bottom-content .page-content .inner p{font-size:12px;line-height:18px;display:flex;margin-bottom:5px;flex-direction:row;justify-content:flex-start;align-items:center;color:#999}main .main-container .bottom-content .page-panel{flex:1;overflow-y:auto;align-self:stretch;background:#fff;border-top:none}main .main-container .bottom-content .page-panel.left-panel{border-right:1px solid #DDD;border-left:none}main .main-container .bottom-content .page-panel.left-panel.explr-explorer{flex:.5;overflow-y:auto;padding:0;background:#fff;box-shadow:1px 1px .5px .5px inset #fff3;max-width:250px}main .main-container .bottom-content .page-panel.right-panel{border-left:1px solid #DDD;border-right:none}.invisible{visibility:hidden!important}.hidden{display:none!important}.tac{text-align:center!important}.tar{text-align:right!important}a{text-decoration:none}.normal{font-weight:400!important}.bold{font-weight:700!important}.col{display:flex;flex:1;flex-direction:column;align-self:stretch}main .context-bar{padding:10px;position:sticky;top:0;z-index:1000;max-height:80px;border-bottom:1px solid #DDD;display:flex;flex-direction:row;align-items:center}main .context-bar .context-menu{flex:1}main .context-bar .context-menu .inner{display:flex}main .context-bar .context-menu .inner ul.pills{margin:0}main .context-bar .context-divider{width:1px;height:100%;background:#ddd;margin-left:20px;margin-right:20px}main .context-bar .contex-tail{margin-right:20px}main .context-bar .contex-tail .btn{margin-right:0}main .context-bar .context-user{display:flex;margin-right:20px}main .context-bar .context-user .trigger{color:#000}main .context-bar .context-user .trigger .avatar{width:32px;height:32px;border-radius:4px;background:#555;margin-right:10px;display:flex;flex-direction:row;justify-content:center;align-items:center;text-align:center;font-weight:700;font-size:14px;border:1px solid #BBB;color:#fff}main .context-bar .context-user .trigger i{margin-top:-5px;margin-left:10px}menu{width:300px;background:#fff;overflow-y:auto;overflow-x:visible;padding:20px;z-index:2000;display:flex;flex-direction:column;justify-content:flex-start;align-items:flex-start;border-right:1px solid #DDD;min-width:64px}menu h1.logo{margin:40px 0 0 10px;align-self:stretch;display:flex}menu h1.logo a{text-align:center;text-shadow:0px 0 0 rgb(255,255,255),0px 2px 0 #BBB,0 0px 0 rgb(17,169,72),-0px 0 0 rgb(2,123,255),0 -0px 0 rgb(239,14,93);text-decoration:none;background:linear-gradient(90deg,#a0a0a0 0,#bebebe 46%,#dcdcdc);-webkit-background-clip:text;color:transparent;flex:1;font-family:Sixtyfour,Work Sans,Arial,"sans-serif";align-self:stretch;padding-right:3px;font-size:20px;text-transform:uppercase;transition:all .55s cubic-bezier(.19,1,.22,1);display:flex;flex-direction:row;justify-content:center;align-items:center;position:relative;color:#fff}menu h1.logo a img{flex-shrink:0;width:30px;margin-right:10px;position:absolute;left:5px;transition:all .55s cubic-bezier(.19,1,.22,1)}menu h1.logo a img.after{opacity:0}menu:hover h1.logo a{text-align:center;text-shadow:3px 0 0 rgb(255,255,255),3px 2px 0 #BBB,0 3px 0 rgb(17,169,72),-3px 0 0 rgb(2,123,255),0 -3px 0 rgb(239,14,93);text-decoration:none;background:linear-gradient(90deg,#a0a0a0 0,#bebebe 46%,#dcdcdc);-webkit-background-clip:text;color:transparent}menu:hover h1.logo a img.before{opacity:0}menu:hover h1.logo a img.after{animation-duration:.2s;animation-name:logotouch}menu nav{display:flex;align-self:stretch;flex:1}menu nav ul{margin:60px 0 20px;flex:1;align-self:flex-start;display:flex;flex-direction:column;list-style:none}menu nav ul li{align-self:stretch;overflow:hidden;position:relative;transition:all .55s cubic-bezier(.19,1,.22,1);margin:10px 0;border-radius:4px}menu nav ul li a{color:#000000e6;font-size:16px;display:flex;flex-direction:row;justify-content:flex-start;align-items:center;align-self:stretch;flex:1;padding-top:5px;padding-bottom:5px;padding-left:10px}menu nav ul li a i{color:#000;opacity:.2;background:transparent;display:flex;justify-content:center;align-items:center;align-self:stretch;padding:10px;width:40px;border-radius:4px;text-align:center;margin-right:20px}menu nav ul li:after{background:#000;content:"";height:195px;left:-200px;opacity:.2;position:absolute;top:-50px;transform:rotate(35deg);transition:all .55s cubic-bezier(.19,1,.22,1);width:50px;z-index:-2;cursor:pointer}menu nav ul li.active a{color:#027bff;font-weight:700}menu nav ul li.active a i{opacity:1;color:#fff;background:#000000e6;background:#027bff}menu nav ul li:hover{background:#027bff}menu nav ul li:hover:after{z-index:2;left:120%;transition:all .55s cubic-bezier(.19,1,.22,1)}menu nav ul li:hover a{color:#fff;font-weight:700}menu nav ul li:hover a i{color:#fff;opacity:1}menu footer{background:#00000003;padding:20px 0;display:flex;flex-direction:row;align-self:stretch;text-align:center;justify-content:center}menu footer p{color:#bbb}menu footer p.version a{color:#888;font-weight:700}.dropdown{position:relative;display:flex;align-self:stretch}.dropdown.dropdown-show ul.dropdown-menu{display:flex;flex-direction:column}.dropdown .trigger{cursor:pointer;display:flex;flex-direction:row;justify-content:flex-start;align-items:center;align-self:stretch;flex:1}.dropdown ul.dropdown-menu{position:absolute;top:100%;left:0;display:none;background-color:#ddd;box-shadow:0 8px 16px #fff3;z-index:1000;list-style-type:none;margin:0;overflow:hidden;border-radius:4px}.dropdown ul.dropdown-menu li{padding:8px 16px;cursor:pointer;display:flex;flex-direction:row;justify-content:flex-start;align-items:center;transition:all .55s cubic-bezier(.19,1,.22,1)}.dropdown ul.dropdown-menu li.danger:hover{background-color:#ef0e5d}.dropdown ul.dropdown-menu li:hover{background-color:#027bff}.dropdown ul.dropdown-menu li a{padding:8px 16px 8px 8px;color:#000;display:flex;flex-direction:row;justify-content:flex-start;align-items:center;align-self:stretch}.dropdown ul.dropdown-menu li a i{margin-right:15px}@keyframes logotouch{0%{opacity:0}50%{opacity:1}to{opacity:0;left:27px}}@keyframes shakednd{0%{transform:rotate(-2deg)}to{transform:rotate(2deg)}}@keyframes blinkfade{0%{opacity:1}50%{opacity:0}to{opacity:1}}button,.btn{position:relative;padding:10px 10px 8px;font-size:14px;color:#fff;cursor:pointer;border:none;border-radius:4px;background:#027bff;box-shadow:0 2px #004a9b;font-weight:700;letter-spacing:-.5px;margin-top:-2px;min-width:38px;min-height:34px;text-align:center;justify-content:center}button i.icon-left,.btn i.icon-left{margin-right:5px}button:hover,.btn:hover{box-shadow:0 2px 0 1px #004a9b inset;color:#fffc}button:focus,.btn:focus{background:#004a9b;color:#ffffff80;box-shadow:none}button.btn-pixel,.btn.btn-pixel{background:#333;border:1px solid transparent;transition:all .55s cubic-bezier(.19,1,.22,1);text-transform:uppercase;font-size:12px;box-shadow:4px 0 #fff,0 4px #11a948,-4px 0 #027bff,0 -4px #ef0e5d;color:#ddd;overflow:hidden}button.btn-pixel:hover,.btn.btn-pixel:hover{box-shadow:6px 0 #fff,0 6px #11a948,-6px 0 #027bff,0 -6px #ef0e5d;text-align:center;text-shadow:4px 0 0 rgb(255,255,255),4px 2px 0 #BBB,0 4px 0 rgb(17,169,72),-4px 0 0 rgb(2,123,255),0 -4px 0 rgb(239,14,93);text-decoration:none;background:linear-gradient(90deg,#a0a0a0 0,#bebebe 46%,#dcdcdc);-webkit-background-clip:text;color:transparent}button.btn-neutral,.btn.btn-neutral{color:#fff;background:#aaa;box-shadow:0 2px #919191;border:1px solid transparent}button.btn-neutral:hover,.btn.btn-neutral:hover{box-shadow:0 2px 0 1px #222 inset;background:#919191}button.btn-neutral:focus,.btn.btn-neutral:focus{background:#777;border:1px solid #555}button .btn-wire-neutral,.btn .btn-wire-neutral{background:transparent;border:2px solid #AAA;color:#fffc;box-shadow:none}button .btn-wire-neutral:hover,.btn .btn-wire-neutral:hover{background:#aaaaaa0d;border-color:#919191;color:#919191;box-shadow:none}button .btn-wire-neutral:focus,.btn .btn-wire-neutral:focus{border-color:#777;background:transparent}button.btn-naked,.btn.btn-naked{background:transparent;box-shadow:none;border:1px solid transparent;color:#000}button.btn-naked:hover,.btn.btn-naked:hover{box-shadow:0 2px 0 1px #222 inset;background:#919191;color:#fff}button.btn-naked:focus,.btn.btn-naked:focus{background:#777;border:1px solid #555}button i.main,.btn i.main{font-size:18px}button sup,button sub,.btn sup,.btn sub{position:absolute;top:-4px;right:-4px;background:#888;border-bottom:2px solid #AAA;color:red;border-radius:4px;width:16px;height:16px;text-align:center;display:flex;justify-content:center;align-items:center;padding-top:2px;padding-bottom:1px}button sup i,button sub i,.btn sup i,.btn sub i{color:#fff;font-size:10px}button.btn-double-icon,.btn.btn-double-icon{margin-right:5px}button.disabled,.btn.disabled{cursor:default}.alert{padding:20px;align-self:stretch;display:flex;flex-direction:row;justify-content:center;align-items:center;border-radius:4px}.alert i{margin-right:13px}.alert a{color:inherit;margin-left:4px;margin-right:4px;text-decoration:underline}ul.explr-tree{height:100%!important}ul.explr-tree ul{padding-top:0!important}ul.explr-tree li{position:relative}ul.explr-tree li span{color:#aaa;font-size:13px;padding-left:5px;cursor:pointer}ul.explr-tree li span.explr-plus,ul.explr-tree li span.explr-minus{z-index:1}ul.explr-tree li span.explr-plus:hover,ul.explr-tree li span.explr-minus:hover{color:#555}ul.explr-tree li i.main{font-size:14px}ul.explr-tree li sup,ul.explr-tree li sub{position:absolute;top:0;left:5px;background:#888;border-bottom:2px solid #AAA;border-radius:4px;text-align:center;display:flex;justify-content:center;align-items:center;padding-top:2px;padding-bottom:1px}ul.explr-tree li sup i,ul.explr-tree li sub i{color:#fff;font-size:4px!important;margin-bottom:0}ul.explr-tree li a{color:#000;padding-right:80px;margin-top:2px}ul.explr-tree li a:hover{color:#000}ul.explr-tree li a.active{background:#0000001a;border-radius:4px;font-weight:700;text-decoration:underline;margin-left:35px;padding-left:5px;margin-right:10px}.explr-multiselection-actions,.explr-selection-actions{display:none;flex-direction:row;justify-content:flex-end;align-items:center;flex:1}.explr-multiselection-actions button,.explr-selection-actions button{display:none}body.explr-selection-actionable .explr-selection-actions,body.explr-selection-actionable.explr-selection-folder .explr-selection-actions button.explr-selection-folder,body.explr-selection-actionable.explr-selection-entity .explr-selection-actions button.explr-selection-entity,body.explr-multiselection-actionable .explr-multiselection-actions,body.explr-multiselection-actionable.explr-multiselection-folder .explr-multiselection-actions button.explr-multiselection-folder,body.explr-multiselection-actionable.explr-multiselection-entity .explr-multiselection-actions button.explr-multiselection-entity{display:flex}.selectable-zone{flex:1;align-self:stretch;border:1px solid transparent}ul.explr-dirview{display:flex;flex-direction:row;flex-wrap:wrap}ul.explr-dirview li{display:flex;flex-direction:column;justify-content:flex-start;align-items:center;flex-shrink:0;margin:10px;min-width:100px;min-height:130px;padding-top:5px;border:1px solid transparent;border-radius:4px}ul.explr-dirview li.renaming a span{display:none}ul.explr-dirview li.renaming a form{display:block}ul.explr-dirview li.highlight-drop{border:1px dotted rgba(2,123,255,.4);background:#027bff4d}ul.explr-dirview li.highlight-clicked{border:1px dotted rgba(0,0,0,.2);background:#0000001a}ul.explr-dirview li a{color:#444;text-decoration:none;flex:1;text-align:center;font-size:12px;display:flex;flex-direction:column;justify-content:flex-start;align-items:center;max-width:84px;min-width:84px;position:relative;word-break:break-all}ul.explr-dirview li a.with-thumbnail .img-holder{width:64px;height:64px;background:#000;border-radius:8px;display:flex;flex-direction:column;justify-content:center;align-items:center;overflow:hidden;margin-bottom:12px}ul.explr-dirview li a.with-thumbnail .img-holder img{max-height:100%;max-width:100%}ul.explr-dirview li a.with-thumbnail i{font-size:24px;position:absolute;top:-4px;left:-4px;text-shadow:0 .5px .5px #888}ul.explr-dirview li a i{font-size:64px;margin-bottom:12px;border-radius:8px}ul.explr-dirview li a sup,ul.explr-dirview li a sub{position:absolute;top:-2px;right:0;background:#888;border-bottom:2px solid #AAA;border-radius:4px;width:16px;height:16px;text-align:center;display:flex;justify-content:center;align-items:center;padding-top:2px;padding-bottom:1px}ul.explr-dirview li a sup i,ul.explr-dirview li a sub i{color:#fff;font-size:10px;margin-bottom:0}ul.explr-dirview li a input{width:100%;padding:0 3px}ul.explr-dirview li a input:focus{outline:none}ul.explr-dirview li a:hover{opacity:.8}ul.explr-dirview li a form{display:none}ul.explr-dirview li.new-folder a{color:#027bff}ul.explr-dirview li.new-folder a form{display:block}ul.explr-dirview .ui-draggable-dragging{z-index:20}ul.explr-dirview .ui-draggable-dragging a{opacity:1!important}.modal-explr-picker h2{margin-top:0}.modal-explr-picker .explr-tree{width:400px;max-width:400px;max-height:300px;overflow:auto;background:#ddd;padding:10px 20px;border-radius:4px;margin-top:15px}.content-explr-picker{cursor:pointer}.selection-rectangle{position:absolute;border:1px solid rgb(0,153,255);background-color:#0099ff1a;pointer-events:none;z-index:1000}ul.pills{background:#ddd;padding:6px 4px 5px;box-shadow:1px 1px .5px .5px inset #fff3;border:1px solid #DDD;border-radius:4px;display:flex;flex-direction:row;justify-content:flex-start;align-items:center;list-style:none;margin:0}ul.pills li.divider{margin:0 20px;width:1px;height:100%;background:#ccc}ul.pills li:hover a{opacity:.9}ul.pills li a{border-radius:4px;display:flex;flex-direction:row;justify-content:center;align-items:center;color:#000;overflow:hidden;padding-right:30px;text-align:center;background:#fff3;margin-right:5px;transition:all .25s cubic-bezier(.19,1,.22,1)}ul.pills li a span{display:flex;justify-content:center;align-items:center;margin-right:20px;height:42px;background:#fff3;width:42px}ul.pills li.active a{color:#ccc;background:#333;font-weight:700}ul.pills li:hover a{color:#fff;background:#027bff}ul.pills li:last-child a{margin-right:0}.breadcrumb-container{display:flex;flex-direction:row;justify-content:flex-start;align-items:center;align-self:stretch;border-bottom:1px solid #DDD;background:transparent;padding:10px}.breadcrumb-container ul.breadcrumb{background:#ddd;padding:6px 4px 5px;box-shadow:1px 1px .5px .5px inset #fff3;border:1px solid #DDD;border-radius:4px;display:flex;flex-direction:row;justify-content:flex-start;align-items:center;list-style:none;margin:0;overflow-x:auto;max-width:65vw;white-space:nowrap}.breadcrumb-container ul.breadcrumb li{display:inline-block}.breadcrumb-container ul.breadcrumb li.divider{margin:0 5px}.breadcrumb-container ul.breadcrumb li.divider i{color:#555}.breadcrumb-container ul.breadcrumb li span,.breadcrumb-container ul.breadcrumb li a{border-radius:4px;display:flex;flex-direction:row;justify-content:center;align-items:center;color:#000;text-align:center;padding:0 3px}.breadcrumb-container ul.breadcrumb li span i,.breadcrumb-container ul.breadcrumb li a i{margin-right:5px}.breadcrumb-container ul.breadcrumb li:hover a{color:#000;background:#027bff}.breadcrumb-container ul.breadcrumb li:last-child a{margin-right:0}.pickers,.modals{position:fixed;background:#0006;top:0;right:0;bottom:0;left:0;display:flex;flex-direction:column;justify-content:center;align-items:center;z-index:10000}.pickers.pickers .modals-outer .modals-inner .modal h2,.modals.pickers .modals-outer .modals-inner .modal h2{font-size:14px;line-height:18px;display:flex;margin-bottom:5px;flex-direction:row;justify-content:flex-start;align-items:center;align-self:stretch;color:#999}.pickers .modals-outer,.modals .modals-outer{min-width:464px;max-width:464px;display:flex;flex-direction:column;overflow:auto;padding-bottom:2px}.pickers .modals-outer .modals-inner,.modals .modals-outer .modals-inner{background:#fff;border-radius:10px;color:#fff;padding:40px;box-shadow:0 2px #ddd;border:1px solid #DDD}.pickers .modals-outer .modals-inner .modal h2,.modals .modals-outer .modals-inner .modal h2{padding:0;margin:0 0 30px;font-weight:400;color:#666}.pickers .modals-outer .modals-inner .modal h3,.modals .modals-outer .modals-inner .modal h3{align-self:stretch;margin:0 0 10px;font-size:14px;display:flex;flex-direction:row;justify-content:flex-start;align-items:center;color:#000;padding-bottom:10px;text-decoration:none}.pickers .modals-outer .modals-inner .modal h3.divide,.modals .modals-outer .modals-inner .modal h3.divide{border-top:1px solid #DDD;margin-top:20px;padding-top:20px}.toast{visibility:hidden;min-width:250px;margin-left:-125px;background-color:#ccc;color:#000;text-align:center;border-radius:4px;padding:16px;position:fixed;z-index:1;left:50%;bottom:30px;font-size:17px;border:2px dashed #DDD}.toast.show{visibility:visible;-webkit-animation:fadein .5s,fadeout .5s 2.5s;animation:fadein .5s,fadeout .5s 2.5s}@-webkit-keyframes fadein{0%{bottom:0;opacity:0}to{bottom:30px;opacity:1}}@keyframes fadein{0%{bottom:0;opacity:0}to{bottom:30px;opacity:1}}@-webkit-keyframes fadeout{0%{bottom:30px;opacity:1}to{bottom:0;opacity:0}}@keyframes fadeout{0%{bottom:30px;opacity:1}to{bottom:0;opacity:0}}body.dragover .shakeondrag{animation:shakednd .1s linear alternate infinite}.btn-super-upload-busy,.btn-super-upload{display:flex;flex-direction:row;justify-content:center;align-items:center;margin-left:10px;position:relative}.btn-super-upload-busy.btn-super-upload-busy,.btn-super-upload.btn-super-upload-busy{border:none!important}.btn-super-upload-busy .unprogress,.btn-super-upload .unprogress{display:block}.btn-super-upload-busy .progress,.btn-super-upload .progress{display:none;width:200px;height:10px;background:#999;border-radius:4px;flex-direction:row;justify-content:flex-start;align-items:center}.btn-super-upload-busy .progress .progress-bar,.btn-super-upload .progress .progress-bar{border-radius:4px;background-color:#027bff;height:100%}.btn-super-upload-busy .progress .percent,.btn-super-upload .progress .percent{display:flex;justify-content:center;align-items:center;position:absolute;left:0;right:0;bottom:0;top:2px;font-size:15px;color:#fff;text-shadow:0 0 2px rgb(0,0,0)}.btn-super-upload-busy.uploading .progress,.btn-super-upload.uploading .progress{display:block}.btn-super-upload-busy.uploading .unprogress,.btn-super-upload.uploading .unprogress{display:none}.panes{flex:1;display:flex;flex-direction:column;justify-content:flex-start;align-items:flex-start;align-self:stretch}.panes .pane-section,.panes tbody{display:flex;flex-direction:column;justify-content:flex-start;align-items:flex-start;align-self:stretch;margin:1px 1px 28px;background:#fff;border-radius:4px;border:4px solid rgba(0,0,0,.05)}.panes .pane-section:hover,.panes tbody:hover,.panes .pane-section:hover tr.title-item,.panes tbody:hover tr.title-item{border-color:#027bff0d}.panes .pane-section .pane-item,.panes .pane-section tr,.panes tbody .pane-item,.panes tbody tr{flex:1;display:flex;flex-direction:row;justify-content:flex-start;align-items:center;align-self:stretch;padding:8px 18px;background:#ddd}.panes .pane-section .pane-item:nth-child(odd),.panes .pane-section tr:nth-child(odd),.panes tbody .pane-item:nth-child(odd),.panes tbody tr:nth-child(odd){background-color:#eee}.panes .pane-section .pane-item:nth-child(odd) td.description,.panes .pane-section tr:nth-child(odd) td.description,.panes tbody .pane-item:nth-child(odd) td.description,.panes tbody tr:nth-child(odd) td.description{color:#000000b3}.panes .pane-section .pane-item:nth-child(2n),.panes .pane-section tr:nth-child(2n),.panes tbody .pane-item:nth-child(2n),.panes tbody tr:nth-child(2n){background-color:#e4e4e4}.panes .pane-section .pane-item .pane-cell,.panes .pane-section .pane-item td,.panes .pane-section tr .pane-cell,.panes .pane-section tr td,.panes tbody .pane-item .pane-cell,.panes tbody .pane-item td,.panes tbody tr .pane-cell,.panes tbody tr td{color:#777;display:flex;flex-direction:row;justify-content:flex-start;align-items:center;flex:1;font-size:14px}.panes .pane-section .pane-item .pane-cell.vertical,.panes .pane-section .pane-item td.vertical,.panes .pane-section tr .pane-cell.vertical,.panes .pane-section tr td.vertical,.panes tbody .pane-item .pane-cell.vertical,.panes tbody .pane-item td.vertical,.panes tbody tr .pane-cell.vertical,.panes tbody tr td.vertical{display:flex;flex-direction:column;justify-content:flex-start;align-items:flex-start}.panes .pane-section .pane-item .pane-cell.description,.panes .pane-section .pane-item td.description,.panes .pane-section tr .pane-cell.description,.panes .pane-section tr td.description,.panes tbody .pane-item .pane-cell.description,.panes tbody .pane-item td.description,.panes tbody tr .pane-cell.description,.panes tbody tr td.description{align-self:stretch}.panes .pane-section .pane-item .pane-cell.value,.panes .pane-section .pane-item td.value,.panes .pane-section tr .pane-cell.value,.panes .pane-section tr td.value,.panes tbody .pane-item .pane-cell.value,.panes tbody .pane-item td.value,.panes tbody tr .pane-cell.value,.panes tbody tr td.value{flex:0;margin-left:20px;word-break:break-all;flex-basis:auto}.panes .pane-section .pane-item .pane-cell.value i.icon-legend,.panes .pane-section .pane-item td.value i.icon-legend,.panes .pane-section tr .pane-cell.value i.icon-legend,.panes .pane-section tr td.value i.icon-legend,.panes tbody .pane-item .pane-cell.value i.icon-legend,.panes tbody .pane-item td.value i.icon-legend,.panes tbody tr .pane-cell.value i.icon-legend,.panes tbody tr td.value i.icon-legend{font-size:10px;margin-right:10px}.panes .pane-section .pane-item .pane-cell.value i.icon-value,.panes .pane-section .pane-item td.value i.icon-value,.panes .pane-section tr .pane-cell.value i.icon-value,.panes .pane-section tr td.value i.icon-value,.panes tbody .pane-item .pane-cell.value i.icon-value,.panes tbody .pane-item td.value i.icon-value,.panes tbody tr .pane-cell.value i.icon-value,.panes tbody tr td.value i.icon-value{padding:2px 2px 1px;border-radius:2px;width:16px;text-align:center}.panes .pane-section .pane-item.title-item,.panes .pane-section tr.title-item,.panes tbody .pane-item.title-item,.panes tbody tr.title-item{border-bottom:1px solid #DDD}.panes .pane-section .pane-item.title-item td,.panes .pane-section tr.title-item td,.panes tbody .pane-item.title-item td,.panes tbody tr.title-item td{color:#027bffe6;font-size:16px;font-weight:700}.panes .pane-section .pane-item.title-item td i,.panes .pane-section tr.title-item td i,.panes tbody .pane-item.title-item td i,.panes tbody tr.title-item td i{margin-right:10px}.panes .pane-section .pane-item.title-item td .more,.panes .pane-section tr.title-item td .more,.panes tbody .pane-item.title-item td .more,.panes tbody tr.title-item td .more{flex:1;text-align:right;font-size:12px;color:#777;font-weight:400;font-style:italic}.panes .pane-section .pane-item.variable-item,.panes .pane-section tr.variable-item,.panes tbody .pane-item.variable-item,.panes tbody tr.variable-item{cursor:pointer}.panes .pane-section .pane-item.variable-item:hover,.panes .pane-section tr.variable-item:hover,.panes tbody .pane-item.variable-item:hover,.panes tbody tr.variable-item:hover{background-color:#027bff0d}.panes .pane-section .pane-item.variable-item:hover td,.panes .pane-section tr.variable-item:hover td,.panes tbody .pane-item.variable-item:hover td,.panes tbody tr.variable-item:hover td{font-weight:700;color:#000}.panes .pane-section .pane-item.variable-item:hover td i.icon-legend,.panes .pane-section tr.variable-item:hover td i.icon-legend,.panes tbody .pane-item.variable-item:hover td i.icon-legend,.panes tbody tr.variable-item:hover td i.icon-legend{color:#000}.panes .pane-section .pane-item.variable-item:hover td span,.panes .pane-section .pane-item.variable-item:hover td i.icon-value,.panes .pane-section tr.variable-item:hover td span,.panes .pane-section tr.variable-item:hover td i.icon-value,.panes tbody .pane-item.variable-item:hover td span,.panes tbody .pane-item.variable-item:hover td i.icon-value,.panes tbody tr.variable-item:hover td span,.panes tbody tr.variable-item:hover td i.icon-value{background-color:#0000004d;color:#000}.panes .pane-section .pane-item.variable-item:hover td.description,.panes .pane-section tr.variable-item:hover td.description,.panes tbody .pane-item.variable-item:hover td.description,.panes tbody tr.variable-item:hover td.description{color:#027bff}.panes .pane-section .pane-item.highlighted:hover,.panes .pane-section .pane-item.highlighted,.panes .pane-section tr.highlighted:hover,.panes .pane-section tr.highlighted,.panes tbody .pane-item.highlighted:hover,.panes tbody .pane-item.highlighted,.panes tbody tr.highlighted:hover,.panes tbody tr.highlighted{background-color:#027bff}.panes .pane-section .pane-item.highlighted:hover td,.panes .pane-section .pane-item.highlighted td,.panes .pane-section tr.highlighted:hover td,.panes .pane-section tr.highlighted td,.panes tbody .pane-item.highlighted:hover td,.panes tbody .pane-item.highlighted td,.panes tbody tr.highlighted:hover td,.panes tbody tr.highlighted td{font-weight:700;color:#000}.panes .pane-section .pane-item.highlighted:hover td i.icon-legend,.panes .pane-section .pane-item.highlighted td i.icon-legend,.panes .pane-section tr.highlighted:hover td i.icon-legend,.panes .pane-section tr.highlighted td i.icon-legend,.panes tbody .pane-item.highlighted:hover td i.icon-legend,.panes tbody .pane-item.highlighted td i.icon-legend,.panes tbody tr.highlighted:hover td i.icon-legend,.panes tbody tr.highlighted td i.icon-legend{color:#000}.panes .pane-section .pane-item.highlighted:hover td span,.panes .pane-section .pane-item.highlighted:hover td i.icon-value,.panes .pane-section .pane-item.highlighted td span,.panes .pane-section .pane-item.highlighted td i.icon-value,.panes .pane-section tr.highlighted:hover td span,.panes .pane-section tr.highlighted:hover td i.icon-value,.panes .pane-section tr.highlighted td span,.panes .pane-section tr.highlighted td i.icon-value,.panes tbody .pane-item.highlighted:hover td span,.panes tbody .pane-item.highlighted:hover td i.icon-value,.panes tbody .pane-item.highlighted td span,.panes tbody .pane-item.highlighted td i.icon-value,.panes tbody tr.highlighted:hover td span,.panes tbody tr.highlighted:hover td i.icon-value,.panes tbody tr.highlighted td span,.panes tbody tr.highlighted td i.icon-value{background-color:#0000004d;color:#000}.panes .pane-section .pane-item.highlighted:hover td.description,.panes .pane-section .pane-item.highlighted td.description,.panes .pane-section tr.highlighted:hover td.description,.panes .pane-section tr.highlighted td.description,.panes tbody .pane-item.highlighted:hover td.description,.panes tbody .pane-item.highlighted td.description,.panes tbody tr.highlighted:hover td.description,.panes tbody tr.highlighted td.description{color:#fff}.tiles{flex:1;display:flex;flex-direction:row;justify-content:flex-start;align-items:flex-start;align-self:stretch}.tiles .tiles-inner{display:flex;flex:1;flex-direction:column;flex-wrap:nowrap;justify-content:flex-start;align-items:flex-start;align-self:stretch;padding:2px}.tiles .tiles-inner .tile-item{display:flex;flex-direction:row;justify-content:flex-start;align-items:center;align-self:stretch;color:#000;margin:1px;padding:15px 10px 15px 15px;border-radius:4px;border-bottom:1px solid transparent}.tiles .tiles-inner .tile-item:hover,.tiles .tiles-inner .tile-item.active{border-left:4px solid rgb(2,123,255);border-radius:4px;border-bottom:2px solid #E7E7E7;background:#ddd;color:#027bff}.tiles .tiles-inner .tile-item:hover:hover,.tiles .tiles-inner .tile-item.active:hover{opacity:1}.tiles .tiles-inner .tile-item:hover.disabled,.tiles .tiles-inner .tile-item.active.disabled{border-left-color:#bbb;color:#000}.tiles .tiles-inner .tile-item:hover.starred,.tiles .tiles-inner .tile-item.active.starred{border-left-color:#ffa70a;color:#ffa70a}.tiles .tiles-inner .tile-item:hover.starred .tile-tail .head-icon i,.tiles .tiles-inner .tile-item.active.starred .tile-tail .head-icon i{opacity:1;color:#ffa70a;font-size:8px}.tiles .tiles-inner .tile-item.starred .tile-tail .head-icon i{font-size:8px;color:#ffa70a}.tiles .tiles-inner .tile-item.disabled .tile-body{opacity:.3}.tiles .tiles-inner .tile-item.disabled .tile-tail .head-icon i{color:#bbb;opacity:.4}.tiles .tiles-inner .tile-item .tile-tail{display:flex;flex-direction:row;justify-content:flex-end;align-items:center;align-self:stretch;margin-left:10px;min-width:10px}.tiles .tiles-inner .tile-item .tile-tail .head-icon{flex:1;display:flex;text-align:right;flex-direction:row;justify-content:center;align-items:center;align-self:stretch}.tiles .tiles-inner .tile-item .tile-tail .head-icon i{font-size:6px;display:flex}.tiles .tiles-inner .tile-item .tile-tail .status-icons{display:flex;flex-direction:row;justify-content:flex-end;align-items:center}.tiles .tiles-inner .tile-item .tile-tail .status-icons i{font-size:16px;margin-left:10px}.tiles .tiles-inner .tile-item .tile-body{flex:1;display:flex;flex-direction:row;justify-content:flex-start;align-items:center;font-size:15px;font-weight:400;letter-spacing:.8px;line-height:22px;margin:0;flex-wrap:nowrap}.tiles .tiles-inner .tile-item .tile-body i{font-size:8px;margin-right:5px}.tiles .tiles-inner .tile-item .tile-metrics{display:flex;flex-direction:row;justify-content:flex-end;align-items:center;margin:0}.tiles .tiles-inner .tile-item .tile-metrics .foot-span span,.tiles .tiles-inner .tile-item .tile-metrics .foot-span{opacity:.8;font-size:13px;font-family:Courier New}span.empty{background:#ffa70a4d;color:#ffa70a;text-transform:lowercase;border-radius:2px;padding:2px 4px;font-weight:700}.inner-empty{display:flex;flex:1;flex-direction:column;align-self:stretch;justify-content:center;align-items:center}.inner-empty i{font-size:90px;opacity:.3;text-shadow:0 -1px #CCC,0 0px .5px #BBB}.toggle{position:relative;display:flex;flex-direction:row;justify-content:flex-start;align-items:center}.toggle input{display:none}.toggle input:checked+label{background:#027bff;border:1px solid rgba(0,0,0,.1);box-shadow:0 2px 2px #222 inset}.toggle input:checked+label:after{content:"";display:block;border-radius:50%;margin-left:21px;width:18px;height:18px;transition:.2s;background:#9bcbff;box-shadow:0 2px #0063ce}.toggle label{width:44px;height:26px;border-radius:15px;background:#ddd;cursor:pointer;border:1px solid rgba(0,0,0,.1);box-shadow:0 2px 2px #111 inset}.toggle label:after{content:"";display:block;border-radius:50%;width:18px;height:18px;margin:3px;background:#888;box-shadow:0 2px #555555e6;transition:.2s}.form-holder{display:flex;flex-direction:column;justify-content:flex-start;align-items:flex-start;align-self:stretch}.form-holder form{max-width:434px}form{display:flex;flex-direction:column;justify-content:flex-start;align-items:flex-start;align-self:stretch}form .alert{padding:8px 15px;font-size:14px;margin:0 0 25px}.from-group-condition{flex-direction:column;align-self:stretch;justify-content:flex-start;align-items:flex-start;display:flex}.form-group{display:flex;flex-direction:column;justify-content:flex-start;align-items:flex-start;align-self:stretch;width:100%;flex:1;margin-bottom:20px}.form-group label{flex:1;font-size:12px;line-height:18px;display:flex;flex-direction:row;justify-content:flex-start;align-items:center;align-self:stretch;color:#999}.form-group label.btn-upload{color:#000;font-size:14px;flex:0;flex-basis:auto;margin-top:5px}.form-group label.btn-upload input[type=file]{display:none}.form-group label.btn-upload input[type=text]{margin-bottom:2px;margin-left:10px}.form-group label.btn-upload span.btn{padding-right:20px}.form-group label.btn-upload i{margin-left:3px;margin-right:10px}.form-group .widget{margin-top:10px;align-self:stretch;display:flex;flex-direction:row}.form-group .widget.vertical{flex-direction:column}.form-group .widget.vertical select,.form-group .widget.vertical input{align-self:stretch}.form-group .widget.vertical select:first-child,.form-group .widget.vertical input:first-child{margin-bottom:10px}.form-group .widget .btn{margin-left:10px}.form-group .widget.widget-unit select,.form-group .widget.widget-unit input{flex-grow:0;background:none;box-shadow:none;border:none;border-bottom:1px solid #CCC;border-radius:0;max-width:80px;padding-left:0;color:#000;text-align:center}.form-group .widget.widget-unit span{font-size:12px;display:flex;flex-direction:row;justify-content:flex-start;align-items:center;margin-left:5px;color:#aaa}.form-group .widget div{color:#000000b3;font-size:14px}.form-group .widget select,.form-group .widget input,.form-group .widget textarea{outline:none;padding:8px 0 5px 8px;border-radius:2px;border:1px solid rgba(0,0,0,.05);flex:1;background:#aaa;box-shadow:0 2px 1px #bbb,0 4px 2px #ccc inset;color:#222;font-size:14px}.form-group .widget select.input-naked,.form-group .widget select.disabled,.form-group .widget select[disabled],.form-group .widget input.input-naked,.form-group .widget input.disabled,.form-group .widget input[disabled],.form-group .widget textarea.input-naked,.form-group .widget textarea.disabled,.form-group .widget textarea[disabled]{color:#aaa;background:none;box-shadow:none;border:none;border-bottom:1px solid #CCC;border-radius:0}.form-group .widget select.input-naked,.form-group .widget input.input-naked,.form-group .widget textarea.input-naked{padding-left:0;color:#444}.form-group .widget select.disabled,.form-group .widget select[disabled],.form-group .widget input.disabled,.form-group .widget input[disabled],.form-group .widget textarea.disabled,.form-group .widget textarea[disabled]{border:none;background:#fff;border-radius:4px;padding-left:10px;padding-right:10px}.form-group.tab-select{border-bottom:1px solid #BBB;display:flex;flex-direction:row;position:relative;height:48px;padding:48px 0 0;flex:0;flex-basis:auto}.form-group.tab-select .widget{height:49px;margin-top:0;display:flex;flex-direction:row;justify-content:flex-start;align-items:center;position:absolute;top:0;left:0;border-bottom:2px solid rgb(2,123,255);color:#027bff}.form-group.tab-select .widget select{border:none;background:none;box-shadow:none;padding:10px 35px 10px 10px;margin:0;color:inherit;appearance:none;-moz-appearance:none;-webkit-appearance:none;text-align:left;font-weight:700;cursor:pointer;border-radius:4px 4px 0 0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:200px;z-index:2}.form-group.tab-select .widget i{margin-left:10px;margin-right:0}.form-group.tab-select .widget i.triangle{margin-top:-4px;margin-left:0;position:absolute;right:10px}.form-group.form-group-horizontal{margin:10px 0 20px;flex-direction:row;justify-content:flex-start;align-items:center}.form-group.form-group-horizontal .widget{margin:0;display:flex;flex-direction:row;justify-content:flex-start;align-items:center}.actions{display:flex;flex-direction:row;justify-content:flex-end;align-items:center;align-self:stretch;margin:20px 0 0}.actions.actions-intermediate{margin:0}.actions button{margin-left:25px}.actions.actions-left{justify-content:flex-start}.actions.actions-left .btn{margin-left:0;margin-right:25px}.actions.actions-right{justify-content:flex-end}.actions.actions-right .btn{margin-left:10px;margin-right:0}.actions.actions-center{justify-content:center}.actions.actions-center .btn{margin-left:0;margin-right:0}.view-content-list main .main-container .page-content .inner{padding-bottom:10px}.view-content-list main .main-container .content-object-input{margin-bottom:6px}.view-content-list.dragover main .main-container .inner .dropzone{border-radius:4px;background:#0000001a;border:1px dashed rgba(0,0,0,.5)}.view-content-edit main .main-container .bottom-content .page-content{flex:1}.view-content-edit main .main-container .bottom-content .page-content .form-holder{margin:20px 20px 20px 10px;flex:1}.view-content-edit main .main-container .bottom-content .page-panel.right-panel{flex:2;align-self:stretch;display:flex;flex-direction:column;overflow:hidden;justify-content:flex-start;align-items:center;padding:20px}.view-content-edit main .main-container .bottom-content .page-panel.right-panel h3{color:#000;padding:10px 10px 10px 0;margin-bottom:20px;font-size:16px;align-self:stretch;margin-left:-8px}.view-content-edit main .main-container .bottom-content .page-panel.right-panel h3 span{border-width:1px;border-style:solid;border-radius:4px;padding:4px 10px;margin-left:5px}.view-content-edit main .main-container .bottom-content .page-panel.right-panel h3 i{font-size:16px}.view-content-edit main .main-container .bottom-content .page-panel.right-panel .iframe-wrapper{display:flex;flex-direction:column;width:100%;position:relative;padding-top:56.25%;overflow:hidden;border-radius:4px;outline:4px solid rgba(0,0,0,.1)}.view-content-edit main .main-container .bottom-content .page-panel.right-panel .iframe-wrapper iframe{position:absolute;top:0;left:0;width:100%;height:100%;border:none}.view-logs-list main .main-container .bottom-content .page-content .inner{padding-top:8px;padding-bottom:8px}.view-logs-list main .main-container .bottom-content .page-content .logs{flex:1;display:flex;flex-direction:column;align-self:stretch}.view-logs-list main .main-container .bottom-content .page-content .logs pre{flex:1;background:#000000e6;border:1px solid rgba(85,85,85,.5);border-radius:4px;font-family:monospace;color:#f2f2f2;padding:20px;overflow:auto;align-self:stretch}.view-node-player-edit main .main-container .bottom-content .page-content{flex:1}.view-node-player-edit main .main-container .bottom-content .page-content .form-holder{margin:20px 20px 20px 10px}.view-player-group-list main .main-container .players-holder ul.players{display:flex;flex-direction:column;justify-content:flex-start;align-items:flex-start;align-self:stretch;margin:10px 0 0;border:1px dashed #DDD;border-radius:4px;padding:10px}.view-player-group-list main .main-container .players-holder ul.players li.player-item{display:flex;flex-direction:row;justify-content:flex-start;align-items:center;align-self:stretch;margin:0 0 2px}.view-player-group-list main .main-container .players-holder ul.players li.player-item .head{display:flex;flex-direction:column;justify-content:center;align-items:center;color:#666;font-size:10px;padding:10px;cursor:default}.view-player-group-list main .main-container .players-holder ul.players li.player-item:hover .infos .title{color:#000}.view-player-group-list main .main-container .players-holder ul.players li.player-item .infos{display:flex;flex-direction:row;justify-content:flex-start;align-items:center;color:#555;font-size:12px;margin-right:5px;flex:1;max-width:180px;background:#fff;border:1px solid #CCC;border-radius:4px;padding:3px 7px}.view-player-group-list main .main-container .players-holder ul.players li.player-item .infos .title{font-size:13px;color:#555;display:block;word-break:break-all;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%}.view-player-group-list main .main-container .players-holder ul.players li.player-item .infos .type{display:flex;flex-direction:row;justify-content:flex-start;align-items:center;color:#555;font-size:12px;margin-right:5px}.view-player-group-list main .main-container .players-holder ul.players li.player-item .body{display:block;flex-direction:row;justify-content:flex-start;align-items:center;margin:0 10px;background:#ebebeb;padding:10px;align-self:stretch;flex:1;border-radius:4px;color:#333;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:360px;font-size:12px}.view-player-group-list main .main-container .players-holder ul.players li.player-item .body span{opacity:.5;margin-right:7px;font-size:10px}.view-player-group-list main .main-container .players-holder ul.players li.player-item .tail{display:flex;flex-direction:row;justify-content:center;align-items:center}.view-player-group-list main .main-container .players-holder ul.players li.player-item .tail a{color:#000}.view-playlist-list main .main-container p{font-size:12px;line-height:18px;display:flex;margin-bottom:5px;flex-direction:row;justify-content:flex-start;align-items:center;align-self:stretch;color:#999}.view-playlist-list main .main-container .modal-slide h2{font-size:20px}.view-playlist-list main .main-container .modal-slide input[disabled]{color:#555}.view-playlist-list main .main-container .modal-slide .slide-schedule-group select,.view-playlist-list main .main-container .modal-slide .slide-schedule-end-group select{margin-right:5px}.view-playlist-list main .main-container .modal-slide .slide-schedule-group select,.view-playlist-list main .main-container .modal-slide .slide-schedule-group input,.view-playlist-list main .main-container .modal-slide .slide-schedule-end-group select,.view-playlist-list main .main-container .modal-slide .slide-schedule-end-group input{font-size:12px;max-width:50%}.view-playlist-list main .main-container .modal-slide .slide-schedule-group select.datetimepicker,.view-playlist-list main .main-container .modal-slide .slide-schedule-group input.datetimepicker,.view-playlist-list main .main-container .modal-slide .slide-schedule-end-group select.datetimepicker,.view-playlist-list main .main-container .modal-slide .slide-schedule-end-group input.datetimepicker{margin-left:5px;padding-left:0}.view-playlist-list main .main-container .bottom-content .page-content{flex:1}.view-playlist-list main .main-container .bottom-content .page-content.with-right-panel{flex:.5}.view-playlist-list main .main-container .bottom-content .page-content .inner{padding:0}.view-playlist-list main .main-container .bottom-content .page-content .inner h3{font-size:16px;font-weight:500;color:#222;text-decoration:none;margin:0 0 20px}.view-playlist-list main .main-container .bottom-content .page-content .inner .playlist-holder{margin:20px 20px 20px 10px;flex:1}.view-playlist-list main .main-container .bottom-content .page-content .inner .playlist-holder .form-holder{margin:20px 0 0}.view-playlist-list main .main-container .bottom-content .page-content .inner .playlist-holder .form-holder form{max-width:initial}.view-playlist-list main .main-container .bottom-content .page-content .inner .playlist-holder .form-holder .form-group{flex-grow:0;margin-bottom:5px}.view-playlist-list main .main-container .bottom-content .page-content .inner .playlist-holder .preview-holder{position:relative}.view-playlist-list main .main-container .bottom-content .page-content .inner .playlist-holder .preview-holder .form-group{flex-grow:0;margin-bottom:0}.view-playlist-list main .main-container .bottom-content .page-content .inner .playlist-holder .preview-holder .hover-only{display:none}.view-playlist-list main .main-container .bottom-content .page-content .inner .playlist-holder .preview-holder:hover .hover-only{display:flex;position:absolute}.view-playlist-list main .main-container .bottom-content .page-content .inner .playlist-holder .preview-holder:hover .hover-only:hover{background:#ccc}.view-playlist-list main .main-container .bottom-content .page-content .inner .playlist-holder h4{font-size:14px;display:flex;flex-direction:row;justify-content:flex-start;align-items:center;align-self:stretch;color:#000;padding-bottom:10px;text-decoration:none}.view-playlist-list main .main-container .bottom-content .page-content .inner .playlist-holder h4.divide{border-top:1px solid #DDD;margin-top:20px;padding-top:20px}.view-playlist-list main .main-container .bottom-content .page-content .inner .playlist-holder .qrcode-pic{margin-top:10px}.view-playlist-list main .main-container .bottom-content .page-content .inner .playlist-holder .qrcode-pic img{border:1px dashed #AAA;padding:5px;border-radius:4px}.view-playlist-list main .main-container .bottom-content .page-content .inner .playlist-holder .preview{background:#000;border:1px solid rgba(0,0,0,.3);border-radius:4px;justify-content:center;align-items:center;align-self:stretch;display:flex;margin:10px 0 20px;height:300px}.view-playlist-list main .main-container .bottom-content .page-content .inner .playlist-holder .preview iframe{flex:1;align-self:stretch}.view-playlist-list main .main-container .bottom-content .page-content .inner .slides-holder{align-self:stretch;border-right:1px solid #DDD;margin:20px 10px 20px 20px;padding-right:20px;flex:1.3}.view-playlist-list main .main-container .bottom-content .page-panel.left-panel{flex:.3;max-width:initial;justify-content:center;align-items:center;display:flex}.view-player-group-list main .main-container p{font-size:12px;line-height:18px;display:flex;margin-bottom:5px;flex-direction:row;justify-content:flex-start;align-items:center;align-self:stretch;color:#999}.view-player-group-list main .main-container .bottom-content .page-content{flex:1}.view-player-group-list main .main-container .bottom-content .page-content .inner{padding:0}.view-player-group-list main .main-container .bottom-content .page-content .inner h3{font-size:16px;font-weight:500;color:#222;text-decoration:none;margin:0 0 20px}.view-player-group-list main .main-container .bottom-content .page-content .inner .node-player-group-holder{margin:20px 20px 20px 10px;flex:1}.view-player-group-list main .main-container .bottom-content .page-content .inner .node-player-group-holder .form-holder{margin:20px 0 0}.view-player-group-list main .main-container .bottom-content .page-content .inner .node-player-group-holder .form-holder form{max-width:initial}.view-player-group-list main .main-container .bottom-content .page-content .inner .node-player-group-holder .form-holder .form-group{flex-grow:0;margin-bottom:15px}.view-player-group-list main .main-container .bottom-content .page-content .inner .node-player-group-holder .preview-holder{position:relative}.view-player-group-list main .main-container .bottom-content .page-content .inner .node-player-group-holder .preview-holder .form-group{flex-grow:0;margin-bottom:0}.view-player-group-list main .main-container .bottom-content .page-content .inner .node-player-group-holder .preview-holder .hover-only{display:none}.view-player-group-list main .main-container .bottom-content .page-content .inner .node-player-group-holder .preview-holder:hover .hover-only{display:flex;position:absolute}.view-player-group-list main .main-container .bottom-content .page-content .inner .node-player-group-holder .preview-holder:hover .hover-only:hover{background:#ccc}.view-player-group-list main .main-container .bottom-content .page-content .inner .node-player-group-holder h4{font-size:14px;display:flex;flex-direction:row;justify-content:flex-start;align-items:center;align-self:stretch;color:#000;padding-bottom:10px;text-decoration:none}.view-player-group-list main .main-container .bottom-content .page-content .inner .node-player-group-holder h4.divide{border-top:1px solid #DDD;margin-top:20px;padding-top:20px}.view-player-group-list main .main-container .bottom-content .page-content .inner .node-player-group-holder .preview{background:#000;border:1px solid rgba(0,0,0,.3);border-radius:4px;justify-content:center;align-items:center;align-self:stretch;display:flex;margin:10px 0 20px;height:300px}.view-player-group-list main .main-container .bottom-content .page-content .inner .node-player-group-holder .preview iframe{flex:1;align-self:stretch}.view-player-group-list main .main-container .bottom-content .page-content .inner .players-holder{align-self:stretch;border-right:1px solid #DDD;margin:20px 10px 20px 20px;padding-right:20px;flex:1.3}.view-player-group-list main .main-container .bottom-content .page-panel.left-panel{flex:.3;max-width:initial;justify-content:center;align-items:center;display:flex}.view-playlist-list main .main-container .page-content .inner h3.divide{margin-top:50px}.view-playlist-list main .main-container .slides-holder ul.slides{display:flex;flex-direction:column;justify-content:flex-start;align-items:flex-start;align-self:stretch;margin:10px 0 0;border:1px dashed #DDD;border-radius:4px;padding:10px}.view-playlist-list main .main-container .slides-holder ul.slides li.slide-item{display:flex;flex-direction:row;justify-content:flex-start;align-items:center;align-self:stretch;margin:0 0 2px}.view-playlist-list main .main-container .slides-holder ul.slides li.slide-item.disabled .infos .title{color:#ccc}.view-playlist-list main .main-container .slides-holder ul.slides li.slide-item.disabled .infos .type i{color:#ccc!important}.view-playlist-list main .main-container .slides-holder ul.slides li.slide-item.disabled .body{opacity:0}.view-playlist-list main .main-container .slides-holder ul.slides li.slide-item .sort{display:flex;flex-direction:column;justify-content:center;align-items:center}.view-playlist-list main .main-container .slides-holder ul.slides li.slide-item .sort a{color:#666;font-size:10px;padding:10px;cursor:move}.view-playlist-list main .main-container .slides-holder ul.slides li.slide-item .sort a:hover{color:#027bff}.view-playlist-list main .main-container .slides-holder ul.slides li.slide-item .infos{display:flex;flex-direction:row;justify-content:flex-start;align-items:center;color:#555;font-size:12px;margin-right:5px;flex:1;max-width:120px;background:#fff;border:1px solid #CCC;border-radius:4px;padding:3px 7px}.view-playlist-list main .main-container .slides-holder ul.slides li.slide-item .infos:hover .title{color:#000}.view-playlist-list main .main-container .slides-holder ul.slides li.slide-item .infos .title{display:block;word-break:break-all;font-size:13px;color:#555;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%}.view-playlist-list main .main-container .slides-holder ul.slides li.slide-item .infos .type{display:flex;flex-direction:row;justify-content:flex-start;align-items:center;color:#555;font-size:12px;margin-right:5px}.view-playlist-list main .main-container .slides-holder ul.slides li.slide-item .body{display:flex;flex-direction:row;justify-content:flex-start;align-items:center;margin:0 10px;background:#ebebeb;padding:10px;align-self:stretch;flex:1;border-radius:4px;font-size:13px;color:#000}.view-playlist-list main .main-container .slides-holder ul.slides li.slide-item .body .range{display:flex;flex-direction:column;justify-content:flex-start;align-items:flex-start;flex:1;max-width:315px;overflow-x:auto;white-space:nowrap}.view-playlist-list main .main-container .slides-holder ul.slides li.slide-item .body .range .start{display:flex;flex-direction:row;justify-content:flex-start;align-items:center;margin-bottom:8px}.view-playlist-list main .main-container .slides-holder ul.slides li.slide-item .body .range .end{display:flex;flex-direction:row;justify-content:flex-start;align-items:center}.view-playlist-list main .main-container .slides-holder ul.slides li.slide-item .body .range .start .prefix,.view-playlist-list main .main-container .slides-holder ul.slides li.slide-item .body .range .end .prefix{margin-left:5px;margin-right:5px;font-size:12px;color:#222}.view-playlist-list main .main-container .slides-holder ul.slides li.slide-item .body .range .start .cron-description,.view-playlist-list main .main-container .slides-holder ul.slides li.slide-item .body .range .end .cron-description{display:block;word-break:break-all;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%;margin-left:5px;font-size:10px;opacity:.5}.view-playlist-list main .main-container .slides-holder ul.slides li.slide-item .tail{display:flex;flex-direction:row;justify-content:center;align-items:center}.view-playlist-list main .main-container .slides-holder ul.slides li.slide-item .tail a{color:#000}.view-plugins-list main .main-container .bottom-content .page-content .inner{padding:10px}.view-settings-list main .main-container .bottom-content .page-content .inner{padding:10px}.view-sysinfo-list main .main-container .bottom-content .page-content .inner{padding:10px}.view-sysinfo-list .reboot{color:#333}.view-login main .main-container{position:relative}.view-login main .main-container .alert{position:absolute;top:0;left:0;right:0}.view-login main .main-container .login-content{display:flex;flex:1;flex-direction:column;justify-content:center;align-items:center}.view-login main .main-container .login-content .form-holder{width:400px;display:flex;justify-content:center;align-items:center;align-self:stretch;margin-left:auto;margin-right:auto}.view-login main .main-container .login-content .form-holder .card{display:flex;justify-content:center;align-items:center;align-self:stretch;border-radius:6px;padding:50px;color:#fff}.view-login main .main-container .login-content .form-holder .card form{padding:0;flex:1;display:flex;justify-content:center;align-items:center;align-self:stretch}.view-login main .main-container .login-content .form-holder .card form .actions{margin-top:10px}.view-login main .main-container .login-content .form-holder .card form .actions .btn{padding-left:20px;padding-right:20px}.view-auth-user-list main .main-container .bottom-content .page-content .inner{padding:10px}.view-auth-user-list main .main-container .bottom-content .page-content .inner .tile-item.disabled .tile-body{opacity:.3;text-decoration-line:line-through}.view-auth-user-list main .main-container .bottom-content .page-content .inner .tile-item .tile-tail .btn{margin-left:10px}.view-auth-user-list main .main-container .bottom-content .page-content .inner .tile-item .tile-tail .btn:first-child{margin-left:0}.view-auth-user-list main .main-container .bottom-content .page-content .inner .tile-item .tile-metrics{flex:1;flex-direction:row;justify-content:flex-start;align-items:center}.view-auth-user-list main .main-container .bottom-content .page-content .inner .tile-item .tile-metrics .widget,.view-auth-user-list main .main-container .bottom-content .page-content .inner .tile-item .tile-metrics .form-group{margin:0}.view-auth-user-list main .main-container .bottom-content .page-content .inner .tile-item .tile-metrics label{flex-grow:0}.view-auth-user-list main .main-container .bottom-content .page-content .inner .tile-item .tile-metrics input{margin-left:10px;margin-right:10px;max-width:320px}menu h1.logo a{color:#666}menu:hover h1.logo a{color:transparent}ul.explr-dirview li a.with-thumbnail .img-holder{background:#ddd}ul.explr-dirview li a i{color:#027bff}button.btn-pixel,.btn.btn-pixel{background:#fff;color:#444;box-shadow:4px 0 #ccc,0 4px #11a948,-4px 0 #027bff,0 -4px #ef0e5d}button.btn-pixel:hover,.btn.btn-pixel:hover{box-shadow:6px 0 #ccc,0 6px #11a948,-6px 0 #027bff,0 -6px #ef0e5d}button.btn-naked,.btn.btn-naked{color:#777}button.btn-naked:hover,.btn.btn-naked:hover,button.btn-neutral:hover,.btn.btn-neutral:hover{box-shadow:0 2px 0 1px #666 inset}.tiles .tiles-inner .tile-item{border-top:2px solid transparent;border-right:2px solid transparent;border-bottom:2px solid transparent}.tiles .tiles-inner .tile-item:hover,.tiles .tiles-inner .tile-item.active{border-left:2px solid #E7E7E7;border-top:2px solid #E7E7E7;border-right:2px solid #E7E7E7;border-bottom:2px solid #E7E7E7;background:#fff}.tiles .tiles-inner .tile-item:hover,.tiles .tiles-inner .tile-item.active{border-color:#027bff}.tiles .tiles-inner .tile-item:hover.starred,.tiles .tiles-inner .tile-item.active.starred{border-color:#ffa70a}.tiles .tiles-inner .tile-item:hover.disabled,.tiles .tiles-inner .tile-item.active.disabled{border-color:#bbb}.panes .pane-section .pane-item:nth-child(odd),.panes .pane-section tr:nth-child(odd),.panes tbody .pane-item:nth-child(odd),.panes tbody tr:nth-child(odd){background-color:#fff}.panes .pane-section .pane-item:nth-child(2n),.panes .pane-section tr:nth-child(2n),.panes tbody .pane-item:nth-child(2n),.panes tbody tr:nth-child(2n){background-color:#f7f7f7}.form-group .widget select,.form-group .widget input,.form-group .widget textarea{box-shadow:0 2px 1px #ddd,0 4px 2px #ddd inset;color:#555;background:#eee}.toggle label{box-shadow:0 2px 2px #ccc inset}.toggle label:after{box-shadow:0 2px #cccccce6}.toggle input:checked+label{box-shadow:0 2px 2px #0000004d inset}ul.pills{box-shadow:1px 1px .5px .5px inset #aaa3;background:#eee}ul.pills li a{color:#444;background:#fff}ul.pills li.active a{color:#fff;background:#027bff}.breadcrumb-container ul.breadcrumb{box-shadow:1px 1px .5px .5px inset #aaa3;background:#eee}.breadcrumb-container ul.breadcrumb li a,.breadcrumb-container ul.breadcrumb li span,.breadcrumb-container ul.breadcrumb li{color:#444}.breadcrumb-container ul.breadcrumb li:hover a{color:#fff}.breadcrumb-container ul.breadcrumb li.divider i{color:#bbb}.dropdown ul.dropdown-menu li.danger:hover a{color:#fff}.inner-empty i{color:#ddd;text-shadow:0 -1px #999,0 0px .5px #666}.view-player-group-list main .main-container .players-holder ul.players li.player-item .tail a,.view-playlist-list main .main-container .slides-holder ul.slides li.slide-item .tail a{color:#888}.view-player-group-list main .main-container .players-holder ul.players li.player-item .tail a:hover,.view-playlist-list main .main-container .slides-holder ul.slides li.slide-item .tail a:hover{color:#fff}.form-group .widget select.disabled,.form-group .widget select[disabled],.form-group .widget input.disabled,.form-group .widget input[disabled],.form-group .widget textarea.disabled,.form-group .widget textarea[disabled]{border:none;background:#eee;border-radius:4px;padding-left:10px;padding-right:10px}.modal-explr-picker .explr-tree{background:#f7f7f7} +.warning{color:#e56723!important}.bg-warning{background-color:#e56723!important}.border-warning{border-color:#e56723!important}.orange{color:#e56723!important}.bg-orange{background-color:#e56723!important}.border-orange{border-color:#e56723!important}.info{color:#027bff!important}.bg-info{background-color:#027bff!important}.border-info{border-color:#027bff!important}.info-alt{color:#075cb7!important}.bg-info-alt{background-color:#075cb7!important}.border-info-alt{border-color:#075cb7!important}.success{color:#11a948!important}.bg-success{background-color:#11a948!important}.border-success{border-color:#11a948!important}.success-alt{color:#11a948!important}.bg-success-alt{background-color:#11a948!important}.border-success-alt{border-color:#11a948!important}.error{color:#ef0e5d!important}.bg-error{background-color:#ef0e5d!important}.border-error{border-color:#ef0e5d!important}.error-alt{color:#c20941!important}.bg-error-alt{background-color:#c20941!important}.border-error-alt{border-color:#c20941!important}.danger{color:#ef0e5d!important}.bg-danger{background-color:#ef0e5d!important}.border-danger{border-color:#ef0e5d!important}.danger-alt{color:#c20941!important}.bg-danger-alt{background-color:#c20941!important}.border-danger-alt{border-color:#c20941!important}.purple{color:#bc48ff!important}.bg-purple{background-color:#bc48ff!important}.border-purple{border-color:#bc48ff!important}.purple-alt{color:#692fbd!important}.bg-purple-alt{background-color:#692fbd!important}.border-purple-alt{border-color:#692fbd!important}.neutral{color:#464646!important}.bg-neutral{background-color:#464646!important}.border-neutral{border-color:#464646!important}.yellow{color:#ffa70a!important}.bg-yellow{background-color:#ffa70a!important}.border-yellow{border-color:#ffa70a!important}.white{color:#fff!important}.bg-white{background-color:#fff!important}.border-white{border-color:#fff!important}.black{color:#000!important}.bg-black{background-color:#000!important}.border-black{border-color:#000!important}.youtube{color:#fd3c01!important}.bg-youtube{background-color:#fd3c01!important}.border-youtube{border-color:#fd3c01!important}.raspbian{color:#b61240!important}.bg-raspbian{background-color:#b61240!important}.border-raspbian{border-color:#b61240!important}.windows{color:#12a7e3!important}.bg-windows{background-color:#12a7e3!important}.border-windows{border-color:#12a7e3!important}.macos{color:#b3bcc2!important}.bg-macos{background-color:#b3bcc2!important}.border-macos{border-color:#b3bcc2!important}.debian{color:#cf084e!important}.bg-debian{background-color:#cf084e!important}.border-debian{border-color:#cf084e!important}.fedora{color:#52a2da!important}.bg-fedora{background-color:#52a2da!important}.border-fedora{border-color:#52a2da!important}.ubuntu{color:#d64514!important}.bg-ubuntu{background-color:#d64514!important}.border-ubuntu{border-color:#d64514!important}.suse{color:#6fb425!important}.bg-suse{background-color:#6fb425!important}.border-suse{border-color:#6fb425!important}.redhat{color:#c60200!important}.bg-redhat{background-color:#c60200!important}.border-redhat{border-color:#c60200!important}.centos{color:#9b4c88!important}.bg-centos{background-color:#9b4c88!important}.border-centos{border-color:#9b4c88!important}.other{color:#ffa70a!important}.bg-other{background-color:#ffa70a!important}.border-other{border-color:#ffa70a!important}.gscale0{color:#fff!important}.bg-gscale0{background-color:#fff!important}.border-gscale0{border-color:#fff!important}.gscaleF{color:#000!important}.bg-gscaleF{background-color:#000!important}.border-gscaleF{border-color:#000!important}button.btn-warning,.btn.btn-warning{background:#e56723;box-shadow:0 2px #913e11}button.btn-warning:hover,.btn.btn-warning:hover{box-shadow:0 2px 0 1px #913e11 inset}button.btn-warning:focus,.btn.btn-warning:focus{background:#913e11}button.btn-wire-warning,.btn.btn-wire-warning{background:transparent;box-shadow:none;border:2px solid rgb(229,103,35);color:#000c}button.btn-wire-warning i.btn-match,.btn.btn-wire-warning i.btn-match{color:#e56723}button.btn-wire-warning:hover,.btn.btn-wire-warning:hover{background:#e567230d;border-color:#be5117;color:#be5117;box-shadow:none}button.btn-wire-warning:focus,.btn.btn-wire-warning:focus{border-color:#913e11;background:transparent}button.btn-orange,.btn.btn-orange{background:#e56723;box-shadow:0 2px #913e11}button.btn-orange:hover,.btn.btn-orange:hover{box-shadow:0 2px 0 1px #913e11 inset}button.btn-orange:focus,.btn.btn-orange:focus{background:#913e11}button.btn-wire-orange,.btn.btn-wire-orange{background:transparent;box-shadow:none;border:2px solid rgb(229,103,35);color:#000c}button.btn-wire-orange i.btn-match,.btn.btn-wire-orange i.btn-match{color:#e56723}button.btn-wire-orange:hover,.btn.btn-wire-orange:hover{background:#e567230d;border-color:#be5117;color:#be5117;box-shadow:none}button.btn-wire-orange:focus,.btn.btn-wire-orange:focus{border-color:#913e11;background:transparent}button.btn-info,.btn.btn-info{background:#027bff;box-shadow:0 2px #004a9b}button.btn-info:hover,.btn.btn-info:hover{box-shadow:0 2px 0 1px #004a9b inset}button.btn-info:focus,.btn.btn-info:focus{background:#004a9b}button.btn-wire-info,.btn.btn-wire-info{background:transparent;box-shadow:none;border:2px solid rgb(2,123,255);color:#000c}button.btn-wire-info i.btn-match,.btn.btn-wire-info i.btn-match{color:#027bff}button.btn-wire-info:hover,.btn.btn-wire-info:hover{background:#027bff0d;border-color:#0063ce;color:#0063ce;box-shadow:none}button.btn-wire-info:focus,.btn.btn-wire-info:focus{border-color:#004a9b;background:transparent}button.btn-info-alt,.btn.btn-info-alt{background:#075cb7;box-shadow:0 2px #032b55}button.btn-info-alt:hover,.btn.btn-info-alt:hover{box-shadow:0 2px 0 1px #032b55 inset}button.btn-info-alt:focus,.btn.btn-info-alt:focus{background:#032b55}button.btn-wire-info-alt,.btn.btn-wire-info-alt{background:transparent;box-shadow:none;border:2px solid rgb(7,92,183);color:#000c}button.btn-wire-info-alt i.btn-match,.btn.btn-wire-info-alt i.btn-match{color:#075cb7}button.btn-wire-info-alt:hover,.btn.btn-wire-info-alt:hover{background:#075cb70d;border-color:#054386;color:#054386;box-shadow:none}button.btn-wire-info-alt:focus,.btn.btn-wire-info-alt:focus{border-color:#032b55;background:transparent}button.btn-success,.btn.btn-success{background:#11a948;box-shadow:0 2px #084c21}button.btn-success:hover,.btn.btn-success:hover{box-shadow:0 2px 0 1px #084c21 inset}button.btn-success:focus,.btn.btn-success:focus{background:#084c21}button.btn-wire-success,.btn.btn-wire-success{background:transparent;box-shadow:none;border:2px solid rgb(17,169,72);color:#000c}button.btn-wire-success i.btn-match,.btn.btn-wire-success i.btn-match{color:#11a948}button.btn-wire-success:hover,.btn.btn-wire-success:hover{background:#11a9480d;border-color:#0c7b34;color:#0c7b34;box-shadow:none}button.btn-wire-success:focus,.btn.btn-wire-success:focus{border-color:#084c21;background:transparent}button.btn-success-alt,.btn.btn-success-alt{background:#11a948;box-shadow:0 2px #084c21}button.btn-success-alt:hover,.btn.btn-success-alt:hover{box-shadow:0 2px 0 1px #084c21 inset}button.btn-success-alt:focus,.btn.btn-success-alt:focus{background:#084c21}button.btn-wire-success-alt,.btn.btn-wire-success-alt{background:transparent;box-shadow:none;border:2px solid rgb(17,169,72);color:#000c}button.btn-wire-success-alt i.btn-match,.btn.btn-wire-success-alt i.btn-match{color:#11a948}button.btn-wire-success-alt:hover,.btn.btn-wire-success-alt:hover{background:#11a9480d;border-color:#0c7b34;color:#0c7b34;box-shadow:none}button.btn-wire-success-alt:focus,.btn.btn-wire-success-alt:focus{border-color:#084c21;background:transparent}button.btn-error,.btn.btn-error{background:#ef0e5d;box-shadow:0 2px #8f0838}button.btn-error:hover,.btn.btn-error:hover{box-shadow:0 2px 0 1px #8f0838 inset}button.btn-error:focus,.btn.btn-error:focus{background:#8f0838}button.btn-wire-error,.btn.btn-wire-error{background:transparent;box-shadow:none;border:2px solid rgb(239,14,93);color:#000c}button.btn-wire-error i.btn-match,.btn.btn-wire-error i.btn-match{color:#ef0e5d}button.btn-wire-error:hover,.btn.btn-wire-error:hover{background:#ef0e5d0d;border-color:#bf0b4a;color:#bf0b4a;box-shadow:none}button.btn-wire-error:focus,.btn.btn-wire-error:focus{border-color:#8f0838;background:transparent}button.btn-error-alt,.btn.btn-error-alt{background:#c20941;box-shadow:0 2px #610420}button.btn-error-alt:hover,.btn.btn-error-alt:hover{box-shadow:0 2px 0 1px #610420 inset}button.btn-error-alt:focus,.btn.btn-error-alt:focus{background:#610420}button.btn-wire-error-alt,.btn.btn-wire-error-alt{background:transparent;box-shadow:none;border:2px solid rgb(194,9,65);color:#000c}button.btn-wire-error-alt i.btn-match,.btn.btn-wire-error-alt i.btn-match{color:#c20941}button.btn-wire-error-alt:hover,.btn.btn-wire-error-alt:hover{background:#c209410d;border-color:#910731;color:#910731;box-shadow:none}button.btn-wire-error-alt:focus,.btn.btn-wire-error-alt:focus{border-color:#610420;background:transparent}button.btn-danger,.btn.btn-danger{background:#ef0e5d;box-shadow:0 2px #8f0838}button.btn-danger:hover,.btn.btn-danger:hover{box-shadow:0 2px 0 1px #8f0838 inset}button.btn-danger:focus,.btn.btn-danger:focus{background:#8f0838}button.btn-wire-danger,.btn.btn-wire-danger{background:transparent;box-shadow:none;border:2px solid rgb(239,14,93);color:#000c}button.btn-wire-danger i.btn-match,.btn.btn-wire-danger i.btn-match{color:#ef0e5d}button.btn-wire-danger:hover,.btn.btn-wire-danger:hover{background:#ef0e5d0d;border-color:#bf0b4a;color:#bf0b4a;box-shadow:none}button.btn-wire-danger:focus,.btn.btn-wire-danger:focus{border-color:#8f0838;background:transparent}button.btn-danger-alt,.btn.btn-danger-alt{background:#c20941;box-shadow:0 2px #610420}button.btn-danger-alt:hover,.btn.btn-danger-alt:hover{box-shadow:0 2px 0 1px #610420 inset}button.btn-danger-alt:focus,.btn.btn-danger-alt:focus{background:#610420}button.btn-wire-danger-alt,.btn.btn-wire-danger-alt{background:transparent;box-shadow:none;border:2px solid rgb(194,9,65);color:#000c}button.btn-wire-danger-alt i.btn-match,.btn.btn-wire-danger-alt i.btn-match{color:#c20941}button.btn-wire-danger-alt:hover,.btn.btn-wire-danger-alt:hover{background:#c209410d;border-color:#910731;color:#910731;box-shadow:none}button.btn-wire-danger-alt:focus,.btn.btn-wire-danger-alt:focus{border-color:#610420;background:transparent}button.btn-purple,.btn.btn-purple{background:#bc48ff;box-shadow:0 2px #8f00e1}button.btn-purple:hover,.btn.btn-purple:hover{box-shadow:0 2px 0 1px #8f00e1 inset}button.btn-purple:focus,.btn.btn-purple:focus{background:#8f00e1}button.btn-wire-purple,.btn.btn-wire-purple{background:transparent;box-shadow:none;border:2px solid rgb(188,72,255);color:#000c}button.btn-wire-purple i.btn-match,.btn.btn-wire-purple i.btn-match{color:#bc48ff}button.btn-wire-purple:hover,.btn.btn-wire-purple:hover{background:#bc48ff0d;border-color:#a915ff;color:#a915ff;box-shadow:none}button.btn-wire-purple:focus,.btn.btn-wire-purple:focus{border-color:#8f00e1;background:transparent}button.btn-purple-alt,.btn.btn-purple-alt{background:#692fbd;box-shadow:0 2px #3c1b6b}button.btn-purple-alt:hover,.btn.btn-purple-alt:hover{box-shadow:0 2px 0 1px #3c1b6b inset}button.btn-purple-alt:focus,.btn.btn-purple-alt:focus{background:#3c1b6b}button.btn-wire-purple-alt,.btn.btn-wire-purple-alt{background:transparent;box-shadow:none;border:2px solid rgb(105,47,189);color:#000c}button.btn-wire-purple-alt i.btn-match,.btn.btn-wire-purple-alt i.btn-match{color:#692fbd}button.btn-wire-purple-alt:hover,.btn.btn-wire-purple-alt:hover{background:#692fbd0d;border-color:#522594;color:#522594;box-shadow:none}button.btn-wire-purple-alt:focus,.btn.btn-wire-purple-alt:focus{border-color:#3c1b6b;background:transparent}button.btn-neutral,.btn.btn-neutral{background:#464646;box-shadow:0 2px #131313}button.btn-neutral:hover,.btn.btn-neutral:hover{box-shadow:0 2px 0 1px #131313 inset}button.btn-neutral:focus,.btn.btn-neutral:focus{background:#131313}button.btn-wire-neutral,.btn.btn-wire-neutral{background:transparent;box-shadow:none;border:2px solid rgb(70,70,70);color:#000c}button.btn-wire-neutral i.btn-match,.btn.btn-wire-neutral i.btn-match{color:#464646}button.btn-wire-neutral:hover,.btn.btn-wire-neutral:hover{background:#4646460d;border-color:#2d2d2d;color:#2d2d2d;box-shadow:none}button.btn-wire-neutral:focus,.btn.btn-wire-neutral:focus{border-color:#131313;background:transparent}button.btn-yellow,.btn.btn-yellow{background:#ffa70a;box-shadow:0 2px #a36800}button.btn-yellow:hover,.btn.btn-yellow:hover{box-shadow:0 2px 0 1px #a36800 inset}button.btn-yellow:focus,.btn.btn-yellow:focus{background:#a36800}button.btn-wire-yellow,.btn.btn-wire-yellow{background:transparent;box-shadow:none;border:2px solid rgb(255,167,10);color:#000c}button.btn-wire-yellow i.btn-match,.btn.btn-wire-yellow i.btn-match{color:#ffa70a}button.btn-wire-yellow:hover,.btn.btn-wire-yellow:hover{background:#ffa70a0d;border-color:#d68900;color:#d68900;box-shadow:none}button.btn-wire-yellow:focus,.btn.btn-wire-yellow:focus{border-color:#a36800;background:transparent}button.btn-white,.btn.btn-white{background:#fff;box-shadow:0 2px #ccc}button.btn-white:hover,.btn.btn-white:hover{box-shadow:0 2px 0 1px #ccc inset}button.btn-white:focus,.btn.btn-white:focus{background:#ccc}button.btn-wire-white,.btn.btn-wire-white{background:transparent;box-shadow:none;border:2px solid rgb(255,255,255);color:#000c}button.btn-wire-white i.btn-match,.btn.btn-wire-white i.btn-match{color:#fff}button.btn-wire-white:hover,.btn.btn-wire-white:hover{background:#ffffff0d;border-color:#e6e6e6;color:#e6e6e6;box-shadow:none}button.btn-wire-white:focus,.btn.btn-wire-white:focus{border-color:#ccc;background:transparent}button.btn-black,.btn.btn-black{background:#000;box-shadow:0 2px #000}button.btn-black:hover,.btn.btn-black:hover{box-shadow:0 2px 0 1px #000 inset}button.btn-black:focus,.btn.btn-black:focus{background:#000}button.btn-wire-black,.btn.btn-wire-black{background:transparent;box-shadow:none;border:2px solid rgb(0,0,0);color:#000c}button.btn-wire-black i.btn-match,.btn.btn-wire-black i.btn-match{color:#000}button.btn-wire-black:hover,.btn.btn-wire-black:hover{background:#0000000d;border-color:#000;color:#000;box-shadow:none}button.btn-wire-black:focus,.btn.btn-wire-black:focus{border-color:#000;background:transparent}button.btn-youtube,.btn.btn-youtube{background:#fd3c01;box-shadow:0 2px #972401}button.btn-youtube:hover,.btn.btn-youtube:hover{box-shadow:0 2px 0 1px #972401 inset}button.btn-youtube:focus,.btn.btn-youtube:focus{background:#972401}button.btn-wire-youtube,.btn.btn-wire-youtube{background:transparent;box-shadow:none;border:2px solid rgb(253,60,1);color:#000c}button.btn-wire-youtube i.btn-match,.btn.btn-wire-youtube i.btn-match{color:#fd3c01}button.btn-wire-youtube:hover,.btn.btn-wire-youtube:hover{background:#fd3c010d;border-color:#ca3001;color:#ca3001;box-shadow:none}button.btn-wire-youtube:focus,.btn.btn-wire-youtube:focus{border-color:#972401;background:transparent}button.btn-raspbian,.btn.btn-raspbian{background:#b61240;box-shadow:0 2px #59091f}button.btn-raspbian:hover,.btn.btn-raspbian:hover{box-shadow:0 2px 0 1px #59091f inset}button.btn-raspbian:focus,.btn.btn-raspbian:focus{background:#59091f}button.btn-wire-raspbian,.btn.btn-wire-raspbian{background:transparent;box-shadow:none;border:2px solid rgb(182,18,64);color:#000c}button.btn-wire-raspbian i.btn-match,.btn.btn-wire-raspbian i.btn-match{color:#b61240}button.btn-wire-raspbian:hover,.btn.btn-wire-raspbian:hover{background:#b612400d;border-color:#880d30;color:#880d30;box-shadow:none}button.btn-wire-raspbian:focus,.btn.btn-wire-raspbian:focus{border-color:#59091f;background:transparent}button.btn-windows,.btn.btn-windows{background:#12a7e3;box-shadow:0 2px #0b6184}button.btn-windows:hover,.btn.btn-windows:hover{box-shadow:0 2px 0 1px #0b6184 inset}button.btn-windows:focus,.btn.btn-windows:focus{background:#0b6184}button.btn-wire-windows,.btn.btn-wire-windows{background:transparent;box-shadow:none;border:2px solid rgb(18,167,227);color:#000c}button.btn-wire-windows i.btn-match,.btn.btn-wire-windows i.btn-match{color:#12a7e3}button.btn-wire-windows:hover,.btn.btn-wire-windows:hover{background:#12a7e30d;border-color:#0e84b4;color:#0e84b4;box-shadow:none}button.btn-wire-windows:focus,.btn.btn-wire-windows:focus{border-color:#0b6184;background:transparent}button.btn-macos,.btn.btn-macos{background:#b3bcc2;box-shadow:0 2px #7a8a95}button.btn-macos:hover,.btn.btn-macos:hover{box-shadow:0 2px 0 1px #7a8a95 inset}button.btn-macos:focus,.btn.btn-macos:focus{background:#7a8a95}button.btn-wire-macos,.btn.btn-wire-macos{background:transparent;box-shadow:none;border:2px solid rgb(179,188,194);color:#000c}button.btn-wire-macos i.btn-match,.btn.btn-wire-macos i.btn-match{color:#b3bcc2}button.btn-wire-macos:hover,.btn.btn-wire-macos:hover{background:#b3bcc20d;border-color:#97a3ab;color:#97a3ab;box-shadow:none}button.btn-wire-macos:focus,.btn.btn-wire-macos:focus{border-color:#7a8a95;background:transparent}button.btn-debian,.btn.btn-debian{background:#cf084e;box-shadow:0 2px #6d0429}button.btn-debian:hover,.btn.btn-debian:hover{box-shadow:0 2px 0 1px #6d0429 inset}button.btn-debian:focus,.btn.btn-debian:focus{background:#6d0429}button.btn-wire-debian,.btn.btn-wire-debian{background:transparent;box-shadow:none;border:2px solid rgb(207,8,78);color:#000c}button.btn-wire-debian i.btn-match,.btn.btn-wire-debian i.btn-match{color:#cf084e}button.btn-wire-debian:hover,.btn.btn-wire-debian:hover{background:#cf084e0d;border-color:#9e063b;color:#9e063b;box-shadow:none}button.btn-wire-debian:focus,.btn.btn-wire-debian:focus{border-color:#6d0429;background:transparent}button.btn-fedora,.btn.btn-fedora{background:#52a2da;box-shadow:0 2px #236ea3}button.btn-fedora:hover,.btn.btn-fedora:hover{box-shadow:0 2px 0 1px #236ea3 inset}button.btn-fedora:focus,.btn.btn-fedora:focus{background:#236ea3}button.btn-wire-fedora,.btn.btn-wire-fedora{background:transparent;box-shadow:none;border:2px solid rgb(82,162,218);color:#000c}button.btn-wire-fedora i.btn-match,.btn.btn-wire-fedora i.btn-match{color:#52a2da}button.btn-wire-fedora:hover,.btn.btn-wire-fedora:hover{background:#52a2da0d;border-color:#2c8bcd;color:#2c8bcd;box-shadow:none}button.btn-wire-fedora:focus,.btn.btn-wire-fedora:focus{border-color:#236ea3;background:transparent}button.btn-ubuntu,.btn.btn-ubuntu{background:#d64514;box-shadow:0 2px #79270b}button.btn-ubuntu:hover,.btn.btn-ubuntu:hover{box-shadow:0 2px 0 1px #79270b inset}button.btn-ubuntu:focus,.btn.btn-ubuntu:focus{background:#79270b}button.btn-wire-ubuntu,.btn.btn-wire-ubuntu{background:transparent;box-shadow:none;border:2px solid rgb(214,69,20);color:#000c}button.btn-wire-ubuntu i.btn-match,.btn.btn-wire-ubuntu i.btn-match{color:#d64514}button.btn-wire-ubuntu:hover,.btn.btn-wire-ubuntu:hover{background:#d645140d;border-color:#a73610;color:#a73610;box-shadow:none}button.btn-wire-ubuntu:focus,.btn.btn-wire-ubuntu:focus{border-color:#79270b;background:transparent}button.btn-suse,.btn.btn-suse{background:#6fb425;box-shadow:0 2px #3b5f14}button.btn-suse:hover,.btn.btn-suse:hover{box-shadow:0 2px 0 1px #3b5f14 inset}button.btn-suse:focus,.btn.btn-suse:focus{background:#3b5f14}button.btn-wire-suse,.btn.btn-wire-suse{background:transparent;box-shadow:none;border:2px solid rgb(111,180,37);color:#000c}button.btn-wire-suse i.btn-match,.btn.btn-wire-suse i.btn-match{color:#6fb425}button.btn-wire-suse:hover,.btn.btn-wire-suse:hover{background:#6fb4250d;border-color:#558a1c;color:#558a1c;box-shadow:none}button.btn-wire-suse:focus,.btn.btn-wire-suse:focus{border-color:#3b5f14;background:transparent}button.btn-redhat,.btn.btn-redhat{background:#c60200;box-shadow:0 2px #600100}button.btn-redhat:hover,.btn.btn-redhat:hover{box-shadow:0 2px 0 1px #600100 inset}button.btn-redhat:focus,.btn.btn-redhat:focus{background:#600100}button.btn-wire-redhat,.btn.btn-wire-redhat{background:transparent;box-shadow:none;border:2px solid rgb(198,2,0);color:#000c}button.btn-wire-redhat i.btn-match,.btn.btn-wire-redhat i.btn-match{color:#c60200}button.btn-wire-redhat:hover,.btn.btn-wire-redhat:hover{background:#c602000d;border-color:#930100;color:#930100;box-shadow:none}button.btn-wire-redhat:focus,.btn.btn-wire-redhat:focus{border-color:#600100;background:transparent}button.btn-centos,.btn.btn-centos{background:#9b4c88;box-shadow:0 2px #572a4c}button.btn-centos:hover,.btn.btn-centos:hover{box-shadow:0 2px 0 1px #572a4c inset}button.btn-centos:focus,.btn.btn-centos:focus{background:#572a4c}button.btn-wire-centos,.btn.btn-wire-centos{background:transparent;box-shadow:none;border:2px solid rgb(155,76,136);color:#000c}button.btn-wire-centos i.btn-match,.btn.btn-wire-centos i.btn-match{color:#9b4c88}button.btn-wire-centos:hover,.btn.btn-wire-centos:hover{background:#9b4c880d;border-color:#793b6a;color:#793b6a;box-shadow:none}button.btn-wire-centos:focus,.btn.btn-wire-centos:focus{border-color:#572a4c;background:transparent}button.btn-other,.btn.btn-other{background:#ffa70a;box-shadow:0 2px #a36800}button.btn-other:hover,.btn.btn-other:hover{box-shadow:0 2px 0 1px #a36800 inset}button.btn-other:focus,.btn.btn-other:focus{background:#a36800}button.btn-wire-other,.btn.btn-wire-other{background:transparent;box-shadow:none;border:2px solid rgb(255,167,10);color:#000c}button.btn-wire-other i.btn-match,.btn.btn-wire-other i.btn-match{color:#ffa70a}button.btn-wire-other:hover,.btn.btn-wire-other:hover{background:#ffa70a0d;border-color:#d68900;color:#d68900;box-shadow:none}button.btn-wire-other:focus,.btn.btn-wire-other:focus{border-color:#a36800;background:transparent}button.btn-gscale0,.btn.btn-gscale0{background:#fff;box-shadow:0 2px #ccc}button.btn-gscale0:hover,.btn.btn-gscale0:hover{box-shadow:0 2px 0 1px #ccc inset}button.btn-gscale0:focus,.btn.btn-gscale0:focus{background:#ccc}button.btn-wire-gscale0,.btn.btn-wire-gscale0{background:transparent;box-shadow:none;border:2px solid #FFFFFF;color:#000c}button.btn-wire-gscale0 i.btn-match,.btn.btn-wire-gscale0 i.btn-match{color:#fff}button.btn-wire-gscale0:hover,.btn.btn-wire-gscale0:hover{background:#ffffff0d;border-color:#e6e6e6;color:#e6e6e6;box-shadow:none}button.btn-wire-gscale0:focus,.btn.btn-wire-gscale0:focus{border-color:#ccc;background:transparent}button.btn-gscaleF,.btn.btn-gscaleF{background:#000;box-shadow:0 2px #000}button.btn-gscaleF:hover,.btn.btn-gscaleF:hover{box-shadow:0 2px 0 1px #000 inset}button.btn-gscaleF:focus,.btn.btn-gscaleF:focus{background:#000}button.btn-wire-gscaleF,.btn.btn-wire-gscaleF{background:transparent;box-shadow:none;border:2px solid #000000;color:#000c}button.btn-wire-gscaleF i.btn-match,.btn.btn-wire-gscaleF i.btn-match{color:#000}button.btn-wire-gscaleF:hover,.btn.btn-wire-gscaleF:hover{background:#0000000d;border-color:#000;color:#000;box-shadow:none}button.btn-wire-gscaleF:focus,.btn.btn-wire-gscaleF:focus{border-color:#000;background:transparent}.alert.alert-warning,.alert.alert-orange{color:#e56723;background:#e5672333}.alert.alert-info{color:#027bff;background:#027bff33}.alert.alert-info-alt{color:#075cb7;background:#075cb733}.alert.alert-success,.alert.alert-success-alt{color:#11a948;background:#11a94833}.alert.alert-error{color:#ef0e5d;background:#ef0e5d33}.alert.alert-error-alt{color:#c20941;background:#c2094133}.alert.alert-danger{color:#ef0e5d;background:#ef0e5d33}.alert.alert-danger-alt{color:#c20941;background:#c2094133}.alert.alert-purple{color:#bc48ff;background:#bc48ff33}.alert.alert-purple-alt{color:#692fbd;background:#692fbd33}.alert.alert-neutral{color:#464646;background:#46464633}.alert.alert-yellow{color:#ffa70a;background:#ffa70a33}.alert.alert-white{color:#fff;background:#fff3}.alert.alert-black{color:#000;background:#0003}.alert.alert-youtube{color:#fd3c01;background:#fd3c0133}.alert.alert-raspbian{color:#b61240;background:#b6124033}.alert.alert-windows{color:#12a7e3;background:#12a7e333}.alert.alert-macos{color:#b3bcc2;background:#b3bcc233}.alert.alert-debian{color:#cf084e;background:#cf084e33}.alert.alert-fedora{color:#52a2da;background:#52a2da33}.alert.alert-ubuntu{color:#d64514;background:#d6451433}.alert.alert-suse{color:#6fb425;background:#6fb42533}.alert.alert-redhat{color:#c60200;background:#c6020033}.alert.alert-centos{color:#9b4c88;background:#9b4c8833}.alert.alert-other{color:#ffa70a;background:#ffa70a33}.alert.alert-gscale0{color:#fff;background:#fff3}.alert.alert-gscaleF{color:#000;background:#0003}@font-face{font-family:Sixtyfour;src:url(../../webfonts/Sixtyfour-Regular.ttf) format("truetype")}*{font-family:Roboto,Arial,"sans-serif";margin:0;padding:0;box-sizing:border-box}html{background-color:#fff}body,html{height:100%;font-family:Arial,sans-serif}.container{display:flex;height:100vh}.horizontal{display:flex;flex-direction:row;justify-content:flex-start;align-items:flex-start;flex:1;align-self:stretch}.horizontal.fx-end{justify-content:flex-end}.vertical{display:flex;flex-direction:column;justify-content:flex-start;align-items:flex-start;flex:1;align-self:stretch}main{flex:1;display:flex;flex-direction:column}main .main-container{display:flex;flex-direction:column;flex:1;overflow:hidden;align-self:stretch}main .main-container .top-content{display:flex;flex-direction:row;justify-content:flex-start;align-items:center;align-self:stretch;padding:10px 10px 10px 15px;background:transparent;border-bottom:1px solid #DDD}main .main-container .top-content h1{color:#000;font-weight:600;font-size:24px}main .main-container .top-content .top-actions{flex:1;display:flex;flex-direction:row;justify-content:flex-start;align-items:center}main .main-container .top-content .top-actions.align-right{justify-content:flex-end;margin-right:10px}main .main-container .top-content .top-actions .btn:first-child{margin-left:0!important}main .main-container .top-content .top-actions .btn,main .main-container .top-content .top-actions button{margin-left:10px}main .main-container .bottom-content{display:flex;flex-direction:row;align-self:stretch;justify-content:flex-start;align-items:flex-start;flex:1;overflow-y:auto;background:radial-gradient(circle at 0% 53%,rgba(2,123,255,.8) 10%,transparent 45%),radial-gradient(circle at 135% 53%,rgba(2,123,255,.8) 10%,transparent 95%),radial-gradient(circle at 50% 80%,rgba(105,47,189,.8) 40%,transparent 95%)}main .main-container .bottom-content .page-content{flex:2;overflow-y:auto;align-self:stretch;display:flex;flex-direction:column;justify-content:flex-start;align-items:flex-start;background:#fffc;padding:5px}main .main-container .bottom-content .page-content .inner{flex:1;display:flex;flex-direction:column;justify-content:flex-start;align-items:flex-start;padding:10px 10px 40px;background:#fff;align-self:stretch}main .main-container .bottom-content .page-content .inner h1,main .main-container .bottom-content .page-content .inner h2,main .main-container .bottom-content .page-content .inner h3,main .main-container .bottom-content .page-content .inner h4,main .main-container .bottom-content .page-content .inner h5,main .main-container .bottom-content .page-content .inner h6{color:#222}main .main-container .bottom-content .page-content .inner p{font-size:12px;line-height:18px;display:flex;margin-bottom:5px;flex-direction:row;justify-content:flex-start;align-items:center;color:#999}main .main-container .bottom-content .page-panel{flex:1;overflow-y:auto;align-self:stretch;background:#fff;border-top:none}main .main-container .bottom-content .page-panel.left-panel{border-right:1px solid #DDD;border-left:none}main .main-container .bottom-content .page-panel.left-panel.explr-explorer{flex:.5;overflow-y:auto;padding:0;background:#fff;box-shadow:1px 1px .5px .5px inset #fff3;max-width:250px}main .main-container .bottom-content .page-panel.right-panel{border-left:1px solid #DDD;border-right:none}.invisible{visibility:hidden!important}.hidden{display:none!important}.tac{text-align:center!important}.tar{text-align:right!important}a{text-decoration:none}.normal{font-weight:400!important}.bold{font-weight:700!important}.col{display:flex;flex:1;flex-direction:column;align-self:stretch}main .context-bar{padding:10px;position:sticky;top:0;z-index:1000;max-height:80px;border-bottom:1px solid #DDD;display:flex;flex-direction:row;align-items:center}main .context-bar .context-menu{flex:1}main .context-bar .context-menu .inner{display:flex}main .context-bar .context-menu .inner ul.pills{margin:0}main .context-bar .context-divider{width:1px;height:100%;background:#ddd;margin-left:20px;margin-right:20px}main .context-bar .context-tail{margin-right:30px}main .context-bar .context-tail .btn{margin-right:0}main .context-bar .context-tail-auth{margin-right:10px}main .context-bar .context-tail-auth .btn{margin-right:0}main .context-bar .context-user{display:flex;margin-right:20px}main .context-bar .context-user .trigger{color:#000}main .context-bar .context-user .trigger .avatar{width:32px;height:32px;border-radius:4px;background:#555;margin-right:10px;display:flex;flex-direction:row;justify-content:center;align-items:center;text-align:center;font-weight:700;font-size:14px;border:1px solid #BBB;color:#fff}main .context-bar .context-user .trigger i{margin-top:-5px;margin-left:10px}menu{width:300px;background:#fff;overflow-y:auto;overflow-x:visible;padding:20px;z-index:2000;display:flex;flex-direction:column;justify-content:flex-start;align-items:flex-start;border-right:1px solid #DDD;min-width:64px}menu h1.logo{margin:40px 0 0 10px;align-self:stretch;display:flex}menu h1.logo a{text-align:center;text-shadow:0px 0 0 rgb(255,255,255),0px 2px 0 #BBB,0 0px 0 rgb(17,169,72),-0px 0 0 rgb(2,123,255),0 -0px 0 rgb(239,14,93);text-decoration:none;background:linear-gradient(90deg,#a0a0a0 0,#bebebe 46%,#dcdcdc);-webkit-background-clip:text;color:transparent;flex:1;font-family:Sixtyfour,Work Sans,Arial,"sans-serif";align-self:stretch;padding-right:3px;font-size:20px;text-transform:uppercase;transition:all .55s cubic-bezier(.19,1,.22,1);display:flex;flex-direction:row;justify-content:center;align-items:center;position:relative;color:#fff}menu h1.logo a img{flex-shrink:0;width:30px;margin-right:10px;position:absolute;left:5px;transition:all .55s cubic-bezier(.19,1,.22,1)}menu h1.logo a img.after{opacity:0}menu:hover h1.logo a{text-align:center;text-shadow:3px 0 0 rgb(255,255,255),3px 2px 0 #BBB,0 3px 0 rgb(17,169,72),-3px 0 0 rgb(2,123,255),0 -3px 0 rgb(239,14,93);text-decoration:none;background:linear-gradient(90deg,#a0a0a0 0,#bebebe 46%,#dcdcdc);-webkit-background-clip:text;color:transparent}menu:hover h1.logo a img.before{opacity:0}menu:hover h1.logo a img.after{animation-duration:.2s;animation-name:logotouch}menu nav{display:flex;align-self:stretch;flex:1}menu nav ul{margin:60px 0 20px;flex:1;align-self:flex-start;display:flex;flex-direction:column;list-style:none}menu nav ul li{align-self:stretch;overflow:hidden;position:relative;transition:all .55s cubic-bezier(.19,1,.22,1);margin:10px 0;border-radius:4px}menu nav ul li a{color:#000000e6;font-size:16px;display:flex;flex-direction:row;justify-content:flex-start;align-items:center;align-self:stretch;flex:1;padding-top:5px;padding-bottom:5px;padding-left:10px}menu nav ul li a i{color:#000;opacity:.2;background:transparent;display:flex;justify-content:center;align-items:center;align-self:stretch;padding:10px;width:40px;border-radius:4px;text-align:center;margin-right:20px}menu nav ul li:after{background:#000;content:"";height:195px;left:-200px;opacity:.2;position:absolute;top:-50px;transform:rotate(35deg);transition:all .55s cubic-bezier(.19,1,.22,1);width:50px;z-index:-2;cursor:pointer}menu nav ul li.active a{color:#027bff;font-weight:700}menu nav ul li.active a i{opacity:1;color:#fff;background:#000000e6;background:#027bff}menu nav ul li:hover{background:#027bff}menu nav ul li:hover:after{z-index:2;left:120%;transition:all .55s cubic-bezier(.19,1,.22,1)}menu nav ul li:hover a{color:#fff;font-weight:700}menu nav ul li:hover a i{color:#fff;opacity:1}menu footer{background:#00000003;padding:20px 0;display:flex;flex-direction:row;align-self:stretch;text-align:center;justify-content:center}menu footer p{color:#bbb}menu footer p.version a{color:#888;font-weight:700}.dropdown{position:relative;display:flex;align-self:stretch}.dropdown.dropdown-show ul.dropdown-menu{display:flex;flex-direction:column}.dropdown .trigger{cursor:pointer;display:flex;flex-direction:row;justify-content:flex-start;align-items:center;align-self:stretch;flex:1}.dropdown ul.dropdown-menu{position:absolute;top:100%;left:0;display:none;background-color:#ddd;box-shadow:0 8px 16px #fff3;z-index:1000;list-style-type:none;margin:0;overflow:hidden;border-radius:4px}.dropdown ul.dropdown-menu li{padding:8px 16px;cursor:pointer;display:flex;flex-direction:row;justify-content:flex-start;align-items:center;transition:all .55s cubic-bezier(.19,1,.22,1)}.dropdown ul.dropdown-menu li.danger:hover{background-color:#ef0e5d}.dropdown ul.dropdown-menu li:hover{background-color:#027bff}.dropdown ul.dropdown-menu li a{padding:8px 16px 8px 8px;color:#000;display:flex;flex-direction:row;justify-content:flex-start;align-items:center;align-self:stretch}.dropdown ul.dropdown-menu li a i{margin-right:15px}@keyframes logotouch{0%{opacity:0}50%{opacity:1}to{opacity:0;left:27px}}@keyframes shakednd{0%{transform:rotate(-2deg)}to{transform:rotate(2deg)}}@keyframes blinkfade{0%{opacity:1}50%{opacity:0}to{opacity:1}}button,.btn{position:relative;padding:10px 10px 8px;font-size:14px;color:#fff;cursor:pointer;border:none;border-radius:4px;background:#027bff;box-shadow:0 2px #004a9b;font-weight:700;letter-spacing:-.5px;margin-top:-2px;min-width:38px;min-height:34px;text-align:center;justify-content:center}button i.icon-left,.btn i.icon-left{margin-right:5px}button:hover,.btn:hover{box-shadow:0 2px 0 1px #004a9b inset;color:#fffc}button:focus,.btn:focus{background:#004a9b;color:#ffffff80;box-shadow:none}button.btn-pixel,.btn.btn-pixel{background:#333;border:1px solid transparent;transition:all .55s cubic-bezier(.19,1,.22,1);text-transform:uppercase;font-size:12px;box-shadow:4px 0 #fff,0 4px #11a948,-4px 0 #027bff,0 -4px #ef0e5d;color:#ddd;overflow:hidden}button.btn-pixel:hover,.btn.btn-pixel:hover{box-shadow:6px 0 #fff,0 6px #11a948,-6px 0 #027bff,0 -6px #ef0e5d;text-align:center;text-shadow:4px 0 0 rgb(255,255,255),4px 2px 0 #BBB,0 4px 0 rgb(17,169,72),-4px 0 0 rgb(2,123,255),0 -4px 0 rgb(239,14,93);text-decoration:none;background:linear-gradient(90deg,#a0a0a0 0,#bebebe 46%,#dcdcdc);-webkit-background-clip:text;color:transparent}button.btn-neutral,.btn.btn-neutral{color:#fff;background:#aaa;box-shadow:0 2px #919191;border:1px solid transparent}button.btn-neutral.active,button.btn-neutral:hover,.btn.btn-neutral.active,.btn.btn-neutral:hover{box-shadow:0 2px 0 1px #222 inset;background:#919191}button .btn-wire-neutral,.btn .btn-wire-neutral{background:transparent;border:2px solid #AAA;color:#fffc;box-shadow:none}button .btn-wire-neutral:hover,.btn .btn-wire-neutral:hover{background:#aaaaaa0d;border-color:#919191;color:#919191;box-shadow:none}button .btn-wire-neutral:focus,.btn .btn-wire-neutral:focus{border-color:#777;background:transparent}button.btn-naked,.btn.btn-naked{background:transparent;box-shadow:none;border:1px solid transparent;color:#000}button.btn-naked:hover,.btn.btn-naked:hover{box-shadow:0 2px 0 1px #222 inset;background:#919191;color:#fff}button.btn-naked:focus,.btn.btn-naked:focus{background:#777;border:1px solid #555}button i.main,.btn i.main{font-size:18px}button sup,button sub,.btn sup,.btn sub{position:absolute;top:-4px;right:-4px;background:#888;border-bottom:2px solid #AAA;color:red;border-radius:4px;width:16px;height:16px;text-align:center;display:flex;justify-content:center;align-items:center;padding-top:2px;padding-bottom:1px}button sup i,button sub i,.btn sup i,.btn sub i{color:#fff;font-size:10px}button.btn-double-icon,.btn.btn-double-icon{margin-right:5px}button.disabled,.btn.disabled{cursor:default}.alert{padding:20px;align-self:stretch;display:flex;flex-direction:row;justify-content:center;align-items:center;border-radius:4px}.alert i{margin-right:13px}.alert a{color:inherit;margin-left:4px;margin-right:4px;text-decoration:underline}ul.explr-tree{height:100%!important}ul.explr-tree ul{padding-top:0!important}ul.explr-tree li{position:relative}ul.explr-tree li span{color:#aaa;font-size:13px;padding-left:5px;cursor:pointer}ul.explr-tree li span.explr-plus,ul.explr-tree li span.explr-minus{z-index:1}ul.explr-tree li span.explr-plus:hover,ul.explr-tree li span.explr-minus:hover{color:#555}ul.explr-tree li i.main{font-size:14px}ul.explr-tree li sup,ul.explr-tree li sub{position:absolute;top:0;left:5px;background:#888;border-bottom:2px solid #AAA;border-radius:4px;text-align:center;display:flex;justify-content:center;align-items:center;padding-top:2px;padding-bottom:1px}ul.explr-tree li sup i,ul.explr-tree li sub i{color:#fff;font-size:4px!important;margin-bottom:0}ul.explr-tree li a{color:#000;padding-right:80px;margin-top:2px}ul.explr-tree li a:hover{color:#000}ul.explr-tree li a.active{background:#0000001a;border-radius:4px;font-weight:700;text-decoration:underline;margin-left:35px;padding-left:5px;margin-right:10px}.explr-multiselection-actions,.explr-selection-actions{display:none;flex-direction:row;justify-content:flex-end;align-items:center;flex:1}.explr-multiselection-actions button,.explr-selection-actions button{display:none}body.explr-selection-actionable .explr-selection-actions,body.explr-selection-actionable.explr-selection-folder .explr-selection-actions button.explr-selection-folder,body.explr-selection-actionable.explr-selection-entity .explr-selection-actions button.explr-selection-entity,body.explr-multiselection-actionable .explr-multiselection-actions,body.explr-multiselection-actionable.explr-multiselection-folder .explr-multiselection-actions button.explr-multiselection-folder,body.explr-multiselection-actionable.explr-multiselection-entity .explr-multiselection-actions button.explr-multiselection-entity{display:flex}.selectable-zone{flex:1;align-self:stretch;border:1px solid transparent}ul.explr-dirview{display:flex;flex-direction:row;flex-wrap:wrap}ul.explr-dirview li{display:flex;flex-direction:column;justify-content:flex-start;align-items:center;flex-shrink:0;margin:10px;min-width:100px;min-height:130px;padding-top:5px;border:1px solid transparent;border-radius:4px}ul.explr-dirview li.renaming a span{display:none}ul.explr-dirview li.renaming a form{display:block}ul.explr-dirview li.highlight-drop{border:1px dotted rgba(2,123,255,.4);background:#027bff4d}ul.explr-dirview li.highlight-clicked{border:1px dotted rgba(0,0,0,.2);background:#0000001a}ul.explr-dirview li a{color:#444;text-decoration:none;flex:1;text-align:center;font-size:12px;display:flex;flex-direction:column;justify-content:flex-start;align-items:center;max-width:84px;min-width:84px;position:relative;word-break:break-all}ul.explr-dirview li a.with-thumbnail .img-holder{width:64px;height:64px;background:#000;border-radius:8px;display:flex;flex-direction:column;justify-content:center;align-items:center;overflow:hidden;margin-bottom:12px}ul.explr-dirview li a.with-thumbnail .img-holder img{max-height:100%;max-width:100%}ul.explr-dirview li a.with-thumbnail i{font-size:24px;position:absolute;top:-4px;left:-4px;text-shadow:0 .5px .5px #888}ul.explr-dirview li a i{font-size:64px;margin-bottom:12px;border-radius:8px}ul.explr-dirview li a sup,ul.explr-dirview li a sub{position:absolute;top:-2px;right:0;background:#888;border-bottom:2px solid #AAA;border-radius:4px;width:16px;height:16px;text-align:center;display:flex;justify-content:center;align-items:center;padding-top:2px;padding-bottom:1px}ul.explr-dirview li a sup i,ul.explr-dirview li a sub i{color:#fff;font-size:10px;margin-bottom:0}ul.explr-dirview li a input{width:100%;padding:0 3px}ul.explr-dirview li a input:focus{outline:none}ul.explr-dirview li a:hover{opacity:.8}ul.explr-dirview li a form{display:none}ul.explr-dirview li.new-folder a{color:#027bff}ul.explr-dirview li.new-folder a form{display:block}ul.explr-dirview .ui-draggable-dragging{z-index:20}ul.explr-dirview .ui-draggable-dragging a{opacity:1!important}.modal-explr-picker h2{margin-top:0}.modal-explr-picker .explr-tree{width:400px;max-width:400px;max-height:300px;overflow:auto;background:#ddd;padding:10px 20px;border-radius:4px;margin-top:15px}.content-explr-picker{cursor:pointer}.selection-rectangle{position:absolute;border:1px solid rgb(0,153,255);background-color:#0099ff1a;pointer-events:none;z-index:1000}ul.pills{background:#ddd;padding:6px 4px 5px;box-shadow:1px 1px .5px .5px inset #fff3;border:1px solid #DDD;border-radius:4px;display:flex;flex-direction:row;justify-content:flex-start;align-items:center;list-style:none;margin:0}ul.pills li.divider{margin:0 20px;width:1px;height:100%;background:#ccc}ul.pills li:hover a{opacity:.9}ul.pills li a{border-radius:4px;display:flex;flex-direction:row;justify-content:center;align-items:center;color:#000;overflow:hidden;padding-right:30px;text-align:center;background:#fff3;margin-right:5px;transition:all .25s cubic-bezier(.19,1,.22,1)}ul.pills li a span{display:flex;justify-content:center;align-items:center;margin-right:20px;height:42px;background:#fff3;width:42px}ul.pills li.active a{color:#ccc;background:#333;font-weight:700}ul.pills li:hover a{color:#fff;background:#027bff}ul.pills li:last-child a{margin-right:0}.breadcrumb-container{display:flex;flex-direction:row;justify-content:flex-start;align-items:center;align-self:stretch;border-bottom:1px solid #DDD;background:transparent;padding:10px}.breadcrumb-container ul.breadcrumb{background:#ddd;padding:6px 4px 5px;box-shadow:1px 1px .5px .5px inset #fff3;border:1px solid #DDD;border-radius:4px;display:flex;flex-direction:row;justify-content:flex-start;align-items:center;list-style:none;margin:0;overflow-x:auto;max-width:65vw;white-space:nowrap}.breadcrumb-container ul.breadcrumb li{display:inline-block}.breadcrumb-container ul.breadcrumb li.divider{margin:0 5px}.breadcrumb-container ul.breadcrumb li.divider i{color:#555}.breadcrumb-container ul.breadcrumb li span,.breadcrumb-container ul.breadcrumb li a{border-radius:4px;display:flex;flex-direction:row;justify-content:center;align-items:center;color:#000;text-align:center;padding:0 3px}.breadcrumb-container ul.breadcrumb li span i,.breadcrumb-container ul.breadcrumb li a i{margin-right:5px}.breadcrumb-container ul.breadcrumb li:hover a{color:#000;background:#027bff}.breadcrumb-container ul.breadcrumb li:last-child a{margin-right:0}.pickers,.modals{position:fixed;background:#0006;top:0;right:0;bottom:0;left:0;display:flex;flex-direction:column;justify-content:center;align-items:center;z-index:10000}.pickers.pickers .modals-outer .modals-inner .modal h2,.modals.pickers .modals-outer .modals-inner .modal h2{font-size:14px;line-height:18px;display:flex;margin-bottom:5px;flex-direction:row;justify-content:flex-start;align-items:center;align-self:stretch;color:#999}.pickers .modals-outer,.modals .modals-outer{min-width:464px;max-width:464px;display:flex;flex-direction:column;overflow:auto;padding-bottom:2px}.pickers .modals-outer .modals-inner,.modals .modals-outer .modals-inner{background:#fff;border-radius:10px;color:#fff;padding:40px;box-shadow:0 2px #ddd;border:1px solid #DDD}.pickers .modals-outer .modals-inner .modal h2,.modals .modals-outer .modals-inner .modal h2{padding:0;margin:0 0 30px;font-weight:400;color:#666}.pickers .modals-outer .modals-inner .modal h3,.modals .modals-outer .modals-inner .modal h3{align-self:stretch;margin:0 0 10px;font-size:14px;display:flex;flex-direction:row;justify-content:flex-start;align-items:center;color:#000;padding-bottom:10px;text-decoration:none}.pickers .modals-outer .modals-inner .modal h3.divide,.modals .modals-outer .modals-inner .modal h3.divide{border-top:1px solid #DDD;margin-top:20px;padding-top:20px}.toast{visibility:hidden;min-width:250px;margin-left:-125px;background-color:#ccc;color:#000;text-align:center;border-radius:4px;padding:16px;position:fixed;z-index:1;left:50%;bottom:30px;font-size:17px;border:2px dashed #DDD}.toast.show{visibility:visible;-webkit-animation:fadein .5s,fadeout .5s 2.5s;animation:fadein .5s,fadeout .5s 2.5s}@-webkit-keyframes fadein{0%{bottom:0;opacity:0}to{bottom:30px;opacity:1}}@keyframes fadein{0%{bottom:0;opacity:0}to{bottom:30px;opacity:1}}@-webkit-keyframes fadeout{0%{bottom:30px;opacity:1}to{bottom:0;opacity:0}}@keyframes fadeout{0%{bottom:30px;opacity:1}to{bottom:0;opacity:0}}body.dragover .shakeondrag{animation:shakednd .1s linear alternate infinite}.btn-super-upload-busy,.btn-super-upload{display:flex;flex-direction:row;justify-content:center;align-items:center;margin-left:10px;position:relative}.btn-super-upload-busy.btn-super-upload-busy,.btn-super-upload.btn-super-upload-busy{border:none!important}.btn-super-upload-busy .unprogress,.btn-super-upload .unprogress{display:block}.btn-super-upload-busy .progress,.btn-super-upload .progress{display:none;width:200px;height:10px;background:#999;border-radius:4px;flex-direction:row;justify-content:flex-start;align-items:center}.btn-super-upload-busy .progress .progress-bar,.btn-super-upload .progress .progress-bar{border-radius:4px;background-color:#027bff;height:100%}.btn-super-upload-busy .progress .percent,.btn-super-upload .progress .percent{display:flex;justify-content:center;align-items:center;position:absolute;left:0;right:0;bottom:0;top:2px;font-size:15px;color:#fff;text-shadow:0 0 2px rgb(0,0,0)}.btn-super-upload-busy.uploading .progress,.btn-super-upload.uploading .progress{display:block}.btn-super-upload-busy.uploading .unprogress,.btn-super-upload.uploading .unprogress{display:none}@keyframes blink{50%{opacity:0}}.cfx-blink{animation:1.5s linear infinite blink}.cfx-ffff-speed{animation-delay:.1s}.cfx-fff-speed{animation-delay:.3s}.cfx-ff-speed{animation-delay:.5s}.cfx-f-speed{animation-delay:.8s}.cfx-m-speed{animation-delay:1s}.cfx-s-speed{animation-delay:1.3s}.cfx-ss-speed{animation-delay:1.5s}.cfx-sss-speed{animation-delay:1.8s}.cfx-ssss-speed{animation-delay:2s}.cfx-sssss-speed{animation-delay:3s}.panes{flex:1;display:flex;flex-direction:column;justify-content:flex-start;align-items:flex-start;align-self:stretch}.panes .pane-section,.panes tbody{display:flex;flex-direction:column;justify-content:flex-start;align-items:flex-start;align-self:stretch;margin:1px 1px 28px;background:#fff;border-radius:4px;border:4px solid rgba(0,0,0,.05)}.panes .pane-section:hover,.panes tbody:hover,.panes .pane-section:hover tr.title-item,.panes tbody:hover tr.title-item{border-color:#027bff0d}.panes .pane-section .pane-item,.panes .pane-section tr,.panes tbody .pane-item,.panes tbody tr{flex:1;display:flex;flex-direction:row;justify-content:flex-start;align-items:center;align-self:stretch;padding:8px 18px;background:#ddd}.panes .pane-section .pane-item:nth-child(odd),.panes .pane-section tr:nth-child(odd),.panes tbody .pane-item:nth-child(odd),.panes tbody tr:nth-child(odd){background-color:#eee}.panes .pane-section .pane-item:nth-child(odd) td.description,.panes .pane-section tr:nth-child(odd) td.description,.panes tbody .pane-item:nth-child(odd) td.description,.panes tbody tr:nth-child(odd) td.description{color:#000000b3}.panes .pane-section .pane-item:nth-child(2n),.panes .pane-section tr:nth-child(2n),.panes tbody .pane-item:nth-child(2n),.panes tbody tr:nth-child(2n){background-color:#e4e4e4}.panes .pane-section .pane-item .pane-cell,.panes .pane-section .pane-item td,.panes .pane-section tr .pane-cell,.panes .pane-section tr td,.panes tbody .pane-item .pane-cell,.panes tbody .pane-item td,.panes tbody tr .pane-cell,.panes tbody tr td{color:#777;display:flex;flex-direction:row;justify-content:flex-start;align-items:center;flex:1;font-size:14px}.panes .pane-section .pane-item .pane-cell.vertical,.panes .pane-section .pane-item td.vertical,.panes .pane-section tr .pane-cell.vertical,.panes .pane-section tr td.vertical,.panes tbody .pane-item .pane-cell.vertical,.panes tbody .pane-item td.vertical,.panes tbody tr .pane-cell.vertical,.panes tbody tr td.vertical{display:flex;flex-direction:column;justify-content:flex-start;align-items:flex-start}.panes .pane-section .pane-item .pane-cell.description,.panes .pane-section .pane-item td.description,.panes .pane-section tr .pane-cell.description,.panes .pane-section tr td.description,.panes tbody .pane-item .pane-cell.description,.panes tbody .pane-item td.description,.panes tbody tr .pane-cell.description,.panes tbody tr td.description{align-self:stretch}.panes .pane-section .pane-item .pane-cell.value,.panes .pane-section .pane-item td.value,.panes .pane-section tr .pane-cell.value,.panes .pane-section tr td.value,.panes tbody .pane-item .pane-cell.value,.panes tbody .pane-item td.value,.panes tbody tr .pane-cell.value,.panes tbody tr td.value{flex:0;margin-left:20px;word-break:break-all;flex-basis:auto}.panes .pane-section .pane-item .pane-cell.value i.icon-legend,.panes .pane-section .pane-item td.value i.icon-legend,.panes .pane-section tr .pane-cell.value i.icon-legend,.panes .pane-section tr td.value i.icon-legend,.panes tbody .pane-item .pane-cell.value i.icon-legend,.panes tbody .pane-item td.value i.icon-legend,.panes tbody tr .pane-cell.value i.icon-legend,.panes tbody tr td.value i.icon-legend{font-size:10px;margin-right:10px}.panes .pane-section .pane-item .pane-cell.value i.icon-value,.panes .pane-section .pane-item td.value i.icon-value,.panes .pane-section tr .pane-cell.value i.icon-value,.panes .pane-section tr td.value i.icon-value,.panes tbody .pane-item .pane-cell.value i.icon-value,.panes tbody .pane-item td.value i.icon-value,.panes tbody tr .pane-cell.value i.icon-value,.panes tbody tr td.value i.icon-value{padding:2px 2px 1px;border-radius:2px;width:16px;text-align:center}.panes .pane-section .pane-item.title-item,.panes .pane-section tr.title-item,.panes tbody .pane-item.title-item,.panes tbody tr.title-item{border-bottom:1px solid #DDD}.panes .pane-section .pane-item.title-item td,.panes .pane-section tr.title-item td,.panes tbody .pane-item.title-item td,.panes tbody tr.title-item td{color:#027bffe6;font-size:16px;font-weight:700}.panes .pane-section .pane-item.title-item td i,.panes .pane-section tr.title-item td i,.panes tbody .pane-item.title-item td i,.panes tbody tr.title-item td i{margin-right:10px}.panes .pane-section .pane-item.title-item td .more,.panes .pane-section tr.title-item td .more,.panes tbody .pane-item.title-item td .more,.panes tbody tr.title-item td .more{flex:1;text-align:right;font-size:12px;color:#777;font-weight:400;font-style:italic}.panes .pane-section .pane-item.variable-item,.panes .pane-section tr.variable-item,.panes tbody .pane-item.variable-item,.panes tbody tr.variable-item{cursor:pointer}.panes .pane-section .pane-item.variable-item:hover,.panes .pane-section tr.variable-item:hover,.panes tbody .pane-item.variable-item:hover,.panes tbody tr.variable-item:hover{background-color:#027bff0d}.panes .pane-section .pane-item.variable-item:hover td,.panes .pane-section tr.variable-item:hover td,.panes tbody .pane-item.variable-item:hover td,.panes tbody tr.variable-item:hover td{font-weight:700;color:#000}.panes .pane-section .pane-item.variable-item:hover td i.icon-legend,.panes .pane-section tr.variable-item:hover td i.icon-legend,.panes tbody .pane-item.variable-item:hover td i.icon-legend,.panes tbody tr.variable-item:hover td i.icon-legend{color:#000}.panes .pane-section .pane-item.variable-item:hover td span,.panes .pane-section .pane-item.variable-item:hover td i.icon-value,.panes .pane-section tr.variable-item:hover td span,.panes .pane-section tr.variable-item:hover td i.icon-value,.panes tbody .pane-item.variable-item:hover td span,.panes tbody .pane-item.variable-item:hover td i.icon-value,.panes tbody tr.variable-item:hover td span,.panes tbody tr.variable-item:hover td i.icon-value{background-color:#0000004d;color:#000}.panes .pane-section .pane-item.variable-item:hover td.description,.panes .pane-section tr.variable-item:hover td.description,.panes tbody .pane-item.variable-item:hover td.description,.panes tbody tr.variable-item:hover td.description{color:#027bff}.panes .pane-section .pane-item.highlighted:hover,.panes .pane-section .pane-item.highlighted,.panes .pane-section tr.highlighted:hover,.panes .pane-section tr.highlighted,.panes tbody .pane-item.highlighted:hover,.panes tbody .pane-item.highlighted,.panes tbody tr.highlighted:hover,.panes tbody tr.highlighted{background-color:#027bff}.panes .pane-section .pane-item.highlighted:hover td,.panes .pane-section .pane-item.highlighted td,.panes .pane-section tr.highlighted:hover td,.panes .pane-section tr.highlighted td,.panes tbody .pane-item.highlighted:hover td,.panes tbody .pane-item.highlighted td,.panes tbody tr.highlighted:hover td,.panes tbody tr.highlighted td{font-weight:700;color:#000}.panes .pane-section .pane-item.highlighted:hover td i.icon-legend,.panes .pane-section .pane-item.highlighted td i.icon-legend,.panes .pane-section tr.highlighted:hover td i.icon-legend,.panes .pane-section tr.highlighted td i.icon-legend,.panes tbody .pane-item.highlighted:hover td i.icon-legend,.panes tbody .pane-item.highlighted td i.icon-legend,.panes tbody tr.highlighted:hover td i.icon-legend,.panes tbody tr.highlighted td i.icon-legend{color:#000}.panes .pane-section .pane-item.highlighted:hover td span,.panes .pane-section .pane-item.highlighted:hover td i.icon-value,.panes .pane-section .pane-item.highlighted td span,.panes .pane-section .pane-item.highlighted td i.icon-value,.panes .pane-section tr.highlighted:hover td span,.panes .pane-section tr.highlighted:hover td i.icon-value,.panes .pane-section tr.highlighted td span,.panes .pane-section tr.highlighted td i.icon-value,.panes tbody .pane-item.highlighted:hover td span,.panes tbody .pane-item.highlighted:hover td i.icon-value,.panes tbody .pane-item.highlighted td span,.panes tbody .pane-item.highlighted td i.icon-value,.panes tbody tr.highlighted:hover td span,.panes tbody tr.highlighted:hover td i.icon-value,.panes tbody tr.highlighted td span,.panes tbody tr.highlighted td i.icon-value{background-color:#0000004d;color:#000}.panes .pane-section .pane-item.highlighted:hover td.description,.panes .pane-section .pane-item.highlighted td.description,.panes .pane-section tr.highlighted:hover td.description,.panes .pane-section tr.highlighted td.description,.panes tbody .pane-item.highlighted:hover td.description,.panes tbody .pane-item.highlighted td.description,.panes tbody tr.highlighted:hover td.description,.panes tbody tr.highlighted td.description{color:#fff}.tiles{flex:1;display:flex;flex-direction:row;justify-content:flex-start;align-items:flex-start;align-self:stretch}.tiles .tiles-inner{display:flex;flex:1;flex-direction:column;flex-wrap:nowrap;justify-content:flex-start;align-items:flex-start;align-self:stretch;padding:2px}.tiles .tiles-inner .tile-item{display:flex;flex-direction:row;justify-content:flex-start;align-items:center;align-self:stretch;color:#000;margin:1px;padding:15px 10px 15px 15px;border-radius:4px;border-bottom:1px solid transparent}.tiles .tiles-inner .tile-item:hover,.tiles .tiles-inner .tile-item.active{border-left:4px solid rgb(2,123,255);border-radius:4px;border-bottom:2px solid #E7E7E7;background:#ddd;color:#027bff}.tiles .tiles-inner .tile-item:hover:hover,.tiles .tiles-inner .tile-item.active:hover{opacity:1}.tiles .tiles-inner .tile-item:hover.disabled,.tiles .tiles-inner .tile-item.active.disabled{border-left-color:#bbb;color:#000}.tiles .tiles-inner .tile-item:hover.starred,.tiles .tiles-inner .tile-item.active.starred{border-left-color:#ffa70a;color:#ffa70a}.tiles .tiles-inner .tile-item:hover.starred .tile-tail .head-icon i,.tiles .tiles-inner .tile-item.active.starred .tile-tail .head-icon i{opacity:1;color:#ffa70a;font-size:8px}.tiles .tiles-inner .tile-item.starred .tile-tail .head-icon i{font-size:8px;color:#ffa70a}.tiles .tiles-inner .tile-item.disabled .tile-body{opacity:.3}.tiles .tiles-inner .tile-item.disabled .tile-tail .head-icon i{color:#bbb;opacity:.4}.tiles .tiles-inner .tile-item .tile-tail{display:flex;flex-direction:row;justify-content:flex-end;align-items:center;align-self:stretch;margin-left:10px;min-width:10px}.tiles .tiles-inner .tile-item .tile-tail .head-icon{flex:1;display:flex;text-align:right;flex-direction:row;justify-content:center;align-items:center;align-self:stretch}.tiles .tiles-inner .tile-item .tile-tail .head-icon i{font-size:6px;display:flex}.tiles .tiles-inner .tile-item .tile-tail .status-icons{display:flex;flex-direction:row;justify-content:flex-end;align-items:center}.tiles .tiles-inner .tile-item .tile-tail .status-icons i{font-size:16px;margin-left:10px}.tiles .tiles-inner .tile-item .tile-body{flex:1;display:flex;flex-direction:row;justify-content:flex-start;align-items:center;font-size:15px;font-weight:400;letter-spacing:.8px;line-height:22px;margin:0;flex-wrap:nowrap}.tiles .tiles-inner .tile-item .tile-body i{font-size:8px;margin-right:5px}.tiles .tiles-inner .tile-item .tile-metrics{display:flex;flex-direction:row;justify-content:flex-end;align-items:center;margin:0}.tiles .tiles-inner .tile-item .tile-metrics .foot-span span,.tiles .tiles-inner .tile-item .tile-metrics .foot-span{opacity:.8;font-size:13px;font-family:Courier New}span.empty{background:#ffa70a4d;color:#ffa70a;text-transform:lowercase;border-radius:2px;padding:2px 4px;font-weight:700}.inner-empty{display:flex;flex:1;flex-direction:column;align-self:stretch;justify-content:center;align-items:center}.inner-empty i{font-size:90px;opacity:.3;text-shadow:0 -1px #CCC,0 0px .5px #BBB}.toggle{position:relative;display:flex;flex-direction:row;justify-content:flex-start;align-items:center}.toggle input{display:none}.toggle input:checked+label{background:#027bff;border:1px solid rgba(0,0,0,.1);box-shadow:0 2px 2px #222 inset}.toggle input:checked+label:after{content:"";display:block;border-radius:50%;margin-left:21px;width:18px;height:18px;transition:.2s;background:#9bcbff;box-shadow:0 2px #0063ce}.toggle label{width:44px;height:26px;border-radius:15px;background:#ddd;cursor:pointer;border:1px solid rgba(0,0,0,.1);box-shadow:0 2px 2px #111 inset}.toggle label:after{content:"";display:block;border-radius:50%;width:18px;height:18px;margin:3px;background:#888;box-shadow:0 2px #555555e6;transition:.2s}.badge-inset{display:inline;color:#555;font-size:12px;margin-left:5px;background:#fff;border:1px solid #CCC;border-radius:4px;padding:3px 7px}.form-holder{display:flex;flex-direction:column;justify-content:flex-start;align-items:flex-start;align-self:stretch}.form-holder form{max-width:434px}form{display:flex;flex-direction:column;justify-content:flex-start;align-items:flex-start;align-self:stretch}form .alert{padding:8px 15px;font-size:14px;margin:0 0 25px}.from-group-condition{flex-direction:column;align-self:stretch;justify-content:flex-start;align-items:flex-start;display:flex}.form-group{display:flex;flex-direction:column;justify-content:flex-start;align-items:flex-start;align-self:stretch;width:100%;flex:1;margin-bottom:20px}.form-group label{flex:1;font-size:12px;line-height:18px;display:flex;flex-direction:row;justify-content:flex-start;align-items:center;align-self:stretch;color:#999}.form-group label.btn-upload{color:#000;font-size:14px;flex:0;flex-basis:auto;margin-top:5px}.form-group label.btn-upload input[type=file]{display:none}.form-group label.btn-upload input[type=text]{margin-bottom:2px;margin-left:10px}.form-group label.btn-upload span.btn{padding-right:20px}.form-group label.btn-upload i{margin-left:3px;margin-right:10px}.form-group .checkbox-group,.form-group .radio-group{display:flex;flex-direction:row;justify-content:flex-start;align-items:center}.form-group .checkbox-group input,.form-group .radio-group input{display:none}.form-group .checkbox-group label,.form-group .radio-group label{margin:0 5px 0 0!important;justify-content:center!important;text-align:center}.form-group .widget{margin-top:10px;align-self:stretch;display:flex;flex-direction:row}.form-group .widget.vertical{flex-direction:column}.form-group .widget.vertical select,.form-group .widget.vertical input{align-self:stretch}.form-group .widget.vertical select:first-child,.form-group .widget.vertical input:first-child{margin-bottom:10px}.form-group .widget input+.btn+.btn{margin-left:10px}.form-group .widget.widget-unit select,.form-group .widget.widget-unit input{flex-grow:0;background:none;box-shadow:none;border:none;border-bottom:1px solid #CCC;border-radius:0;max-width:80px;padding-left:0;color:#000;text-align:center}.form-group .widget.widget-unit span{font-size:12px;display:flex;flex-direction:row;justify-content:flex-start;align-items:center;margin-left:5px;color:#aaa}.form-group .widget select.size-m,.form-group .widget input.size-m{max-width:122px}.form-group .widget select.color-picker,.form-group .widget input.color-picker{max-width:125px}.form-group .widget select.chars-4,.form-group .widget input.chars-4{max-width:50px}.form-group .widget select.chars-3,.form-group .widget input.chars-3{max-width:40px}.form-group .widget select.chars-2,.form-group .widget input.chars-2{max-width:20px}.form-group .widget select.chars-1,.form-group .widget input.chars-1{max-width:15px}.form-group .widget div{color:#000000b3;font-size:14px}.form-group .widget select,.form-group .widget input,.form-group .widget textarea{outline:none;padding:8px 0 5px 8px;border-radius:2px;border:1px solid rgba(0,0,0,.05);flex:1;background:#aaa;box-shadow:0 2px 1px #bbb,0 4px 2px #ccc inset;color:#222;font-size:14px}.form-group .widget select.input-naked,.form-group .widget select.disabled,.form-group .widget select[disabled],.form-group .widget input.input-naked,.form-group .widget input.disabled,.form-group .widget input[disabled],.form-group .widget textarea.input-naked,.form-group .widget textarea.disabled,.form-group .widget textarea[disabled]{color:#aaa;background:none;box-shadow:none;border-radius:0}.form-group .widget select.input-naked,.form-group .widget input.input-naked,.form-group .widget textarea.input-naked{color:#444}.form-group .widget select.disabled,.form-group .widget select[disabled],.form-group .widget input.disabled,.form-group .widget input[disabled],.form-group .widget textarea.disabled,.form-group .widget textarea[disabled]{background:#fff;border-radius:4px}.form-group.tab-select{border-bottom:1px solid #BBB;display:flex;flex-direction:row;position:relative;height:48px;padding:48px 0 0;flex:0;flex-basis:auto}.form-group.tab-select .widget{height:49px;margin-top:0;display:flex;flex-direction:row;justify-content:flex-start;align-items:center;position:absolute;top:0;left:0;border-bottom:2px solid rgb(2,123,255);color:#027bff}.form-group.tab-select .widget select{border:none;background:none;box-shadow:none;padding:10px 35px 10px 10px;margin:0;color:inherit;appearance:none;-moz-appearance:none;-webkit-appearance:none;text-align:left;font-weight:700;cursor:pointer;border-radius:4px 4px 0 0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:200px;z-index:2}.form-group.tab-select .widget i{margin-left:10px;margin-right:0}.form-group.tab-select .widget i.triangle{margin-top:-4px;margin-left:0;position:absolute;right:10px}.form-group.form-group-horizontal{margin:10px 0 20px;flex-direction:row;justify-content:flex-start;align-items:center}.form-group.form-group-horizontal .widget{margin:0;display:flex;flex-direction:row;justify-content:flex-start;align-items:center}.actions{display:flex;flex-direction:row;justify-content:flex-end;align-items:center;align-self:stretch;margin:20px 0 0}.actions.actions-intermediate{margin:0}.actions button{margin-left:25px}.actions.actions-left{justify-content:flex-start}.actions.actions-left .btn{margin-left:0;margin-right:25px}.actions.actions-right{justify-content:flex-end}.actions.actions-right .btn{margin-left:10px;margin-right:0}.actions.actions-center{justify-content:center}.actions.actions-center .btn{margin-left:0;margin-right:0}.view-content-list main .main-container .page-content .inner{padding-bottom:10px}.view-content-list main .main-container .content-object-input{margin-bottom:6px}.view-content-list.dragover main .main-container .inner .dropzone{border-radius:4px;background:#0000001a;border:1px dashed rgba(0,0,0,.5)}.view-content-edit main .main-container .top-content h3{color:#000;padding:10px 10px 10px 0;font-size:16px;align-self:stretch;flex:1;text-align:right}.view-content-edit main .main-container .top-content h3 span{border-width:1px;border-style:solid;border-radius:4px;padding:4px 10px;margin-left:5px}.view-content-edit main .main-container .top-content h3 i{font-size:16px}.view-content-edit main .main-container .bottom-content .page-content{flex:1}.view-content-edit main .main-container .bottom-content .page-content .form-holder{margin:20px 20px 20px 10px;flex:1}.view-content-edit main .main-container .bottom-content .page-panel.right-panel{flex:2;align-self:stretch;display:flex;flex-direction:column;overflow:auto;justify-content:flex-start;align-items:center;padding:20px}.view-content-edit main .main-container .bottom-content .page-panel.right-panel .iframe-wrapper{display:flex;flex-direction:column;width:100%;position:relative;padding-top:56.25%;overflow:hidden;border-radius:4px;outline:4px solid rgba(0,0,0,.1)}.view-content-edit main .main-container .bottom-content .page-panel.right-panel .iframe-wrapper iframe{position:absolute;top:0;left:0;width:100%;height:100%;border:none}.view-content-edit.view-content-edit-composition main .main-container .page-panel.left-panel{flex:1}.view-content-edit.view-content-edit-composition main .main-container .page-panel.left-panel .form-holder{margin:20px 20px 20px 10px;flex:1}.view-content-edit.view-content-edit-composition main .main-container .page-content{flex:2}.view-content-edit.view-content-edit-composition main .main-container .page-panel.right-panel{flex:1}.view-content-edit.view-content-edit-composition main .main-container h3.main{font-size:16px;font-weight:500;color:#222;text-decoration:none;margin-top:5px;border-bottom:1px solid #DDD;margin-bottom:20px;padding-bottom:10px;align-self:stretch}.view-content-edit.view-content-edit-composition main .main-container .toolbar{margin-bottom:20px}.view-content-edit.view-content-edit-composition main .main-container .presets{display:flex;flex-direction:row;justify-content:flex-start;align-items:center;margin-bottom:20px}.view-content-edit.view-content-edit-composition main .main-container .presets h4{margin-right:5px;font-weight:400;font-size:14px;text-decoration:underline}.view-content-edit.view-content-edit-composition main .main-container .presets button:focus,.view-content-edit.view-content-edit-composition main .main-container .presets button{padding:3px 15px;margin:0 3px;font-size:12px;font-weight:400;min-height:initial;border:1px solid #333}.view-content-edit.view-content-edit-composition main .main-container .screen-holder{display:flex;flex-direction:column;width:100%;position:relative;padding-top:56.25%;overflow:hidden;border-radius:4px;outline:4px solid rgba(0,0,0,.1)}.view-content-edit.view-content-edit-composition main .main-container .screen-holder .screen{background-color:#ddd;position:absolute;top:0;left:0;width:100%;height:100%;border:none}.view-content-edit.view-content-edit-composition main .main-container .screen-holder .screen .element{position:absolute!important;background-color:#eee;outline:1px solid #CCC;text-align:center;box-sizing:border-box;display:flex;flex-direction:column;justify-content:center;align-items:center}.view-content-edit.view-content-edit-composition main .main-container .screen-holder .screen .element.focused{border:none;outline:2px solid rgb(2,123,255);z-index:89!important}.view-content-edit.view-content-edit-composition main .main-container .screen-holder .screen .element.focused .ui-resizable-handle{display:block}.view-content-edit.view-content-edit-composition main .main-container .screen-holder .screen .element i{font-size:20px;color:#ccc}.view-content-edit.view-content-edit-composition main .main-container .screen-holder .screen .element i.fa-cog{text-shadow:0 -2px #BBB,0 0px 2px #BBB}.view-content-edit.view-content-edit-composition main .main-container .screen-holder .screen .element i.gscaleF{color:#000!important}.view-content-edit.view-content-edit-composition main .main-container .screen-holder .screen .element .rotate-handle{width:10px;height:10px;background-color:red;position:absolute;top:50%;right:-15px;cursor:pointer;transform:translateY(-50%)}.view-content-edit.view-content-edit-composition main .main-container .screen-holder .screen .element .ui-resizable-handle{background:#aaa;border:1px solid #555;width:10px;height:10px;z-index:90;display:none;position:absolute}.view-content-edit.view-content-edit-composition main .main-container .screen-holder .screen .element .ui-resizable-handle.ui-resizable-n{cursor:n-resize;top:-5px;left:50%;margin-left:-5px}.view-content-edit.view-content-edit-composition main .main-container .screen-holder .screen .element .ui-resizable-handle.ui-resizable-s{cursor:s-resize;bottom:-5px;left:50%;margin-left:-5px}.view-content-edit.view-content-edit-composition main .main-container .screen-holder .screen .element .ui-resizable-handle.ui-resizable-w{cursor:w-resize;left:-5px;top:50%;margin-top:-5px}.view-content-edit.view-content-edit-composition main .main-container .screen-holder .screen .element .ui-resizable-handle.ui-resizable-e{cursor:e-resize;right:-5px;top:50%;margin-top:-5px}.view-content-edit.view-content-edit-composition main .main-container .screen-holder .screen .element .ui-resizable-handle.ui-resizable-nw{cursor:nw-resize;top:-5px;left:-5px}.view-content-edit.view-content-edit-composition main .main-container .screen-holder .screen .element .ui-resizable-handle.ui-resizable-ne{cursor:ne-resize;top:-5px;right:-5px}.view-content-edit.view-content-edit-composition main .main-container .screen-holder .screen .element .ui-resizable-handle.ui-resizable-sw{cursor:sw-resize;bottom:-5px;left:-5px}.view-content-edit.view-content-edit-composition main .main-container .screen-holder .screen .element .ui-resizable-handle.ui-resizable-se{cursor:se-resize;bottom:-5px;right:-5px}.view-content-edit.view-content-edit-composition main .main-container .elements-holder{align-self:stretch}.view-content-edit.view-content-edit-composition main .main-container .elements-holder h3{font-size:16px;font-weight:500;color:#222;text-decoration:none;margin:0 0 20px}.view-content-edit.view-content-edit-composition main .main-container .elements-holder h3.divide{border-top:1px solid #DDD;margin-top:10px;padding-top:20px}.view-content-edit.view-content-edit-composition main .main-container .elements-holder .form-elements-list{padding:10px;background:#ddd;border-radius:4px;display:flex;flex-direction:column;justify-content:flex-start;align-self:flex-start}.view-content-edit.view-content-edit-composition main .main-container .elements-holder .form-elements-list .element-list-item{display:flex;flex-direction:row;justify-content:flex-start;align-items:center}.view-content-edit.view-content-edit-composition main .main-container .elements-holder .form-elements-list .element-list-item>i{color:#111;margin:0 10px 0 0;cursor:move;width:30px;text-align:center}.view-content-edit.view-content-edit-composition main .main-container .elements-holder .form-elements-list .element-list-item .inner:hover,.view-content-edit.view-content-edit-composition main .main-container .elements-holder .form-elements-list .element-list-item.focused .inner{background-color:#027bff;color:#fff;font-weight:700}.view-content-edit.view-content-edit-composition main .main-container .elements-holder .form-elements-list .element-list-item .inner:hover button.btn-naked,.view-content-edit.view-content-edit-composition main .main-container .elements-holder .form-elements-list .element-list-item.focused .inner button.btn-naked{color:#fff}.view-content-edit.view-content-edit-composition main .main-container .elements-holder .form-elements-list .element-list-item .inner{cursor:pointer;padding:5px 5px 5px 10px;margin-bottom:5px;background:#eee;border-radius:4px;display:flex;flex-direction:row;justify-content:flex-start;align-items:center;align-self:stretch;color:#222;min-height:46px;flex:1}.view-content-edit.view-content-edit-composition main .main-container .elements-holder .form-elements-list .element-list-item .inner label{flex:1;cursor:pointer;text-overflow:ellipsis;white-space:nowrap;max-width:219px;overflow:hidden}.view-content-edit.view-content-edit-composition main .main-container .elements-holder .form-elements-list .element-list-item .inner button{display:none;margin-left:5px}.view-content-edit.view-content-edit-composition main .main-container .elements-holder .form-elements-list .element-list-item .inner button.btn-naked{color:#aaa}.view-content-edit.view-content-edit-composition main .main-container .elements-holder .form-elements-list .element-list-item .inner:hover label{max-width:150px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.view-content-edit.view-content-edit-composition main .main-container .elements-holder .form-elements-list .element-list-item .inner:hover button{display:block}.view-content-edit.view-content-edit-composition main .main-container .form-element-properties{flex:1;align-self:stretch}.view-content-edit.view-content-edit-composition main .main-container .form-element-properties form{display:flex;flex-direction:column}.view-content-edit.view-content-edit-composition main .main-container .form-element-properties form h3{font-size:16px;font-weight:500;color:#222;text-decoration:none;border-bottom:1px solid #DDD;margin-bottom:20px;padding-bottom:10px;align-self:stretch}.view-content-edit.view-content-edit-composition main .main-container .form-element-properties form .divide{margin-top:30px;margin-bottom:10px}.view-content-edit.view-content-edit-composition main .main-container .form-element-properties form .form-group{flex-direction:row;justify-content:flex-start;align-items:center;display:flex}.view-content-edit.view-content-edit-composition main .main-container .form-element-properties form .form-group label{flex-grow:1;flex-direction:row;justify-content:flex-start;align-items:center;display:flex;font-weight:700;margin-right:10px}.view-content-edit.view-content-edit-composition main .main-container .form-element-properties form .form-group .widget{flex-grow:1;flex-direction:row;justify-content:flex-start;align-items:center;display:flex;margin:0}.view-content-edit.view-content-edit-composition main .main-container .form-element-properties form .form-group .widget input{flex:1;margin:0}.view-content-edit.view-content-edit-composition main .main-container .form-element-properties form .form-group .widget input[disabled]{padding:8px 0 5px 8px;border:1px solid rgba(255,255,255,.05)}.view-content-edit.view-content-edit-text main .main-container .page-panel.left-panel{flex:1}.view-content-edit.view-content-edit-text main .main-container .page-panel.left-panel .form-holder{margin:20px 20px 20px 10px;flex:1}.view-content-edit.view-content-edit-text main .main-container .page-content{flex:2}.view-content-edit.view-content-edit-text main .main-container .page-panel.right-panel{flex:1}.view-content-edit.view-content-edit-text main .main-container h3.main{font-size:16px;font-weight:500;color:#222;text-decoration:none;margin-top:5px;border-bottom:1px solid #DDD;margin-bottom:20px;padding-bottom:10px;align-self:stretch}.view-content-edit.view-content-edit-text main .main-container .toolbar{margin-bottom:20px}.view-content-edit.view-content-edit-text main .main-container .screen-holder{display:flex;flex-direction:column;width:100%;position:relative;padding-top:56.25%;overflow:hidden;border-radius:4px;outline:4px solid rgba(0,0,0,.1);background:repeating-conic-gradient(#eee,#eee 25%,#fff 0%,#fff 50%) 50%/20px 20px}.view-content-edit.view-content-edit-text main .main-container .screen-holder .screen{position:absolute;top:0;left:0;width:100%;height:100%;border:none;display:flex}.view-content-edit.view-content-edit-text main .main-container .screen-holder .screen .text{display:flex;justify-content:center;align-items:center;flex-direction:row;flex:1;align-self:stretch;text-align:center;max-width:100%;word-break:break-all}.view-content-edit.view-content-edit-text main .main-container .screen-holder .screen .text marquee{display:flex;align-items:center;justify-content:flex-start;flex-direction:row;flex:1;height:100%;width:100%}.view-content-edit.view-content-edit-text main .main-container .form-element-properties{flex:1;align-self:stretch}.view-content-edit.view-content-edit-text main .main-container .form-element-properties form{display:flex;flex-direction:column}.view-content-edit.view-content-edit-text main .main-container .form-element-properties form h3{font-size:16px;font-weight:500;color:#222;text-decoration:none;border-bottom:1px solid #DDD;margin-bottom:20px;padding-bottom:10px;align-self:stretch}.view-content-edit.view-content-edit-text main .main-container .form-element-properties form .divide{margin-top:30px;margin-bottom:10px}.view-content-edit.view-content-edit-text main .main-container .form-element-properties form .bar{width:100%;height:1px;background:#333;margin-bottom:20px}.view-content-edit.view-content-edit-text main .main-container .form-element-properties form .form-group label{flex-grow:1;flex-direction:row;justify-content:flex-start;align-items:center;display:flex;font-weight:700;margin-right:10px;margin-bottom:5px}.view-content-edit.view-content-edit-text main .main-container .form-element-properties form .form-group .widget{flex-grow:1;flex-direction:row;justify-content:flex-start;align-items:center;display:flex;margin:0}.view-content-edit.view-content-edit-text main .main-container .form-element-properties form .form-group .widget input{flex:1;margin:0}.view-content-edit.view-content-edit-text main .main-container .form-element-properties form .form-group .widget input[disabled]{padding:8px 0 5px 8px;border:1px solid rgba(255,255,255,.05)}.view-logs-list main .main-container .bottom-content .page-content .inner{padding-top:8px;padding-bottom:8px}.view-logs-list main .main-container .bottom-content .page-content .logs{flex:1;display:flex;flex-direction:column;align-self:stretch}.view-logs-list main .main-container .bottom-content .page-content .logs pre{flex:1;background:#000000e6;border:1px solid rgba(85,85,85,.5);border-radius:4px;font-family:monospace;color:#f2f2f2;padding:20px;overflow:auto;align-self:stretch}.view-node-player-edit main .main-container .bottom-content .page-content{flex:1}.view-node-player-edit main .main-container .bottom-content .page-content .form-holder{margin:20px 20px 20px 10px}.view-player-group-list main .main-container .players-holder ul.players{display:flex;flex-direction:column;justify-content:flex-start;align-items:flex-start;align-self:stretch;margin:10px 0 0;border:1px dashed #DDD;border-radius:4px;padding:10px}.view-player-group-list main .main-container .players-holder ul.players li.player-item{display:flex;flex-direction:row;justify-content:flex-start;align-items:center;align-self:stretch;margin:0 0 2px}.view-player-group-list main .main-container .players-holder ul.players li.player-item .head{display:flex;flex-direction:column;justify-content:center;align-items:center;color:#666;font-size:10px;padding:10px;cursor:default}.view-player-group-list main .main-container .players-holder ul.players li.player-item:hover .infos .title{color:#000}.view-player-group-list main .main-container .players-holder ul.players li.player-item .infos{display:flex;flex-direction:row;justify-content:flex-start;align-items:center;color:#555;font-size:12px;margin-right:5px;flex:1;max-width:180px;background:#fff;border:1px solid #CCC;border-radius:4px;padding:3px 7px}.view-player-group-list main .main-container .players-holder ul.players li.player-item .infos .title{font-size:13px;color:#555;display:block;word-break:break-all;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%}.view-player-group-list main .main-container .players-holder ul.players li.player-item .infos .type{display:flex;flex-direction:row;justify-content:flex-start;align-items:center;color:#555;font-size:12px;margin-right:5px}.view-player-group-list main .main-container .players-holder ul.players li.player-item .body{display:block;flex-direction:row;justify-content:flex-start;align-items:center;margin:0 10px;background:#ebebeb;padding:10px;align-self:stretch;flex:1;border-radius:4px;color:#333;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:360px;font-size:12px}.view-player-group-list main .main-container .players-holder ul.players li.player-item .body span{opacity:.5;margin-right:7px;font-size:10px}.view-player-group-list main .main-container .players-holder ul.players li.player-item .tail{display:flex;flex-direction:row;justify-content:center;align-items:center}.view-player-group-list main .main-container .players-holder ul.players li.player-item .tail a{color:#000}.view-playlist-list main .main-container p{font-size:12px;line-height:18px;display:flex;margin-bottom:5px;flex-direction:row;justify-content:flex-start;align-items:center;align-self:stretch;color:#999}.view-playlist-list main .main-container .modal-slide h2{font-size:20px}.view-playlist-list main .main-container .modal-slide input[disabled]{color:#555}.view-playlist-list main .main-container .modal-slide .slide-schedule-group select,.view-playlist-list main .main-container .modal-slide .slide-schedule-end-group select{margin-right:5px}.view-playlist-list main .main-container .modal-slide .slide-schedule-group select,.view-playlist-list main .main-container .modal-slide .slide-schedule-group input,.view-playlist-list main .main-container .modal-slide .slide-schedule-end-group select,.view-playlist-list main .main-container .modal-slide .slide-schedule-end-group input{font-size:12px;max-width:50%}.view-playlist-list main .main-container .modal-slide .slide-schedule-group select.datetimepicker,.view-playlist-list main .main-container .modal-slide .slide-schedule-group input.datetimepicker,.view-playlist-list main .main-container .modal-slide .slide-schedule-end-group select.datetimepicker,.view-playlist-list main .main-container .modal-slide .slide-schedule-end-group input.datetimepicker{margin-left:5px;padding-left:0}.view-playlist-list main .main-container .bottom-content .page-content{flex:1}.view-playlist-list main .main-container .bottom-content .page-content.with-right-panel{flex:.5}.view-playlist-list main .main-container .bottom-content .page-content .inner{padding:0}.view-playlist-list main .main-container .bottom-content .page-content .inner h3{font-size:16px;font-weight:500;color:#222;text-decoration:none;margin:0 0 20px}.view-playlist-list main .main-container .bottom-content .page-content .inner .playlist-holder{margin:20px 20px 20px 10px;flex:1}.view-playlist-list main .main-container .bottom-content .page-content .inner .playlist-holder .form-holder{margin:20px 0 0}.view-playlist-list main .main-container .bottom-content .page-content .inner .playlist-holder .form-holder form{max-width:initial}.view-playlist-list main .main-container .bottom-content .page-content .inner .playlist-holder .form-holder .form-group{flex-grow:0;margin-bottom:5px}.view-playlist-list main .main-container .bottom-content .page-content .inner .playlist-holder .preview-holder{position:relative}.view-playlist-list main .main-container .bottom-content .page-content .inner .playlist-holder .preview-holder .form-group{flex-grow:0;margin-bottom:0}.view-playlist-list main .main-container .bottom-content .page-content .inner .playlist-holder .preview-holder .hover-only{display:none}.view-playlist-list main .main-container .bottom-content .page-content .inner .playlist-holder .preview-holder:hover .hover-only{display:flex;position:absolute}.view-playlist-list main .main-container .bottom-content .page-content .inner .playlist-holder .preview-holder:hover .hover-only:hover{background:#ccc}.view-playlist-list main .main-container .bottom-content .page-content .inner .playlist-holder h4{font-size:14px;display:flex;flex-direction:row;justify-content:flex-start;align-items:center;align-self:stretch;color:#000;padding-bottom:10px;text-decoration:none}.view-playlist-list main .main-container .bottom-content .page-content .inner .playlist-holder h4.divide{border-top:1px solid #DDD;margin-top:20px;padding-top:20px}.view-playlist-list main .main-container .bottom-content .page-content .inner .playlist-holder .qrcode-pic{margin-top:10px}.view-playlist-list main .main-container .bottom-content .page-content .inner .playlist-holder .qrcode-pic img{border:1px dashed #AAA;padding:5px;border-radius:4px}.view-playlist-list main .main-container .bottom-content .page-content .inner .playlist-holder .preview{background:#000;border:1px solid rgba(0,0,0,.3);border-radius:4px;justify-content:center;align-items:center;align-self:stretch;display:flex;margin:10px 0 20px;height:300px}.view-playlist-list main .main-container .bottom-content .page-content .inner .playlist-holder .preview iframe{flex:1;align-self:stretch}.view-playlist-list main .main-container .bottom-content .page-content .inner .slides-holder{align-self:stretch;border-right:1px solid #DDD;margin:20px 10px 20px 20px;padding-right:20px;flex:1.3}.view-playlist-list main .main-container .bottom-content .page-panel.left-panel{flex:.3;max-width:initial;justify-content:center;align-items:center;display:flex}.view-player-group-list main .main-container p{font-size:12px;line-height:18px;display:flex;margin-bottom:5px;flex-direction:row;justify-content:flex-start;align-items:center;align-self:stretch;color:#999}.view-player-group-list main .main-container .bottom-content .page-content{flex:1}.view-player-group-list main .main-container .bottom-content .page-content .inner{padding:0}.view-player-group-list main .main-container .bottom-content .page-content .inner h3{font-size:16px;font-weight:500;color:#222;text-decoration:none;margin:0 0 20px}.view-player-group-list main .main-container .bottom-content .page-content .inner .node-player-group-holder{margin:20px 20px 20px 10px;flex:1}.view-player-group-list main .main-container .bottom-content .page-content .inner .node-player-group-holder .form-holder{margin:20px 0 0}.view-player-group-list main .main-container .bottom-content .page-content .inner .node-player-group-holder .form-holder form{max-width:initial}.view-player-group-list main .main-container .bottom-content .page-content .inner .node-player-group-holder .form-holder .form-group{flex-grow:0;margin-bottom:15px}.view-player-group-list main .main-container .bottom-content .page-content .inner .node-player-group-holder .preview-holder{position:relative}.view-player-group-list main .main-container .bottom-content .page-content .inner .node-player-group-holder .preview-holder .form-group{flex-grow:0;margin-bottom:0}.view-player-group-list main .main-container .bottom-content .page-content .inner .node-player-group-holder .preview-holder .hover-only{display:none}.view-player-group-list main .main-container .bottom-content .page-content .inner .node-player-group-holder .preview-holder:hover .hover-only{display:flex;position:absolute}.view-player-group-list main .main-container .bottom-content .page-content .inner .node-player-group-holder .preview-holder:hover .hover-only:hover{background:#ccc}.view-player-group-list main .main-container .bottom-content .page-content .inner .node-player-group-holder h4{font-size:14px;display:flex;flex-direction:row;justify-content:flex-start;align-items:center;align-self:stretch;color:#000;padding-bottom:10px;text-decoration:none}.view-player-group-list main .main-container .bottom-content .page-content .inner .node-player-group-holder h4.divide{border-top:1px solid #DDD;margin-top:20px;padding-top:20px}.view-player-group-list main .main-container .bottom-content .page-content .inner .node-player-group-holder .preview{background:#000;border:1px solid rgba(0,0,0,.3);border-radius:4px;justify-content:center;align-items:center;align-self:stretch;display:flex;margin:10px 0 20px;height:300px}.view-player-group-list main .main-container .bottom-content .page-content .inner .node-player-group-holder .preview iframe{flex:1;align-self:stretch}.view-player-group-list main .main-container .bottom-content .page-content .inner .players-holder{align-self:stretch;border-right:1px solid #DDD;margin:20px 10px 20px 20px;padding-right:20px;flex:1.3}.view-player-group-list main .main-container .bottom-content .page-panel.left-panel{flex:.3;max-width:initial;justify-content:center;align-items:center;display:flex}.view-playlist-list main .main-container .page-content .inner h3.divide{margin-top:50px}.view-playlist-list main .main-container .slides-holder ul.slides{display:flex;flex-direction:column;justify-content:flex-start;align-items:flex-start;align-self:stretch;margin:10px 0 0;border:1px dashed #DDD;border-radius:4px;padding:10px}.view-playlist-list main .main-container .slides-holder ul.slides li.slide-item{display:flex;flex-direction:row;justify-content:flex-start;align-items:center;align-self:stretch;margin:0 0 2px}.view-playlist-list main .main-container .slides-holder ul.slides li.slide-item.disabled .infos .title{color:#ccc}.view-playlist-list main .main-container .slides-holder ul.slides li.slide-item.disabled .infos .type i{color:#ccc!important}.view-playlist-list main .main-container .slides-holder ul.slides li.slide-item.disabled .body{opacity:0}.view-playlist-list main .main-container .slides-holder ul.slides li.slide-item .sort{display:flex;flex-direction:column;justify-content:center;align-items:center}.view-playlist-list main .main-container .slides-holder ul.slides li.slide-item .sort a{color:#666;font-size:10px;padding:10px;cursor:move}.view-playlist-list main .main-container .slides-holder ul.slides li.slide-item .sort a:hover{color:#027bff}.view-playlist-list main .main-container .slides-holder ul.slides li.slide-item .infos{display:flex;flex-direction:row;justify-content:flex-start;align-items:center;color:#555;font-size:12px;margin-right:5px;flex:1;max-width:120px;background:#fff;border:1px solid #CCC;border-radius:4px;padding:3px 7px}.view-playlist-list main .main-container .slides-holder ul.slides li.slide-item .infos:hover .title{color:#000}.view-playlist-list main .main-container .slides-holder ul.slides li.slide-item .infos .title{display:block;word-break:break-all;font-size:13px;color:#555;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%}.view-playlist-list main .main-container .slides-holder ul.slides li.slide-item .infos .type{display:flex;flex-direction:row;justify-content:flex-start;align-items:center;color:#555;font-size:12px;margin-right:5px}.view-playlist-list main .main-container .slides-holder ul.slides li.slide-item .body{display:flex;flex-direction:row;justify-content:flex-start;align-items:center;margin:0 10px;background:#ebebeb;padding:10px;align-self:stretch;flex:1;border-radius:4px;font-size:13px;color:#000}.view-playlist-list main .main-container .slides-holder ul.slides li.slide-item .body .range{display:flex;flex-direction:column;justify-content:flex-start;align-items:flex-start;flex:1;max-width:315px;overflow-x:auto;white-space:nowrap}.view-playlist-list main .main-container .slides-holder ul.slides li.slide-item .body .range .start{display:flex;flex-direction:row;justify-content:flex-start;align-items:center;margin-bottom:8px}.view-playlist-list main .main-container .slides-holder ul.slides li.slide-item .body .range .end{display:flex;flex-direction:row;justify-content:flex-start;align-items:center}.view-playlist-list main .main-container .slides-holder ul.slides li.slide-item .body .range .start .prefix,.view-playlist-list main .main-container .slides-holder ul.slides li.slide-item .body .range .end .prefix{margin-left:5px;margin-right:5px;font-size:12px;color:#222}.view-playlist-list main .main-container .slides-holder ul.slides li.slide-item .body .range .start .cron-description,.view-playlist-list main .main-container .slides-holder ul.slides li.slide-item .body .range .end .cron-description{display:block;word-break:break-all;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%;margin-left:5px;font-size:10px;opacity:.5}.view-playlist-list main .main-container .slides-holder ul.slides li.slide-item .tail{display:flex;flex-direction:row;justify-content:center;align-items:center}.view-playlist-list main .main-container .slides-holder ul.slides li.slide-item .tail a{color:#000}.view-plugins-list main .main-container .bottom-content .page-content .inner{padding:10px}.view-settings-list main .main-container .bottom-content .page-content .inner{padding:10px}.view-sysinfo-list main .main-container .bottom-content .page-content .inner{padding:10px}.view-sysinfo-list .reboot{color:#333}.view-login main .main-container{position:relative}.view-login main .main-container .alert{position:absolute;top:0;left:0;right:0}.view-login main .main-container .login-content{display:flex;flex:1;flex-direction:column;justify-content:center;align-items:center}.view-login main .main-container .login-content .form-holder{width:400px;display:flex;justify-content:center;align-items:center;align-self:stretch;margin-left:auto;margin-right:auto}.view-login main .main-container .login-content .form-holder .card{display:flex;justify-content:center;align-items:center;align-self:stretch;border-radius:6px;padding:50px;color:#fff}.view-login main .main-container .login-content .form-holder .card form{padding:0;flex:1;display:flex;justify-content:center;align-items:center;align-self:stretch}.view-login main .main-container .login-content .form-holder .card form .actions{margin-top:10px}.view-login main .main-container .login-content .form-holder .card form .actions .btn{padding-left:20px;padding-right:20px}.view-auth-user-list main .main-container .bottom-content .page-content .inner{padding:10px}.view-auth-user-list main .main-container .bottom-content .page-content .inner .tile-item.disabled .tile-body{opacity:.3;text-decoration-line:line-through}.view-auth-user-list main .main-container .bottom-content .page-content .inner .tile-item .tile-tail .btn{margin-left:10px}.view-auth-user-list main .main-container .bottom-content .page-content .inner .tile-item .tile-tail .btn:first-child{margin-left:0}.view-auth-user-list main .main-container .bottom-content .page-content .inner .tile-item .tile-metrics{flex:1;flex-direction:row;justify-content:flex-start;align-items:center}.view-auth-user-list main .main-container .bottom-content .page-content .inner .tile-item .tile-metrics .widget,.view-auth-user-list main .main-container .bottom-content .page-content .inner .tile-item .tile-metrics .form-group{margin:0}.view-auth-user-list main .main-container .bottom-content .page-content .inner .tile-item .tile-metrics label{flex-grow:0}.view-auth-user-list main .main-container .bottom-content .page-content .inner .tile-item .tile-metrics input{margin-left:10px;margin-right:10px;max-width:320px}menu h1.logo a{color:#666}menu:hover h1.logo a{color:transparent}ul.explr-dirview li a.with-thumbnail .img-holder{background:#ddd}ul.explr-dirview li a i{color:#027bff}button.btn-pixel,.btn.btn-pixel{background:#fff;color:#444;box-shadow:4px 0 #ccc,0 4px #11a948,-4px 0 #027bff,0 -4px #ef0e5d}button.btn-pixel:hover,.btn.btn-pixel:hover{box-shadow:6px 0 #ccc,0 6px #11a948,-6px 0 #027bff,0 -6px #ef0e5d}button.btn-naked,.btn.btn-naked{color:#777}button.btn-naked:hover,.btn.btn-naked:hover,button.btn-neutral:hover,.btn.btn-neutral:hover{box-shadow:0 2px 0 1px #666 inset}button.btn-neutral,.btn.btn-neutral{color:#555;background:#fff;box-shadow:none!important;border:1px solid transparent}button.btn-neutral.active,button.btn-neutral:hover,.btn.btn-neutral.active,.btn.btn-neutral:hover{box-shadow:0 2 0 1px #222 inset;background:#ccc}button.btn-neutral:focus,.btn.btn-neutral:focus{background:#777;border:1px solid #555}.tiles .tiles-inner .tile-item{border-top:2px solid transparent;border-right:2px solid transparent;border-bottom:2px solid transparent}.tiles .tiles-inner .tile-item:hover,.tiles .tiles-inner .tile-item.active{border-left:2px solid #E7E7E7;border-top:2px solid #E7E7E7;border-right:2px solid #E7E7E7;border-bottom:2px solid #E7E7E7;background:#fff}.tiles .tiles-inner .tile-item:hover,.tiles .tiles-inner .tile-item.active{border-color:#027bff}.tiles .tiles-inner .tile-item:hover.starred,.tiles .tiles-inner .tile-item.active.starred{border-color:#ffa70a}.tiles .tiles-inner .tile-item:hover.disabled,.tiles .tiles-inner .tile-item.active.disabled{border-color:#bbb}.panes .pane-section .pane-item:nth-child(odd),.panes .pane-section tr:nth-child(odd),.panes tbody .pane-item:nth-child(odd),.panes tbody tr:nth-child(odd){background-color:#fff}.panes .pane-section .pane-item:nth-child(2n),.panes .pane-section tr:nth-child(2n),.panes tbody .pane-item:nth-child(2n),.panes tbody tr:nth-child(2n){background-color:#f7f7f7}.form-group .widget select,.form-group .widget input,.form-group .widget textarea{box-shadow:0 2px 1px #ddd,0 4px 2px #ddd inset;color:#555;background:#eee}.toggle label{box-shadow:0 2px 2px #ccc inset}.toggle label:after{box-shadow:0 2px #cccccce6}.toggle input:checked+label{box-shadow:0 2px 2px #0000004d inset}ul.pills{box-shadow:1px 1px .5px .5px inset #aaa3;background:#eee}ul.pills li a{color:#444;background:#fff}ul.pills li.active a{color:#fff;background:#027bff}.breadcrumb-container ul.breadcrumb{box-shadow:1px 1px .5px .5px inset #aaa3;background:#eee}.breadcrumb-container ul.breadcrumb li a,.breadcrumb-container ul.breadcrumb li span,.breadcrumb-container ul.breadcrumb li{color:#444}.breadcrumb-container ul.breadcrumb li:hover a{color:#fff}.breadcrumb-container ul.breadcrumb li.divider i{color:#bbb}.dropdown ul.dropdown-menu li.danger:hover a{color:#fff}.inner-empty i{color:#ddd;text-shadow:0 -1px #999,0 0px .5px #666}.view-player-group-list main .main-container .players-holder ul.players li.player-item .tail a,.view-playlist-list main .main-container .slides-holder ul.slides li.slide-item .tail a{color:#888}.view-player-group-list main .main-container .players-holder ul.players li.player-item .tail a:hover,.view-playlist-list main .main-container .slides-holder ul.slides li.slide-item .tail a:hover{color:#fff}.form-group .widget select.disabled,.form-group .widget select[disabled],.form-group .widget input.disabled,.form-group .widget input[disabled],.form-group .widget textarea.disabled,.form-group .widget textarea[disabled]{border:none;background:#eee;border-radius:4px;padding-left:10px;padding-right:10px}.modal-explr-picker .explr-tree{background:#f7f7f7} diff --git a/data/www/js/global.js b/data/www/js/global.js index 7ddad5b..d381755 100644 --- a/data/www/js/global.js +++ b/data/www/js/global.js @@ -30,6 +30,10 @@ const hideDropdowns = function () { $('.dropdown').removeClass('dropdown-show'); }; +const classColorXor = function(color, fallback) { + return color === 'gscaleF' ? 'gscale0' : (color === 'gscale0' ? 'gscaleF' : fallback); +}; + const showToast = function (text) { const $toast = $(".toast"); $toast.addClass('show'); @@ -162,5 +166,12 @@ jQuery(document).ready(function ($) { showToast(l.js_common_copied); }); + + $(window).on('beforeunload', function(event) { + $('.modal').each(function() { + $(this).find('button[type=submit]').removeClass('hidden'); + $(this).find('.btn-loading').addClass('hidden'); + }); + }); }); diff --git a/data/www/js/lib/jquery-more.js b/data/www/js/lib/jquery-more.js new file mode 100644 index 0000000..445e1c3 --- /dev/null +++ b/data/www/js/lib/jquery-more.js @@ -0,0 +1,84 @@ +jQuery(function () { + $(document).ready(function () { + function adjustValue(inputElement, delta) { + const currentValue = parseInt(inputElement.value) || 0; + const newValue = currentValue + delta; + if (("" + newValue).length <= inputElement.maxLength) { + inputElement.value = newValue >= 0 ? newValue : 0; + $(inputElement).trigger('input'); + } + } + + $('.numeric-input').on('input', function () { + this.value = this.value.replace(/[^0-9]/g, ''); + }); + + $('.numeric-input').on('keydown', function (e) { + switch (e.key) { + case 'ArrowUp': + e.preventDefault(); + adjustValue(this, e.shiftKey ? 10 : 1); + break; + + case 'ArrowDown': + e.preventDefault(); + adjustValue(this, e.shiftKey ? -10 : -1); + break; + } + }); + + + function updateRadioActiveClass() { + $('.radio-group label').removeClass('active'); + $('input[type="radio"]:checked').next('label').addClass('active'); + } + updateRadioActiveClass(); + $('.radio-group input[type="radio"]').change(function() { + updateRadioActiveClass(); + }); + + + function updateCheckboxActiveClass() { + $('.checkbox-group label').each(function() { + const checkbox = $(this).prev('input[type="checkbox"]'); + if (checkbox.is(':checked')) { + $(this).addClass('active'); + } else { + $(this).removeClass('active'); + } + }); + } + updateCheckboxActiveClass(); + $('.checkbox-group input[type="checkbox"]').change(function() { + updateCheckboxActiveClass(); + }); + + $.fn.serializeObject = function() { + const obj = {}; + + this.find('input, select, textarea').each(function() { + const field = $(this); + const name = field.attr('name'); + + if (!name) return; // Ignore fields without a name + + if (field.is(':checkbox')) { + const isOnOff = field.val() === 'on' || field.val() === '1'; + obj[name] = field.is(':checked') ? field.val() : (isOnOff ? false : null); + } else if (field.is(':radio')) { + if (field.is(':checked')) { + obj[name] = field.val(); + } else if (!(name in obj)) { + obj[name] = false; + } + } else { + const tryInt = parseInt(field.val()); + obj[name] = isNaN(tryInt) ? field.val() : tryInt; + } + }); + + return obj; + }; + + }); +}); diff --git a/data/www/js/lib/jquery-ui-rotatable.min.js b/data/www/js/lib/jquery-ui-rotatable.min.js new file mode 100644 index 0000000..b0ff203 --- /dev/null +++ b/data/www/js/lib/jquery-ui-rotatable.min.js @@ -0,0 +1 @@ +!function(t){"function"==typeof define&&define.amd?define(["jquery"],t):t(jQuery)}(function(t){return t.widget("ui.rotatable",t.ui.mouse,{widgetEventPrefix:"rotate",options:{angle:!1,degrees:!1,handle:!1,handleOffset:{top:0,left:0},radians:!1,rotate:null,rotationCenterOffset:{top:0,left:0},snap:!1,start:null,step:22.5,stop:null,transforms:null,wheelRotate:!0},angle:function(t){if(void 0===t)return this.options.angle;this.options.angle=t,this.elementCurrentAngle=t,this._performRotation(this.options.angle)},getElementCenter:function(){return this.elementCenter=this._calculateElementCenter(),this.elementCenter},handle:function(t){if(void 0===t)return this.options.handle;this.options.handle=t},plugins:{},rotationCenterOffset:function(t){if(void 0===t)return this.options.rotationCenterOffset;null!==t.top&&(this.options.rotationCenterOffset.top=t.top),null!==t.left&&(this.options.rotationCenterOffset.left=t.left)},rotateElement:function(t){if(!this.element||this.element.disabled||this.options.disabled)return!1;if(!t.which)return this.stopRotate(t),!1;var e=this._calculateRotateAngle(t),n=this.elementCurrentAngle;if(this.elementCurrentAngle=e,this._propagate("rotate",t),!1===this._propagate("rotate",t))return this.elementCurrentAngle=n,!1;var s=this.ui();return!1===this._trigger("rotate",t,s)?(this.elementCurrentAngle=n,!1):(s.angle.current!==e&&(e=s.angle.current,this.elementCurrentAngle=e),this._performRotation(e),n!==e&&(this.hasRotated=!0),!1)},startRotate:function(e){var n=this.getElementCenter(),s=e.pageX-n.x,i=e.pageY-n.y;return this.mouseStartAngle=Math.atan2(i,s),this.elementStartAngle=this.elementCurrentAngle,this.hasRotated=!1,this._propagate("start",e),t(document).bind("mousemove",this.listeners.rotateElement),t(document).bind("mouseup",this.listeners.stopRotate),!1},stopRotate:function(e){if(this.element&&!this.element.disabled)return t(document).unbind("mousemove",this.listeners.rotateElement),t(document).unbind("mouseup",this.listeners.stopRotate),this.elementStopAngle=this.elementCurrentAngle,this._propagate("stop",e),setTimeout(function(){this.element=!1},10),!1},wheelRotate:function(t){var e=this._angleInRadians(Math.round(t.originalEvent.deltaY/10));(this.options.snap||t.shiftKey)&&(e=this._calculateSnap(e)),e=this.elementCurrentAngle+e,this.angle(e),this._trigger("rotate",t,this.ui())},ui:function(){return{api:this,element:this.element,angle:{start:this.elementStartAngle,current:this.elementCurrentAngle,degrees:Math.abs(this._angleInDegrees(this.elementCurrentAngle)),stop:this.elementStopAngle}}},_angleInRadians:function(t){return t*Math.PI/180},_angleInDegrees:function(t){return 180*t/Math.PI},_calculateElementCenter:function(){var t=this._getElementOffset();if(this._isRotationCenterSet())return{x:t.left+this.rotationCenterOffset().left,y:t.top+this.rotationCenterOffset().top};if(void 0!==this.element.css("transform-origin")){var e=this.element.css("transform-origin").match(/([\d.]+)px +([\d.]+)px/);if(null!=e)return{x:t.left+parseFloat(e[1]),y:t.top+parseFloat(e[2])}}return{x:t.left+this.element.width()/2,y:t.top+this.element.height()/2}},_calculateSnap:function(t){var e=this._angleInDegrees(t);return e=Math.round(e/this.options.step)*this.options.step,this._angleInRadians(e)},_calculateRotateAngle:function(t){var e=this.getElementCenter(),n=t.pageX-e.x,s=t.pageY-e.y,i=Math.atan2(s,n)-this.mouseStartAngle+this.elementStartAngle;return(this.options.snap||t.shiftKey)&&(i=this._calculateSnap(i)),i},_create:function(){var e;this.options.handle?e=this.options.handle:((e=t(document.createElement("div"))).addClass("ui-rotatable-handle"),0===this.options.handleOffset.top&&0===this.options.handleOffset.left||(e.css("position","relative"),e.css("top",this.options.handleOffset.top+"px"),e.css("left",this.options.handleOffset.left+"px"))),this.listeners={rotateElement:t.proxy(this.rotateElement,this),startRotate:t.proxy(this.startRotate,this),stopRotate:t.proxy(this.stopRotate,this),wheelRotate:t.proxy(this.wheelRotate,this)},this.options.wheelRotate&&this.element.bind("wheel",this.listeners.wheelRotate),e.draggable({helper:"clone",start:this._dragStart,handle:e}),e.bind("mousedown",this.listeners.startRotate),e.closest(this.element).length||e.appendTo(this.element),this.rotationCenterOffset(this.options.rotationCenterOffset),this.options.degrees?this.elementCurrentAngle=this._angleInRadians(this.options.degrees):this.elementCurrentAngle=this.options.radians||this.options.angle||0,this._performRotation(this.elementCurrentAngle)},_destroy:function(){this.element.removeClass("ui-rotatable"),this.element.find(".ui-rotatable-handle").remove(),this.options.wheelRotate&&this.element.unbind("wheel",this.listeners.wheelRotate)},_dragStart:function(t){if(this.element)return!1},_getElementOffset:function(){this._performRotation(0);var t=this.element.offset();return this._performRotation(this.elementCurrentAngle),t},_getTransforms:function(t){var e="rotate("+t+"rad)";return this.options.transforms&&(e+=" "+function(t){var e=[];for(var n in t)t.hasOwnProperty(n)&&t[n]&&e.push(n+"("+t[n]+")");return e.join(" ")}(this.options.transforms)),e},_isRotationCenterSet:function(){return 0!==this.options.rotationCenterOffset.top||0!==this.options.rotationCenterOffset.left},_performRotation:function(t){this._isRotationCenterSet()&&(this.element.css("transform-origin",this.options.rotationCenterOffset.left+"px "+this.options.rotationCenterOffset.top+"px"),this.element.css("-ms-transform-origin",this.options.rotationCenterOffset.left+"px "+this.options.rotationCenterOffset.top+"px"),this.element.css("-webkit-transform-origin",this.options.rotationCenterOffset.left+"px "+this.options.rotationCenterOffset+"px"));var e=this._getTransforms(t);this.element.css("transform",e),this.element.css("-moz-transform",e),this.element.css("-webkit-transform",e),this.element.css("-o-transform",e)},_propagate:function(e,n){t.ui.plugin.call(this,e,[n,this.ui()]),"rotate"!==e&&this._trigger(e,n,this.ui())}}),t.ui.rotatable}); diff --git a/data/www/js/lib/jscolor.min.js b/data/www/js/lib/jscolor.min.js new file mode 100644 index 0000000..48dd2b1 --- /dev/null +++ b/data/www/js/lib/jscolor.min.js @@ -0,0 +1 @@ +(function(global,factory){"use strict";if(typeof module==="object"&&typeof module.exports==="object"){module.exports=global.document?factory(global):function(win){if(!win.document){throw new Error("jscolor needs a window with document")}return factory(win)};return}factory(global)})(typeof window!=="undefined"?window:this,function(window){"use strict";var jscolor=function(){var jsc={initialized:false,instances:[],readyQueue:[],register:function(){if(typeof window!=="undefined"&&window.document){if(window.document.readyState!=="loading"){jsc.pub.init()}else{window.document.addEventListener("DOMContentLoaded",jsc.pub.init,false)}}},installBySelector:function(selector,rootNode){rootNode=rootNode?jsc.node(rootNode):window.document;if(!rootNode){throw new Error("Missing root node")}var elms=rootNode.querySelectorAll(selector);var matchClass=new RegExp("(^|\\s)("+jsc.pub.lookupClass+")(\\s*(\\{[^}]*\\})|\\s|$)","i");for(var i=0;i-1},isButtonEmpty:function(el){switch(jsc.nodeName(el)){case"input":return!el.value||el.value.trim()==="";case"button":return el.textContent.trim()===""}return null},isPassiveEventSupported:function(){var supported=false;try{var opts=Object.defineProperty({},"passive",{get:function(){supported=true}});window.addEventListener("testPassive",null,opts);window.removeEventListener("testPassive",null,opts)}catch(e){}return supported}(),isColorAttrSupported:function(){var elm=window.document.createElement("input");if(elm.setAttribute){elm.setAttribute("type","color");if(elm.type.toLowerCase()=="color"){return true}}return false}(),dataProp:"_data_jscolor",setData:function(){var obj=arguments[0];if(arguments.length===3){var data=obj.hasOwnProperty(jsc.dataProp)?obj[jsc.dataProp]:obj[jsc.dataProp]={};var prop=arguments[1];var value=arguments[2];data[prop]=value;return true}else if(arguments.length===2&&typeof arguments[1]==="object"){var data=obj.hasOwnProperty(jsc.dataProp)?obj[jsc.dataProp]:obj[jsc.dataProp]={};var map=arguments[1];for(var prop in map){if(map.hasOwnProperty(prop)){data[prop]=map[prop]}}return true}throw new Error("Invalid arguments")},removeData:function(){var obj=arguments[0];if(!obj.hasOwnProperty(jsc.dataProp)){return true}for(var i=1;i=3&&(mR=par[0].match(re))&&(mG=par[1].match(re))&&(mB=par[2].match(re))){ret.format="rgb";ret.rgba=[parseFloat(mR[1])||0,parseFloat(mG[1])||0,parseFloat(mB[1])||0,null];if(par.length>=4&&(mA=par[3].match(re))){ret.format="rgba";ret.rgba[3]=parseFloat(mA[1])||0}return ret}}return false},parsePaletteValue:function(mixed){var vals=[];if(typeof mixed==="string"){mixed.replace(/#[0-9A-F]{3}\b|#[0-9A-F]{6}([0-9A-F]{2})?\b|rgba?\(([^)]*)\)/gi,function(val){vals.push(val)})}else if(Array.isArray(mixed)){vals=mixed}var colors=[];for(var i=0;ivs[a]?-vp[a]+tp[a]+ts[a]/2>vs[a]/2&&tp[a]+ts[a]-ps[a]>=0?tp[a]+ts[a]-ps[a]:tp[a]:tp[a],-vp[b]+tp[b]+ts[b]+ps[b]-l+l*c>vs[b]?-vp[b]+tp[b]+ts[b]/2>vs[b]/2&&tp[b]+ts[b]-l-l*c>=0?tp[b]+ts[b]-l-l*c:tp[b]+ts[b]-l+l*c:tp[b]+ts[b]-l+l*c>=0?tp[b]+ts[b]-l+l*c:tp[b]+ts[b]-l-l*c]}var x=pp[a];var y=pp[b];var positionValue=thisObj.fixed?"fixed":"absolute";var contractShadow=(pp[0]+ps[0]>tp[0]||pp[0]0?Math.ceil(sampleCount/cols):0;cellW=Math.max(1,Math.floor((width-(cols-1)*thisObj.paletteSpacing)/cols));cellH=thisObj.paletteHeight?Math.min(thisObj.paletteHeight,cellW):cellW}if(rows){height=rows*cellH+(rows-1)*thisObj.paletteSpacing}return{cols:cols,rows:rows,cellW:cellW,cellH:cellH,width:width,height:height}},getControlPadding:function(thisObj){return Math.max(thisObj.padding/2,2*thisObj.pointerBorderWidth+thisObj.pointerThickness-thisObj.controlBorderWidth)},getPadYChannel:function(thisObj){switch(thisObj.mode.charAt(1).toLowerCase()){case"v":return"v";break}return"s"},getSliderChannel:function(thisObj){if(thisObj.mode.length>2){switch(thisObj.mode.charAt(2).toLowerCase()){case"s":return"s";break;case"v":return"v";break}}return null},triggerCallback:function(thisObj,prop){if(!thisObj[prop]){return}var callback=null;if(typeof thisObj[prop]==="string"){try{callback=new Function(thisObj[prop])}catch(e){console.error(e)}}else{callback=thisObj[prop]}if(callback){callback.call(thisObj)}},triggerGlobal:function(eventNames){var inst=jsc.getInstances();for(var i=0;i0){for(var y=0;y=2&&typeof arguments[0]==="string"){try{if(!setOption(arguments[0],arguments[1])){return false}}catch(e){console.warn(e);return false}this.redraw();this.exposeColor();return true}else if(arguments.length===1&&typeof arguments[0]==="object"){var opts=arguments[0];var success=true;for(var opt in opts){if(opts.hasOwnProperty(opt)){try{if(!setOption(opt,opts[opt])){success=false}}catch(e){console.warn(e);success=false}}}this.redraw();this.exposeColor();return success}throw new Error("Invalid arguments")};this.channel=function(name,value){if(typeof name!=="string"){throw new Error("Invalid value for channel name: "+name)}if(value===undefined){if(!this.channels.hasOwnProperty(name.toLowerCase())){console.warn("Getting unknown channel: "+name);return false}return this.channels[name.toLowerCase()]}else{var res=false;switch(name.toLowerCase()){case"r":res=this.fromRGBA(value,null,null,null);break;case"g":res=this.fromRGBA(null,value,null,null);break;case"b":res=this.fromRGBA(null,null,value,null);break;case"h":res=this.fromHSVA(value,null,null,null);break;case"s":res=this.fromHSVA(null,value,null,null);break;case"v":res=this.fromHSVA(null,null,value,null);break;case"a":res=this.fromHSVA(null,null,null,value);break;default:console.warn("Setting unknown channel: "+name);return false}if(res){this.redraw();return true}}return false};this.trigger=function(eventNames){var evs=jsc.strList(eventNames);for(var i=0;i255/2};this.hide=function(){if(isPickerOwner()){detachPicker()}};this.show=function(){drawPicker()};this.redraw=function(){if(isPickerOwner()){drawPicker()}};this.getFormat=function(){return this._currentFormat};this._setFormat=function(format){this._currentFormat=format.toLowerCase()};this.hasAlphaChannel=function(){if(this.alphaChannel==="auto"){return this.format.toLowerCase()==="any"||jsc.isAlphaFormat(this.getFormat())||this.alpha!==undefined||this.alphaElement!==undefined}return this.alphaChannel};this.processValueInput=function(str){if(!this.fromString(str)){this.exposeColor()}};this.processAlphaInput=function(str){if(!this.fromHSVA(null,null,null,parseFloat(str))){this.exposeColor()}};this.exposeColor=function(flags){var colorStr=this.toString();var fmt=this.getFormat();jsc.setDataAttr(this.targetElement,"current-color",colorStr);if(!(flags&jsc.flags.leaveValue)&&this.valueElement){if(fmt==="hex"||fmt==="hexa"){if(!this.uppercase){colorStr=colorStr.toLowerCase()}if(!this.hash){colorStr=colorStr.replace(/^#/,"")}}this.setValueElementValue(colorStr)}if(!(flags&jsc.flags.leaveAlpha)&&this.alphaElement){var alphaVal=Math.round(this.channels.a*100)/100;this.setAlphaElementValue(alphaVal)}if(!(flags&jsc.flags.leavePreview)&&this.previewElement){var previewPos=null;if(jsc.isTextInput(this.previewElement)||jsc.isButton(this.previewElement)&&!jsc.isButtonEmpty(this.previewElement)){previewPos=this.previewPosition}this.setPreviewElementBg(this.toRGBAString())}if(isPickerOwner()){redrawPad();redrawSld();redrawASld()}};this.setPreviewElementBg=function(color){if(!this.previewElement){return}var position=null;var width=null;if(jsc.isTextInput(this.previewElement)||jsc.isButton(this.previewElement)&&!jsc.isButtonEmpty(this.previewElement)){position=this.previewPosition;width=this.previewSize}var backgrounds=[];if(!color){backgrounds.push({image:"none",position:"left top",size:"auto",repeat:"no-repeat",origin:"padding-box"})}else{backgrounds.push({image:jsc.genColorPreviewGradient(color,position,width?width-jsc.pub.previewSeparator.length:null),position:"left top",size:"auto",repeat:position?"repeat-y":"repeat",origin:"padding-box"});var preview=jsc.genColorPreviewCanvas("rgba(0,0,0,0)",position?{left:"right",right:"left"}[position]:null,width,true);backgrounds.push({image:"url('"+preview.canvas.toDataURL()+"')",position:(position||"left")+" top",size:preview.width+"px "+preview.height+"px",repeat:position?"repeat-y":"repeat",origin:"padding-box"})}var bg={image:[],position:[],size:[],repeat:[],origin:[]};for(var i=0;i=0;i-=1){var pres=presetsArr[i];if(!pres){continue}if(!jsc.pub.presets.hasOwnProperty(pres)){console.warn("Unknown preset: %s",pres);continue}for(var opt in jsc.pub.presets[pres]){if(jsc.pub.presets[pres].hasOwnProperty(opt)){try{setOption(opt,jsc.pub.presets[pres][opt])}catch(e){console.warn(e)}}}}var nonProperties=["preset"];for(var opt in opts){if(opts.hasOwnProperty(opt)){if(nonProperties.indexOf(opt)===-1){try{setOption(opt,opts[opt])}catch(e){console.warn(e)}}}}if(this.container===undefined){this.container=window.document.body}else{this.container=jsc.node(this.container)}if(!this.container){throw new Error("Cannot instantiate color picker without a container element")}this.targetElement=jsc.node(targetElement);if(!this.targetElement){if(typeof targetElement==="string"&&/^[a-zA-Z][\w:.-]*$/.test(targetElement)){var possiblyId=targetElement;throw new Error("If '"+possiblyId+"' is supposed to be an ID, please use '#"+possiblyId+"' or any valid CSS selector.")}throw new Error("Cannot instantiate color picker without a target element")}if(this.targetElement.jscolor&&this.targetElement.jscolor instanceof jsc.pub){throw new Error("Color picker already installed on this element")}this.targetElement.jscolor=this;jsc.addClass(this.targetElement,jsc.pub.className);jsc.instances.push(this);if(jsc.isButton(this.targetElement)){if(this.targetElement.type.toLowerCase()!=="button"){this.targetElement.type="button"}if(jsc.isButtonEmpty(this.targetElement)){jsc.removeChildren(this.targetElement);this.targetElement.appendChild(window.document.createTextNode(" "));var compStyle=jsc.getCompStyle(this.targetElement);var currMinWidth=parseFloat(compStyle["min-width"])||0;if(currMinWidth-1){var color=jsc.parseColorString(initValue);this._currentFormat=color?color.format:"hex"}else{this._currentFormat=this.format.toLowerCase()}this.processValueInput(initValue);if(initAlpha!==undefined){this.processAlphaInput(initAlpha)}if(this.random){this.randomize.apply(this,Array.isArray(this.random)?this.random:[])}}};jsc.pub.className="jscolor";jsc.pub.activeClassName="jscolor-active";jsc.pub.looseJSON=true;jsc.pub.presets={};jsc.pub.presets["default"]={};jsc.pub.presets["light"]={backgroundColor:"rgba(255,255,255,1)",controlBorderColor:"rgba(187,187,187,1)",buttonColor:"rgba(0,0,0,1)"};jsc.pub.presets["dark"]={backgroundColor:"rgba(51,51,51,1)",controlBorderColor:"rgba(153,153,153,1)",buttonColor:"rgba(240,240,240,1)"};jsc.pub.presets["small"]={width:101,height:101,padding:10,sliderSize:14,paletteCols:8};jsc.pub.presets["medium"]={width:181,height:101,padding:12,sliderSize:16,paletteCols:10};jsc.pub.presets["large"]={width:271,height:151,padding:12,sliderSize:24,paletteCols:15};jsc.pub.presets["thin"]={borderWidth:1,controlBorderWidth:1,pointerBorderWidth:1};jsc.pub.presets["thick"]={borderWidth:2,controlBorderWidth:2,pointerBorderWidth:2};jsc.pub.sliderInnerSpace=3;jsc.pub.chessboardSize=8;jsc.pub.chessboardColor1="#666666";jsc.pub.chessboardColor2="#999999";jsc.pub.previewSeparator=["rgba(255,255,255,.65)","rgba(128,128,128,.65)"];jsc.pub.init=function(){if(jsc.initialized){return}window.document.addEventListener("mousedown",jsc.onDocumentMouseDown,false);window.document.addEventListener("keyup",jsc.onDocumentKeyUp,false);window.addEventListener("resize",jsc.onWindowResize,false);window.addEventListener("scroll",jsc.onWindowScroll,false);jsc.appendDefaultCss();jsc.pub.install();jsc.initialized=true;while(jsc.readyQueue.length){var func=jsc.readyQueue.shift();func()}};jsc.pub.install=function(rootNode){var success=true;try{jsc.installBySelector("[data-jscolor]",rootNode)}catch(e){success=false;console.warn(e)}if(jsc.pub.lookupClass){try{jsc.installBySelector("input."+jsc.pub.lookupClass+", "+"button."+jsc.pub.lookupClass,rootNode)}catch(e){}}return success};jsc.pub.ready=function(func){if(typeof func!=="function"){console.warn("Passed value is not a function");return false}if(jsc.initialized){func()}else{jsc.readyQueue.push(func)}return true};jsc.pub.trigger=function(eventNames){var triggerNow=function(){jsc.triggerGlobal(eventNames)};if(jsc.initialized){triggerNow()}else{jsc.pub.ready(triggerNow)}};jsc.pub.hide=function(){if(jsc.picker&&jsc.picker.owner){jsc.picker.owner.hide()}};jsc.pub.chessboard=function(color){if(!color){color="rgba(0,0,0,0)"}var preview=jsc.genColorPreviewCanvas(color);return preview.canvas.toDataURL()};jsc.pub.background=function(color){var backgrounds=[];backgrounds.push(jsc.genColorPreviewGradient(color));var preview=jsc.genColorPreviewCanvas();backgrounds.push(["url('"+preview.canvas.toDataURL()+"')","left top","repeat"].join(" "));return backgrounds.join(", ")};jsc.pub.options={};jsc.pub.lookupClass="jscolor";jsc.pub.installByClassName=function(){console.error('jscolor.installByClassName() is DEPRECATED. Use data-jscolor="" attribute instead of a class name.'+jsc.docsRef);return false};jsc.register();return jsc.pub}();if(typeof window.jscolor==="undefined"){window.jscolor=window.JSColor=jscolor}return jscolor}); diff --git a/data/www/js/slideshow/content-composition.js b/data/www/js/slideshow/content-composition.js new file mode 100644 index 0000000..6c874a1 --- /dev/null +++ b/data/www/js/slideshow/content-composition.js @@ -0,0 +1,471 @@ + +jQuery(document).ready(function ($) { + const DEFAULT_RATIO = "16/9"; + const contentData = JSON.parse($('#content-edit-location').val() || `{"ratio":"${DEFAULT_RATIO}", "layers":{}}`); + let currentElement = null; + let elementCounter = 0; + let screenRatio = 16/9; + + const setRatio = function () { + const ratioString = $('#elem-screen-ratio').val() || DEFAULT_RATIO; + $('.ratio-value').text(ratioString.replace('/', ' / ')); + screenRatio = evalStringRatio(ratioString); + $('.screen-holder').css({ 'padding-top': ( 1/ ( screenRatio ) * 100) + '%' }); + $('.ratio-value').val(screenRatio); + $('#screen').css({ + width: $('#screen').width(), + height: $('#screen').width() * (1/screenRatio), + position: 'relative', + }).parents('.screen-holder:eq(0)').css({ + width: 'auto', + 'padding-top': '0px' + }); + }; + setRatio(); + + $(document).on('input', '#elem-screen-ratio', function() { + setRatio(); + }); + + function createElement(config = null) { + const screen = $('#screen'); + const screenWidth = screen.width(); + const screenHeight = screen.height(); + + const elementWidth = config ? (config.widthPercent / 100) * screenWidth : 100; + const elementHeight = config ? (config.heightPercent / 100) * screenHeight : 50; + let x = config ? (config.xPercent / 100) * screenWidth : Math.round(Math.random() * (screenWidth - elementWidth)); + let y = config ? (config.yPercent / 100) * screenHeight : Math.round(Math.random() * (screenHeight - elementHeight)); + const zIndex = config ? config.zIndex : elementCounter++; + + //x = Math.round(Math.max(0, Math.min(x, screenWidth - elementWidth))); + //y = Math.round(Math.max(0, Math.min(y, screenHeight - elementHeight))); + + const elementId = zIndex; + const element = $('
'); + // const element = $('
'); + + element.css({ + left: x, + top: y, + width: elementWidth, + height: elementHeight, + zIndex: zIndex, + transform: `rotate(0deg)` + }); + + element.draggable({ + // containment: "#screen", + start: function (event, ui) { + focusElement(ui.helper); + }, + drag: function (event, ui) { + updateForm(ui.helper); + } + }); + + element.resizable({ + // containment: "#screen", + handles: 'n, s, e, w, nw, ne, sw, se', + start: function (event, ui) { + focusElement(ui.element); + }, + resize: function (event, ui) { + updateForm(ui.element); + } + }); + + /* + element.rotatable({ + handle: element.find('.rotate-handle'), + rotate: function(event, ui) { + updateForm(ui.element); + } + }); + */ + + element.click(function () { + focusElement($(this)); + }); + + screen.append(element); + addElementToList(elementId); + + if (config !== null && config.contentId !== null) { + element.attr('data-content-id', config.contentId); + element.attr('data-content-name', config.contentName); + element.attr('data-content-type', config.contentType); + element.attr('data-content-metadata', config.contentMetadata); + + applyContentToElement({ + id: config.contentId, + name: config.contentName, + type: config.contentType, + metadata: config.contentMetadata, + }, element); + + updateForm(element); + unfocusElements(); + } else { + setTimeout(function () { + focusElement(element); + }, 10); + } + + return element; + } + + $(document).on('click', '.element-adjust-aspect-ratio', function(){ + const metadata = currentElement.data('content-metadata'); + const ratio = metadata.height / metadata.width; + $('#elem-height').val($('#elem-width').val() * ratio).trigger('input'); + $('#elem-width').val($('#elem-width').val()).trigger('input'); + }); + + $(document).on('click', '.element-list-item', function(){ + focusElement($('#element-' + $(this).attr('data-id'))); + }); + + $(document).on('click', '.remove-element', function(){ + if (confirm(l.js_common_are_you_sure)) { + removeElementById($(this).attr('data-id')); + } + }); + + function removeElementById(elementId) { + $('.element[data-id='+elementId+'], .element-list-item[data-id='+elementId+']').remove(); + updateZIndexes(); + } + + function addElementToList(elementId) { + const listItem = `
+ +
+ + + +
+
`; + $('#elementList').append( + $(listItem + .replace(/__ID__/g, elementId) + .replace(/__EMPTY__/g, l.js_common_empty) + ) + ); + updateZIndexes(); + } + + function unfocusElements() { + $('.element, .element-list-item').removeClass('focused'); + currentElement = null; + updateForm(null); + } + + function focusElement($element) { + unfocusElements(); + currentElement = $element; + $element.addClass('focused'); + const listElement = $('.element-list-item[data-id="' + $element.attr('data-id') + '"]'); + listElement.addClass('focused'); + updateForm($element); + + const contentType = $element.attr('data-content-type'); + $('.element-tool').addClass('hidden'); + + if (contentType) { + if (contentType === 'picture' || contentType === 'video') { + const contentMetadata = $element.data('content-metadata'); + if (contentMetadata.width && contentMetadata.height) { + $('.element-tool.element-adjust-aspect-ratio-container').removeClass('hidden'); + } + } + } + } + + function updateForm($element) { + if (!$element) { + $('form#elementForm input').val('').prop('disabled', true); + $('.form-element-properties').addClass('hidden'); + return; + } + + $('.form-element-properties').removeClass('hidden'); + $('form#elementForm input').prop('disabled', false); + + const offset = $element.position(); + + if (offset !== undefined) { + $('#elem-x').val(offset.left); + $('#elem-y').val(offset.top); + $('#elem-width').val($element.width()); + $('#elem-height').val($element.height()); + } + + $element.find('i').css('font-size', Math.min($element.width(), $element.height()) / 3); + + /* + const rotation = $element.css('transform'); + const values = rotation.split('(')[1].split(')')[0].split(','); + const angle = Math.round(Math.atan2(values[1], values[0]) * (180/Math.PI)); + $('#elem-rotate').val(angle); + */ + } + + $(document).on('input', '#elementForm input', function () { + if (!currentElement) { + return; + } + + const screenWidth = $('#screen').width(); + const screenHeight = $('#screen').height(); + + let x = Math.round(parseInt($('#elem-x').val())); + let y = Math.round(parseInt($('#elem-y').val())); + let width = Math.round(parseInt($('#elem-width').val())); + let height = Math.round(parseInt($('#elem-height').val())); + // let rotation = parseInt($('#elem-rotate').val()); + + // Constrain x and y + // x = Math.max(0, Math.min(x, screenWidth - width)); + // y = Math.max(0, Math.min(y, screenHeight - height)); + + // Constrain width and height + width = Math.min(width, screenWidth - x); + height = Math.min(height, screenHeight - y); + + currentElement.css({ + left: x, + top: y, + width: width, + height: height + // transform: `rotate(${rotation}deg)` + }); + + // Update form values to reflect clamped values + $('#elem-x').val(x); + $('#elem-y').val(y); + $('#elem-width').val(width); + $('#elem-height').val(height); + }); + + // $(document).on('click', '#addElement', function () { + // createElement(); + // }); + + $(document).on('click', '#removeAllElements', function () { + if (confirm(l.js_common_are_you_sure)) { + $('.element, .element-list-item').remove(); + updateZIndexes(); + } + }); + + $(document).on('dblclick', '.element', function (e) { + $('.content-explr-picker[data-id='+$(this).attr('data-id')+']').click(); + }); + + $(document).on('mousedown', function (e) { + const keepFocusedElement = $(e.target).hasClass('element') + || $(e.target).hasClass('element-list-item') + || $(e.target).parents('.element:eq(0)').length !== 0 + || $(e.target).parents('.element-list-item:eq(0)').length !== 0 + || $(e.target).is('input,select,textarea') + || $(e.target).is('.page-panel.right-panel button,a,.btn') + + if (!keepFocusedElement) { + unfocusElements(); + } + }); + + $(document).on('click', '#presetGrid2x2', function () { + const screenWidth = $('#screen').width(); + const screenHeight = $('#screen').height(); + + let elements = $('.element'); + if (elements.length < 4) { + while (elements.length < 4) { + createElement(); + elements = $('.element'); + } + } + + elements = $('.element-list-item').map(function() { + return $('.element[data-id='+$(this).attr('data-id')+']'); + }).slice(0, 4); + + const gridPositions = [ + {x: 0, y: 0}, + {x: screenWidth / 2, y: 0}, + {x: 0, y: screenHeight / 2}, + {x: screenWidth / 2, y: screenHeight / 2} + ]; + + elements.each(function (index) { + const position = gridPositions[index]; + $(this).css({ + left: position.x, + top: position.y, + width: screenWidth / 2, + height: screenHeight / 2 + }); + updateForm($(this)); + }); + + unfocusElements(); + }); + + $(document).on('click', '#presetTvNews1x1', function () { + const screenWidth = $('#screen').width(); + const screenHeight = $('#screen').height(); + + let elements = $('.element'); + if (elements.length === 0) { + createElement(); + } + + if (!currentElement) { + return; + } + + const height = (screenHeight / 7); + currentElement.css({ + left: 0, + top: screenHeight - height, + width: screenWidth, + height: height + }); + updateForm(currentElement); + unfocusElements(); + }); + + $(document).keydown(function (e) { + if (e.key === "Escape") { + unfocusElements(); + } + + const hasFocusInInput = $('input,textarea').is(':focus'); + + if (!currentElement || hasFocusInInput) { + return; + } + + if (e.key === "ArrowLeft") { + $('#elem-x').val(parseInt($('#elem-x').val()) - (e.shiftKey ? 10 : 1)).trigger('input'); + } else if (e.key === "ArrowRight") { + $('#elem-x').val(parseInt($('#elem-x').val()) + (e.shiftKey ? 10 : 1)).trigger('input'); + } else if (e.key === "ArrowUp") { + $('#elem-y').val(parseInt($('#elem-y').val()) - (e.shiftKey ? 10 : 1)).trigger('input'); + } else if (e.key === "ArrowDown") { + $('#elem-y').val(parseInt($('#elem-y').val()) + (e.shiftKey ? 10 : 1)).trigger('input'); + } else if (e.key === "Backspace") { + if (confirm(l.js_common_are_you_sure)) { + removeElementById(currentElement.attr('data-id')); + } + } + }); + + $(document).on('click', '.content-explr-picker', function () { + const elementId = $(this).attr('data-id'); + const isNew = !elementId; + const $element = isNew ? $(createElement()) : $('#element-'+elementId); + + showPickers('modal-content-explr-picker', function (content) { + applyContentToElement(content, $element) + }); + }); + + const applyContentToElement = function (content, $element) { + $element.attr('data-content-id', content.id); + $element.attr('data-content-name', content.name); + $element.attr('data-content-type', content.type); + $element.data('content-metadata', content.metadata); + const $elementList = $('.element-list-item[data-id='+$element.attr('data-id')+']'); + const iconClasses = [ + 'fa', + content_type_icon_classes[content.type], + content_type_color_classes[content.type] + ].join(' '); + $element.find('i').get(0).classList = iconClasses; + $elementList.find('label').text(content.name); + $elementList.find('i:eq(0)').get(0).classList = iconClasses; + }; + + $(document).on('submit', 'form.form', function (e) { + unfocusElements(); + const location = getLocationPayload(); + $('#content-edit-location').val(JSON.stringify(location)); + }); + + function updateZIndexes() { + const zindex = $('.element-list-item').length + 1; + $('.element-list-item').each(function(index) { + const id = $(this).attr('data-id'); + $('#element-' + id).css('z-index', zindex - index); + }); + } + + $('#elementList').sortable({ + update: function(event, ui) { + updateZIndexes(); + } + }); + + const applyElementsFromContent = function() { + for (let i = 0; i < contentData.layers.length; i++) { + createElement(contentData.layers[i]); + } + }; + + applyElementsFromContent(); + + const getLocationPayload = function() { + const screen = $('#screen'); + const screenWidth = screen.width(); + const screenHeight = screen.height(); + const layers = []; + + $('.element').each(function () { + const $element = $(this); + const offset = $element.position(); + const x = offset.left; + const y = offset.top; + const width = $element.width(); + const height = $element.height(); + + const xPercent = (x / screenWidth) * 100; + const yPercent = (y / screenHeight) * 100; + const widthPercent = (width / screenWidth) * 100; + const heightPercent = (height / screenHeight) * 100; + const contentId = $element.attr('data-content-id'); + const contentName = $element.attr('data-content-name'); + const contentType = $element.attr('data-content-type'); + const contentMetadata = $element.data('content-metadata'); + + const layer = { + xPercent: xPercent, + yPercent: yPercent, + widthPercent: widthPercent, + heightPercent: heightPercent, + zIndex: parseInt($element.css('zIndex')), + contentId: contentId ? parseInt(contentId) : null, + contentName: contentName ? contentName : null, + contentType: contentType ? contentType : null, + contentMetadata: contentMetadata && contentMetadata !== "null" ? contentMetadata : null, + }; + + layers.push(layer); + }); + + layers.sort(function(a, b) { + return parseInt(b.zIndex) - parseInt(a.zIndex); + }); + + return { + ratio: $('#elem-screen-ratio').val(), + layers: layers + }; + }; +}); diff --git a/data/www/js/slideshow/content-text.js b/data/www/js/slideshow/content-text.js new file mode 100644 index 0000000..4f5bd25 --- /dev/null +++ b/data/www/js/slideshow/content-text.js @@ -0,0 +1,79 @@ + +jQuery(document).ready(function ($) { + const contentData = JSON.parse($('#content-edit-location').val() || '{}'); + const screenRatio = 16/9; + + $('.screen-holder').css({ + 'padding-top': ( 1/ ( screenRatio ) * 100) + '%' + }); + + $('.ratio-value').val(screenRatio); + + $('#screen').css({ + width: $('#screen').width(), + height: $('#screen').height(), + position: 'relative', + }).parents('.screen-holder:eq(0)').css({ + width: 'auto', + 'padding-top': '0px' + }); + + const draw = function() { + const $screen = $('#screen'); + const $text = $('
'); + let insideText = $('#elem-text').val(); + + if ($('#elem-scroll-enable').is(':checked')) { + const $wrapper = $(''); + $wrapper.attr({ + scrollamount: $('#elem-scroll-speed').val(), + direction: $('[name=scrollDirection]:checked').val(), + behavior: 'scroll', + loop: -1 + }); + $wrapper.append(insideText); + insideText = $wrapper; + } + + $text.append(insideText); + + let justifyContent = 'center'; + switch($('[name=textAlign]:checked').val()) { + case 'left': justifyContent = 'flex-start'; break; + case 'right': justifyContent = 'flex-end'; break; + } + + $text.css({ + padding: $('#elem-container-margin').val() + 'px', + color: $('#elem-fg-color').val(), + textAlign: $('[name=textAlign]:checked').val(), + textDecoration: $('#elem-text-underline').is(':checked') ? 'underline' : 'normal', + fontSize: $('#elem-font-size').val() + 'px', + fontWeight: $('#elem-font-bold').is(':checked') ? 'bold' : 'normal', + fontStyle: $('#elem-font-italic').is(':checked') ? 'italic' : 'normal', + fontFamily: $('#elem-font-family').val() + ", 'Arial', 'sans-serif'", + whiteSpace: $('#elem-single-line').is(':checked') ? 'nowrap' : 'normal', + justifyContent: justifyContent + }); + + $screen.css({ + backgroundColor: $('#elem-bg-color').val(), + }); + + $screen.html($text); + }; + + $(document).on('input', '#elementForm input, #elementForm select', function () { + draw(); + }); + + draw(); + + + $(document).on('submit', 'form.form', function (e) { + const location = $('form#elementForm').serializeObject(); + $('#content-edit-location').val(JSON.stringify(location)); + }); +}); + + diff --git a/data/www/js/slideshow/contents.js b/data/www/js/slideshow/contents.js index 709e5d8..e05ade9 100644 --- a/data/www/js/slideshow/contents.js +++ b/data/www/js/slideshow/contents.js @@ -21,7 +21,11 @@ jQuery(document).ready(function ($) { $form.find('.object-label:visible').html(optionAttributes['data-object-label'].value); $('.type-icon').attr('class', 'type-icon fa ' + optionAttributes['data-icon'].value); $('.tab-select .widget').attr('class', 'widget ' + ('border-' + color) + ' ' + color); - $form.find('button[type=submit]').attr('class', 'btn ' + ('btn-' + color)); + $form.find('button[type=submit]').attr('class', [ + 'btn', + `btn-${color}`, + classColorXor(color, '') + ].join(' ')); }; const main = function () { diff --git a/data/www/js/dragdrop.js b/data/www/js/super-upload.js similarity index 81% rename from data/www/js/dragdrop.js rename to data/www/js/super-upload.js index 3caa031..00c2ccd 100644 --- a/data/www/js/dragdrop.js +++ b/data/www/js/super-upload.js @@ -31,13 +31,20 @@ jQuery(function ($) { }, always: function (e, data) { const response = data._response.jqXHR; + let statusCode = response.status; $button.removeClass('uploading').removeClass('btn-naked btn-super-upload-busy').addClass('btn-info btn-super-upload'); - if (response.status != 200) { - const $alert = $('.alert-danger').removeClass('hidden'); - if (response.status == 413) { - $alert.text(l.js_common_http_error_413); + + let errorComment = response.responseText.match(//); + if (errorComment && errorComment[1]) { + statusCode = parseInt(errorComment[1], 10); + } + + if (statusCode !== 200) { + const $alert = $('.alert-upload').removeClass('hidden'); + if (statusCode === 413) { + $alert.html(`${l.js_common_http_error_413}`); } else { - $alert.text(l.js_common_http_error_occured.replace('%code%', response.status)); + $alert.html(`${l.js_common_http_error_occured.replace('%code%', statusCode)}`); } } else { document.location.reload(); diff --git a/data/www/js/utils.js b/data/www/js/utils.js index faf9b54..76d4fc1 100644 --- a/data/www/js/utils.js +++ b/data/www/js/utils.js @@ -81,3 +81,9 @@ const secondsToHHMMSS = function (seconds) { const secs = seconds % 60; return `${hours.toString().padStart(2, '0')}:${minutes.toString().padStart(2, '0')}:${secs.toString().padStart(2, '0')}`; }; + +const evalStringRatio = function(str) { + return str.replace(/(\d+)\/(\d+)/g, function(match, p1, p2) { + return (parseInt(p1) / parseInt(p2)).toString(); + }); +}; diff --git a/data/www/scss/base/_context.scss b/data/www/scss/base/_context.scss index 84c6007..26e442b 100644 --- a/data/www/scss/base/_context.scss +++ b/data/www/scss/base/_context.scss @@ -31,8 +31,16 @@ main { margin-right: 20px; } - .contex-tail { - margin-right: 20px; + .context-tail { + margin-right: 30px; + + .btn { + margin-right: 0; + } + } + + .context-tail-auth { + margin-right: 10px; .btn { margin-right: 0; diff --git a/data/www/scss/base/_html.scss b/data/www/scss/base/_html.scss index 0f1f6cf..96291d5 100644 --- a/data/www/scss/base/_html.scss +++ b/data/www/scss/base/_html.scss @@ -26,6 +26,10 @@ body, html { align-items: flex-start; flex: 1; align-self: stretch; + + &.fx-end { + justify-content: flex-end; + } } .vertical { diff --git a/data/www/scss/components/_animation.scss b/data/www/scss/components/_animation.scss new file mode 100644 index 0000000..3572c42 --- /dev/null +++ b/data/www/scss/components/_animation.scss @@ -0,0 +1,12 @@ +@keyframes blink{50%{opacity:0;}} +.cfx-blink{animation:1.5s linear infinite blink;} +.cfx-ffff-speed {animation-delay: 0.1s;} +.cfx-fff-speed {animation-delay: 0.3s;} +.cfx-ff-speed {animation-delay: 0.5s;} +.cfx-f-speed {animation-delay: 0.8s;} +.cfx-m-speed {animation-delay: 1s;} +.cfx-s-speed {animation-delay: 1.3s;} +.cfx-ss-speed {animation-delay: 1.5s;} +.cfx-sss-speed {animation-delay: 1.8s;} +.cfx-ssss-speed {animation-delay: 2s;} +.cfx-sssss-speed {animation-delay: 3s;} \ No newline at end of file diff --git a/data/www/scss/components/_badges.scss b/data/www/scss/components/_badges.scss index 232afd4..a7877e0 100644 --- a/data/www/scss/components/_badges.scss +++ b/data/www/scss/components/_badges.scss @@ -1,32 +1,10 @@ -a.badge, -.badge { - display: flex; - flex-direction: row; - justify-content: center; - align-items: center; - padding: 5px 5px; - border-radius: $baseRadius; - font-size: 12px; - background: rgba($gscaleF, .1); - border: 1px solid transparent; - color: $gscaleF; -} - -a.badge:hover { - color: $gscaleF; - border: 1px solid rgba($gscaleF, .4); -} - -.panel-inactive .badge { - background: rgba($gscale7, .1); - color: $gscale7; -} - -.panel-inactive a.badge:hover { - color: $gscale7; - border: 1px solid rgba($gscale7,.2); -} - -.badge.anonymous { - opacity: .2; +.badge-inset { + display: inline; + color: $gscaleA; + font-size: 12px; + margin-left: 5px; + background: $gscale0; + border: 1px solid $gscale3; + border-radius: $baseRadius; + padding: 3px 7px; } diff --git a/data/www/scss/components/_buttons.scss b/data/www/scss/components/_buttons.scss index 1aa8a17..f6b7c62 100644 --- a/data/www/scss/components/_buttons.scss +++ b/data/www/scss/components/_buttons.scss @@ -1,3 +1,4 @@ + button, .btn { $shadowOffset: 2px; @@ -56,6 +57,7 @@ button, box-shadow: 0 $shadowOffset 0 0 darken($gscale5, 10%); border: 1px solid transparent; + &.active, &:hover { box-shadow: 0 $shadowOffset 0 1px $gkscale2 inset; background: darken($gscale5, 10%); @@ -141,4 +143,3 @@ button, cursor: default; } } - diff --git a/data/www/scss/forms/_forms.scss b/data/www/scss/forms/_forms.scss index c88517b..5c1b58c 100644 --- a/data/www/scss/forms/_forms.scss +++ b/data/www/scss/forms/_forms.scss @@ -81,6 +81,24 @@ form { } } + .checkbox-group, + .radio-group { + display: flex; + flex-direction: row; + justify-content: flex-start; + align-items: center; + + input { + display: none; + } + + label { + margin: 0 5px 0 0 !important; + justify-content: center !important; + text-align: center; + } + } + .widget { margin-top: 10px; align-self: stretch; @@ -100,12 +118,11 @@ form { } } - .btn { + input + .btn + .btn { margin-left: 10px; } &.widget-unit { - select, input { flex-grow: 0; @@ -131,6 +148,33 @@ form { } } + select, + input { + &.size-m { + max-width: 122px; + } + + &.color-picker { + max-width: 125px; + } + + &.chars-4 { + max-width: 50px; + } + + &.chars-3 { + max-width: 40px; + } + + &.chars-2 { + max-width: 20px; + } + + &.chars-1 { + max-width: 15px; + } + } + div { color: rgba($gscaleF, .7); font-size: 14px; @@ -155,23 +199,17 @@ form { color: $gscale5; background: none; box-shadow: none; - border: none; - border-bottom: 1px solid $gscale3; border-radius: 0; } &.input-naked { - padding-left: 0; color: $gscaleB; } &.disabled, &[disabled] { - border: none; background: $gscale0; border-radius: $baseRadius; - padding-left: 10px; - padding-right: 10px; } } } diff --git a/data/www/scss/main.scss b/data/www/scss/main.scss index 605cd48..8805aad 100644 --- a/data/www/scss/main.scss +++ b/data/www/scss/main.scss @@ -18,19 +18,20 @@ @import 'components/modals'; @import 'components/toast'; @import 'components/dragdrop'; - -// Legacy +@import 'components/animation'; @import 'components/panes'; @import 'components/tiles'; @import 'components/empty'; @import 'components/switches'; -//@import 'components/badges'; +@import 'components/badges'; // Import form styles @import 'forms/forms'; // Import pages styles @import 'pages/content'; +@import 'pages/content-composition'; +@import 'pages/content-text'; @import 'pages/logs'; @import 'pages/node-player'; @import 'pages/playlist'; diff --git a/data/www/scss/modes/specific-light.scss b/data/www/scss/modes/specific-light.scss index 5e68f03..59b5595 100644 --- a/data/www/scss/modes/specific-light.scss +++ b/data/www/scss/modes/specific-light.scss @@ -43,6 +43,25 @@ button, &.btn-neutral:hover { box-shadow: 0 2px 0 1px $gkscale6 inset; } + + &.btn-neutral { + $shadowOffset: 2; + color: $gkscale5; + background: $white; + box-shadow: none !important; + border: 1px solid transparent; + + &.active, + &:hover { + box-shadow: 0 $shadowOffset 0 1px $gkscale2 inset; + background: $gkscaleC; + } + + &:focus { + background: darken($gscale5, 20%); + border: 1px solid $gscaleA; + } + } } .tiles .tiles-inner .tile-item { diff --git a/data/www/scss/pages/_content-composition.scss b/data/www/scss/pages/_content-composition.scss new file mode 100644 index 0000000..6b0aa2d --- /dev/null +++ b/data/www/scss/pages/_content-composition.scss @@ -0,0 +1,364 @@ +.view-content-edit.view-content-edit-composition main .main-container { + + .page-panel.left-panel { + flex: 1; + + .form-holder { + margin: 20px 20px 20px 10px; + flex: 1; + } + } + + .page-content { + flex: 2; + } + + .page-panel.right-panel { + flex: 1; + } + + h3.main { + font-size: 16px; + font-weight: 500; + color: $gscaleD; + text-decoration: none; + margin-top: 5px; + border-bottom: 1px solid $gscale2; + margin-bottom: 20px; + padding-bottom: 10px; + align-self: stretch; + } + + .toolbar { + margin-bottom: 20px; + } + + .presets { + display: flex; + flex-direction: row; + justify-content: flex-start; + align-items: center; + margin-bottom: 20px; + + h4 { + margin-right: 5px; + font-weight: normal; + font-size: 14px; + text-decoration: underline; + } + + button:focus, + button { + padding: 3px 15px; + margin:0 3px; + font-size: 12px; + font-weight: normal; + min-height: initial; + border: 1px solid $gkscale3; + } + } + + .screen-holder { + //display: flex; + //flex-direction: row; + display: flex; + flex-direction: column; + width: 100%; + position: relative; + padding-top: 56.25%; /* 16:9 aspect ratio */ + overflow: hidden; + border-radius: $baseRadius; + outline: 4px solid rgba($gscaleF, .1); + + .screen { + background-color: #ddd; + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + border: none; + + .element { + position: absolute !important; + background-color: $gkscaleE; + outline: 1px solid $gkscaleC; + text-align: center; + box-sizing: border-box; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + + &.focused { + border: none; + outline: 2px solid $seaBlue; + z-index: 89 !important; + + .ui-resizable-handle { + display: block; + } + } + + i { + font-size: 20px; + color: $gkscaleC; + + &.fa-cog { + text-shadow: 0 -2px $gkscaleB, 0 0px 2px $gkscaleB; + } + + &.gscaleF { + color: black !important; + } + } + + .rotate-handle { + width: 10px; + height: 10px; + background-color: red; + position: absolute; + top: 50%; + right: -15px; + cursor: pointer; + transform: translateY(-50%); + } + + .ui-resizable-handle { + $size: 10px; + $sizeOffset: -1*calc($size/2); + background: $gkscaleA; + border: 1px solid $gkscale5; + width: $size; + height: $size; + z-index: 90; + display: none; + position: absolute; + + &.ui-resizable-n { + cursor: n-resize; + top: $sizeOffset; + left: 50%; + margin-left: $sizeOffset; + } + + &.ui-resizable-s { + cursor: s-resize; + bottom: $sizeOffset; + left: 50%; + margin-left: $sizeOffset; + } + + &.ui-resizable-w { + cursor: w-resize; + left: $sizeOffset; + top: 50%; + margin-top: $sizeOffset; + } + + &.ui-resizable-e { + cursor: e-resize; + right: $sizeOffset; + top: 50%; + margin-top: $sizeOffset; + } + + &.ui-resizable-nw { + cursor: nw-resize; + top: $sizeOffset; + left: $sizeOffset; + } + + &.ui-resizable-ne { + cursor: ne-resize; + top: $sizeOffset; + right: $sizeOffset; + } + + &.ui-resizable-sw { + cursor: sw-resize; + bottom: $sizeOffset; + left: $sizeOffset; + } + + &.ui-resizable-se { + cursor: se-resize; + bottom: $sizeOffset; + right: $sizeOffset; + } + } + } + } + } + + .elements-holder { + align-self: stretch; + + h3 { + font-size: 16px; + font-weight: 500; + color: $gscaleD; + text-decoration: none; + margin: 0 0 20px 0; + + &.divide { + border-top: 1px solid $gscale2; + margin-top: 10px; + padding-top: 20px; + } + } + + .form-elements-list { + padding: 10px; + background: $gscale2; + border-radius: $baseRadius; + display: flex; + flex-direction: column; + justify-content: flex-start; + align-self: flex-start; + + .element-list-item { + display: flex; + flex-direction: row; + justify-content: flex-start; + align-items: center; + + > i { + color: $gscaleE; + margin:0 10px 0 0; + cursor: move; + width: 30px; + text-align: center; + } + + .inner:hover, + &.focused .inner { + background-color: $seaBlue; + color: white; + font-weight: bold; + + button.btn-naked { + color: $white; + } + } + + .inner { + cursor: pointer; + padding: 5px 5px 5px 10px; + margin-bottom: 5px; + background: $gkscaleE; + border-radius: $baseRadius; + display: flex; + flex-direction: row; + justify-content: flex-start; + align-items: center; + align-self: stretch; + color: $gkscale2; + min-height: 46px; + flex: 1; + + label { + flex: 1; + cursor: pointer; + text-overflow: ellipsis; + white-space: nowrap; + max-width: 219px; + overflow: hidden; + } + + button { + display: none; + margin-left: 5px; + } + + button.btn-naked { + color: $gscale5; + } + + &:hover { + label { + max-width: 150px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + } + button { + display: block; + } + } + } + } + } + } + + + .form-element-properties { + flex: 1; + align-self: stretch; + + form { + display: flex; + flex-direction: column; + + h3 { + font-size: 16px; + font-weight: 500; + color: $gscaleD; + text-decoration: none; + border-bottom: 1px solid $gscale2; + margin-bottom: 20px; + padding-bottom: 10px; + align-self: stretch; + } + + .divide { + margin-top: 30px; + margin-bottom: 10px; + } + + .form-group { + flex-direction: row; + justify-content: flex-start; + align-items: center; + display: flex; + + label { + flex-grow: 1; + flex-direction: row; + justify-content: flex-start; + align-items: center; + display: flex; + font-weight: bold; + margin-right: 10px; + } + + .widget { + flex-grow: 1; + flex-direction: row; + justify-content: flex-start; + align-items: center; + display: flex; + margin: 0; + + input { + flex: 1; + margin: 0; + + &[disabled] { + padding: 8px 0 5px 8px; + border: 1px solid rgba(255, 255, 255, .05); + } + } + } + } + + + } + } + +} + + + + + diff --git a/data/www/scss/pages/_content-text.scss b/data/www/scss/pages/_content-text.scss new file mode 100644 index 0000000..cc9f4ef --- /dev/null +++ b/data/www/scss/pages/_content-text.scss @@ -0,0 +1,155 @@ +.view-content-edit.view-content-edit-text main .main-container { + + .page-panel.left-panel { + flex: 1; + + .form-holder { + margin: 20px 20px 20px 10px; + flex: 1; + } + } + + .page-content { + flex: 2; + } + + .page-panel.right-panel { + flex: 1; + } + + h3.main { + font-size: 16px; + font-weight: 500; + color: $gscaleD; + text-decoration: none; + margin-top: 5px; + border-bottom: 1px solid $gscale2; + margin-bottom: 20px; + padding-bottom: 10px; + align-self: stretch; + } + + .toolbar { + margin-bottom: 20px; + } + + + .screen-holder { + //display: flex; + //flex-direction: row; + display: flex; + flex-direction: column; + width: 100%; + position: relative; + padding-top: 56.25%; /* 16:9 aspect ratio */ + overflow: hidden; + border-radius: $baseRadius; + outline: 4px solid rgba($gscaleF, .1); + background: repeating-conic-gradient(#EEE 0% 25%, white 0% 50%) 50% / 20px 20px; + + .screen { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + border: none; + display: flex; + + .text { + display: flex; + justify-content: center; + align-items: center; + flex-direction: row; + flex: 1; + align-self: stretch; + text-align: center; + max-width: 100%; + word-break: break-all; + + marquee { + display: flex; + align-items: center; + justify-content: flex-start; + flex-direction: row; + flex: 1; + height: 100%; + width: 100%; + } + } + } + } + + .form-element-properties { + flex: 1; + align-self: stretch; + + form { + display: flex; + flex-direction: column; + + h3 { + font-size: 16px; + font-weight: 500; + color: $gscaleD; + text-decoration: none; + border-bottom: 1px solid $gscale2; + margin-bottom: 20px; + padding-bottom: 10px; + align-self: stretch; + } + + .divide { + margin-top: 30px; + margin-bottom: 10px; + } + + .bar { + width: 100%; + height: 1px; + background: #333; + margin-bottom: 20px; + } + + .form-group { + label { + flex-grow: 1; + flex-direction: row; + justify-content: flex-start; + align-items: center; + display: flex; + font-weight: bold; + margin-right: 10px; + margin-bottom: 5px; + } + + .widget { + flex-grow: 1; + flex-direction: row; + justify-content: flex-start; + align-items: center; + display: flex; + margin: 0; + + input { + flex: 1; + margin: 0; + + &[disabled] { + padding: 8px 0 5px 8px; + border: 1px solid rgba(255, 255, 255, .05); + } + } + } + } + + + } + } + +} + + + + + diff --git a/data/www/scss/pages/_content.scss b/data/www/scss/pages/_content.scss index 047aaeb..478e2f0 100644 --- a/data/www/scss/pages/_content.scss +++ b/data/www/scss/pages/_content.scss @@ -23,6 +23,29 @@ .view-content-edit main .main-container { + .top-content { + h3 { + color: $gscaleF; + padding: 10px 10px 10px 0; + font-size: 16px; + align-self: stretch; + flex: 1; + text-align: right; + + span { + border-width: 1px; + border-style: solid; + border-radius: $baseRadius; + padding: 4px 10px; + margin-left: 5px; + } + + i { + font-size: 16px; + } + } + } + .bottom-content { .page-content { flex: 1; @@ -38,32 +61,11 @@ align-self: stretch; display: flex; flex-direction: column; - overflow: hidden; + overflow: auto; justify-content: flex-start; align-items: center; padding: 20px; - h3 { - color: $gscaleF; - padding: 10px 10px 10px 0; - margin-bottom: 20px; - font-size: 16px; - align-self: stretch; - margin-left: -8px; - - span { - border-width: 1px; - border-style: solid; - border-radius: $baseRadius; - padding: 4px 10px; - margin-left: 5px; - } - - i { - font-size: 16px; - } - } - .iframe-wrapper { display: flex; flex-direction: column; @@ -87,7 +89,3 @@ } } - - - - diff --git a/data/www/scss/utils/_packs.scss b/data/www/scss/utils/_packs.scss index 002d69e..1788bf1 100644 --- a/data/www/scss/utils/_packs.scss +++ b/data/www/scss/utils/_packs.scss @@ -14,6 +14,7 @@ $layoutBorder: 1px solid $gscale2; // Packs $colors: ( warning: $warning, + orange: $orange, info: $info, info-alt: $bitterBlue, success: $success, @@ -39,6 +40,8 @@ $colors: ( redhat:$redhat, centos:$centos, other:$other, + gscale0:$gscale0, + gscaleF:$gscaleF, ); // Classes diff --git a/lang/en.json b/lang/en.json index cc09c23..3d5e3f3 100644 --- a/lang/en.json +++ b/lang/en.json @@ -59,7 +59,7 @@ "js_slideshow_slide_delete_confirmation": "Are you sure?", "slideshow_content_page_title": "Content Library", "slideshow_content_button_add": "New Content", - "slideshow_content_referenced_in_slide_error": "Content is referenced in a slide, remove slide first", + "slideshow_content_referenced_in_slide_error": "Content '%contentName%' is referenced in a slide, remove slide first", "slideshow_content_panel_active": "Content", "slideshow_content_panel_empty": "Currently, there are no content. %link% now.", "slideshow_content_panel_th_name": "Name", @@ -255,12 +255,27 @@ "common_apply": "Apply", "common_saved": "Changes have been saved", "common_new_folder": "New Folder", - "common_folder_not_empty_error": "Folder isn't empty, you must delete its content first", + "common_folder_not_empty_error": "Folder '%folderName%' isn't empty, you must delete its content first", "common_copied": "Element copied in clipboard!", "common_host_placeholder": "raspberrypi.local or 192.168.1.85", "common_reachable_at": "Host", "common_http_error_occured": "Error %code% occured", "common_http_error_413": "Files are too large", + "common_width": "Width", + "common_height": "Height", + "common_position": "Position", + "common_angle": "Angle", + "common_size": "Dimensions", + "composition_elements_heading": "Elements", + "composition_element_add": "Add element", + "composition_elements_delete_all": "Delete all", + "composition_presets": "Presets", + "composition_presets_grid_2x2": "Grid 2x2", + "composition_presets_tvnews_1x1": "TV news 1x1", + "composition_monitor": "Screen", + "composition_element_x_axis": "X axis", + "composition_element_y_axis": "Y axis", + "composition_element_match_content_aspect_ratio": "Match content aspect ratio", "logout": "Logout", "login_error_not_found": "Bad credentials", "login_error_bad_credentials": "Bad credentials", @@ -292,6 +307,10 @@ "enum_content_type_external_storage": "External Storage", "enum_content_type_external_storage_object_label": "Specify an existing directory relative to the following path", "enum_content_type_external_storage_flashdrive_label": "Path relative to a removeable device", + "enum_content_type_composition": "Composition", + "enum_content_type_composition_object_label": "Screen aspect ratio", + "enum_content_type_text": "Text", + "enum_content_type_text_object_label": "Displayed text", "enum_content_type_url": "URL", "enum_content_type_video": "Video", "enum_content_type_picture": "Picture", diff --git a/lang/es.json b/lang/es.json index 79a673a..968097f 100644 --- a/lang/es.json +++ b/lang/es.json @@ -59,7 +59,7 @@ "js_slideshow_slide_delete_confirmation": "¿Estás seguro?", "slideshow_content_page_title": "Biblioteca de contenidos", "slideshow_content_button_add": "Nuevo Contenido", - "slideshow_content_referenced_in_slide_error": "Se hace referencia al contenido en una diapositiva; elimine la diapositiva primero", + "slideshow_content_referenced_in_slide_error": "Se hace referencia al contenido '%contentName%' en una diapositiva; elimine la diapositiva primero", "slideshow_content_panel_active": "Contenido", "slideshow_content_panel_empty": "Actualmente, no hay contenido. %link% ahora.", "slideshow_content_panel_th_name": "Nombre", @@ -256,12 +256,27 @@ "common_apply": "Aplicar", "common_saved": "Los cambios se han guardado", "common_new_folder": "Nuevo Carpeta", - "common_folder_not_empty_error": "La carpeta no está vacía, primero debes eliminar su contenido", + "common_folder_not_empty_error": "La carpeta '%folderName%' no está vacía, primero debes eliminar su contenido", "common_copied": "¡Elemento copiado!", "common_host_placeholder": "raspberrypi.local o 192.168.1.85", "common_reachable_at": "Host", "common_http_error_occured": "Se ha producido un error %code%", "common_http_error_413": "Los archivos son demasiado grandes", + "common_width": "Ancho", + "common_height": "Altura", + "common_position": "Posición", + "common_angle": "Ángulo", + "common_size": "Dimensiones", + "composition_elements_heading": "Elementos", + "composition_element_add": "Añadir elemento", + "composition_elements_delete_all": "Eliminar todo", + "composition_presets": "Preajustes", + "composition_presets_grid_2x2": "Cuadrícula 2x2", + "composition_presets_tvnews_1x1": "TV news 1x1", + "composition_monitor": "Pantalla", + "composition_element_x_axis": "Eje X", + "composition_element_y_axis": "Eje Y", + "composition_element_match_content_aspect_ratio": "Ajustar la escala del contenido", "logout": "Cerrar sesión", "login_error_not_found": "Credenciales incorrectas", "login_error_bad_credentials": "Credenciales incorrectas", @@ -293,6 +308,10 @@ "enum_content_type_external_storage": "Almacenamiento externo", "enum_content_type_external_storage_object_label": "Especifique un directorio existente relativo a la siguiente ruta", "enum_content_type_external_storage_flashdrive_label": "Ruta relativa a un dispositivo extraíble", + "enum_content_type_composition": "Composición", + "enum_content_type_composition_object_label": "Relación de aspecto de la pantalla", + "enum_content_type_text": "Texto", + "enum_content_type_text_object_label": "Texto mostrado", "enum_content_type_url": "URL", "enum_content_type_video": "Video", "enum_content_type_picture": "Imagen", diff --git a/lang/fr.json b/lang/fr.json index 0c93797..d6fb20e 100644 --- a/lang/fr.json +++ b/lang/fr.json @@ -59,7 +59,7 @@ "js_slideshow_slide_delete_confirmation": "Êtes-vous sûr ?", "slideshow_content_page_title": "Bibliothèque de contenus", "slideshow_content_button_add": "Nouveau Contenu", - "slideshow_content_referenced_in_slide_error": "Le contenu est référencé dans une slide, supprimez d'abord la slide", + "slideshow_content_referenced_in_slide_error": "Le contenu '%contentName%' est référencé dans une slide, supprimez d'abord la slide", "slideshow_content_panel_active": "Contenus", "slideshow_content_panel_empty": "Actuellement, il n'y a aucun contenu. %link% maintenant.", "slideshow_content_panel_th_name": "Nom", @@ -257,12 +257,27 @@ "common_apply": "Appliquer", "common_saved": "Les modifications ont été enregistrées", "common_new_folder": "Nouveau Dossier", - "common_folder_not_empty_error": "Le dossier n'est pas vide, vous devez d'abord supprimer son contenu", + "common_folder_not_empty_error": "Le dossier '%folderName%' n'est pas vide, vous devez d'abord supprimer son contenu", "common_copied": "Element copié !", "common_host_placeholder": "raspberrypi.local ou 192.168.1.85", "common_reachable_at": "Hôte", "common_http_error_occured": "Une erreur %code% est apparue", "common_http_error_413": "Les fichiers sont trop volumineux", + "common_width": "Largeur", + "common_height": "Hauteur", + "common_position": "Position", + "common_angle": "Angle", + "common_size": "Dimensions", + "composition_elements_heading": "Éléments", + "composition_element_add": "Ajouter un élément", + "composition_elements_delete_all": "Tout supprimer", + "composition_presets": "Préréglages", + "composition_presets_grid_2x2": "Grille 2x2", + "composition_presets_tvnews_1x1": "TV news 1x1", + "composition_monitor": "Écran", + "composition_element_x_axis": "Axe X", + "composition_element_y_axis": "Axe Y", + "composition_element_match_content_aspect_ratio": "Ajuster l'échelle du contenu", "logout": "Déconnexion", "login_error_not_found": "Identifiants invalides", "login_error_bad_credentials": "Identifiants invalides", @@ -294,6 +309,10 @@ "enum_content_type_external_storage": "Stockage externe", "enum_content_type_external_storage_object_label": "Spécifiez un répertoire existant par rapport au chemin suivant", "enum_content_type_external_storage_flashdrive_label": "Chemin relatif à un périphérique amovible", + "enum_content_type_composition": "Composition", + "enum_content_type_composition_object_label": "Rapport hauteur/largeur de l'écran", + "enum_content_type_text": "Texte", + "enum_content_type_text_object_label": "Texte affiché", "enum_content_type_url": "URL", "enum_content_type_video": "Vidéo", "enum_content_type_picture": "Image", diff --git a/lang/it.json b/lang/it.json index 6ddafb5..e25a513 100644 --- a/lang/it.json +++ b/lang/it.json @@ -59,7 +59,7 @@ "js_slideshow_slide_delete_confirmation": "Sei sicuro?", "slideshow_content_page_title": "Libreria dei contenuti", "slideshow_content_button_add": "Nuovo Contenuto", - "slideshow_content_referenced_in_slide_error": "Si fa riferimento al contenuto in una diapositiva, rimuovere prima la diapositiva", + "slideshow_content_referenced_in_slide_error": "Si fa riferimento al contenuto '%contentName%' in una diapositiva, rimuovere prima la diapositiva", "slideshow_content_panel_active": "Contenuti", "slideshow_content_panel_empty": "Attualmente non ci sono contenuti. %link% adesso.", "slideshow_content_panel_th_name": "Nome", @@ -256,12 +256,27 @@ "common_apply": "Applica", "common_saved": "Le modifiche sono state salvate", "common_new_folder": "Nuovo Cartella", - "common_folder_not_empty_error": "La cartella non è vuota, devi prima eliminarne il contenuto", + "common_folder_not_empty_error": "La cartella '%folderName%' non è vuota, devi prima eliminarne il contenuto", "common_copied": "Elemento copiato!", "common_host_placeholder": "raspberrypi.local o 192.168.1.85", "common_reachable_at": "Host", "common_http_error_occured": "Si è verificato un errore %code%", "common_http_error_413": "I file sono troppo grandi", + "common_width": "Larghezza", + "common_height": "Altezza", + "common_position": "Posizione", + "common_angle": "Angolo", + "common_size": "Dimensioni", + "composition_elements_heading": "Elementi", + "composition_element_add": "Aggiungi elemento", + "composition_elements_delete_all": "Elimina tutto", + "composition_presets": "Preimpostazioni", + "composition_presets_grid_2x2": "Griglia 2x2", + "composition_presets_tvnews_1x1": "TV news 1x1", + "composition_monitor": "Schermo", + "composition_element_x_axis": "Asse X", + "composition_element_y_axis": "Asse Y", + "composition_element_match_content_aspect_ratio": "Regola la scala del contenuto", "logout": "Logout", "login_error_not_found": "Credenziali errate", "login_error_bad_credentials": "Credenziali errate", @@ -293,6 +308,10 @@ "enum_content_type_external_storage": "Archiviazione esterna", "enum_content_type_external_storage_object_label": "Specificare una directory esistente relativi al seguente percorso", "enum_content_type_external_storage_flashdrive_label": "Percorso relativo ad un dispositivo rimovibile", + "enum_content_type_composition": "Composizione", + "enum_content_type_composition_object_label": "Rapporto di aspetto dello schermo", + "enum_content_type_text": "Testo", + "enum_content_type_text_object_label": "Testo visualizzato", "enum_content_type_url": "URL", "enum_content_type_video": "Video", "enum_content_type_picture": "Immagine", diff --git a/plugins/user/Dashboard/views/dashboard.jinja.html b/plugins/user/Dashboard/views/dashboard.jinja.html index 47986da..91172fa 100644 --- a/plugins/user/Dashboard/views/dashboard.jinja.html +++ b/plugins/user/Dashboard/views/dashboard.jinja.html @@ -22,8 +22,7 @@ {% endwith %} {% endblock %} -{% block page %} - +{% block top_page %}
@@ -32,7 +31,9 @@
+{% endblock %} +{% block main_page %}
diff --git a/src/controller/AuthController.py b/src/controller/AuthController.py index 799a965..5c81b71 100644 --- a/src/controller/AuthController.py +++ b/src/controller/AuthController.py @@ -1,6 +1,6 @@ import json -from flask import Flask, render_template, redirect, request, url_for, jsonify +from flask import Flask, render_template, redirect, request, url_for, jsonify, flash from flask_login import login_user, logout_user, current_user from src.service.ModelStore import ModelStore from src.model.entity.User import User @@ -26,8 +26,6 @@ class AuthController(ObController): self._app.add_url_rule('/auth/user/delete/', 'auth_user_delete', self.guard_auth(self._auth(self.auth_user_delete)), methods=['GET']) def login(self): - login_error = None - if current_user.is_authenticated: return redirect(url_for('playlist')) @@ -41,13 +39,12 @@ class AuthController(ObController): login_user(user) return redirect(url_for('playlist')) else: - login_error = 'bad_credentials' + flash(self.t('login_error_bad_credentials'), 'error') else: - login_error = 'not_found' + flash(self.t('login_error_not_found'), 'error') return render_template( 'auth/login.jinja.html', - login_error=login_error, last_username=request.form['username'] if 'username' in request.form else None ) @@ -67,7 +64,6 @@ class AuthController(ObController): return render_template( 'auth/list.jinja.html', - error=request.args.get('error', None), users=self._model_store.user().get_users(exclude=User.DEFAULT_USER if demo else None), plugin_core_api_enabled=self._model_store.variable().map().get('plugin_core_api_enabled').as_bool() ) @@ -96,10 +92,12 @@ class AuthController(ObController): return redirect(url_for('auth_user_list')) if user.id == str(current_user.id): - return redirect(url_for('auth_user_list', error='auth_user_delete_cant_delete_yourself')) + flash(self.t('auth_user_delete_cant_delete_yourself'), 'error') + return redirect(url_for('auth_user_list')) if self._model_store.user().count_all_enabled() == 1: - return redirect(url_for('auth_user_list', error='auth_user_delete_at_least_one_account')) + flash(self.t('auth_user_delete_at_least_one_account'), 'error') + return redirect(url_for('auth_user_list')) self._model_store.user().delete(user_id) return redirect(url_for('auth_user_list')) diff --git a/src/controller/ContentController.py b/src/controller/ContentController.py index 30ba73b..7d97936 100644 --- a/src/controller/ContentController.py +++ b/src/controller/ContentController.py @@ -2,11 +2,12 @@ import json import os import time -from flask import Flask, render_template, redirect, request, url_for, send_from_directory, jsonify, abort +from flask import Flask, render_template, redirect, request, url_for, send_from_directory, jsonify, abort, flash from werkzeug.utils import secure_filename from src.service.ModelStore import ModelStore from src.model.entity.Content import Content from src.model.enum.ContentType import ContentType +from src.model.enum.ContentMetadata import ContentMetadata from src.model.enum.FolderEntity import FolderEntity, FOLDER_ROOT_PATH from src.interface.ObController import ObController from src.util.utils import str_to_enum, get_optional_string @@ -27,7 +28,6 @@ class ContentController(ObController): self._app.add_url_rule('/slideshow/content/move-folder', 'slideshow_content_folder_move', self._auth(self.slideshow_content_folder_move), methods=['POST']) self._app.add_url_rule('/slideshow/content/rename-folder', 'slideshow_content_folder_rename', self._auth(self.slideshow_content_folder_rename), methods=['POST']) self._app.add_url_rule('/slideshow/content/delete-folder', 'slideshow_content_folder_delete', self._auth(self.slideshow_content_folder_delete), methods=['GET']) - self._app.add_url_rule('/slideshow/content/show/', 'slideshow_content_show', self._auth(self.slideshow_content_show), methods=['GET']) self._app.add_url_rule('/slideshow/content/upload-bulk', 'slideshow_content_upload_bulk', self._auth(self.slideshow_content_upload_bulk), methods=['POST']) self._app.add_url_rule('/slideshow/content/delete-bulk-explr', 'slideshow_content_delete_bulk_explr', self._auth(self.slideshow_content_delete_bulk_explr), methods=['GET']) @@ -110,15 +110,26 @@ class ContentController(ObController): if not content: return abort(404) + vargs = {} working_folder_path, working_folder = self.get_folder_context() + edit_view = 'slideshow/contents/edit.jinja.html' + + if content.type == ContentType.COMPOSITION: + edit_view = 'slideshow/contents/edit-composition.jinja.html' + vargs['folders_tree'] = self._model_store.folder().get_folder_tree(FolderEntity.CONTENT) + vargs['foldered_contents'] = self._model_store.content().get_all_indexed('folder_id', multiple=True) + elif content.type == ContentType.TEXT: + edit_view = 'slideshow/contents/edit-text.jinja.html' return render_template( - 'slideshow/contents/edit.jinja.html', + edit_view, content=content, working_folder_path=working_folder_path, working_folder=working_folder, enum_content_type=ContentType, - external_storage_mountpoint=self._model_store.config().map().get('external_storage_mountpoint') + enum_content_metadata=ContentMetadata, + external_storage_mountpoint=self._model_store.config().map().get('external_storage_mountpoint'), + **vargs ) def slideshow_content_save(self, content_id: int = 0): @@ -135,17 +146,19 @@ class ContentController(ObController): ) self._post_update() - return redirect(url_for('slideshow_content_edit', content_id=content_id, saved=1)) + flash(self.t('common_saved'), 'success') + + return redirect(url_for('slideshow_content_edit', content_id=content_id)) def slideshow_content_delete(self): working_folder_path, working_folder = self.get_folder_context() - error_tuple = self.delete_content_by_id(request.args.get('id')) + error = self.delete_content_by_id(request.args.get('id')) route_args = { "path": working_folder_path, } - if error_tuple: - route_args[error_tuple[0]] = error_tuple[1] + if error: + flash(error, 'error') return redirect(url_for('slideshow_content_list', **route_args)) @@ -225,24 +238,16 @@ class ContentController(ObController): def slideshow_content_folder_delete(self): working_folder_path, working_folder = self.get_folder_context() - error_tuple = self.delete_folder_by_id(request.args.get('id')) + error = self.delete_folder_by_id(request.args.get('id')) route_args = { "path": working_folder_path, } - if error_tuple: - route_args[error_tuple[0]] = error_tuple[1] + if error: + flash(self.t(error), 'error') return redirect(url_for('slideshow_content_list', **route_args)) - def slideshow_content_show(self, content_id: int = 0): - content = self._model_store.content().get(content_id) - - if not content: - return abort(404) - - return redirect(self._model_store.content().resolve_content_location(content)) - def slideshow_content_delete_bulk_explr(self): working_folder_path, working_folder = self.get_folder_context() entity_ids = request.args.get('entity_ids', '').split(',') @@ -251,17 +256,17 @@ class ContentController(ObController): for id in entity_ids: if id: - error_tuple = self.delete_content_by_id(id) + error = self.delete_content_by_id(id) - if error_tuple: - route_args_dict[error_tuple[0]] = error_tuple[1] + if error: + flash(error, 'error') for id in folder_ids: if id: - error_tuple = self.delete_folder_by_id(id) + error = self.delete_folder_by_id(id) - if error_tuple: - route_args_dict[error_tuple[0]] = error_tuple[1] + if error: + flash(error, 'error') return redirect(url_for('slideshow_content_list', **route_args_dict)) @@ -272,7 +277,7 @@ class ContentController(ObController): return None if self._model_store.slide().count_slides_for_content(content.id) > 0: - return 'referenced_in_slide_error', content.name + return 'slideshow_content_referenced_in_slide_error'.replace('%contentName%', content.name) self._model_store.content().delete(content.id) self._post_update() @@ -288,7 +293,7 @@ class ContentController(ObController): folder_counter = self._model_store.folder().count_subfolders_for_folder(folder.id) if content_counter > 0 or folder_counter: - return 'folder_not_empty_error', folder.name + return self.t('common_folder_not_empty_error').replace('%folderName%', folder.name) self._model_store.folder().delete(id=folder.id) self._post_update() diff --git a/src/controller/FleetNodePlayerController.py b/src/controller/FleetNodePlayerController.py index 9118829..149016f 100644 --- a/src/controller/FleetNodePlayerController.py +++ b/src/controller/FleetNodePlayerController.py @@ -1,6 +1,6 @@ import json -from flask import Flask, render_template, redirect, request, url_for, jsonify, abort +from flask import Flask, render_template, redirect, request, url_for, jsonify, abort, flash from src.service.ModelStore import ModelStore from src.model.entity.NodePlayer import NodePlayer from src.interface.ObController import ObController @@ -108,18 +108,19 @@ class FleetNodePlayerController(ObController): ) self._post_update() - # return redirect(url_for('fleet_node_player_edit', node_player_id=node_player_id, saved=1)) + flash(self.t('common_saved'), 'success') + return redirect(url_for('fleet_node_player_list', path=working_folder_path)) def fleet_node_player_delete(self): working_folder_path, working_folder = self.get_working_folder() - error_tuple = self.delete_node_player_by_id(request.args.get('id')) + error = self.delete_node_player_by_id(request.args.get('id')) route_args = { "path": working_folder_path, } - if error_tuple: - route_args[error_tuple[0]] = error_tuple[1] + if error: + flash(error, 'error') return redirect(url_for('fleet_node_player_list', **route_args)) @@ -200,13 +201,13 @@ class FleetNodePlayerController(ObController): def fleet_node_player_folder_delete(self): working_folder_path, working_folder = self.get_working_folder() - error_tuple = self.delete_folder_by_id(request.args.get('id')) + error = self.delete_folder_by_id(request.args.get('id')) route_args = { "path": working_folder_path, } - if error_tuple: - route_args[error_tuple[0]] = error_tuple[1] + if error: + flash(error, 'error') return redirect(url_for('fleet_node_player_list', **route_args)) @@ -218,17 +219,17 @@ class FleetNodePlayerController(ObController): for id in entity_ids: if id: - error_tuple = self.delete_node_player_by_id(id) + error = self.delete_node_player_by_id(id) - if error_tuple: - route_args_dict[error_tuple[0]] = error_tuple[1] + if error: + flash(error, 'error') for id in folder_ids: if id: - error_tuple = self.delete_folder_by_id(id) + error = self.delete_folder_by_id(id) - if error_tuple: - route_args_dict[error_tuple[0]] = error_tuple[1] + if error: + flash(error, 'error') return redirect(url_for('fleet_node_player_list', **route_args_dict)) @@ -252,7 +253,7 @@ class FleetNodePlayerController(ObController): folder_counter = self._model_store.folder().count_subfolders_for_folder(folder.id) if node_player_counter > 0 or folder_counter: - return 'folder_not_empty_error', folder.name + return self.t('common_folder_not_empty_error').replace('%folderName%', folder.name) self._model_store.folder().delete(id=folder.id) diff --git a/src/controller/FleetNodePlayerGroupController.py b/src/controller/FleetNodePlayerGroupController.py index 9cf296a..c657049 100644 --- a/src/controller/FleetNodePlayerGroupController.py +++ b/src/controller/FleetNodePlayerGroupController.py @@ -1,6 +1,6 @@ import json -from flask import Flask, render_template, redirect, request, url_for, jsonify +from flask import Flask, render_template, redirect, request, url_for, jsonify, flash from src.service.ModelStore import ModelStore from src.model.entity.NodePlayerGroup import NodePlayerGroup from src.model.enum.FolderEntity import FolderEntity @@ -43,7 +43,6 @@ class FleetNodePlayerGroupController(ObController): return render_template( 'fleet/player-group/list.jinja.html', - error=request.args.get('error', None), current_player_group=current_player_group, node_player_groups=node_player_groups, pcounters=pcounters, @@ -86,7 +85,8 @@ class FleetNodePlayerGroupController(ObController): def fleet_node_player_group_delete(self, player_group_id: int): if self._model_store.node_player().count_node_players_for_group(player_group_id) > 0: - return redirect(url_for('fleet_node_player_group_list', player_group_id=player_group_id, error='node_player_group_delete_has_node_player')) + flash(self.t('node_player_group_delete_has_node_player'), 'error') + return redirect(url_for('fleet_node_player_group_list', player_group_id=player_group_id)) self._model_store.node_player_group().delete(player_group_id) return redirect(url_for('fleet_node_player_group')) diff --git a/src/controller/PlayerController.py b/src/controller/PlayerController.py index 78e64b8..cd84380 100644 --- a/src/controller/PlayerController.py +++ b/src/controller/PlayerController.py @@ -28,28 +28,31 @@ class PlayerController(ObController): self._app.add_url_rule('/player/playlist', 'player_playlist', self.player_playlist, methods=['GET']) self._app.add_url_rule('/player/playlist/use/', 'player_playlist_use', self.player_playlist, methods=['GET']) self._app.add_url_rule('/serve/content///', 'serve_content_file', self.serve_content_file, methods=['GET']) + self._app.add_url_rule('/serve/content/composition/', 'serve_content_composition', self.serve_content_composition, methods=['GET']) def player(self, playlist_slug_or_id: str = ''): preview_playlist = request.args.get('preview_playlist') preview_content_id = request.args.get('preview_content_id') + playlist_id = None playlist_slug_or_id = self._get_dynamic_playlist_id(playlist_slug_or_id) - query = " (slug = ? OR id = ?) " - query_args = { - "slug": playlist_slug_or_id, - "id": playlist_slug_or_id, - } + if not preview_content_id: + query = " (slug = ? OR id = ?) " + query_args = { + "slug": playlist_slug_or_id, + "id": playlist_slug_or_id, + } - if not preview_playlist: - query = query + " AND enabled = ? " - query_args["enabled"] = True + if not preview_playlist: + query = query + " AND enabled = ? " + query_args["enabled"] = True - current_playlist = self._model_store.playlist().get_one_by(query, query_args) + current_playlist = self._model_store.playlist().get_one_by(query, query_args) - if playlist_slug_or_id and not current_playlist: - return abort(404) + if playlist_slug_or_id and not current_playlist: + return abort(404) - playlist_id = current_playlist.id if current_playlist else None + playlist_id = current_playlist.id if current_playlist else None try: items = self._get_playlist(playlist_id=playlist_id, preview_content_id=preview_content_id) @@ -63,6 +66,8 @@ class PlayerController(ObController): slide_animation_entrance_effect = request.args.get('animation_effect', self._model_store.variable().get_one_by_name('slide_animation_entrance_effect').eval()) slide_animation_exit_effect = request.args.get('slide_animation_exit_effect', self._model_store.variable().get_one_by_name('slide_animation_exit_effect').eval()) + + return render_template( 'player/player.jinja.html', items=items, @@ -122,7 +127,7 @@ class PlayerController(ObController): preview_content = self._model_store.content().get(preview_content_id) if preview_content_id else None preview_mode = preview_content is not None - if playlist_id == 0 or not playlist_id: + if not preview_mode and (playlist_id == 0 or not playlist_id): playlist = self._model_store.playlist().get_one_by(query="fallback = 1") if playlist: @@ -132,8 +137,9 @@ class PlayerController(ObController): enabled_slides = [Slide(content_id=preview_content.id, duration=1000000)] if preview_mode else self._model_store.slide().get_slides(enabled=True, playlist_id=playlist_id) slides = self._model_store.slide().to_dict(enabled_slides) - contents = self._model_store.content().get_all_indexed() - playlist = self._model_store.playlist().get(playlist_id) + content_ids = [str(slide['content_id']) for slide in slides if slide['content_id'] is not None] + contents = self._model_store.content().get_all_indexed(query="id IN ({})".format(','.join(content_ids))) + playlist = self._model_store.playlist().get(playlist_id) if not preview_mode else None position = 9999 playlist_loop = [] @@ -248,3 +254,14 @@ class PlayerController(ObController): response.headers['ETag'] = etag return response + + def serve_content_composition(self, content_id): + content = self._model_store.content().get(content_id) + + if not content or content.type != ContentType.COMPOSITION: + abort(404, 'Content not found') + + return render_template( + 'player/content/composition.jinja.html', + content=content, + ) diff --git a/src/controller/PlaylistController.py b/src/controller/PlaylistController.py index ad7ef83..0f43f9c 100644 --- a/src/controller/PlaylistController.py +++ b/src/controller/PlaylistController.py @@ -1,6 +1,6 @@ import json -from flask import Flask, render_template, redirect, request, url_for, jsonify, abort +from flask import Flask, render_template, redirect, request, url_for, jsonify, abort, flash from src.service.ModelStore import ModelStore from src.model.entity.Playlist import Playlist from src.model.enum.FolderEntity import FolderEntity @@ -35,7 +35,6 @@ class PlaylistController(ObController): return render_template( 'playlist/list.jinja.html', - error=request.args.get('error', None), current_playlist=current_playlist, playlists=playlists, durations=durations, @@ -83,10 +82,12 @@ class PlaylistController(ObController): abort(404) if self._model_store.slide().count_slides_for_playlist(playlist_id) > 0: - return redirect(url_for('playlist_list', playlist_id=playlist_id, error='playlist_delete_has_slides')) + flash(self.t('playlist_delete_has_slides'), 'error') + return redirect(url_for('playlist_list', playlist_id=playlist_id)) if self._model_store.node_player_group().count_node_player_groups_for_playlist(playlist_id) > 0: - return redirect(url_for('playlist_list', playlist_id=playlist_id, error='playlist_delete_has_node_player_groups')) + flash(self.t('playlist_delete_has_node_player_groups'), 'error') + return redirect(url_for('playlist_list', playlist_id=playlist_id)) self._model_store.playlist().delete(playlist_id) return redirect(url_for('playlist')) diff --git a/src/controller/SettingsController.py b/src/controller/SettingsController.py index 2a890e7..92e9e19 100644 --- a/src/controller/SettingsController.py +++ b/src/controller/SettingsController.py @@ -2,7 +2,7 @@ import time import json import threading -from flask import Flask, render_template, redirect, request, url_for +from flask import Flask, render_template, redirect, request, url_for, flash from typing import Optional from src.service.ModelStore import ModelStore @@ -40,7 +40,8 @@ class SettingsController(ObController): error = self._pre_update(request.form['id']) if error: - return redirect(url_for('settings_variable_list', error=error)) + flash(error, 'error') + return redirect(url_for('settings_variable_list')) self._model_store.variable().update_form(request.form['id'], request.form['value']) redirect_response = self._post_update(request.form['id']) @@ -54,7 +55,8 @@ class SettingsController(ObController): error = self._pre_update(request.form['id']) if error: - return redirect(url_for('settings_variable_plugin_list', error=error)) + flash(error, 'error') + return redirect(url_for('settings_variable_plugin_list')) self._model_store.variable().update_form(request.form['id'], request.form['value']) redirect_response = self._post_update(request.form['id']) @@ -79,7 +81,8 @@ class SettingsController(ObController): if variable.name == 'slide_upload_limit': self.reload_web_server() - return redirect(url_for('settings_variable_list', warning='common_restart_needed')) + flash(self.t('common_restart_needed'), 'warning') + return redirect(url_for('settings_variable_list')) if variable.name == 'fleet_player_enabled': self.reload_web_server() @@ -98,7 +101,10 @@ class SettingsController(ObController): thread = threading.Thread(target=self.plugin_update) thread.daemon = True thread.start() - return redirect(url_for('settings_variable_plugin_list', warning='common_restart_needed')) + flash(self.t('common_restart_needed'), 'warning') + return redirect(url_for('settings_variable_plugin_list')) + + flash(self.t('common_saved'), 'success') def plugin_update(self) -> None: restart() diff --git a/src/controller/SlideController.py b/src/controller/SlideController.py index ba56f26..5588fc1 100644 --- a/src/controller/SlideController.py +++ b/src/controller/SlideController.py @@ -2,7 +2,7 @@ import json import os import time -from flask import Flask, render_template, redirect, request, url_for, send_from_directory, jsonify, abort +from flask import Flask, render_template, redirect, request, url_for, send_from_directory, jsonify, abort, flash from werkzeug.utils import secure_filename from src.service.ModelStore import ModelStore from src.model.entity.Slide import Slide @@ -102,11 +102,11 @@ class SlideController(ObController): return jsonify({'status': 'ok'}) def slideshow_player_refresh(self): + referrer_path = self.get_referrer_path() + max_timeout_value = self._model_store.variable().get_one_by_name('polling_interval').as_string() + flash(self.t('slideshow_slide_refresh_player_success').replace('%time%', max_timeout_value), 'success:refresh') self._model_store.variable().update_by_name("refresh_player_request", time.time()) - max_timeout_value = self._model_store.variable().get_one_by_name('polling_interval').as_int() - query_params = '{}={}'.format('refresh_player', max_timeout_value) - next_url = request.args.get('next') - return redirect('{}{}{}'.format(next_url, '&' if '?' in next_url else '?', query_params)) + return redirect(referrer_path) def _post_update(self): self._model_store.variable().update_by_name("last_slide_update", time.time()) diff --git a/src/interface/ObController.py b/src/interface/ObController.py index 0dcd4df..c5f0747 100644 --- a/src/interface/ObController.py +++ b/src/interface/ObController.py @@ -1,6 +1,7 @@ import abc from typing import Optional, List, Dict, Union +from flask import request from src.service.TemplateRenderer import TemplateRenderer from src.service.ModelStore import ModelStore from src.interface.ObPlugin import ObPlugin @@ -51,3 +52,19 @@ class ObController(abc.ABC): def api(self): return self._web_server.api + + def get_referrer_path(self): + referer_url = request.referrer + if referer_url: + return '/' + referer_url.replace(request.host_url, '').split('?')[0] + return None + + def get_referrer_rule(self): + referer_path = self.get_referrer_path() + + if referer_path: + for rule in self._app.url_map.iter_rules(): + if referer_path == rule.rule.split('/<')[0]: + return rule.rule + + return None diff --git a/src/manager/ContentManager.py b/src/manager/ContentManager.py index b4b7696..7a435a5 100644 --- a/src/manager/ContentManager.py +++ b/src/manager/ContentManager.py @@ -6,6 +6,7 @@ from flask import url_for from src.model.entity.Content import Content from src.model.entity.Playlist import Playlist +from src.model.enum.ContentMetadata import ContentMetadata from src.model.enum.ContentType import ContentType from src.util.utils import get_yt_video_id from src.manager.DatabaseManager import DatabaseManager @@ -16,7 +17,8 @@ from src.manager.VariableManager import VariableManager from src.service.ModelManager import ModelManager from src.util.UtilFile import randomize_filename from src.util.UtilNetwork import get_preferred_ip_address -from src.util.UtilVideo import mp4_duration_with_ffprobe +from src.util.UtilVideo import get_video_metadata +from src.util.UtilPicture import get_picture_metadata from src.util.utils import encode_uri_component @@ -29,6 +31,7 @@ class ContentManager(ModelManager): "type CHAR(30)", "location TEXT", "duration FLOAT", + "metadata TEXT", "folder_id INTEGER", "created_by CHAR(255)", "updated_by CHAR(255)", @@ -40,6 +43,12 @@ class ContentManager(ModelManager): super().__init__(lang_manager, database_manager, user_manager, variable_manager) self._config_manager = config_manager self._db = database_manager.open(self.TABLE_NAME, self.TABLE_MODEL) + self.pre_migrate() + + def pre_migrate(self): + if not self._variable_manager.get_one_by_name('refresh_all_metadata').as_bool(): + self.refresh_all_metadata() + self._variable_manager.update_by_name('refresh_all_metadata', True) def hydrate_object(self, raw_content: dict, id: int = None) -> Content: if id: @@ -73,10 +82,12 @@ class ContentManager(ModelManager): def get_all(self, sort: Optional[str] = 'created_at', ascending=False) -> List[Content]: return self.hydrate_list(self._db.get_all(table_name=self.TABLE_NAME, sort=sort, ascending=ascending)) - def get_all_indexed(self, attribute: str = 'id', multiple=False) -> Dict[str, Content]: + def get_all_indexed(self, attribute: str = 'id', multiple=False, query: str = None) -> Dict[str, Content]: index = {} - for item in self.get_contents(): + items = self.get_by(query) if query else self.get_contents() + + for item in items: id = getattr(item, attribute) if multiple: if id not in index: @@ -132,14 +143,15 @@ class ContentManager(ModelManager): def post_delete(self, content_id: str) -> str: return content_id - def update_form(self, id: int, name: str, location: Optional[str] = None) -> Optional[Content]: + def update_form(self, id: int, name: Optional[str] = None, location: Optional[str] = None, metadata: Optional[str] = None) -> Optional[Content]: content = self.get(id) if not content: return form = { - "name": name, + "name": name if isinstance(name, str) else content.name, + "metadata": metadata if isinstance(metadata, str) else content.metadata } if location is not None and location: @@ -198,16 +210,29 @@ class ContentManager(ModelManager): object_path = os.path.join(upload_dir, object_name) object.save(object_path) content.location = object_path - - if type == ContentType.VIDEO: - content.duration = mp4_duration_with_ffprobe(content.location) - + self.set_metadata(content) else: - content.location = location if location else '' + content.location = ContentType.get_initial_location(content.type, location) self.add_form(content) return self.get_one_by(query="uuid = '{}'".format(content.uuid)) + def set_metadata(self, content: Content) -> str: + if content.type == ContentType.VIDEO: + width, height, duration = get_video_metadata(content.location) + content.duration = duration + content.set_metadata(ContentMetadata.DURATION, duration) + content.set_metadata(ContentMetadata.WIDTH, width) + content.set_metadata(ContentMetadata.HEIGHT, height) + elif content.type == ContentType.PICTURE: + width, height = get_picture_metadata(content.location) + content.set_metadata(ContentMetadata.WIDTH, width) + content.set_metadata(ContentMetadata.HEIGHT, height) + else: + content.init_metadata() + + return content.metadata + def delete(self, id: int) -> None: content = self.get(id) @@ -237,6 +262,16 @@ class ContentManager(ModelManager): if content.type == ContentType.YOUTUBE: location = content.location + elif content.type == ContentType.TEXT: + pass + elif content.type == ContentType.COMPOSITION: + location = "{}/{}".format( + var_external_url if len(var_external_url) > 0 else "", + url_for( + 'serve_content_composition', + content_id=content.id + ).strip('/') + ) elif content.has_file() or content.type == ContentType.EXTERNAL_STORAGE: location = "{}/{}".format( var_external_url if len(var_external_url) > 0 else "", @@ -248,6 +283,13 @@ class ContentManager(ModelManager): ).strip('/') ) elif content.type == ContentType.URL: - location = 'http://' + content.location if not content.location.startswith('http') else content.location + location = 'http://' + content.location if content.location and not content.location.startswith('http') else content.location - return location \ No newline at end of file + return location + + def refresh_all_metadata(self): + for content in self.get_all(): + self.update_form( + id=content.id, + metadata=self.set_metadata(content) + ) diff --git a/src/manager/UserManager.py b/src/manager/UserManager.py index bb46b4b..cd802fa 100644 --- a/src/manager/UserManager.py +++ b/src/manager/UserManager.py @@ -218,13 +218,14 @@ class UserManager: user_id = self.get_logged_user("id") now = time.time() - if 'created_by' not in object or not object['created_by']: - object["created_by"] = user_id - edits['created_by'] = object['created_by'] + if user_id: + if 'created_by' not in object or not object['created_by']: + object["created_by"] = user_id + edits['created_by'] = object['created_by'] - if 'updated_by' not in object or not object['updated_by']: - object["updated_by"] = user_id - edits['updated_by'] = object['updated_by'] + if 'updated_by' not in object or not object['updated_by']: + object["updated_by"] = user_id + edits['updated_by'] = object['updated_by'] if 'created_at' not in object or not object['created_at']: object["created_at"] = now diff --git a/src/manager/VariableManager.py b/src/manager/VariableManager.py index 4016d62..779902e 100644 --- a/src/manager/VariableManager.py +++ b/src/manager/VariableManager.py @@ -149,6 +149,7 @@ class VariableManager: {"name": "last_restart", "value": time.time(), "type": VariableType.TIMESTAMP, "editable": False, "description": self.t('settings_variable_desc_ro_editable')}, {"name": "last_slide_update", "value": time.time(), "type": VariableType.TIMESTAMP, "editable": False, "description": self.t('settings_variable_desc_ro_last_slide_update')}, {"name": "refresh_player_request", "value": time.time(), "type": VariableType.TIMESTAMP, "editable": False, "description": self.t('settings_variable_desc_ro_refresh_player_request')}, + {"name": "refresh_all_metadata", "value": False, "type": VariableType.BOOL, "editable": False, "description": None}, ] for default_var in default_vars: diff --git a/src/model/entity/Content.py b/src/model/entity/Content.py index 5fdaf31..5894248 100644 --- a/src/model/entity/Content.py +++ b/src/model/entity/Content.py @@ -4,15 +4,17 @@ import uuid from typing import Optional, Union from src.model.enum.ContentType import ContentType, ContentInputType +from src.model.enum.ContentMetadata import ContentMetadata from src.util.utils import str_to_enum class Content: - def __init__(self, uuid: str = '', location: str = '', type: Union[ContentType, str] = ContentType.URL, name: str = 'Untitled', id: Optional[int] = None, duration: Optional[float] = None, created_by: Optional[str] = None, updated_by: Optional[str] = None, created_at: Optional[int] = None, updated_at: Optional[int] = None, folder_id: Optional[int] = None): + def __init__(self, uuid: str = '', location: str = '', metadata: str = '', type: Union[ContentType, str] = ContentType.URL, name: str = 'Untitled', id: Optional[int] = None, duration: Optional[float] = None, created_by: Optional[str] = None, updated_by: Optional[str] = None, created_at: Optional[int] = None, updated_at: Optional[int] = None, folder_id: Optional[int] = None): self._uuid = uuid if uuid else self.generate_and_set_uuid() self._id = id if id else None self._location = location + self._metadata = metadata if metadata else self.init_metadata() self._type = str_to_enum(type, ContentType) if isinstance(type, str) else type self._name = name self._folder_id = folder_id @@ -39,6 +41,14 @@ class Content: def uuid(self, value: str): self._uuid = value + @property + def metadata(self) -> str: + return self._metadata + + @metadata.setter + def metadata(self, value: str): + self._metadata = value + @property def location(self) -> str: return self._location @@ -124,6 +134,7 @@ class Content: f"updated_at='{self.updated_at}',\n" \ f"folder_id='{self.folder_id}',\n" \ f"duration='{self.duration}',\n" \ + f"metadata='{self.metadata}',\n" \ f")" def to_json(self, edits: dict = {}) -> str: @@ -147,6 +158,7 @@ class Content: "updated_at": self.updated_at, "folder_id": self.folder_id, "duration": self.duration, + "metadata": self.metadata, } if with_virtual: @@ -165,3 +177,32 @@ class Content: def is_editable(self) -> bool: return ContentInputType.is_editable(self.get_input_type()) + + def init_metadata(self): + self.metadata = '{}' + return self.metadata + + def get_metadata(self, key: ContentMetadata, default=''): + if not self.metadata: + self.init_metadata() + + metadata_obj = json.loads(self.metadata) + return metadata_obj.get(key.value, default) + + def set_metadata(self, key: ContentMetadata, value=None): + if not self.metadata: + self.init_metadata() + + metadata_obj = json.loads(self.metadata) + metadata_obj[key.value] = value + self.metadata = json.dumps(metadata_obj) + + def clear_metadata(self, key: ContentMetadata): + if not self.metadata: + self.init_metadata() + + metadata_obj = json.loads(self.metadata) + + if key.value in metadata_obj: + del metadata_obj[key.value] + self.metadata = json.dumps(metadata_obj) diff --git a/src/model/enum/ContentMetadata.py b/src/model/enum/ContentMetadata.py new file mode 100644 index 0000000..6a972b5 --- /dev/null +++ b/src/model/enum/ContentMetadata.py @@ -0,0 +1,8 @@ +from enum import Enum + + +class ContentMetadata(Enum): + + DURATION = 'duration' + WIDTH = 'width' + HEIGHT = 'height' diff --git a/src/model/enum/ContentType.py b/src/model/enum/ContentType.py index 8750e78..1753e9b 100644 --- a/src/model/enum/ContentType.py +++ b/src/model/enum/ContentType.py @@ -1,3 +1,4 @@ +import json import mimetypes from enum import Enum @@ -10,7 +11,9 @@ class ContentInputType(Enum): UPLOAD = 'upload' TEXT = 'text' + HIDDEN = 'hidden' STORAGE = 'storage' + COMPOSITION = 'composition' @staticmethod def is_editable(value: Enum) -> bool: @@ -20,6 +23,8 @@ class ContentInputType(Enum): return True elif value == ContentInputType.STORAGE: return True + elif value == ContentInputType.COMPOSITION: + return True class ContentType(Enum): @@ -29,6 +34,8 @@ class ContentType(Enum): YOUTUBE = 'youtube' VIDEO = 'video' EXTERNAL_STORAGE = 'external_storage' + COMPOSITION = 'composition' + TEXT = 'text' @staticmethod def guess_content_type_file(filename: str): @@ -61,6 +68,10 @@ class ContentType(Enum): return ContentInputType.TEXT elif value == ContentType.EXTERNAL_STORAGE: return ContentInputType.STORAGE + elif value == ContentType.COMPOSITION: + return ContentInputType.COMPOSITION + elif value == ContentType.TEXT: + return ContentInputType.TEXT @staticmethod def get_fa_icon(value: Union[Enum, str]) -> str: @@ -77,6 +88,10 @@ class ContentType(Enum): return 'fa-link' elif value == ContentType.EXTERNAL_STORAGE: return 'fa-brands fa-usb' + elif value == ContentType.COMPOSITION: + return 'fa-solid fa-clone' + elif value == ContentType.TEXT: + return 'fa-solid fa-font' return 'fa-file' @@ -95,5 +110,39 @@ class ContentType(Enum): return 'danger' elif value == ContentType.EXTERNAL_STORAGE: return 'other' + elif value == ContentType.COMPOSITION: + return 'purple' + elif value == ContentType.TEXT: + return 'gscaleF' return 'neutral' + + @staticmethod + def get_initial_location(value: Enum, location: Optional[str] = None) -> str: + if isinstance(value, str): + value = str_to_enum(value, ContentType) + + if value == ContentType.COMPOSITION: + return json.dumps({ + "ratio": location if location else '16/9', + "layers": {} + }) + elif value == ContentType.TEXT: + return json.dumps({ + "textLabel": location if location else 'Hello', + "fontSize": 20, + "color": '#FFFFFFFF', + "fontFamily": "Arial", + "fontBold": None, + "fontItalic": None, + "fontUnderline": None, + "textAlign": "center", + "backgroundColor": '#000000FF', + "scrollEnable": False, + "scrollDirection": "left", + "scrollSpeed": "10", + "singleLine": False, + "margin": 0 + }) + + return location diff --git a/src/service/Sysinfo.py b/src/service/Sysinfo.py index aaedad0..2e4de15 100644 --- a/src/service/Sysinfo.py +++ b/src/service/Sysinfo.py @@ -1,6 +1,10 @@ +try: + import psutil +except: + pass + import os import platform -import psutil import socket from src.util.utils import get_working_directory diff --git a/src/service/TemplateRenderer.py b/src/service/TemplateRenderer.py index 7b60b18..465bc62 100644 --- a/src/service/TemplateRenderer.py +++ b/src/service/TemplateRenderer.py @@ -39,9 +39,9 @@ class TemplateRenderer: AUTH_ENABLED=self._model_store.variable().map().get('auth_enabled').as_bool(), last_pillmenu_slideshow=self._model_store.variable().map().get('last_pillmenu_slideshow').as_string(), last_pillmenu_configuration=self._model_store.variable().map().get('last_pillmenu_configuration').as_string(), + external_url=self._model_store.variable().map().get('external_url').as_string().strip('/'), last_pillmenu_fleet=self._model_store.variable().map().get('last_pillmenu_fleet').as_string(), last_pillmenu_security=self._model_store.variable().map().get('last_pillmenu_security').as_string(), - external_url=self._model_store.variable().map().get('external_url').as_string(), track_created=self._model_store.user().track_user_created, track_updated=self._model_store.user().track_user_updated, PORT=self._model_store.config().map().get('port'), @@ -54,6 +54,7 @@ class TemplateRenderer: is_cron_in_datetime_moment=is_cron_in_datetime_moment, is_cron_in_week_moment=is_cron_in_week_moment, json_dumps=json.dumps, + json_loads=json.loads, merge_dicts=merge_dicts, dictsort=dictsort, truncate=truncate, diff --git a/src/service/WebServer.py b/src/service/WebServer.py index 4f76831..61746c3 100644 --- a/src/service/WebServer.py +++ b/src/service/WebServer.py @@ -50,7 +50,6 @@ class WebServer: host=self._model_store.config().map().get('bind'), port=self._model_store.config().map().get('port'), threads=100, - max_request_body_size=self.get_max_upload_size(), ) def reload(self) -> None: @@ -58,6 +57,7 @@ class WebServer: def setup(self) -> None: self._setup_flask_app() + self._setup_flask_headers() self._setup_web_globals() self._setup_web_errors() self._setup_web_controllers() @@ -160,6 +160,19 @@ class WebServer: def inject_global_vars() -> dict: return self._template_renderer.get_view_globals() + def _setup_flask_headers(self) -> None: + @self._app.after_request + def modify_headers(response): + # Supprimer les en-têtes de sécurité + response.headers.pop('X-Frame-Options', None) + response.headers.pop('X-Content-Type-Options', None) + response.headers.pop('X-XSS-Protection', None) + + # Modifier ou supprimer la politique CSP + response.headers['Content-Security-Policy'] = "frame-ancestors *" + + return response + def _setup_web_errors(self) -> None: def handle_error(error): if request.headers.get('Content-Type') == 'application/json' or request.headers.get('Accept') == 'application/json': @@ -171,14 +184,16 @@ class WebServer: }) return make_response(response, error.code) - if error.code == 404: - return send_from_directory(self.get_template_dir(), 'core/error404.html'), 404 - - return error + return self._template_renderer.render_view( + '@core/http-error.html', + error_code=error.code, + error_message=error.description + ) self._app.register_error_handler(400, handle_error) self._app.register_error_handler(404, handle_error) self._app.register_error_handler(409, handle_error) + self._app.register_error_handler(413, handle_error) self._app.register_error_handler(HttpClientException, handle_error) diff --git a/src/util/UtilExternalStorage.py b/src/util/UtilExternalStorage.py index 4556ca5..407f6c7 100644 --- a/src/util/UtilExternalStorage.py +++ b/src/util/UtilExternalStorage.py @@ -1,5 +1,9 @@ +try: + import psutil +except: + pass + import os -import psutil import platform import logging import os diff --git a/src/util/UtilPicture.py b/src/util/UtilPicture.py new file mode 100644 index 0000000..209de0e --- /dev/null +++ b/src/util/UtilPicture.py @@ -0,0 +1,133 @@ +import struct +import imghdr +import os + + +def get_png_size(file): + file.seek(16) + width, height = struct.unpack('>ii', file.read(8)) + return width, height + + +def get_jpeg_size(file): + file.seek(0) + size = 2 + ftype = 0 + while not 0xC0 <= ftype <= 0xCF: + file.seek(size, 1) + byte = file.read(1) + while ord(byte) == 0xFF: + byte = file.read(1) + ftype = ord(byte) + size = struct.unpack('>H', file.read(2))[0] - 2 + file.seek(1, 1) + height, width = struct.unpack('>HH', file.read(4)) + return width, height + + +def get_gif_size(file): + file.seek(6) + width, height = struct.unpack('> 6) | (b3 << 2) | ((b4 & 0x0F) << 10)) + 1 + return width, height + elif chunk_header[0:4] == b'VP8X': + vp8x_header = file.read(10) + width, height = struct.unpack(' largest_size[0] * largest_size[1]: + largest_size = (width, height) + file.seek(14, 1) # Skip over the rest of the directory entry + return largest_size + + +def get_picture_metadata(image_path): + # Determine the image type using imghdr and file extension as a fallback + img_type = imghdr.what(image_path) + if not img_type: + _, ext = os.path.splitext(image_path) + img_type = ext.lower().replace('.', '') + + with open(image_path, 'rb') as file: + if img_type == 'png': + return get_png_size(file) + elif img_type == 'jpeg' or img_type == 'jpg': + return get_jpeg_size(file) + elif img_type == 'gif': + return get_gif_size(file) + elif img_type == 'webp': + return get_webp_size(file) + elif img_type == 'bmp': + return get_bmp_size(file) + elif img_type == 'tiff' or img_type == 'tif': + return get_tiff_size(file) + elif img_type == 'ico': + return get_ico_size(file) + else: + raise ValueError("Unsupported image format or corrupted file") diff --git a/src/util/UtilVideo.py b/src/util/UtilVideo.py index 4343b9c..9255393 100644 --- a/src/util/UtilVideo.py +++ b/src/util/UtilVideo.py @@ -5,7 +5,7 @@ import json from pymediainfo import MediaInfo -def mp4_duration_with_ffprobe(filename): +def get_video_metadata(filename): try: result = subprocess.check_output(f'ffprobe -v quiet -show_streams -select_streams v:0 -of json "{filename}"', shell=True).decode() fields = json.loads(result)['streams'][0] @@ -16,7 +16,10 @@ def mp4_duration_with_ffprobe(filename): elif 'duration' in fields: duration = round(float(fields['duration']), 2) - return duration + width = fields.get('width', 0) + height = fields.get('height', 0) + + return width, height, duration except (subprocess.CalledProcessError, FileNotFoundError): logging.warn("ffprobe not found or an error occurred. Using pymediainfo instead.") @@ -25,11 +28,13 @@ def mp4_duration_with_ffprobe(filename): for track in media_info.tracks: if track.track_type == "Video": duration = round(track.duration / 1000, 2) if track.duration else None + width = track.width + height = track.height - return duration + return width, height, duration except OSError: logging.warn("Fail to get video metadata from pymediainfo.") except json.JSONDecodeError: logging.warn("Fail to get video metadata from ffprobe.") - return 0 + return 0, 0, 0 diff --git a/system/autostart-browser-x11.sh b/system/autostart-browser-x11.sh index 958e535..1c051d1 100755 --- a/system/autostart-browser-x11.sh +++ b/system/autostart-browser-x11.sh @@ -1,3 +1,9 @@ +#!/bin/bash + +# Configuration +STUDIO_URL=http://localhost:5000 # Main Obscreen Studio instance URL (could be a specific playlist /use/[playlist-id] or let obscreen manage playlist routing with /) +TARGET_RESOLUTION=auto # e.g. 1920x1080 - Force specific resolution (supported list available with command `DISPLAY=:0 xrandr`) + # Disable screensaver and DPMS xset s off xset -dpms @@ -7,10 +13,15 @@ xset s noblank unclutter -display :0 -noevents -grab & # Modify Chromium preferences to avoid restore messages -mkdir -p /home/pi/.config/chromium/Default 2>/dev/null -touch /home/pi/.config/chromium/Default/Preferences -sed -i 's/"exited_cleanly": false/"exited_cleanly": true/' /home/pi/.config/chromium/Default/Preferences +mkdir -p /tmp/obscreen/chromium/Default 2>/dev/null +touch /tmp/obscreen/chromium/Default/Preferences +sed -i 's/"exited_cleanly": false/"exited_cleanly": true/' /tmp/obscreen/chromium/Default/Preferences +# Resolution setup +if [ "$TARGET_RESOLUTION" != "auto" ]; then + FIRST_CONNECTED_SCREEN=$(xrandr | grep " connected" | awk '{print $1}' | head -n 1) + xrandr --output $FIRST_CONNECTED_SCREEN --mode $TARGET_RESOLUTION +fi RESOLUTION=$(DISPLAY=:0 xrandr | grep '*' | awk '{print $1}') WIDTH=$(echo $RESOLUTION | cut -d 'x' -f 1) HEIGHT=$(echo $RESOLUTION | cut -d 'x' -f 2) @@ -29,9 +40,9 @@ chromium-browser \ --noerrdialogs \ --kiosk \ --incognito \ - --user-data-dir=/home/pi/.config/chromium \ + --user-data-dir=/tmp/obscreen/chromium \ --no-sandbox \ --window-position=0,0 \ --window-size=${WIDTH},${HEIGHT} \ --display=:0 \ - http://localhost:5000 + ${STUDIO_URL} diff --git a/system/install-studio.sh b/system/install-studio.sh index 32bb66e..e2e14fa 100755 --- a/system/install-studio.sh +++ b/system/install-studio.sh @@ -44,7 +44,7 @@ chown -R $OWNER:$OWNER ./ # Automount script for external storage # ============================================================ -curl https://raw.githubusercontent.com/jr-k/obscreen/master/system/external-storage/10-obscreen-media-automount.rules | sed "s#/home/pi#$WORKING_DIR#g" | tee /etc/udev/rules.d/10-obscreen-media-automount.rules +curl https://raw.githubusercontent.com/jr-k/obscreen/master/system/external-storage/10-obscreen-media-automount.rules | sed "s#/home/pi#$WORKING_DIR#g" | tee /etc/udev/rules.d/10-obscreen-media-automount.rules udevadm control --reload-rules systemctl restart udev udevadm trigger diff --git a/views/auth/list.jinja.html b/views/auth/list.jinja.html index 4e6c705..a5ddf55 100644 --- a/views/auth/list.jinja.html +++ b/views/auth/list.jinja.html @@ -15,8 +15,7 @@ {% block body_class %}view-auth-user-list{% endblock %} -{% block page %} - +{% block top_page %}
{{ HOOK(H_AUTH_TOOLBAR_ACTIONS_START) }} @@ -26,12 +25,9 @@ {{ HOOK(H_AUTH_TOOLBAR_ACTIONS_END) }}
+{% endblock %} - {% if error %} -
- {{ l[error] }} -
- {% endif %} +{% block main_page %}
diff --git a/views/auth/login.jinja.html b/views/auth/login.jinja.html index 5a4efc5..ddefd28 100644 --- a/views/auth/login.jinja.html +++ b/views/auth/login.jinja.html @@ -14,14 +14,7 @@ {% block body_class %}view-login{% endblock %} -{% block page %} - - {% if login_error %} -
- {{ t('login_error_' ~ login_error) }} -
- {% endif %} - +{% block main_page %}