Index: admin/categories.php
===================================================================
--- admin/categories.php	(revision 1399)
+++ admin/categories.php	(revision 1468)
@@ -31,5 +31,5 @@
 		$mov_cat = $mov_cat ? $mov_cat : null;
 		if ($mov_cat !== null) {
-			$c = $core->blog->getCategory((integer) $_POST['del_cat']);
+			$c = $core->blog->getCategory((integer) $_POST['mov_cat']);
 			if ($c->isEmpty()) {
 				throw new Exception(__('This category does not exist.'));
@@ -144,4 +144,15 @@
 echo '</div>';
 
+$categories_combo = array();
+if (!$rs->isEmpty())
+{
+	while ($rs->fetch()) {
+		$catparents_combo[] = $categories_combo[] = new formSelectOption(
+			str_repeat('&nbsp;&nbsp;',$rs->level-1).($rs->level-1 == 0 ? '' : '&bull; ').html::escapeHTML($rs->cat_title),
+			$rs->cat_id
+		);
+	}
+}
+
 echo '<div class="col">'.
 
@@ -149,49 +160,25 @@
 '<h3>'.__('Add a new category').'</h3>'.
 '<p><label class="required" for="cat_title"><abbr title="'.__('Required field').'">*</abbr> '.__('Title:').'</label> '.
-form::field('cat_title',30,255).'</p>'.
+form::field('cat_title',30,255,'','maximal').'</p>'.
 '<p><label for="new_cat_parent">'.__('Parent:').'</label> '.
-'<select id="new_cat_parent" name="new_cat_parent">'.
-'<option value="0">'.__('Top level').'</option>';
-while ($rs->fetch()) {
-	echo '<option value="'.$rs->cat_id.'">'.
-		str_repeat('&nbsp;&nbsp;',$rs->level-1).($rs->level-1 == 0 ? '' : '&bull; ').
-		html::escapeHTML($rs->cat_title).'</option>';
-}
-echo
-'</select></p>'.
+form::combo('new_cat_parent',array_merge(array(__('(No cat)') => 0),$categories_combo),'','maximal').
+'</p>'.
 '<p><input type="submit" value="'.__('Create').'" />'.
 $core->formNonce().'</p>'.
+
 '</form>';
 
 if (!$rs->isEmpty())
 {
-	$cats = array();
-	$dest = array('&nbsp;' => '');
-	$l = $rs->level;
-	$full_name = array($rs->cat_title);
-	while ($rs->fetch())
-	{
-		if ($rs->level < $l) {
-			$full_name = array();
-		} elseif ($rs->level == $l) {
-			array_pop($full_name);
-		}
-		$full_name[] = html::escapeHTML($rs->cat_title);
-		
-		$cats[implode(' / ',$full_name)] = $rs->cat_id;
-		$dest[implode(' / ',$full_name)] = $rs->cat_id;
-		
-		$l = $rs->level;
-	}
-	
 	echo
-	'<form action="categories.php" method="post" id="delete-category" class="border-top">'.
+	'<form action="categories.php" method="post" id="delete-category">'.
 	'<h3>'.__('Remove a category').'</h3>'.
 	'<p><label for="del_cat">'.__('Choose a category to remove:').'</label> '.
-	form::combo('del_cat',$cats).'</p> '.
+	form::combo('del_cat',$categories_combo,'','maximal').'</p> '.
 	'<p><label for="mov_cat">'.__('And choose the category which will receive its entries:').'</label> '.
-	form::combo('mov_cat',$dest).'</p> '.
+	form::combo('mov_cat',array_merge(array(__('(No cat)') => ''),$categories_combo),'','maximal').'</p> '.
 	'<p><input type="submit" value="'.__('Delete').'" class="delete" />'.
 	$core->formNonce().'</p>'.
+
 	'</form>';
 	
Index: admin/index.php
===================================================================
--- admin/index.php	(revision 1422)
+++ admin/index.php	(revision 1468)
@@ -59,7 +59,7 @@
 if (!$core->auth->user_prefs->dashboard->prefExists('quickentry')) {
 	if (!$core->auth->user_prefs->dashboard->prefExists('quickentry',true)) {
-		$core->auth->user_prefs->dashboard->put('quickentry',true,'boolean','',null,true);
-	}
-	$core->auth->user_prefs->dashboard->put('quickentry',true,'boolean');
+		$core->auth->user_prefs->dashboard->put('quickentry',false,'boolean','',null,true);
+	}
+	$core->auth->user_prefs->dashboard->put('quickentry',false,'boolean');
 }
 
@@ -309,13 +309,15 @@
 	if ($core->auth->check('usage,contentadmin',$core->blog->id))
 	{
-		$categories_combo = array('&nbsp;' => '');
+		# Getting categories
+		$categories_combo = array(__('(No cat)') => '');
 		try {
 			$categories = $core->blog->getCategories(array('post_type'=>'post'));
-			while ($categories->fetch()) {
-				$categories_combo[] = new formSelectOption(
-					str_repeat('&nbsp;&nbsp;',$categories->level-1).
-					($categories->level-1 == 0 ? '' : '&bull; ').html::escapeHTML($categories->cat_title),
-					$categories->cat_id
-				);
+			if (!$categories->isEmpty()) {
+				while ($categories->fetch()) {
+					$catparents_combo[] = $categories_combo[] = new formSelectOption(
+						str_repeat('&nbsp;&nbsp;',$categories->level-1).($categories->level-1 == 0 ? '' : '&bull; ').html::escapeHTML($categories->cat_title),
+						$categories->cat_id
+					);
+				}
 			}
 		} catch (Exception $e) { }
@@ -333,6 +335,16 @@
 		form::textarea('post_content',50,7).
 		'</p>'.
-		'<p><label for="cat_id" class="classic">'.__('Category:').'</label> '.
-		form::combo('cat_id',$categories_combo).'</p>'.
+		'<p><label for="cat_id" class="classic">'.__('Category:').' '.
+		form::combo('cat_id',$categories_combo).'</label></p>'.
+		($core->auth->check('categories', $core->blog->id)
+			? '<div>'.
+			'<p id="new_cat">'.__('Add a new category').'</p>'.
+			'<p><label for="new_cat_title">'.__('Title:').' '.
+			form::field('new_cat_title',30,255,'','maximal').'</label></p>'.
+			'<p><label for="new_cat_parent">'.__('Parent:').' '.
+			form::combo('new_cat_parent',$categories_combo,'','maximal').
+			'</label></p>'.
+			'</div>'
+			: '').
 		'<p><input type="submit" value="'.__('Save').'" name="save" /> '.
 		($core->auth->check('publish',$core->blog->id)
Index: admin/js/_index.js
===================================================================
--- admin/js/_index.js	(revision 1140)
+++ admin/js/_index.js	(revision 1418)
@@ -61,4 +61,8 @@
 			});
 		}
+		$('#new_cat').toggleWithLegend(
+			$('#new_cat').parent().children().not('#new_cat'),
+			{} // no cookie on new category as we don't use this every day
+		);
 	}
 
Index: admin/js/_post.js
===================================================================
--- admin/js/_post.js	(revision 1392)
+++ admin/js/_post.js	(revision 1468)
@@ -115,4 +115,8 @@
 			hide: $('#post_notes').val() == ''
 		});
