diff --git a/plugins/dynamix/ArrayOperation.page b/plugins/dynamix/ArrayOperation.page index 451377dcc..95900ed18 100644 --- a/plugins/dynamix/ArrayOperation.page +++ b/plugins/dynamix/ArrayOperation.page @@ -140,7 +140,7 @@ toggle_diskio(true); 0):?> Unmountable disk present:
-".my_disk($disk['name'])." • ".my_id($disk['id'])." (".$disk['device'].")";?> +".my_disk($disk['name'])." • ".my_id($disk['id'])." (".$disk['device'].")";?> Format will create a file system in all Unmountable disks, discarding all data currently on those disks.
Yes I want to do this diff --git a/plugins/dynamix/DashStats.page b/plugins/dynamix/DashStats.page index f3f9fb9ca..c41a69b59 100644 --- a/plugins/dynamix/DashStats.page +++ b/plugins/dynamix/DashStats.page @@ -131,6 +131,7 @@ echo "Array Status".implode('',$row0); ?> + @@ -152,6 +153,7 @@ echo "Array Status".implode('',$row0); ?> + diff --git a/plugins/dynamix/DeviceInfo.page b/plugins/dynamix/DeviceInfo.page index 089a94521..3389d56eb 100644 --- a/plugins/dynamix/DeviceInfo.page +++ b/plugins/dynamix/DeviceInfo.page @@ -23,6 +23,19 @@ function displayTemp($temp) { global $display; return $display['unit']=='F' ? round($temp*9/5)+32 : $temp; } +function luks_status($luksState) { + switch ($luksState) { + case 0: return 'Not encrypted'; break; + case 1: return 'Encrypted'; break; + case 2: return 'Missing encryption key'; break; + case 3: return 'Wrong encryption key'; break; + default: return 'Unknown error'; break; + } +} +function maintenance_mode() { + global $var; + return ($var['fsState']=="Started" && $var['startMode']=="Maintenance") ? '' : 'disabled'; +} ?> +
+ + + +Encryption key: +:   + +> Shows the path and name of the current keyfile, if present. +> +> This keyfile is read upon array start and is used to encrypt/decrypt content of devices which have encryption enabled. + + +Delete +: + +> The keyfile can be deleted in order to create a new encryption key. This however will invalidate all existing encrypted content. +> Devices need to be reformatted and content is permanently lost when the encryption key is changed. +> +> For the really 'paranoid'. It is allowed to delete the keyfile *after* the array is started and re-enter the keyfile *while* the array is stopped. +> This ensures there is no *clear* encryption key present on the system when the array is online. + + +Encryption input: +: + +> Select manual input or file input of the encryption key. Note that the encryption key needs to be re-entered each time the system is rebooted. +> +> The array will **not** start automatically when encrypted volumes are present. + +
+Enter passphrase: +: >show passphrase + +> Enter a secure passphrase as encryption key. **Memorize** this passphrase, if lost device content can not be recovered. + +
+ + +: Array must be Stopped to change + +
diff --git a/plugins/dynamix/icons/encryptionsettings.png b/plugins/dynamix/icons/encryptionsettings.png new file mode 100644 index 000000000..201b3b2d4 Binary files /dev/null and b/plugins/dynamix/icons/encryptionsettings.png differ diff --git a/plugins/dynamix/images/encryption-settings.png b/plugins/dynamix/images/encryption-settings.png new file mode 100644 index 000000000..6c3882f83 Binary files /dev/null and b/plugins/dynamix/images/encryption-settings.png differ diff --git a/plugins/dynamix/include/CryptoBenchmark.php b/plugins/dynamix/include/CryptoBenchmark.php new file mode 100644 index 000000000..84d108256 --- /dev/null +++ b/plugins/dynamix/include/CryptoBenchmark.php @@ -0,0 +1,42 @@ + + + + +Benchmark + + + + + + + + + + +

+
+
diff --git a/plugins/dynamix/include/DashUpdate.php b/plugins/dynamix/include/DashUpdate.php
index a1ef5fb0d..eeac4c4bd 100644
--- a/plugins/dynamix/include/DashUpdate.php
+++ b/plugins/dynamix/include/DashUpdate.php
@@ -11,7 +11,7 @@
  */
 ?>
 '); my_insert($row1[0],'Active');
