-
+
| Docker Containers | |
-
+
| Virtual Machines | |
@@ -452,8 +445,8 @@ function noVMs() {
}
function loadlist(init) {
if (init) {
- $('#apps').switchButton({show_labels:false, checked:$.cookie('my_apps')=='startedOnly'});
- $('#vms').switchButton({show_labels:false, checked:$.cookie('my_vms')=='startedOnly'});
+ $('#apps').switchButton({labels_placement:'left', off_label:'All Apps', on_label:'Started only', checked:$.cookie('my_apps')=='startedOnly'});
+ $('#vms').switchButton({labels_placement:'left', off_label:'All VMs', on_label:'Started only', checked:$.cookie('my_vms')=='startedOnly'});
$('#apps').change(function(){
$('span.outer.apps.stopped').finish().toggle('fast',function(){noApps();})
$('#apps').is(':checked') ? $.cookie('my_apps','startedOnly',{expires:3650}) : $.removeCookie('my_apps');
@@ -464,7 +457,7 @@ function loadlist(init) {
});
context.init({preventDoubleContext:false,left:true,above:false});
}
- $.post('/webGui/include/DashboardApps.php',{display:'=$display['dashapps']?>',docker:'=$dockerd?>',vm:'=$libvirtd?>'},function(d) {
+ $.post('/webGui/include/DashboardApps.php',{display:'=$display['dashapps']?>'},function(d) {
var data = d.split(/\0/);
$('.docker_view').html(data[0]);
$('.vm_view').html(data[1]);
@@ -756,10 +749,10 @@ $(function() {
0):?>
toggleView('fan_view',true);
-
+
toggleView('docker_view',true);
-
+
toggleView('vm_view',true);
toggleView('parity_view',true);
diff --git a/plugins/dynamix/include/DashboardApps.php b/plugins/dynamix/include/DashboardApps.php
index aa0e77683..79fb31f65 100644
--- a/plugins/dynamix/include/DashboardApps.php
+++ b/plugins/dynamix/include/DashboardApps.php
@@ -20,101 +20,97 @@ $display = $_POST['display'];
$menu = [];
if ($display=='icons' || $display=='docker') {
- echo " | ";
- if ($_POST['docker']) {
- $user_prefs = $dockerManPaths['user-prefs'];
- $DockerClient = new DockerClient();
- $DockerTemplates = new DockerTemplates();
- $containers = $DockerClient->getDockerContainers();
- $allInfo = $DockerTemplates->getAllInfo();
- if (file_exists($user_prefs)) {
- $prefs = parse_ini_file($user_prefs); $sort = [];
- foreach ($containers as $ct) $sort[] = array_search($ct['Name'],$prefs) ?? 999;
- array_multisort($sort,SORT_NUMERIC,$containers);
- }
- foreach ($containers as $ct) {
- $name = $ct['Name'];
- $id = $ct['Id'];
- $info = &$allInfo[$name];
- $running = $info['running'] ? 1:0;
- $paused = $info['paused'] ? 1:0;
- $is_autostart = $info['autostart'] ? 'true':'false';
- $updateStatus = $info['updated']=='true'||$info['updated']=='undef' ? 'true':'false';
- $template = $info['template'];
- $shell = $info['shell'];
- $webGui = html_entity_decode($info['url']);
- $support = html_entity_decode($info['Support']);
- $project = html_entity_decode($info['Project']);
- $menu[] = sprintf("addDockerContainerContext('%s','%s','%s',%s,%s,%s,%s,'%s','%s','%s','%s','%s');", addslashes($name), addslashes($ct['ImageId']), addslashes($template), $running, $paused, $updateStatus, $is_autostart, addslashes($webGui), $shell, $id, addslashes($support), addslashes($project));
- $shape = $running ? ($paused ? 'pause' : 'play') : 'square';
- $status = $running ? ($paused ? 'paused' : 'started') : 'stopped';
- $update = $updateStatus=='false' ? 'update' : '';
- $icon = $info['icon'] ?: '/plugins/dynamix.docker.manager/images/question.png';
- $image = substr($icon,-4)=='.png' ? " " : (substr($icon,0,5)=='icon-' ? "" : "");
- echo "$image$name $status";
- }
- $none = count($containers) ? "No running docker containers" : "No docker containers defined";
- echo "$none
";
- } else {
- echo "Docker service not running
";
+ $user_prefs = $dockerManPaths['user-prefs'];
+ $DockerClient = new DockerClient();
+ $DockerTemplates = new DockerTemplates();
+ $containers = $DockerClient->getDockerContainers();
+ $allInfo = $DockerTemplates->getAllInfo();
+ if (file_exists($user_prefs)) {
+ $prefs = parse_ini_file($user_prefs); $sort = [];
+ foreach ($containers as $ct) $sort[] = array_search($ct['Name'],$prefs) ?? 999;
+ array_multisort($sort,SORT_NUMERIC,$containers);
}
+ echo " |
| ";
+ foreach ($containers as $ct) {
+ $name = $ct['Name'];
+ $id = $ct['Id'];
+ $info = &$allInfo[$name];
+ $running = $info['running'] ? 1:0;
+ $paused = $info['paused'] ? 1:0;
+ $is_autostart = $info['autostart'] ? 'true':'false';
+ $updateStatus = $info['updated']=='true'||$info['updated']=='undef' ? 'true':'false';
+ $template = $info['template'];
+ $shell = $info['shell'];
+ $webGui = html_entity_decode($info['url']);
+ $support = html_entity_decode($info['Support']);
+ $project = html_entity_decode($info['Project']);
+ $menu[] = sprintf("addDockerContainerContext('%s','%s','%s',%s,%s,%s,%s,'%s','%s','%s','%s','%s');", addslashes($name), addslashes($ct['ImageId']), addslashes($template), $running, $paused, $updateStatus, $is_autostart, addslashes($webGui), $shell, $id, addslashes($support), addslashes($project));
+ $shape = $running ? ($paused ? 'pause' : 'play') : 'square';
+ $status = $running ? ($paused ? 'paused' : 'started') : 'stopped';
+ $color = $status=='started' ? 'green-text' : ($status=='paused' ? 'orange-text' : 'red-text');
+ $update = $updateStatus=='false' ? 'blue-text' : '';
+ $icon = $info['icon'] ?: '/plugins/dynamix.docker.manager/images/question.png';
+ $image = substr($icon,-4)=='.png' ? " " : (substr($icon,0,5)=='icon-' ? "" : "");
+ echo "$image$name $status";
+ }
+ $none = count($containers) ? "No running docker containers" : "No docker containers defined";
+ echo "$none
";
echo " | |
";
}
echo "\0";
if ($display=='icons' || $display=='vms') {
- echo " | ";
- if ($_POST['vm']) {
- $user_prefs = '/boot/config/plugins/dynamix.vm.manager/userprefs.cfg';
- $vms = $lv->get_domains();
- if (file_exists($user_prefs)) {
- $prefs = parse_ini_file($user_prefs); $sort = [];
- foreach ($vms as $vm) $sort[] = array_search($vm,$prefs) ?? 999;
- array_multisort($sort,SORT_NUMERIC,$vms);
- } else {
- natcasesort($vms);
- }
- foreach ($vms as $vm) {
- $res = $lv->get_domain_by_name($vm);
- $uuid = libvirt_domain_get_uuid_string($res);
- $dom = $lv->domain_get_info($res);
- $id = $lv->domain_get_id($res);
- $state = $lv->domain_state_translate($dom['state']);
- $vncport = $lv->domain_get_vnc_port($res);
- $vnc = '';
- if ($vncport > 0) {
- $wsport = $lv->domain_get_ws_port($res);
- $vnc = '/plugins/dynamix.vm.manager/vnc.html?autoconnect=true&host='.$_SERVER['HTTP_HOST'].'&port=&path=/wsproxy/'.$wsport.'/';
- } else {
- $vncport = ($vncport < 0) ? "auto" : "";
- }
- $template = $lv->_get_single_xpath_result($res, '//domain/metadata/*[local-name()=\'vmtemplate\']/@name');
- if (empty($template)) $template = 'Custom';
- $log = (is_file("/var/log/libvirt/qemu/$vm.log") ? "libvirt/qemu/$vm.log" : '');
- $menu[] = sprintf("addVMContext('%s','%s','%s','%s','%s','%s');", addslashes($vm), addslashes($uuid), addslashes($template), $state, addslashes($vnc), addslashes($log));
- $icon = $lv->domain_get_icon_url($res);
- switch ($state) {
- case 'running':
- $shape = 'play';
- $status = 'started';
- break;
- case 'paused':
- case 'pmsuspended':
- $shape = 'pause';
- $status = 'paused';
- break;
- default:
- $shape = 'square';
- $status = 'stopped';
- break;
- }
- $image = substr($icon,-4)=='.png' ? " " : (substr($icon,0,5)=='icon-' ? "" : "");
- echo "$image$vm $status";
- }
- $none = count($vms) ? "No running virtual machines" : "No virtual machines defined";
- echo "$none
";
+ $user_prefs = '/boot/config/plugins/dynamix.vm.manager/userprefs.cfg';
+ $vms = $lv->get_domains();
+ if (file_exists($user_prefs)) {
+ $prefs = parse_ini_file($user_prefs); $sort = [];
+ foreach ($vms as $vm) $sort[] = array_search($vm,$prefs) ?? 999;
+ array_multisort($sort,SORT_NUMERIC,$vms);
} else {
- echo "VM service not running
";
+ natcasesort($vms);
}
+ echo " |
| ";
+ foreach ($vms as $vm) {
+ $res = $lv->get_domain_by_name($vm);
+ $uuid = libvirt_domain_get_uuid_string($res);
+ $dom = $lv->domain_get_info($res);
+ $id = $lv->domain_get_id($res);
+ $state = $lv->domain_state_translate($dom['state']);
+ $vncport = $lv->domain_get_vnc_port($res);
+ $vnc = '';
+ if ($vncport > 0) {
+ $wsport = $lv->domain_get_ws_port($res);
+ $vnc = '/plugins/dynamix.vm.manager/vnc.html?autoconnect=true&host='.$_SERVER['HTTP_HOST'].'&port=&path=/wsproxy/'.$wsport.'/';
+ } else {
+ $vncport = ($vncport < 0) ? "auto" : "";
+ }
+ $template = $lv->_get_single_xpath_result($res, '//domain/metadata/*[local-name()=\'vmtemplate\']/@name');
+ if (empty($template)) $template = 'Custom';
+ $log = (is_file("/var/log/libvirt/qemu/$vm.log") ? "libvirt/qemu/$vm.log" : '');
+ $menu[] = sprintf("addVMContext('%s','%s','%s','%s','%s','%s');", addslashes($vm), addslashes($uuid), addslashes($template), $state, addslashes($vnc), addslashes($log));
+ $icon = $lv->domain_get_icon_url($res);
+ switch ($state) {
+ case 'running':
+ $shape = 'play';
+ $status = 'started';
+ $color = 'green-text';
+ break;
+ case 'paused':
+ case 'pmsuspended':
+ $shape = 'pause';
+ $status = 'paused';
+ $color = 'orange-text';
+ break;
+ default:
+ $shape = 'square';
+ $status = 'stopped';
+ $color = 'red-text';
+ break;
+ }
+ $image = substr($icon,-4)=='.png' ? " " : (substr($icon,0,5)=='icon-' ? "" : "");
+ echo "$image$vm $status";
+ }
+ $none = count($vms) ? "No running virtual machines" : "No virtual machines defined";
+ echo "$none
";
echo " | |
";
}
echo "\0";
diff --git a/plugins/dynamix/include/DefaultPageLayout.php b/plugins/dynamix/include/DefaultPageLayout.php
index bd2dc17b4..717797814 100644
--- a/plugins/dynamix/include/DefaultPageLayout.php
+++ b/plugins/dynamix/include/DefaultPageLayout.php
@@ -25,7 +25,7 @@ $themes2 = in_array($theme,['gray','azure']);
-
+
">
diff --git a/plugins/dynamix/styles/default-azure.css b/plugins/dynamix/styles/default-azure.css
index 7a5126d40..db6005647 100644
--- a/plugins/dynamix/styles/default-azure.css
+++ b/plugins/dynamix/styles/default-azure.css
@@ -1,8 +1,8 @@
html{font-family:clear-sans;font-size:62.5%;height:100%}
body{font-size:1.3rem;color:#606e7f;background-color:#e4e2e4;padding:0;margin:0;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}
-@media (max-width:1280px){#template{min-width:1280px;margin:0}}
-@media (min-width:1281px){#template{min-width:1280px;margin:0}}
-@media (min-width:1921px){#template{min-width:1280px;max-width:1920px;margin:0 auto}}
+@media (max-width:1280px){#template{min-width:1260px;max-width:1260px;margin:0}}
+@media (min-width:1281px){#template{min-width:1260px;margin:0}}
+@media (min-width:1921px){#template{min-width:1260px;max-width:1920px;margin:0 auto}}
img{border:none;text-decoration:none;vertical-align:middle}
p{text-align:left}
p.centered{text-align:left}
@@ -153,7 +153,7 @@ table.share_status.share tr td:last-child{width:4%;text-align:right;padding-righ
table.share_status.fixed tr>td+td{min-width:39px;font-size:1.1rem;text-align:center;padding:0}
table.share_status.table{margin-top:36px}
table.share_status.table tr>td{width:50%}
-table.share_status.dashboard{float:left;margin:6px 10px 20px 10px;border:1px solid #606e7f}
+table.share_status.dashboard{float:left;margin:6px 10px 14px 10px;border:1px solid #606e7f}
table.share_status.dashboard thead tr:first-child>td{line-height:5rem;font-size:1.6rem;font-weight:bold;letter-spacing:1.8px;border:none;padding-top:10px}
table.share_status.dashboard tbody tr>td{line-height:normal;padding-top:3px;padding-bottom:3px}
table.share_status.dashboard tbody tr{border-bottom:none}
@@ -173,8 +173,8 @@ table.share_status.dashboard td i[class^="icon-u-"]{font-size:inherit}
table.share_status.dashboard td span[class^="fa "]{font-size:1.6rem;margin-right:8px}
table.share_status.dashboard td i#mycase[class^="case-"]{font-size:128px}
table.share_status.dashboard td i#mycase[class^="fa "]{font-size:96px}
-table.share_status.dashboard td i.chevron{float:right;font-size:1.1rem!important;margin-top:-10px;margin-right:2px;cursor:pointer;color:#606e7f}
-table.share_status.dashboard td i.chevron.mt0{margin-top:0}
+table.share_status.dashboard td i.chevron{float:right;font-size:1.1rem!important;margin-top:0;margin-right:2px;cursor:pointer;color:#606e7f}
+table.share_status.dashboard td i.chevron.mt0{margin-top:14px}
table.share_status.dashboard td div.section{display:inline-block;vertical-align:top;margin-left:4px;font-size:1.2rem;font-weight:bold;text-transform:uppercase;letter-spacing:1px}
table.share_status.dashboard td div.section span{font-weight:normal;text-transform:none;letter-spacing:0}
table.share_status.dashboard td span.info{float:right;margin-right:20px;font-size:1.2rem;font-weight:normal;text-transform:none;letter-spacing:0}
@@ -256,10 +256,18 @@ span.three{margin-left:-23px}
span.tub{margin-right:8px;font-size:2.4rem;cursor:pointer}
span.score{font-size:1.1rem;color:#ffffff;position:absolute}
span#dropbox{background:none;line-height:6rem;margin-right:20px}
+span.outer{margin-bottom:20px;margin-right:20px}
+span.hand{cursor:pointer}
+span.outer.started>img,span.outer.started>i.img{opacity:1.0}
+span.outer.stopped>img,span.outer.stopped>i.img{opacity:0.3}
+span.outer.paused>img,span.outer.paused>i.img{opacity:0.6}
+span.inner{display:inline-block;vertical-align:top}
+span.state{font-size:1.1rem;margin-left:7px}
i.padlock{margin-right:8px;cursor:default;vertical-align:middle}
i.nolock{visibility:hidden;margin-right:8px;vertical-align:middle}
i.lock{margin-left:8px;cursor:default;vertical-align:middle}
i.orb{font-size:1.1rem;margin:0 8px 0 3px}
+img.img,i.img{width:32px;height:32px;margin-right:10px}
img.icon{margin:-3px 4px 0 0}
img.list{width:auto;max-width:48px;height:48px}
i.list{font-size:4rem;color:#606e7f}
diff --git a/plugins/dynamix/styles/default-black.css b/plugins/dynamix/styles/default-black.css
index 5a10d55a7..2f0848645 100644
--- a/plugins/dynamix/styles/default-black.css
+++ b/plugins/dynamix/styles/default-black.css
@@ -1,8 +1,8 @@
html{font-family:clear-sans;font-size:62.5%;height:100%}
body{font-size:1.3rem;color:#f2f2f2;background-color:#1c1b1b;padding:0;margin:0;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}
-@media (max-width:1280px){#template{min-width:1280px;margin:0}}
-@media (min-width:1281px){#template{min-width:1280px;margin:0 10px}}
-@media (min-width:1921px){#template{min-width:1280px;max-width:1920px;margin:0 auto}}
+@media (max-width:1280px){#template{min-width:1260px;max-width:1260px;margin:0}}
+@media (min-width:1281px){#template{min-width:1260px;margin:0 10px}}
+@media (min-width:1921px){#template{min-width:1260px;max-width:1920px;margin:0 auto}}
img{border:none;text-decoration:none;vertical-align:middle}
p{text-align:justify}
p.centered{text-align:left}
@@ -44,7 +44,7 @@ select.slot{min-width:44rem;max-width:44rem}
input.narrow{width:166px}
input.trim{width:76px;min-width:76px}
textarea{resize:none}
-#header{position:absolute;top:0;left:0;width:100%;min-width:1280px;height:91px;z-index:100;margin:0;color:#1c1b1b;background-color:#f2f2f2;background-size:100% 90px;background-repeat:no-repeat}
+#header{position:absolute;top:0;left:0;width:100%;min-width:1260px;height:91px;z-index:100;margin:0;color:#1c1b1b;background-color:#f2f2f2;background-size:100% 90px;background-repeat:no-repeat}
#header .logo{float:left;margin-left:10px;color:#e22828;width:160px;text-align:center}
#header .logo svg{width:160px;display:block;margin:25px 50px 8px 0}
#header .block{margin:0;float:right;text-align:right;background-color:rgba(242,242,242,0.3);padding:10px 12px}
@@ -57,7 +57,7 @@ textarea{resize:none}
#title span.right{font-size:1.4rem;padding-top:2px;padding-right:10px;float:right}
#title span img{padding-right:4px}
#title.shift{margin-top:-30px}
-#menu{position:absolute;top:90px;left:0;width:100%;min-width:1280px;height:4rem;line-height:4rem;padding:0;margin:0;font-size:1.2rem;background-color:#f2f2f2;z-index:101}
+#menu{position:absolute;top:90px;left:0;width:100%;min-width:1260px;height:4rem;line-height:4rem;padding:0;margin:0;font-size:1.2rem;background-color:#f2f2f2;z-index:101}
#nav-block{overflow:hidden;height:4rem;letter-spacing:1.8px}
#nav-left{float:left}
#nav-right{float:right}
@@ -150,7 +150,7 @@ table.share_status.share tr td:last-child{width:4%;text-align:right;padding-righ
table.share_status.fixed tr>td+td{min-width:39px;font-size:1.1rem;text-align:center;padding:0}
table.share_status.table{margin-top:36px}
table.share_status.table tr>td{width:50%}
-table.share_status.dashboard{float:left;margin:6px 10px 20px 10px;border:1px solid #2b2b2b}
+table.share_status.dashboard{float:left;margin:6px 10px 14px 10px;border:1px solid #2b2b2b}
table.share_status.dashboard thead tr:last-child{border-bottom:none}
table.share_status.dashboard thead tr:first-child>td{background-color:transparent;height:4rem;line-height:4rem;font-size:1.6rem;font-weight:bold;letter-spacing:1.8px;text-transform:capitalize;vertical-align:middle}
table.share_status.dashboard tbody tr:nth-child(even){background-color:transparent}
@@ -174,8 +174,8 @@ table.share_status.dashboard td i[class^="icon-u-"]{font-size:inherit}
table.share_status.dashboard td span[class^="fa "]{font-size:1.6rem;margin-right:8px}
table.share_status.dashboard td i#mycase[class^="case-"]{font-size:128px}
table.share_status.dashboard td i#mycase[class^="fa "]{font-size:96px}
-table.share_status.dashboard td i.chevron{float:right;font-size:1.1rem!important;margin-top:-10px;margin-right:2px;cursor:pointer;color:#f2f2f2}
-table.share_status.dashboard td i.chevron.mt0{margin-top:0}
+table.share_status.dashboard td i.chevron{float:right;font-size:1.1rem!important;margin-top:0;margin-right:2px;cursor:pointer;color:#f2f2f2}
+table.share_status.dashboard td i.chevron.mt0{margin-top:14px}
table.share_status.dashboard td div.section{display:inline-block;vertical-align:top;margin-left:4px;font-size:1.2rem;font-weight:bold;text-transform:uppercase;letter-spacing:1px}
table.share_status.dashboard td div.section span{font-weight:normal;text-transform:none;letter-spacing:0}
table.share_status.dashboard td span.info{float:right;margin-right:20px;font-size:1.2rem;font-weight:normal;text-transform:none;letter-spacing:0}
@@ -241,10 +241,18 @@ span.two{margin-left:-20px}
span.three{margin-left:-23px}
span.tub{margin-right:8px;font-size:2.4rem;cursor:pointer}
span.score{font-size:1.2rem;color:#1c1b1b;position:absolute}
+span.outer{margin-bottom:20px;margin-right:20px}
+span.hand{cursor:pointer}
+span.outer.started>img,span.outer.started>i.img{opacity:1.0}
+span.outer.stopped>img,span.outer.stopped>i.img{opacity:0.3}
+span.outer.paused>img,span.outer.paused>i.img{opacity:0.6}
+span.inner{display:inline-block;vertical-align:top}
+span.state{font-size:1.1rem;margin-left:7px}
i.padlock{margin-right:8px;cursor:default;vertical-align:middle}
i.nolock{visibility:hidden;margin-right:8px;vertical-align:middle}
i.lock{margin-left:8px;cursor:default;vertical-align:middle}
i.orb{font-size:1.1rem;margin:0 8px 0 3px}
+img.img,i.img{width:32px;height:32px;margin-right:10px}
img.icon{margin:-3px 4px 0 0}
img.list{width:auto;max-width:48px;height:48px}
i.list{font-size:4rem;color:#f2f2f2}
diff --git a/plugins/dynamix/styles/default-gray.css b/plugins/dynamix/styles/default-gray.css
index 58f16251d..3a4b683b1 100644
--- a/plugins/dynamix/styles/default-gray.css
+++ b/plugins/dynamix/styles/default-gray.css
@@ -1,8 +1,8 @@
html{font-family:clear-sans;font-size:62.5%;height:100%}
body{font-size:1.3rem;color:#606e7f;background-color:#1b1d1b;padding:0;margin:0;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}
-@media (max-width:1280px){#template{min-width:1280px;margin:0}}
-@media (min-width:1281px){#template{min-width:1280px;margin:0}}
-@media (min-width:1921px){#template{min-width:1280px;max-width:1920px;margin:0 auto}}
+@media (max-width:1280px){#template{min-width:1260px;max-width:1260px;margin:0}}
+@media (min-width:1281px){#template{min-width:1260px;margin:0}}
+@media (min-width:1921px){#template{min-width:1260px;max-width:1920px;margin:0 auto}}
img{border:none;text-decoration:none;vertical-align:middle}
p{text-align:left}
p.centered{text-align:left}
@@ -153,7 +153,7 @@ table.share_status.share tr td:last-child{width:4%;text-align:right;padding-righ
table.share_status.fixed tr>td+td{min-width:39px;font-size:1.1rem;text-align:center;padding:0}
table.share_status.table{margin-top:36px}
table.share_status.table tr>td{width:50%}
-table.share_status.dashboard{float:left;margin:6px 10px 20px 10px;border:1px solid #606e7f}
+table.share_status.dashboard{float:left;margin:6px 10px 14px 10px;border:1px solid #606e7f}
table.share_status.dashboard thead tr:first-child>td{line-height:5rem;font-size:1.6rem;font-weight:bold;letter-spacing:1.8px;border:none;padding-top:10px}
table.share_status.dashboard tbody tr>td{line-height:normal;padding-top:3px;padding-bottom:3px}
table.share_status.dashboard tbody tr{border-bottom:none}
@@ -173,8 +173,8 @@ table.share_status.dashboard td i[class^="icon-u-"]{font-size:inherit}
table.share_status.dashboard td span[class^="fa "]{font-size:1.6rem;margin-right:8px}
table.share_status.dashboard td i#mycase[class^="case-"]{font-size:128px}
table.share_status.dashboard td i#mycase[class^="fa "]{font-size:96px}
-table.share_status.dashboard td i.chevron{float:right;font-size:1.1rem!important;margin-top:-10px;margin-right:2px;cursor:pointer;color:#606e7f}
-table.share_status.dashboard td i.chevron.mt0{margin-top:0}
+table.share_status.dashboard td i.chevron{float:right;font-size:1.1rem!important;margin-top:0;margin-right:2px;cursor:pointer;color:#606e7f}
+table.share_status.dashboard td i.chevron.mt0{margin-top:14px}
table.share_status.dashboard td div.section{display:inline-block;vertical-align:top;margin-left:4px;font-size:1.2rem;font-weight:bold;text-transform:uppercase;letter-spacing:1px}
table.share_status.dashboard td div.section span{font-weight:normal;text-transform:none;letter-spacing:0}
table.share_status.dashboard td span.info{float:right;margin-right:20px;font-size:1.2rem;font-weight:normal;text-transform:none;letter-spacing:0}
@@ -256,10 +256,18 @@ span.three{margin-left:-23px}
span.tub{margin-right:8px;font-size:2.4rem;cursor:pointer}
span.score{font-size:1.1rem;color:#ffffff;position:absolute}
span#dropbox{background:none;line-height:6rem;margin-right:20px}
+span.outer{margin-bottom:20px;margin-right:20px}
+span.hand{cursor:pointer}
+span.outer.started>img,span.outer.started>i.img{opacity:1.0}
+span.outer.stopped>img,span.outer.stopped>i.img{opacity:0.3}
+span.outer.paused>img,span.outer.paused>i.img{opacity:0.6}
+span.inner{display:inline-block;vertical-align:top}
+span.state{font-size:1.1rem;margin-left:7px}
i.padlock{margin-right:8px;cursor:default;vertical-align:middle}
i.nolock{visibility:hidden;margin-right:8px;vertical-align:middle}
i.lock{margin-left:8px;cursor:default;vertical-align:middle}
i.orb{font-size:1.1rem;margin:0 8px 0 3px}
+img.img,i.img{width:32px;height:32px;margin-right:10px}
img.icon{margin:-3px 4px 0 0}
img.list{width:auto;max-width:48px;height:48px}
i.list{font-size:4rem;color:#606e7f}
diff --git a/plugins/dynamix/styles/default-white.css b/plugins/dynamix/styles/default-white.css
index 3320cc267..96066e6ea 100644
--- a/plugins/dynamix/styles/default-white.css
+++ b/plugins/dynamix/styles/default-white.css
@@ -1,8 +1,8 @@
html{font-family:clear-sans;font-size:62.5%;height:100%}
body{font-size:1.3rem;color:#1c1b1b;background-color:#f2f2f2;padding:0;margin:0;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}
-@media (max-width:1280px){#template{min-width:1280px;margin:0}}
-@media (min-width:1281px){#template{min-width:1280px;margin:0 10px}}
-@media (min-width:1921px){#template{min-width:1280px;max-width:1920px;margin:0 auto}}
+@media (max-width:1280px){#template{min-width:1260px;max-width:1260px;margin:0}}
+@media (min-width:1281px){#template{min-width:1260px;margin:0 10px}}
+@media (min-width:1921px){#template{min-width:1260px;max-width:1920px;margin:0 auto}}
img{border:none;text-decoration:none;vertical-align:middle}
p{text-align:justify}
p.centered{text-align:left}
@@ -44,7 +44,7 @@ select.slot{min-width:44rem;max-width:44rem}
input.narrow{width:166px}
input.trim{width:76px;min-width:76px}
textarea{resize:none}
-#header{position:absolute;top:0;left:0;width:100%;min-width:1280px;height:91px;z-index:100;margin:0;color:#f2f2f2;background-color:#1c1b1b;background-size:100% 90px;background-repeat:no-repeat}
+#header{position:absolute;top:0;left:0;width:100%;min-width:1260px;height:91px;z-index:100;margin:0;color:#f2f2f2;background-color:#1c1b1b;background-size:100% 90px;background-repeat:no-repeat}
#header .logo{float:left;margin-left:10px;color:#e22828;width:160px;text-align:center}
#header .logo svg{width:160px;display:block;margin:25px 50px 8px 0}
#header .block{margin:0;float:right;text-align:right;background-color:rgba(28,27,27,0.3);padding:10px 12px}
@@ -57,7 +57,7 @@ textarea{resize:none}
#title span.right{font-size:1.4rem;padding-top:2px;padding-right:10px;float:right}
#title span img{padding-right:4px}
#title.shift{margin-top:-30px}
-#menu{position:absolute;top:90px;left:0;width:100%;min-width:1280px;height:4rem;line-height:4rem;padding:0;margin:0;font-size:1.2rem;background-color:#1c1b1b;z-index:101}
+#menu{position:absolute;top:90px;left:0;width:100%;min-width:1260px;height:4rem;line-height:4rem;padding:0;margin:0;font-size:1.2rem;background-color:#1c1b1b;z-index:101}
#nav-block{overflow:hidden;height:4rem;letter-spacing:1.8px}
#nav-left{float:left}
#nav-right{float:right}
@@ -150,7 +150,7 @@ table.share_status.share tr td:last-child{width:4%;text-align:right;padding-righ
table.share_status.fixed tr>td+td{min-width:39px;font-size:1.1rem;text-align:center;padding:0}
table.share_status.table{margin-top:36px}
table.share_status.table tr>td{width:50%}
-table.share_status.dashboard{float:left;margin:6px 10px 20px 10px;border:1px solid #e3e3e3}
+table.share_status.dashboard{float:left;margin:6px 10px 14px 10px;border:1px solid #e3e3e3}
table.share_status.dashboard thead tr:last-child{border-bottom:none}
table.share_status.dashboard thead tr:first-child>td{background-color:transparent;height:4rem;line-height:4rem;font-size:1.6rem;font-weight:bold;letter-spacing:1.8px;text-transform:capitalize;vertical-align:middle}
table.share_status.dashboard tbody tr:nth-child(even){background-color:transparent}
@@ -174,8 +174,8 @@ table.share_status.dashboard td i[class^="icon-u-"]{font-size:inherit}
table.share_status.dashboard td span[class^="fa "]{font-size:1.6rem;margin-right:8px}
table.share_status.dashboard td i#mycase[class^="case-"]{font-size:128px}
table.share_status.dashboard td i#mycase[class^="fa "]{font-size:96px}
-table.share_status.dashboard td i.chevron{float:right;font-size:1.1rem!important;margin-top:-10px;margin-right:2px;cursor:pointer;color:#1c1b1b}
-table.share_status.dashboard td i.chevron.mt0{margin-top:0}
+table.share_status.dashboard td i.chevron{float:right;font-size:1.1rem!important;margin-top:0;margin-right:2px;cursor:pointer;color:#1c1b1b}
+table.share_status.dashboard td i.chevron.mt0{margin-top:14px}
table.share_status.dashboard td div.section{display:inline-block;vertical-align:top;margin-left:4px;font-size:1.2rem;font-weight:bold;text-transform:uppercase;letter-spacing:1px}
table.share_status.dashboard td div.section span{font-weight:normal;text-transform:none;letter-spacing:0}
table.share_status.dashboard td span.info{float:right;margin-right:20px;font-size:1.2rem;font-weight:normal;text-transform:none;letter-spacing:0}
@@ -241,10 +241,18 @@ span.two{margin-left:-20px}
span.three{margin-left:-23px}
span.tub{margin-right:8px;font-size:2.4rem;cursor:pointer}
span.score{font-size:1.2rem;color:#1c1b1b;position:absolute}
+span.outer{margin-bottom:20px;margin-right:20px}
+span.hand{cursor:pointer}
+span.outer.started>img,span.outer.started>i.img{opacity:1.0}
+span.outer.stopped>img,span.outer.stopped>i.img{opacity:0.3}
+span.outer.paused>img,span.outer.paused>i.img{opacity:0.6}
+span.inner{display:inline-block;vertical-align:top}
+span.state{font-size:1.1rem;margin-left:7px}
i.padlock{margin-right:8px;cursor:default;vertical-align:middle}
i.nolock{visibility:hidden;margin-right:8px;vertical-align:middle}
i.lock{margin-left:8px;cursor:default;vertical-align:middle}
i.orb{font-size:1.1rem;margin:0 8px 0 3px}
+img.img,i.img{width:32px;height:32px;margin-right:10px}
img.icon{margin:-3px 4px 0 0}
img.list{width:auto;max-width:48px;height:48px}
i.list{font-size:4rem;color:#1c1b1b}
diff --git a/plugins/dynamix/styles/jquery.switchbutton.css b/plugins/dynamix/styles/jquery.switchbutton.css
index 4b970aa94..7dca7c25c 100644
--- a/plugins/dynamix/styles/jquery.switchbutton.css
+++ b/plugins/dynamix/styles/jquery.switchbutton.css
@@ -1,5 +1,3 @@
-.switch-button-label{float:left;font-size:1.4rem;cursor:pointer;}
-.switch-button-label.off{color:#adadad;}
-.switch-button-label.on{color:#0088CC;}
-.switch-button-background{float:left;position:relative;background:#ccc;border:1px solid #aaa;margin:1px 10px;border-radius:4px;cursor:pointer;}
-.switch-button-button{position:absolute;left:-1px;top:-1px;background:#FAFAFA;border:1px solid #aaa;border-radius:4px;}
\ No newline at end of file
+.switch-button-label{float:left;font-size:1.1rem;text-transform:uppercase;letter-spacing:1px;cursor:pointer}
+.switch-button-background{float:left;position:relative;background:#ccc;border:1px solid #aaa;margin:1px 10px;border-radius:4px;cursor:pointer}
+.switch-button-button{position:absolute;left:-1px;top:-1px;background:#fafafa;border:1px solid #aaa;border-radius:4px}
\ No newline at end of file