+		$('#new_cat').toggleWithLegend(
+			$('#new_cat').parent().children().not('#new_cat'),
+			{} // no cookie on new category as we don't use this every day
+		);
 		$('#post_lang').parent().toggleWithLegend($('#post_lang'),{
 			cookie: 'dcx_post_lang'
Index: admin/js/_posts_actions.js
===================================================================
--- admin/js/_posts_actions.js	(revision 1035)
+++ admin/js/_posts_actions.js	(revision 1419)
@@ -6,3 +6,7 @@
 		matchContains: true
 	});
+	$('#new_cat').toggleWithLegend(
+		$('#new_cat').parent().children().not('#new_cat'),
+		{} // no cookie on new category as we don't use this every day
+	);
 });
Index: admin/js/_update.js
===================================================================
--- admin/js/_update.js	(revision 1462)
+++ admin/js/_update.js	(revision 1462)
@@ -0,0 +1,5 @@
+$(function() {
+	$('form input[type=submit][name=b_del]').click(function(){
+ 		return window.confirm(dotclear.msg.confirm_delete_backup);
+ 	});
+});
Index: admin/js/_users_actions.js
===================================================================
--- admin/js/_users_actions.js	(revision 935)
+++ admin/js/_users_actions.js	(revision 1449)
@@ -1,4 +1,5 @@
 jQuery.fn.updatePermissionsForm = function() {
 	return this.each(function() {
+		
 		var perms = {};
 		var re = /^perm\[(.+?)\]\[(.+?)\]$/;
@@ -12,4 +13,5 @@
 				continue;
 			}
+			var prop;
 			prop = e.name.match(re);
 			if (!prop) {
@@ -20,37 +22,70 @@
 			}
 			perms[prop[1]][prop[2]] = e;
+			
+			// select related permissions for admin
+			if (prop[2] == 'admin') {
+				if (e.checked) {
+					admin(e,perms,re);
+				}
+				$(e).click(function(){
+					admin(this,perms,re);
+				});
+			// select related permissions for content admin
+			} else if (prop[2] == 'contentadmin') {
+				if (e.checked) {
+					contentadmin(e,perms,re);
+				}
+				$(e).click(function(){
+					contentadmin(this,perms,re);
+				});
+			// select related permissions for media admin
+			} else if (prop[2] == 'media_admin') {
+				if (e.checked) {
+					mediaadmin(e,perms,re);
+				}
+				$(e).click(function(){
+					mediaadmin(this,perms,re);
+				});
+			}
 		}
 		
-		// Update elements status
-		var E;
-		for (blog in perms) {
-			for (perm in perms[blog]) {
-				E = perms[blog][perm];
-				E.onclick = function() {};
-				
-				if (perm == 'admin' && !E.disabled) {
-					perms[blog]['usage'].disabled = E.checked;
-					perms[blog]['publish'].disabled = E.checked;
-					perms[blog]['delete'].disabled = E.checked;
-					perms[blog]['contentadmin'].disabled = E.checked;
-					perms[blog]['categories'].disabled = E.checked;
-					perms[blog]['media'].disabled = E.checked;
-					perms[blog]['media_admin'].disabled = E.checked;
-					E.onclick = function() { $(this.form).updatePermissionsForm(); };
-				} else if (perm == 'contentadmin' && !E.disabled) {
-					perms[blog]['usage'].checked = E.checked;
-					perms[blog]['publish'].checked = E.checked;
-					perms[blog]['delete'].checked = E.checked;
-					perms[blog]['usage'].disabled = E.checked;
-					perms[blog]['publish'].disabled = E.checked;
-					perms[blog]['delete'].disabled = E.checked;
-					E.onclick = function() { $(this.form).updatePermissionsForm(); };
-				} else if (perm == 'media_admin' && !E.disabled) {
-					perms[blog]['media'].checked = E.checked;
-					perms[blog]['media'].disabled = E.checked;
-					E.onclick = function() { $(this.form).updatePermissionsForm(); };
-				}
-			}
+		function admin(E,perms,re) {
+					P = E.name.match(re);
+					
+					perms[P[1]]['usage'].checked = E.checked;
+					perms[P[1]]['publish'].checked = E.checked;
+					perms[P[1]]['delete'].checked = E.checked;
+					perms[P[1]]['contentadmin'].checked = E.checked;
+					perms[P[1]]['categories'].checked = E.checked;
+					perms[P[1]]['media'].checked = E.checked;
+					perms[P[1]]['media_admin'].checked = E.checked;
+					perms[P[1]]['usage'].disabled = E.checked;
+					perms[P[1]]['publish'].disabled = E.checked;
+					perms[P[1]]['delete'].disabled = E.checked;
+					perms[P[1]]['contentadmin'].disabled = E.checked;
+					perms[P[1]]['categories'].disabled = E.checked;
+					perms[P[1]]['media'].disabled = E.checked;
+					perms[P[1]]['media_admin'].disabled = E.checked;
 		}
+		
+		function contentadmin(E,perms,re) {
+					P = E.name.match(re);
+					
+					perms[P[1]]['usage'].checked = E.checked;
+					perms[P[1]]['publish'].checked = E.checked;
+					perms[P[1]]['delete'].checked = E.checked;
+					perms[P[1]]['usage'].disabled = E.checked;
+					perms[P[1]]['publish'].disabled = E.checked;
+					perms[P[1]]['delete'].disabled = E.checked;
+		}
+		
+		function mediaadmin(E,perms,re) {
+					P = E.name.match(re);
+					
+					perms[P[1]]['media'].checked = E.checked;
+					perms[P[1]]['media'].disabled = E.checked;
+		}
+		
+		
 	});
 };