-  $row2 = array_fill(0,31,''); my_insert($row2[0],'Inactive');
-  $row3 = array_fill(0,31,''); my_insert($row3[0],'Unassigned');
-  $row4 = array_fill(0,31,''); my_insert($row4[0],'Faulty');
-  $row5 = array_fill(0,31,''); my_insert($row5[0],'Heat alarm');
-  $row6 = array_fill(0,31,''); my_insert($row6[0],'SMART status');
-  $row7 = array_fill(0,31,''); my_insert($row7[0],'Utilization');
-  $funcRenderRow = function($n,$disk) use (&$row1,&$row2,&$row3,&$row4,&$row5,&$row6,&$row7,$path) {
+  $row1 = array_fill(0,31,''); my_insert($row1[0],'Encrypted');
+  $row2 = array_fill(0,31,''); my_insert($row2[0],'Active');
+  $row3 = array_fill(0,31,''); my_insert($row3[0],'Inactive');
+  $row4 = array_fill(0,31,''); my_insert($row4[0],'Unassigned');
+  $row5 = array_fill(0,31,''); my_insert($row5[0],'Faulty');
+  $row6 = array_fill(0,31,''); my_insert($row6[0],'Heat alarm');
+  $row7 = array_fill(0,31,''); my_insert($row7[0],'SMART status');
+  $row8 = array_fill(0,31,''); my_insert($row8[0],'Utilization');
+  $funcRenderRow = function($n,$disk) use (&$row1,&$row2,&$row3,&$row4,&$row5,&$row6,&$row7,&$row8,$path) {
     if ($n>0) {
+      if (isset($disk['luksState'])) {
+        switch ($disk['luksState']) {
+          case 0: $luks = ""; break;
+          case 1: $luks = ""; break;
+          case 2: $luks = ""; break;
+          case 3: $luks = ""; break;
+         default: $luks = ""; break;
+        }
+      } else $luks = "";
+      my_insert($row1[$n],$luks);
       $state = $disk['color'];
       switch ($state) {
       case 'grey-off':
       break; //ignore
       case 'green-on':
-        my_insert($row1[$n],"");
+        my_insert($row2[$n],"");
       break;
       case 'green-blink':
-        my_insert($row2[$n],"");
+        my_insert($row3[$n],"");
       break;
       case 'blue-on':
       case 'blue-blink':
-        my_insert($row3[$n],"");
+        my_insert($row4[$n],"");
       break;
       default:
-        my_insert($row4[$n],"");
+        my_insert($row5[$n],"");
       break;}
       $temp = $disk['temp'];
       $hot  = strlen($disk['hotTemp']) ? $disk['hotTemp'] : $_POST['hot'];
       $max  = strlen($disk['maxTemp']) ? $disk['maxTemp'] : $_POST['max'];
       $heat = $temp>=$max && $max>0 ? 'max' : ($temp>=$hot && $hot>0 ? 'hot' : '');
       if ($heat)
-        my_insert($row5[$n],"");
+        my_insert($row6[$n],"");
       else
-        if (!strpos($state,'blink') && $temp>0) my_insert($row5[$n],"".my_temp($temp,$_POST['unit'])."");
-      if ($disk['device'] && !strpos($state,'blink')) my_smart($row6[$n],$disk['name'],'Device');
-      my_usage($row7[$n],($disk['type']!='Parity' && $disk['fsStatus']=='Mounted')?(round((1-$disk['fsFree']/$disk['fsSize'])*100).'%'):'');
+        if (!strpos($state,'blink') && $temp>0) my_insert($row6[$n],"".my_temp($temp,$_POST['unit'])."");
+      if ($disk['device'] && !strpos($state,'blink')) my_smart($row7[$n],$disk['name'],'Device');
+      my_usage($row8[$n],($disk['type']!='Parity' && $disk['fsStatus']=='Mounted')?(round((1-$disk['fsFree']/$disk['fsSize'])*100).'%'):'');
     }
   };
   foreach ($disks as $disk) if ($disk['type']=='Parity') $funcRenderRow($i++,$disk);
@@ -125,7 +136,7 @@ case 'disk':
       $device = $dev['device'];
       $state = exec("hdparm -C ".escapeshellarg("/dev/$device")."|grep -Po active") ? 'blue-on' : 'blue-blink';
       if ($state=='blue-on') my_smart($row6[$i],$device,'New');
-      my_insert($row3[$i++],"");
+      my_insert($row4[$i++],"");
     }
   }
   echo "".implode('',$row1)."";
@@ -135,21 +146,23 @@ case 'disk':
   echo "".implode('',$row5)."";
   echo "".implode('',$row6)."";
   echo "".implode('',$row7)."";