Index: admin/js/jquery/jquery.pwstrength.js
===================================================================
--- admin/js/jquery/jquery.pwstrength.js	(revision 1371)
+++ admin/js/jquery/jquery.pwstrength.js	(revision 1371)
@@ -0,0 +1,66 @@
+/**
+ * jquery.pwstrength http://matoilic.github.com/jquery.pwstrength
+ *
+ * @version v0.1.1
+ * @author Mato Ilic <info@matoilic.ch>
+ * @copyright 2013 Mato Ilic
+ *
+ * Dual licensed under the MIT and GPL licenses:
+ * http://www.opensource.org/licenses/mit-license.php
+ * http://www.gnu.org/licenses/gpl.html
+ */
+;(function($) {
+    $.pwstrength = function(password) {
+        var score = 0, length = password.length, upperCase, lowerCase, digits, nonAlpha;
+        
+        if(length < 5) score += 0;
+        else if(length < 8) score += 5;
+        else if(length < 16) score += 10;
+        else score += 15;
+        
+        lowerCase = password.match(/[a-z]/g);
+        if(lowerCase) score += 1;
+        
+        upperCase = password.match(/[A-Z]/g);
+        if(upperCase) score += 5;
+        
+        if(upperCase && lowerCase) score += 2;
+        
+        digits = password.match(/\d/g);
+        if(digits && digits.length > 1) score += 5;
+        
+        nonAlpha = password.match(/\W/g)
+        if(nonAlpha) score += (nonAlpha.length > 1) ? 15 : 10;
+        
+        if(upperCase && lowerCase && digits && nonAlpha) score += 15;
+
+        if(password.match(/\s/)) score += 10;
+
+        if(score < 15) return 0;
+        if(score < 20) return 1;
+        if(score < 35) return 2;
+        if(score < 50) return 3;
+        return 4;
+    };
+    
+    function updateIndicator(event) {
+        var strength = $.pwstrength($(this).val()), options = event.data, klass;
+        klass = options.classes[strength];
+        
+        options.indicator.removeClass(options.indicator.data('pwclass'));
+        options.indicator.data('pwclass', klass);
+        options.indicator.addClass(klass);
+        options.indicator.find(options.label).html(options.texts[strength]);
+    }
+    
+    $.fn.pwstrength = function(options) {
+        var options = $.extend({
+            label: '.label',
+            classes: ['pw-very-weak', 'pw-weak', 'pw-mediocre', 'pw-strong', 'pw-very-strong'],
+            texts: ['very weak', 'weak', 'mediocre', 'strong', 'very strong']
+        }, options || {});
+        options.indicator = $('#' + this.data('indicator'));
+        
+        return this.keyup(options, updateIndicator);
+    };
+})(jQuery);
Index: admin/post.php
===================================================================
--- admin/post.php	(revision 1460)
+++ admin/post.php	(revision 1468)
@@ -218,4 +218,22 @@
 if (!empty($_POST) && !empty($_POST['save']) && $can_edit_post && !$bad_dt)
 {
+	# Create category
+	if (!empty($_POST['new_cat_title']) && $core->auth->check('categories', $core->blog->id)) {
+	
+		$cur_cat = $core->con->openCursor($core->prefix.'category');
+		$cur_cat->cat_title = $_POST['new_cat_title'];
+		$cur_cat->cat_url = '';
+		
+		$parent_cat = !empty($_POST['new_cat_parent']) ? $_POST['new_cat_parent'] : '';
+		
+		# --BEHAVIOR-- adminBeforeCategoryCreate
+		$core->callBehavior('adminBeforeCategoryCreate', $cur_cat);
+		
+		$cat_id = $core->blog->addCategory($cur_cat, (integer) $parent_cat);
+		
+		# --BEHAVIOR-- adminAfterCategoryCreate
+		$core->callBehavior('adminAfterCategoryCreate', $cur_cat, $cat_id);
+	}
+	
 	$cur = $core->con->openCursor($core->prefix.'post');
 	
@@ -283,4 +301,18 @@
 	}
 }