+  echo "".implode('',$row8)."";
   if ($slots > 30) {
     echo '#'; $i = 1;
-    $row1 = array_fill(0,31,''); my_insert($row1[0],'Active');
-    $row2 = array_fill(0,31,''); my_insert($row2[0],'Inactive');
-    $row3 = array_fill(0,31,''); my_insert($row3[0],'Unassigned');
-    $row4 = array_fill(0,31,''); my_insert($row4[0],'Faulty');
-    $row5 = array_fill(0,31,''); my_insert($row5[0],'Heat alarm');
-    $row6 = array_fill(0,31,''); my_insert($row6[0],'SMART status');
-    $row7 = array_fill(0,31,''); my_insert($row7[0],'Utilization');
+    $row1 = array_fill(0,31,''); my_insert($row1[0],'Encrypted');
+    $row2 = array_fill(0,31,''); my_insert($row2[0],'Active');
+    $row3 = array_fill(0,31,''); my_insert($row3[0],'Inactive');
+    $row4 = array_fill(0,31,''); my_insert($row4[0],'Unassigned');
+    $row5 = array_fill(0,31,''); my_insert($row5[0],'Faulty');
+    $row6 = array_fill(0,31,''); my_insert($row6[0],'Heat alarm');
+    $row7 = array_fill(0,31,''); my_insert($row7[0],'SMART status');
+    $row8 = array_fill(0,31,''); my_insert($row8[0],'Utilization');
     foreach ($disks as $disk) if ($disk['type']=='Cache') $funcRenderRow($i++,$disk);
     foreach ($devs as $dev) {
       $device = $dev['device'];
       $state = exec("hdparm -C ".escapeshellarg("/dev/$device")."|grep -Po active") ? 'blue-on' : 'blue-blink';
       if ($state=='blue-on') my_smart($row6[$i],$device,'New');
-      my_insert($row3[$i++],"");
+      my_insert($row4[$i++],"");
     }
     echo "".implode('',$row1)."";
     echo "".implode('',$row2)."";
@@ -158,6 +171,7 @@ case 'disk':
     echo "".implode('',$row5)."";
     echo "".implode('',$row6)."";
     echo "".implode('',$row7)."";
+    echo "".implode('',$row8)."";
   }
 break;
 case 'sys':
diff --git a/plugins/dynamix/include/DeviceList.php b/plugins/dynamix/include/DeviceList.php
index e5c8bd428..c1a7a3a78 100644
--- a/plugins/dynamix/include/DeviceList.php
+++ b/plugins/dynamix/include/DeviceList.php
@@ -34,7 +34,7 @@ function in_parity_log($log,$timestamp) {
   }
   return !empty($line);
 }