+
+# Getting categories
+$categories_combo = array(__('(No cat)') => '');
+try {
+	$categories = $core->blog->getCategories(array('post_type'=>'post'));
+	if (!$categories->isEmpty()) {
+		while ($categories->fetch()) {
+			$catparents_combo[] = $categories_combo[] = new formSelectOption(
+				str_repeat('&nbsp;&nbsp;',$categories->level-1).($categories->level-1 == 0 ? '' : '&bull; ').html::escapeHTML($categories->cat_title),
+				$categories->cat_id
+			);
+		}
+	}
+} catch (Exception $e) { }
 
 /* DISPLAY
@@ -423,5 +455,15 @@
 					'<p><label for="cat_id" class="ib">'.__('Category').'</label>'.
 					form::combo('cat_id',$categories_combo,$cat_id,'maximal').
-					'</p>')),
+					'</p>'.
+					($core->auth->check('categories', $core->blog->id) ?
+						'<div>'.
+						'<p id="new_cat">'.__('Add a new category').'</p>'.
+						'<p><label for="new_cat_title">'.__('Title:').' '.
+						form::field('new_cat_title',30,255,'','maximal').'</label></p>'.
+						'<p><label for="new_cat_parent">'.__('Parent:').' '.
+						form::combo('new_cat_parent',$categories_combo,'','maximal').
+						'</label></p>'.
+						'</div>'
+					: ''))),
 		'options-box' => array(
 			'title' => __('Options'),
Index: admin/posts_actions.php
===================================================================
--- admin/posts_actions.php	(revision 1472)
+++ admin/posts_actions.php	(revision 1473)
@@ -243,7 +243,26 @@
 	elseif ($action == 'category' && isset($_POST['new_cat_id']))
 	{
+		$new_cat_id = $_POST['new_cat_id'];
+		
 		try
 		{
-			$core->blog->updPostsCategory($posts_ids,$_POST['new_cat_id']);
+			if (!empty($_POST['new_cat_title']) && $core->auth->check('categories', $core->blog->id))
+			{
+				$cur_cat = $core->con->openCursor($core->prefix.'category');
+				$cur_cat->cat_title = $_POST['new_cat_title'];
+				$cur_cat->cat_url = '';
+				
+				$parent_cat = !empty($_POST['new_cat_parent']) ? $_POST['new_cat_parent'] : '';
+				
+				# --BEHAVIOR-- adminBeforeCategoryCreate
+				$core->callBehavior('adminBeforeCategoryCreate', $cur_cat);
+				
+				$new_cat_id = $core->blog->addCategory($cur_cat, (integer) $parent_cat);
+				
+				# --BEHAVIOR-- adminAfterCategoryCreate
+				$core->callBehavior('adminAfterCategoryCreate', $cur_cat, $new_cat_id);
+			}
+			
+			$core->blog->updPostsCategory($posts_ids, $new_cat_id);
 			
 			http::redirect($redir);
@@ -387,13 +406,14 @@
 	# categories list
 	# Getting categories
-	$categories_combo = array('&nbsp;' => '');
+	$categories_combo = array(__('(No cat)') => '');
 	try {
 		$categories = $core->blog->getCategories(array('post_type'=>'post'));
+		if (!$categories->isEmpty()) {
 		while ($categories->fetch()) {
-			$categories_combo[] = new formSelectOption(
-				str_repeat('&nbsp;&nbsp;',$categories->level-1).
-				($categories->level-1 == 0 ? '' : '&bull; ').html::escapeHTML($categories->cat_title),
+				$catparents_combo[] = $categories_combo[] = new formSelectOption(
+					str_repeat('&nbsp;&nbsp;',$categories->level-1).($categories->level-1 == 0 ? '' : '&bull; ').html::escapeHTML($categories->cat_title),
 				$categories->cat_id
 			);
+		}
 		}
 	} catch (Exception $e) { }
@@ -402,7 +422,18 @@
 	'<form action="posts_actions.php" method="post">'.
 	$fields->getEntries().
-	'<p><label for="new_cat_id" class="classic">'.__('Category:').' '.
-	form::combo('new_cat_id',$categories_combo,'').
-	'</label> ';
+	'<p><label for="new_cat_id" class="classic">'.__('Category:').'</label> '.
+	form::combo('new_cat_id',$categories_combo,'');
+	
+	if ($core->auth->check('categories', $core->blog->id)) {
+		echo 
+		'<div>'.
+		'<p id="new_cat">'.__('Add a new category').'</p>'.
+		'<p><label for="new_cat_title">'.__('Title:').' '.
+		form::field('new_cat_title',30,255,'','maximal').'</label></p>'.
+		'<p><label for="new_cat_parent">'.__('Parent:').' '.
+		form::combo('new_cat_parent',$categories_combo,'','maximal').
+		'</label></p>'.
+		'</div>';
+	}
 	
 	echo
@@ -440,8 +471,8 @@
 	echo
 	'<form action="posts_actions.php" method="post">'.
-	$fields->getEntries().	
-	'<p><label for="new_lang" class="classic">'.__('Entry lang:').' '.
-	form::combo('new_lang',$lang_combo,'').
-	'</label> ';
+	$fields->getEntries().
+	
+	'<p><label for="new_lang" class="classic">'.__('Entry lang:').'</label> '.
+	form::combo('new_lang',$lang_combo,'');
 	
 	echo
@@ -465,7 +496,6 @@
 	'<form action="posts_actions.php" method="post">'.
 	$fields->getEntries().
-	'<p><label for="new_auth_id" class="classic">'.__('Author ID:').' '.
-	form::field('new_auth_id',20,255).
-	'</label> ';
+	'<p><label for="new_auth_id" class="classic">'.__('Author ID:').'</label> '.
+	form::field('new_auth_id',20,255);
 	
 	echo
Index: admin/preferences.php
===================================================================
--- admin/preferences.php	(revision 1399)
+++ admin/preferences.php	(revision 1468)
@@ -344,4 +344,17 @@
 	($user_acc_nodragdrop ? '' : dcPage::jsLoad('js/_preferences-dragdrop.js')).
 	dcPage::jsLoad('js/jquery/jquery-ui.custom.js').
+	dcPage::jsLoad('js/jquery/jquery.pwstrength.js').
+		'<script type="text/javascript">'."\n".
+		"//<![CDATA[\n".
+		"\$(function() {\n".
+		"	\$('#new_pwd').pwstrength({texts: ['".
+				sprintf(__('Password strength: %s'),__('very weak'))."', '".
+				sprintf(__('Password strength: %s'),__('weak'))."', '".
+				sprintf(__('Password strength: %s'),__('mediocre'))."', '".
+				sprintf(__('Password strength: %s'),__('strong'))."', '".
+				sprintf(__('Password strength: %s'),__('very strong'))."']});\n".
+		"});\n".
+		"\n//]]>\n".
+		"</script>\n".
 	dcPage::jsPageTabs($default_tab).
 	dcPage::jsConfirmClose('user-form').
@@ -420,6 +433,12 @@
 	'<legend>'.__('Change your password').'</legend>'.
 	
-	'<p><label for="new_pwd">'.__('New password:').'</label>'.
-	form::password('new_pwd',20,255).'</p>'.
+	'<div class="pw-table">'.
+	'<p class="pw-cell"><label for="new_pwd">'.__('New password:').'</label>'.
+	form::password('new_pwd',20,255,'','','',false,' data-indicator="pwindicator" ').'</p>'.
+	'<div id="pwindicator">'.
+	'    <div class="bar"></div>'.
+	'    <p class="label no-margin"></p>'.
+	'</div>'.
+	'</div>'.
 	
 	'<p><label for="new_pwd_c">'.__('Confirm password:').'</label>'.
Index: admin/style/default.css
===================================================================
--- admin/style/default.css	(revision 1465)
+++ admin/style/default.css	(revision 1470)
@@ -481,11 +481,20 @@
 #icons a img {
 	padding: 2em;
-	background: #eee;
-	border-radius: 1.6rem;
-	box-shadow: 0 3px 3px 0 #ccc;
-	margin-bottom: .6rem;
+	margin-bottom: .3em;
+	-moz-box-shadow: 0px 1px 0px 0px #ffffff;
+	-webkit-box-shadow: 0px 1px 0px 0px #ffffff;
+	box-shadow: 0px 1px 0px 0px #ffffff;
+	background:-webkit-gradient( linear, left top, left bottom, color-stop(0.05, #f9f9f9), color-stop(1, #e9e9e9) );
+	background:-moz-linear-gradient( center top, #f9f9f9 5%, #e9e9e9 100% );
+	filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#f9f9f9', endColorstr='#e9e9e9');
+	background-color:#f9f9f9;
+	-moz-border-radius:1em;
+	-webkit-border-radius:1em;
+	border-radius:1em;
+	border:1px solid #dcdcdc;
+	display:inline-block;
 }
 #icons a img:hover, #icons a:focus img {
-	background-color: #BBDB58;
+	background: #BBDB58;
 }
 #icons a:focus span, #icons a:hover span {
@@ -501,5 +510,5 @@
 #quick p.qinfo {
 	margin: -.7em -1em 1em;
-	background: #eef url(info.png) no-repeat .2em .2em;
+	background: #f3f3ff url(info.png) no-repeat .2em .2em;
 	border: 1px solid #99f;
 	padding: .2em 1em .1em 24px;
@@ -541,4 +550,12 @@
 }
 
+#upg-notify {
+}
+#upg-notify ul {
+	padding-left: 15px;
+}
+#upg-notify li {
+	color: #fff;
+}
 /* ------------------------------------------------------------------ post */
 #entry-wrapper {