-function device_info(&$disk) {
+function device_info(&$disk,$online) {
   global $path, $var;
   $name = $disk['name'];
   $fancyname = $disk['type']=='New' ? $name : my_disk($name);
@@ -57,15 +57,20 @@ function device_info(&$disk) {
     case 'grey-off': $help = 'Device not present'; break;
   }
   $status = "$ctrl$help";
-  $link = strpos($disk['status'], 'DISK_NP')===false ? "".$fancyname."" : $fancyname;
-  return $status.$link;
+  $link = (strpos($disk['status'], 'DISK_NP')===false || $disk['name']=="cache") ? "".$fancyname."" : $fancyname;
+  switch ($disk['luksState']) {
+    case 0: $luks = ""; break;
+    case 1: $luks = ""; break;
+    case 2: $luks = ""; break;
+    case 3: $luks = ""; break;
+   default: $luks = ""; break;
+  }
+  return $status.$link.$luks;
 }
 function device_browse(&$disk) {
   global $path;
-  if ($disk['fsStatus']=='Mounted') {
-    $dir = $disk['name']=='flash' ? "/boot" : "/mnt/{$disk['name']}";
-    return "";
-  }
+  $dir = $disk['name']=='flash' ? "/boot" : "/mnt/{$disk['name']}";
+  return "";
 }
 function device_desc(&$disk) {
   global $var;
@@ -85,7 +90,10 @@ function assignment(&$disk) {
     $out .= "";
   } else
     $out .= "";
-  foreach ($devs as $dev) {$out .= "";}
+  if ($disk['type']=="Cache")
+    foreach ($devs as $dev) {$out .= "";}
+  else
+    foreach ($devs as $dev) if ($dev['tag']==0) {$out .= "";}
   return "$out";
 }
 function fs_info(&$disk) {
@@ -94,7 +102,7 @@ function fs_info(&$disk) {
     echo "";
     return;
   } elseif ($disk['fsStatus']=='Mounted') {
-    echo "{$disk['fsType']}";
+    echo "".str_replace('luks:','',$disk['fsType'])."";
     echo "".my_scale($disk['fsSize']*1024,$unit)." $unit";
     if ($display['text']%10==0) {
       echo "".my_scale($disk['fsUsed']*1024,$unit)." $unit";
@@ -108,9 +116,9 @@ function fs_info(&$disk) {
       $free = $disk['fsSize'] ? round(100*$disk['fsFree']/$disk['fsSize']) : 0;
       echo "
".my_scale($disk['fsFree']*1024,$unit)." $unit
"; } + echo "".device_browse($disk).""; } else - echo "{$disk['fsStatus']}"; - echo "".device_browse($disk).""; + echo "".str_replace('luks:','',$disk['fsType'])."{$disk['fsStatus']}"; } function my_diskio($data) { return my_scale($data,$unit,1)." $unit/s"; @@ -120,9 +128,8 @@ function array_offline(&$disk,$w) { echo ""; switch ($disk['status']) { case 'DISK_NP': - case 'DISK_OK_NP': case 'DISK_NP_DSBL': - echo "".device_info($disk).""; + echo "".device_info($disk,false).""; echo "".assignment($disk).""; echo ""; break; @@ -132,18 +139,18 @@ function array_offline(&$disk,$w) { case 'DISK_DSBL': case 'DISK_DSBL_NEW': case 'DISK_NEW': - echo "".device_info($disk).""; + echo "".device_info($disk,false).""; echo "".assignment($disk).""; echo "".my_temp($disk['temp']).""; echo "$warning"; break; case 'DISK_NP_MISSING': - echo "".device_info($disk)."
Missing"; + echo "".device_info($disk,false)."
Missing"; echo "".assignment($disk)."{$disk['idSb']} - ".my_scale($disk['sizeSb']*1024,$unit)." $unit"; echo ""; break; case 'DISK_WRONG': - echo "".device_info($disk)."
Wrong"; + echo "".device_info($disk,false)."
Wrong"; echo "".assignment($disk)."{$disk['idSb']} - ".my_scale($disk['sizeSb']*1024,$unit)." $unit"; echo "".my_temp($disk['temp']).""; echo "$warning"; @@ -173,21 +180,22 @@ function array_online(&$disk) { echo ""; switch ($disk['status']) { case 'DISK_NP': -// Suppress empty slots to keep device list short (make this configurable?) -// echo "".device_info($disk).""; -// echo "Not installed"; -// echo ""; + if ($disk['name']=="cache") { + echo "".device_info($disk,true).""; + echo "Not installed"; + echo ""; + fs_info($disk); + } break; - case 'DISK_OK_NP': case 'DISK_NP_DSBL': - echo "".device_info($disk).""; + echo "".device_info($disk,true).""; echo "Not installed"; echo ""; fs_info($disk); break; case 'DISK_DSBL': default: - echo "".device_info($disk).""; + echo "".device_info($disk,true).""; echo "".device_desc($disk).""; echo "".my_temp($disk['temp']).""; echo "".my_diskio($data[0])."".my_number($disk['numReads']).""; @@ -295,7 +303,7 @@ case 'flash': $data = $diskio ? explode(' ',$diskio[$disk['device']]) : []; $disk['fsUsed'] = $disk['fsSize']-$disk['fsFree']; echo ""; - echo "".device_info($disk).""; + echo "".device_info($disk,true).""; echo "".device_desc($disk).""; echo "*"; echo "".my_diskio($data[0])."".my_number($disk['numReads']).""; @@ -322,7 +330,7 @@ case 'open': $disk['color'] = read_disk($dev,'color'); $disk['temp'] = read_disk($dev,'temp'); echo ""; - echo "".device_info($disk).""; + echo "".device_info($disk,true).""; echo "".device_desc($disk).""; echo "".my_temp($disk['temp']).""; echo "".my_diskio($data[0])."".my_number($data[2]).""; diff --git a/plugins/dynamix/include/DiskList.php b/plugins/dynamix/include/DiskList.php index 15e0b4fc0..aaebd3e45 100644 --- a/plugins/dynamix/include/DiskList.php +++ b/plugins/dynamix/include/DiskList.php @@ -71,8 +71,14 @@ foreach ($disks as $name => $disk) { case 'green-on': $help = 'All files protected'; break; case 'yellow-on': $help = 'All files unprotected'; break; } + switch ($disk['luksState']) { + case 0: $luks = ""; break; + case 1: $luks = ""; break; + case 2: $luks = ""; break; + default: $luks = ""; break; + } echo ""; - echo "$help$name"; + echo "$help$name$luks"; echo "{$disk['comment']}"; echo "".disk_share_settings($var['shareSMBEnabled'], $sec[$name]).""; echo "".disk_share_settings($var['shareNFSEnabled'], $sec_nfs[$name]).""; diff --git a/plugins/dynamix/include/KeyUpload.php b/plugins/dynamix/include/KeyUpload.php new file mode 100644 index 000000000..c82fb4d50 --- /dev/null +++ b/plugins/dynamix/include/KeyUpload.php @@ -0,0 +1,27 @@ + + diff --git a/plugins/dynamix/include/ShareList.php b/plugins/dynamix/include/ShareList.php index cc4840423..93bcd60fc 100644 --- a/plugins/dynamix/include/ShareList.php +++ b/plugins/dynamix/include/ShareList.php @@ -75,8 +75,14 @@ foreach ($shares as $name => $share) { case 'green-on': $help = 'All files protected'; break; case 'yellow-on': $help = 'Some or all files unprotected'; break; } + switch ($share['luksStatus']) { + case 0: $luks = ""; break; + case 1: $luks = ""; break; + case 2: $luks = ""; break; + default: $luks = ""; break; + } echo ""; - echo "$help$name"; + echo "$help$name$luks"; echo "{$share['comment']}"; echo "".user_share_settings($var['shareSMBEnabled'], $sec[$name]).""; echo "".user_share_settings($var['shareNFSEnabled'], $sec_nfs[$name]).""; diff --git a/plugins/dynamix/include/update.crypto.php b/plugins/dynamix/include/update.crypto.php new file mode 100644 index 000000000..08883990e --- /dev/null +++ b/plugins/dynamix/include/update.crypto.php @@ -0,0 +1,37 @@ + +0) $test .= '|tail -1'; + echo shell_exec("/usr/sbin/cryptsetup benchmark -h $test"); + } else { + if ($index>5) $size .= '|tail -1'; + echo preg_replace('/^# Tests.*\n/',"\n",shell_exec("/usr/sbin/cryptsetup benchmark -c $name -s $size")); + } +} else { + $bm = popen('/usr/sbin/cryptsetup --help','r'); + while (!feof($bm)) { + $text = fgets($bm); + if (strpos($text,'Default PBKDF2 iteration time for LUKS')!==false) echo "\n$text"; + elseif (strpos($text,'Default compiled-in device cipher parameters')!==false) echo "\n$text"; + elseif (strpos($text,'LUKS1:')!==false) echo str_replace("\t"," ",$text); + } + pclose($bm); + echo "
"; +} +?> diff --git a/plugins/dynamix/styles/default-azure.css b/plugins/dynamix/styles/default-azure.css index 5591848f0..07fcb28c6 100644 --- a/plugins/dynamix/styles/default-azure.css +++ b/plugins/dynamix/styles/default-azure.css @@ -19,12 +19,12 @@ pre ul{margin:0;padding-top:0;padding-bottom:0;padding-left:28px} pre li{margin:0;padding-top:0;padding-bottom:0;padding-left:18px} big{font-size:15px;font-weight:bold;text-transform:uppercase} hr{border-color:#EDEAEF} -input[type=text],input[type=password],input[type=number],input[type=url],input[type=email],input[type=date],textarea,.textarea{font-family:arimo;font-size:13px;background:transparent;border:1px solid #606E7F;padding:5px 10px;min-height:20px;line-height:20px;outline:none;width:304px;margin:0 20px 0 0;box-shadow:none;color:#606E7F} +input[type=text],input[type=password],input[type=number],input[type=url],input[type=email],input[type=date],input[type=file],textarea,.textarea{font-family:arimo;font-size:13px;background:transparent;border:1px solid #606E7F;padding:5px 10px;min-height:20px;line-height:20px;outline:none;width:304px;margin:0 20px 0 0;box-shadow:none;color:#606E7F} input[type=button],input[type=reset],input[type=submit],button,a.button{font-family:arimo;font-size:13px;border:1px solid #9F9180;border-radius:5px;margin:10px 20px 10px 0;padding:8px 12px;cursor:pointer;outline:none;color:#9F9180;background:#EDEAEF} input[type=checkbox]{vertical-align:middle;margin-right:6px} input[type=number]::-webkit-outer-spin-button,input[type=number]::-webkit-inner-spin-button{-webkit-appearance:none} input[type=number]{-moz-appearance:textfield} -input:focus[type=text],input:focus[type=password],input:focus[type=number],input:focus[type=url],input:focus[type=email],textarea:focus{background:#EDEAEF;border-color:#0072C6} +input:focus[type=text],input:focus[type=password],input:focus[type=number],input:focus[type=url],input:focus[type=email],input:focus[type=file],textarea:focus{background:#EDEAEF;border-color:#0072C6} input:hover[type=button],input:hover[type=reset],input:hover[type=submit],button:hover,a.button:hover{border-color:#0072C6;color:#4F4F4F} input:active[type=button],input:active[type=reset],input:active[type=submit],button:active{border-color:#0072C6;box-shadow:none} input[disabled],button[disabled],input:hover[type=button][disabled],input:hover[type=reset][disabled],input:hover[type=submit][disabled],button:hover[disabled],input:active[type=button][disabled],input:active[type=reset][disabled],input:active[type=submit][disabled],button:active[disabled],textarea[disabled]{color:#808080;border-color:#808080;background:#C7C5CB;opacity:0.5;cursor:default} @@ -68,9 +68,9 @@ form+p{display:none} #nav-item a[href='/Apps']:before{content:'\f0db'} #nav-item a[href='/Stats']:before{content:'\f1fe'} #nav-item a[href='/Tools']:before{content:'\f0ad'} -#nav-item.active,#nav-item.active a{color:#5D6833;background:#ABC056;font-size:18px} -#nav-item.HelpButton.active:hover{background:#ABC056;font-size:0} -#nav-item.HelpButton.active{background:#121510} +#nav-item.active,#nav-item.active a{color:#5D6833;background:#ABC056} +#nav-item.HelpButton.active:hover{background:#ABC056;font-size:18px} +#nav-item.HelpButton.active{background:#121510;font-size:0} #nav-item.HelpButton a:before{content:'\f059'} #nav-item.FeedbackButton a:before{content:'\f075'} #nav-item.InfoButton a:before{content:'\f05a'} @@ -230,6 +230,7 @@ span.three{margin-left:-20px} span.tub{margin-right:8px;font-size:24px;cursor:pointer} span.score{font-size:11px;color:#FFFFFF;position:absolute} span#dropbox{background:none;line-height:60px;margin-right:20px} +i.padlock{margin-left:8px;cursor:help} img.icon{margin:-3px 4px 0 0} img.list{width:auto;max-width:48px;height:48px} div.content{position:absolute;top:0;left:0;width:100%;padding-bottom:30px;z-index:-1;clear:both} diff --git a/plugins/dynamix/styles/default-black.css b/plugins/dynamix/styles/default-black.css index 6695f1545..24e833732 100644 --- a/plugins/dynamix/styles/default-black.css +++ b/plugins/dynamix/styles/default-black.css @@ -16,12 +16,12 @@ a.nohand{cursor:default} i.spacing{margin-left:-6px} i.icon{margin-right:4px} hr{border-color:rgba(255,255,255,0.25)} -input[type=text],input[type=password],input[type=number],input[type=url],input[type=email],input[type=date],textarea,.textarea{font-family:arimo;font-size:12px;color:#808080;background-color:#000000;border:1px solid #404040;border-radius:4px;padding:2px 8px;min-height:20px;line-height:20px;outline:none;width:301px;margin:0 10px 0 0;box-shadow:inset 1px 1px 5px #404040} +input[type=text],input[type=password],input[type=number],input[type=url],input[type=email],input[type=date],input[type=file],textarea,.textarea{font-family:arimo;font-size:12px;color:#808080;background-color:#000000;border:1px solid #404040;border-radius:4px;padding:2px 8px;min-height:20px;line-height:20px;outline:none;width:301px;margin:0 10px 0 0;box-shadow:inset 1px 1px 5px #404040} input[type=button],input[type=reset],input[type=submit],button,a.button{font-family:arimo;font-size:12px;border:1px solid #303030;border-radius:6px;margin:7px 14px 0 0;padding:8px 12px;text-decoration:none;white-space:nowrap;cursor:pointer;outline:none;color:#808080;background:-webkit-radial-gradient(#505050,#181818);background:linear-gradient(#505050,#181818)} input[type=checkbox]{vertical-align:middle;margin-right:6px} input[type=number]::-webkit-outer-spin-button,input[type=number]::-webkit-inner-spin-button{-webkit-appearance: none} input[type=number]{-moz-appearance:textfield} -input:focus[type=text],input:focus[type=password],input:focus[type=number],input:focus[type=url],input:focus[type=email],textarea:focus{background:#101010} +input:focus[type=text],input:focus[type=password],input:focus[type=number],input:focus[type=url],input:focus[type=email],input:focus[type=file],textarea:focus{background:#101010} input:hover[type=button],input:hover[type=reset],input:hover[type=submit],button:hover,a.button:hover{border-color:#6AB034;color:#FFFFFF;background:-webkit-radial-gradient(#5E9E2E,#8FD956);background:linear-gradient(#5E9E2E,#8FD956)} input:active[type=button],input:active[type=reset],input:active[type=submit],button:active{border-color:#6AB034;box-shadow:inset 0 0 8px 4px #548C29,0 1px 0 0 #101010} input[disabled],button[disabled],input:hover[type=button][disabled],input:hover[type=reset][disabled],input:hover[type=submit][disabled],button:hover[disabled],input:active[type=button][disabled],input:active[type=reset][disabled],input:active[type=submit][disabled],button:active[disabled],textarea[disabled]{color:#505050;border-color:#181818;background:linear-gradient(#202020,#101010);background:-webkit-radial-gradient(#202020,#101010);cursor:default} @@ -211,6 +211,7 @@ span.two{margin-left:-17px} span.three{margin-left:-20px} span.tub{margin-right:8px;font-size:24px;cursor:pointer} span.score{font-size:11px;color:#F0F0F0;position:absolute} +i.padlock{margin-left:8px;cursor:help} img.icon{margin:-3px 4px 0 0} img.list{width:auto;max-width:48px;height:48px} div.content{position:absolute;top:45px;left:0;width:100%;padding-bottom:30px;z-index:-1;clear:both} diff --git a/plugins/dynamix/styles/default-gray.css b/plugins/dynamix/styles/default-gray.css index 535bd790d..c6b4a9b9e 100644 --- a/plugins/dynamix/styles/default-gray.css +++ b/plugins/dynamix/styles/default-gray.css @@ -19,12 +19,12 @@ pre ul{margin:0;padding-top:0;padding-bottom:0;padding-left:28px} pre li{margin:0;padding-top:0;padding-bottom:0;padding-left:18px} big{font-size:15px;font-weight:bold;text-transform:uppercase} hr{border-color:#121510} -input[type=text],input[type=password],input[type=number],input[type=url],input[type=email],input[type=date],textarea,.textarea{font-family:arimo;font-size:13px;background:transparent;border:1px solid #606E7F;padding:5px 10px;min-height:20px;line-height:20px;outline:none;width:304px;margin:0 20px 0 0;box-shadow:none;color:#606E7F} +input[type=text],input[type=password],input[type=number],input[type=url],input[type=email],input[type=date],input[type=file],textarea,.textarea{font-family:arimo;font-size:13px;background:transparent;border:1px solid #606E7F;padding:5px 10px;min-height:20px;line-height:20px;outline:none;width:304px;margin:0 20px 0 0;box-shadow:none;color:#606E7F} input[type=button],input[type=reset],input[type=submit],button,a.button{font-family:arimo;font-size:13px;border:1px solid #606E7F;border-radius:5px;margin:10px 20px 10px 0;padding:8px 12px;cursor:pointer;outline:none;color:#606E7F;background:#121510} input[type=checkbox]{vertical-align:middle;margin-right:6px} input[type=number]::-webkit-outer-spin-button,input[type=number]::-webkit-inner-spin-button{-webkit-appearance:none} input[type=number]{-moz-appearance:textfield} -input:focus[type=text],input:focus[type=password],input:focus[type=number],input:focus[type=url],input:focus[type=email],textarea:focus{background:#121510;border-color:#0072C6} +input:focus[type=text],input:focus[type=password],input:focus[type=number],input:focus[type=url],input:focus[type=file],input:focus[type=email],textarea:focus{background:#121510;border-color:#0072C6} input:hover[type=button],input:hover[type=reset],input:hover[type=submit],button:hover,a.button:hover{border-color:#0072C6;color:#B0B0B0} input:active[type=button],input:active[type=reset],input:active[type=submit],button:active{border-color:#0072C6;box-shadow:none} input[disabled],button[disabled],input:hover[type=button][disabled],input:hover[type=reset][disabled],input:hover[type=submit][disabled],button:hover[disabled],input:active[type=button][disabled],input:active[type=reset][disabled],input:active[type=submit][disabled],button:active[disabled],textarea[disabled]{color:#808080;border-color:#808080;background:#383A34;opacity:0.3;cursor:default} @@ -230,6 +230,7 @@ span.three{margin-left:-20px} span.tub{margin-right:8px;font-size:24px;cursor:pointer} span.score{font-size:11px;color:#FFFFFF;position:absolute} span#dropbox{background:none;line-height:60px;margin-right:20px} +i.padlock{margin-left:8px;cursor:help} img.icon{margin:-3px 4px 0 0} img.list{width:auto;max-width:48px;height:48px} div.content{position:absolute;top:0;left:0;width:100%;padding-bottom:30px;z-index:-1;clear:both} diff --git a/plugins/dynamix/styles/default-white.css b/plugins/dynamix/styles/default-white.css index 889219058..4f3de22dd 100644 --- a/plugins/dynamix/styles/default-white.css +++ b/plugins/dynamix/styles/default-white.css @@ -16,12 +16,12 @@ a.nohand{cursor:default} i.spacing{margin-left:-6px} i.icon{margin-right:4px} hr{border-color:rgba(255,255,255,0.25)} -input[type=text],input[type=password],input[type=number],input[type=url],input[type=email],input[type=date],textarea,.textarea{font-family:arimo;font-size:12px;color:#303030;background-color:#FFFFFF;border:1px solid #E0E0E0;border-radius:4px;padding:2px 8px;min-height:20px;line-height:20px;outline:none;width:301px;margin:0 10px 0 0;box-shadow:inset 1px 1px 5px #F0F0F0} +input[type=text],input[type=password],input[type=number],input[type=url],input[type=email],input[type=date],input[type=file],textarea,.textarea{font-family:arimo;font-size:12px;color:#303030;background-color:#FFFFFF;border:1px solid #E0E0E0;border-radius:4px;padding:2px 8px;min-height:20px;line-height:20px;outline:none;width:301px;margin:0 10px 0 0;box-shadow:inset 1px 1px 5px #F0F0F0} input[type=button],input[type=reset],input[type=submit],button,a.button{font-family:arimo;font-size:12px;border:1px solid #E8E8E8;border-radius:6px;margin:7px 14px 0 0;padding:8px 12px;text-decoration:none;white-space:nowrap;cursor:pointer;outline:none;color:#303030;background:-webkit-radial-gradient(#F0F0F0,#C8C8C8);background:linear-gradient(#F0F0F0,#C8C8C8)} input[type=checkbox]{vertical-align:middle;margin-right:6px} input[type=number]::-webkit-outer-spin-button,input[type=number]::-webkit-inner-spin-button{-webkit-appearance: none} input[type=number]{-moz-appearance:textfield} -input:focus[type=text],input:focus[type=password],input:focus[type=number],input:focus[type=url],input:focus[type=email],textarea:focus{background:#F8F8F8} +input:focus[type=text],input:focus[type=password],input:focus[type=number],input:focus[type=url],input:focus[type=email],input:focus[type=file],textarea:focus{background:#F8F8F8} input:hover[type=button],input:hover[type=reset],input:hover[type=submit],button:hover,a.button:hover{border-color:#6AB034;color:#FFFFFF;background:-webkit-radial-gradient(#5E9E2E,#8FD956);background:linear-gradient(#5E9E2E,#8FD956)} input:active[type=button],input:active[type=reset],input:active[type=submit],button:active{border-color:#6AB034;box-shadow:inset 0 0 8px 4px #548C29,0 1px 0 0 #E0E0E0} input[disabled],button[disabled],input:hover[type=button][disabled],input:hover[type=reset][disabled],input:hover[type=submit][disabled],button:hover[disabled],input:active[type=button][disabled],input:active[type=reset][disabled],input:active[type=submit][disabled],button:active[disabled],textarea[disabled]{color:#808080;border-color:#F0F0F0;background:linear-gradient(#F0F0F0,#F8F8F8);background:-webkit-radial-gradient(#F0F0F0,#F8F8F8);cursor:default} @@ -211,6 +211,7 @@ span.two{margin-left:-17px} span.three{margin-left:-20px} span.tub{margin-right:8px;font-size:24px;cursor:pointer} span.score{font-size:11px;color:#F0F0F0;position:absolute} +i.padlock{margin-left:8px;cursor:help} img.icon{margin:-3px 4px 0 0} img.list{width:auto;max-width:48px;height:48px} div.content{position:absolute;top:45px;left:0;width:100%;padding-bottom:30px;z-index:-1;clear:both}