@@ -1201,5 +1218,5 @@
 }
 table.settings th, table.prefs th {
-	background: #eef;
+	background: #f3f3ff;
 }
 table.settings th:first-child, table.prefs th:first-child {
@@ -1420,8 +1437,8 @@
 	text-decoration: none;
 	padding: .1em .5em;
-	text-shadow: 0 1px 1px rgba(0,0,0,.3);
 	border-radius: .2em;
 	margin-bottom: .1em;
-}
+	font-size: 1.2rem;
+ }
 h4 a.button {font-weight: normal;}
 
@@ -1431,8 +1448,13 @@
 a.submit {
 	color: #fff;
-	border: 1px solid #2373A8;
-	background: #2373A8;
-	background: -webkit-gradient(linear, left top, left bottom, from(#2C8FD1), to(#2373A8));
-	background: -moz-linear-gradient(top,  #2C8FD1,  #2373A8);
+	border: 1px solid #A2CBE9;
+	text-shadow: 0 -1px 1px #3275bc;
+	background:#25A6E1;
+	background:-moz-linear-gradient(top,#25A6E1 0%,#188BC0 100%);
+	background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#25A6E1),color-stop(100%,#188BC0));
+	background:linear-gradient(top,#25A6E1 0%,#188BC0 100%);
+	filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#25A6E1',endColorstr='#188BC0',GradientType=0);
+	border:1px solid #1A87B9
+
 }
 input[type=submit]:hover,
@@ -1442,8 +1464,9 @@
 input[type=button]:focus,
 a.submit:focus {
-	background: #2373A8;
-	background: -webkit-gradient(linear, left top, left bottom, from(#2373A8), to(#2C8FD1));
-	background: -moz-linear-gradient(top,  #2373A8,  #2C8FD1);
-	filter:  progid:DXImageTransform.Microsoft.gradient(startColorstr='#2373A8', endColorstr='#2C8FD1');
+	background:#188BC0;
+	background:-moz-linear-gradient(top,#188BC0 0%,#25A6E1 100%);
+	background:-webkit-gradient(linear,left top,left bottom,color-stop(0%,#188BC0),color-stop(100%,#25A6E1));
+	background:linear-gradient(top,#188BC0 0%,#25A6E1 100%);
+	filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#25A6E1',endColorstr='#25A6E1',GradientType=0);
 	border: 1px solid #2C8FD1;
 }
@@ -1457,5 +1480,5 @@
 	background: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#dfdfdf));
 	background: -moz-linear-gradient(top,  #f5f5f5,  #dfdfdf);
-	text-shadow: none;
+	text-shadow:1px 1px 0px #fff;
 	}
 a.button:hover,
@@ -1615,4 +1638,44 @@
 	border-color : #ccc;
 	background-color: #fff;
+}
+
+/* --------------------------------------------------------------- password indcator */
+.pw-table {
+	display: table;
+	margin-bottom: 1em;
+}
+.pw-cell {
+	display: table-cell;
+	margin-bottom: 1em;
+}
+#pwindicator {
+	display: table-cell;
+	vertical-align: bottom;
+	padding-left: 1.5em;
+	height: 3.8em;
+}
+#pwindicator .bar {
+	height: 6px;
+	margin-bottom: 4px;
+}
+.pw-very-weak .bar {
+	background: #900;
+	width: 30px;
+}
+.pw-weak .bar {
+	background: #c00;
+	width: 60px;
+}
+.pw-mediocre .bar {
+	background: #f60;
+	width: 90px;
+}
+.pw-strong .bar {
+	background: #060;
+	width: 120px;
+}
+.pw-very-strong .bar {
+	background: #0c0;
+	width: 150px;
 }
 
Index: admin/update.php
===================================================================
--- admin/update.php	(revision 1358)
+++ admin/update.php	(revision 1469)
@@ -27,5 +27,5 @@
 
 $updater = new dcUpdate(DC_UPDATE_URL,'dotclear',DC_UPDATE_VERSION,DC_TPL_CACHE.'/versions');
-$new_v = $updater->check(DC_VERSION);
+$new_v = $updater->check(DC_VERSION, !empty($_GET['nocache']));
 $zip_file = $new_v ? DC_BACKUP_PATH.'/'.basename($updater->getFileURL()) : '';
 $version_info = $new_v ? $updater->getInfoURL() : '';
@@ -168,5 +168,8 @@
 -------------------------------------------------------- */
 dcPage::open(__('Dotclear update'),
-	(!$step ? dcPage::jsPageTabs($default_tab) : ''),
+	(!$step ? 
+		dcPage::jsPageTabs($default_tab).
+		dcPage::jsLoad('js/_update.js')
+		: ''),
 	dcPage::breadcrumb(
 		array(
@@ -176,4 +179,10 @@
 );
 
+if (!$core->error->flag()) {
+	if (!empty($_GET['nocache'])) {
+		dcPage::message(__('Manual checking of update done successfully.'));
+	}
+}
+
 if (!$step)
 {
@@ -181,5 +190,9 @@
 	if (empty($new_v))
 	{
-		echo '<p><strong>'.__('No newer Dotclear version available.').'</strong></p>';
+		echo '<p><strong>'.__('No newer Dotclear version available.').'</strong></p>'.
+		'<form action="'.$p_url.'" method="get">'.
+		'<p><input type="hidden" name="nocache" value="1" />'.
+		'<input type="submit" value="'.__('Force checking update Dotclear').'" /></p>'.
+		'</form>';
 	}
 	else
