Index: .hgsubstate
===================================================================
--- .hgsubstate	(revision 1327)
+++ .hgsubstate	(revision 1385)
@@ -1,1 +1,1 @@
-106856ffd55945d2be60e5f623c587c3fb356447 inc/libs/clearbricks
+4288bdc1f21d00f93331bbe098485727b276c1fe inc/libs/clearbricks
Index: admin/blog.php
===================================================================
--- admin/blog.php	(revision 1328)
+++ admin/blog.php	(revision 1399)
@@ -67,27 +67,27 @@
 else
 {
-	dcPage::open(__('New blog'),dcPage::jsConfirmClose('blog-form'));
-	
-	echo dcPage::breadcrumb(
-		array(
-			__('System') => '',
-			__('Blogs') => 'blogs.php',
-			'<span class="page-title">'.__('New blog').'</span>' => ''
-		));
+	dcPage::open(__('New blog'),dcPage::jsConfirmClose('blog-form'),
+		dcPage::breadcrumb(
+			array(
+				__('System') => '',
+				__('Blogs') => 'blogs.php',
+				'<span class="page-title">'.__('New blog').'</span>' => ''
+			))
+	);
 	
 	echo
-	'<form action="blog.php" method="post" id="blog-form" class="fieldset">'.
+	'<form action="blog.php" method="post" id="blog-form">'.
 	
 	$core->formNonce().
-	'<p><label class="required"><abbr title="'.__('Required field').'">*</abbr> '.__('Blog ID:').' '.
-	form::field('blog_id',30,32,html::escapeHTML($blog_id)).'</label></p>'.
+	'<p><label class="required" for="blog_id"><abbr title="'.__('Required field').'">*</abbr> '.__('Blog ID:').'</label> '.
+	form::field('blog_id',30,32,html::escapeHTML($blog_id)).'</p>'.
 	'<p class="form-note">'.__('At least 2 characters using letters, numbers or symbols.').'</p> '.
 	'<p class="form-note warn">'.__('Please note that changing your blog ID may require changes in your public index.php file.').'</p>'.
 	
-	'<p><label class="required"><abbr title="'.__('Required field').'">*</abbr> '.__('Blog name:').' '.
-	form::field('blog_name',30,255,html::escapeHTML($blog_name)).'</label></p>'.
+	'<p><label class="required" for="blog_name"><abbr title="'.__('Required field').'">*</abbr> '.__('Blog name:').'</label> '.
+	form::field('blog_name',30,255,html::escapeHTML($blog_name)).'</p>'.
 	
-	'<p><label class="required"><abbr title="'.__('Required field').'">*</abbr> '.__('Blog URL:').' '.
-	form::field('blog_url',30,255,html::escapeHTML($blog_url)).'</label></p>'.
+	'<p><label class="required" for="blog_url"><abbr title="'.__('Required field').'">*</abbr> '.__('Blog URL:').'</label> '.
+	form::field('blog_url',30,255,html::escapeHTML($blog_url)).'</p>'.
 	
 	'<p class="area"><label for="blog_desc">'.__('Blog description:').'</label> '.
Index: admin/blog_del.php
===================================================================
--- admin/blog_del.php	(revision 1332)
+++ admin/blog_del.php	(revision 1399)
@@ -49,15 +49,15 @@
 }
 
-dcPage::open(__('Delete a blog'));
-
-if (!$core->error->flag())
-{
-	echo dcPage::breadcrumb(
+dcPage::open(__('Delete a blog'),'',
+	dcPage::breadcrumb(
 		array(
 			__('System') => '',
 			__('Blogs') => 'blogs.php',
 			'<span class="page-title">'.__('Delete a blog').'</span>' => ''
-		));
+		))
+);
 
+if (!$core->error->flag())
+{
 	echo
 	'<p class="message">'.__('Warning').'</p>'.
@@ -69,6 +69,6 @@
 	'<form action="blog_del.php" method="post">'.
 	'<div>'.$core->formNonce().'</div>'.
-	'<p><label for="pwd">'.__('Your password:').' '.
-	form::password('pwd',20,255).'</label></p>'.
+	'<p><label for="pwd">'.__('Your password:').'</label> '.
+	form::password('pwd',20,255).'</p>'.
 	'<p><input type="submit" class="delete" name="del" value="'.__('Delete this blog').'" />'.
 	form::hidden('blog_id',$blog_id).'</p>'.
Index: admin/blog_pref.php
===================================================================
--- admin/blog_pref.php	(revision 1332)
+++ admin/blog_pref.php	(revision 1399)
@@ -252,4 +252,19 @@
 }
 
+if ($standalone) {
+	$breadcrumb = dcPage::breadcrumb(
+		array(
+			html::escapeHTML($blog_name) => '',
+			'<span class="page-title">'.__('Blog settings').'</span>' => ''
+		));
+} else {
+	$breadcrumb = dcPage::breadcrumb(
+		array(
+			__('System') => '',
+			__('Blogs') => 'blogs.php',
+			'<span class="page-title">'.__('Blog settings').' : '.html::escapeHTML($blog_name).'</span>' => ''
+		));
+}
+
 dcPage::open(__('Blog settings'),
 	'<script type="text/javascript">'."\n".
@@ -268,24 +283,10 @@
 	$core->callBehavior('adminBlogPreferencesHeaders').
 	
-	dcPage::jsPageTabs()
+	dcPage::jsPageTabs(),
+	$breadcrumb
 );
 
 if ($blog_id)
 {
-	if ($standalone) {
-		echo dcPage::breadcrumb(
-			array(
-				html::escapeHTML($blog_name) => '',
-				'<span class="page-title">'.__('Blog settings').'</span>' => ''
-			));
-	} else {
-		echo dcPage::breadcrumb(
-			array(
-				__('System') => '',
-				__('Blogs') => 'blogs.php',
-				'<span class="page-title">'.__('Blog settings').' : '.html::escapeHTML($blog_name).'</span>' => ''
-			));
-	}
-	
 	if (!empty($_GET['add'])) {
 		dcPage::message(__('Blog has been successfully created.'));
@@ -308,6 +309,6 @@
 	{
 		echo
-		'<p><label for="blog_id" class="required"><abbr title="'.__('Required field').'">*</abbr> '.__('Blog ID:').
-		form::field('blog_id',30,32,html::escapeHTML($blog_id)).'</label></p>'.
+		'<p><label for="blog_id" class="required"><abbr title="'.__('Required field').'">*</abbr> '.__('Blog ID:').'</label>'.
+		form::field('blog_id',30,32,html::escapeHTML($blog_id)).'</p>'.
 		'<p class="form-note">'.__('At least 2 characters using letters, numbers or symbols.').'</p> '.
 		'<p class="form-note warn">'.__('Please note that changing your blog ID may require changes in your public index.php file.').'</p>';
@@ -315,18 +316,18 @@
 	
 	echo
-	'<p><label for="blog_name" class="required"><abbr title="'.__('Required field').'">*</abbr> '.__('Blog name:').
-	form::field('blog_name',30,255,html::escapeHTML($blog_name)).'</label></p>';
+	'<p><label for="blog_name" class="required"><abbr title="'.__('Required field').'">*</abbr> '.__('Blog name:').'</label>'.
+	form::field('blog_name',30,255,html::escapeHTML($blog_name)).'</p>';
 	
 	if ($core->auth->isSuperAdmin())
 	{
 		echo
-		'<p><label for="blog_url" class="required"><abbr title="'.__('Required field').'">*</abbr> '.__('Blog URL:').
-		form::field('blog_url',30,255,html::escapeHTML($blog_url)).'</label></p>'.
-		
-		'<p><label for="url_scan">'.__('URL scan method:').
-		form::combo('url_scan',$url_scan_combo,$blog_settings->system->url_scan).'</label></p>'.
-		
-		'<p><label for="blog_status">'.__('Blog status:').
-		form::combo('blog_status',$status_combo,$blog_status).'</label></p>';
+		'<p><label for="blog_url" class="required"><abbr title="'.__('Required field').'">*</abbr> '.__('Blog URL:').'</label>'.
+		form::field('blog_url',30,255,html::escapeHTML($blog_url)).'</p>'.
+		
+		'<p><label for="url_scan">'.__('URL scan method:').'</label>'.
+		form::combo('url_scan',$url_scan_combo,$blog_settings->system->url_scan).'</p>'.
+		
+		'<p><label for="blog_status">'.__('Blog status:').'</label>'.
+		form::combo('blog_status',$status_combo,$blog_status).'</p>';
 	}
 	
@@ -341,33 +342,33 @@
 	'<div class="two-cols">'.
 	'<div class="col">'.
-	'<p><label for="editor">'.__('Blog editor name:').
+	'<p><label for="editor">'.__('Blog editor name:').'</label>'.
 	form::field('editor',30,255,html::escapeHTML($blog_settings->system->editor)).
-	'</label></p>'.
-	
-	'<p><label for="lang">'.__('Default language:').
+	'</p>'.
+	
+	'<p><label for="lang">'.__('Default language:').'</label>'.
 	form::combo('lang',$lang_combo,$blog_settings->system->lang,'l10n').
-	'</label></p>'.
-	
-	'<p><label for="blog_timezone">'.__('Blog timezone:').
+	'</p>'.
+	
+	'<p><label for="blog_timezone">'.__('Blog timezone:').'</label>'.
 	form::combo('blog_timezone',dt::getZones(true,true),html::escapeHTML($blog_settings->system->blog_timezone)).
-	'</label></p>'.
-
-	'<p><label for="copyright_notice">'.__('Copyright notice:').
+	'</p>'.
+
+	'<p><label for="copyright_notice">'.__('Copyright notice:').'</label>'.
 	form::field('copyright_notice',30,255,html::escapeHTML($blog_settings->system->copyright_notice)).
-	'</label></p>'.
-	'</div>'.
-	
-	'<div class="col">'.
-	'<p><label for="post_url_format">'.__('New post URL format:').
+	'</p>'.
+	'</div>'.
+	
+	'<div class="col">'.
+	'<p><label for="post_url_format">'.__('New post URL format:').'</label>'.
 	form::combo('post_url_format',$post_url_combo,html::escapeHTML($blog_settings->system->post_url_format)).
-	'</label></p>'.
-
-	'<p><label for="note_title_tag">'.__('Note title HTML tag:').
+	'</p>'.
+
+	'<p><label for="note_title_tag">'.__('Note title HTML tag:').'</label>'.
 	form::combo('note_title_tag',$note_title_tag_combo,$blog_settings->system->note_title_tag).
-	'</label></p>'.
-		
-	'<p><label for="enable_xmlrpc" class="classic">'.
+	'</p>'.
+		
+	'<p><label for="enable_xmlrpc" class="classic">'.'</label>'.
 	form::checkbox('enable_xmlrpc','1',$blog_settings->system->enable_xmlrpc).
-	__('Enable XML/RPC interface').'</label></p>';
+	__('Enable XML/RPC interface').'</p>';
 
 	echo
@@ -441,11 +442,11 @@
 	'<div class="two-cols">'.
 	'<div class="col">'.
-	'<p><label for="date_format">'.__('Date format:').
+	'<p><label for="date_format">'.__('Date format:').'</label>'.
 	form::field('date_format',30,255,html::escapeHTML($blog_settings->system->date_format)).
-	'</label></p>'.
-	
-	'<p><label for="time_format">'.__('Time format:').
+	'</p>'.
+	
+	'<p><label for="time_format">'.__('Time format:').'</label>'.
 	form::field('time_format',30,255,html::escapeHTML($blog_settings->system->time_format)).
-	'</label></p>'.
+	'</p>'.
 	
 	'<p><label for="use_smilies" class="classic">'.
@@ -499,11 +500,11 @@
 
 	'<h4>'.__('Default image insertion attributes').'</h4>'.
-	'<p><label for="media_img_default_size">'.__('Image size:').
+	'<p><label for="media_img_default_size">'.__('Image size:').'</label>'.
 	form::combo('media_img_default_size',$img_default_size_combo,
 		(html::escapeHTML($blog_settings->system->media_img_default_size) != '' ? html::escapeHTML($blog_settings->system->media_img_default_size) : 'm')).
-	'</label></p>'.
-	'<p><label for="media_img_default_alignment">'.__('Image alignment').
+	'</p>'.
+	'<p><label for="media_img_default_alignment">'.__('Image alignment').'</label>'.
 	form::combo('media_img_default_alignment',$img_default_alignment_combo,html::escapeHTML($blog_settings->system->media_img_default_alignment)).
-	'</label></p>'.
+	'</p>'.
 	'<p><label for="media_img_default_link" class="classic">'.
 	form::checkbox('media_img_default_link','1',$blog_settings->system->media_img_default_link).
Index: admin/blog_theme.php
===================================================================
--- admin/blog_theme.php	(revision 1332)
+++ admin/blog_theme.php	(revision 1428)
@@ -173,7 +173,7 @@
 	'<div class="theme-shot"><img src="'.$screenshot.'" alt="" /></div>'.
 	'<div class="theme-info">'.
-		'<h3>'.form::radio(array('theme',$radio_id),html::escapeHTML($id),$current,'','',($has_parent && !$is_parent_present)).' '.
+		'<h4>'.form::radio(array('theme',$radio_id),html::escapeHTML($id),$current,'','',($has_parent && !$is_parent_present)).' '.
 		'<label class="classic" for="'.$radio_id.'">'.
-		html::escapeHTML($details['name']).'</label></h3>'.
+		html::escapeHTML($details['name']).'</label></h4>'.
 		'<p><span class="theme-desc">'.html::escapeHTML($details['desc']).'</span> '.
 		'<span class="theme-author">'.sprintf(__('by %s'),html::escapeHTML($details['author'])).'</span> '.
@@ -187,5 +187,5 @@
 		}
 		if ($has_css) {
-			$res .= '<a class="theme-css" href="'.$theme_url.'/style.css">'.__('Stylesheet').'</a>';
+			$res .= '<span class="theme-css"><a href="'.$theme_url.'/style.css">'.__('Stylesheet').'</a></span>';
 		}
 		$res .= '</p>';
@@ -207,18 +207,29 @@
 }
 
-dcPage::open(__('Blog appearance'),
-	(!$theme_conf_mode ? dcPage::jsLoad('js/_blog_theme.js') : '').
-	dcPage::jsPageTabs($default_tab).
-	dcPage::jsColorPicker()
-);
-
 if (!$theme_conf_mode)
 {
-	echo dcPage::breadcrumb(
+	$breadcrumb = dcPage::breadcrumb(
 		array(
 			html::escapeHTML($core->blog->name) => '',
 			'<span class="page-title">'.__('Blog appearance').'</span>' => ''
 		));
-	
+} else {
+	$breadcrumb = dcPage::breadcrumb(
+		array(
+			html::escapeHTML($core->blog->name) => '',
+			__('Blog appearance') => 'blog_theme.php',
+			'<span class="page-title">'.__('Theme configuration').'</span>' => ''
+		));
+}
+
+dcPage::open(__('Blog appearance'),
+	(!$theme_conf_mode ? dcPage::jsLoad('js/_blog_theme.js') : '').
+	dcPage::jsPageTabs($default_tab).
+	dcPage::jsColorPicker(),
+	$breadcrumb
+);
+
+if (!$theme_conf_mode)
+{
 	if (!empty($_GET['upd'])) {
 		dcPage::message(__('Theme has been successfully changed.'));
@@ -233,18 +244,11 @@
 	}
 	
-	if ($can_install) {
-		echo
-		'<p><strong>'.sprintf(__('You can find additional themes for your blog on %s.'),
-		'<a href="http://themes.dotaddict.org/galerie-dc2/">Dotaddict</a>').'</strong> '.
-		__('To install or upgrade a theme you generally just need to upload it '.
-		'in "Install or upgrade a theme" section.').'</p>';
-	}
-	
 	# Themes list
-	echo '<div class="multi-part" id="themes-list" title="'.__('Themes').'">';
+	echo '<div class="multi-part" id="themes-list" title="'.__('Themes').'">'.
+	'<h3>'.__('Available themes in your installation').'</h3>';
 	
 	$themes = $core->themes->getModules();
 	if (isset($themes[$core->blog->settings->system->theme])) {
-		echo '<h3>'.sprintf(__('You are currently using "%s"'),$themes[$core->blog->settings->system->theme]['name']).'</h3>';
+		echo '<p>'.sprintf(__('You are currently using "%s"'),$themes[$core->blog->settings->system->theme]['name']).'.</p>';
 	}
 	
@@ -268,13 +272,12 @@
 	
 	echo
-	'<div class="two-cols clear" id="themes-actions">'.
-	$core->formNonce().
-	'<p class="col"><input type="submit" name="select" value="'.__('Use selected theme').'" /></p>';
-	
+	'<div id="themes-actions">'.
+	
+	'<p>'.$core->formNonce().'<input type="submit" name="select" value="'.__('Use selected theme').'" /> ';	
 	if ($can_install) {
-		echo '<p class="col right"><input type="submit" class="delete" name="remove" value="'.__('Delete selected theme').'" /></p>';
-	}
-	
-	echo
+		echo ' <input type="submit" class="delete" name="remove" value="'.__('Delete selected theme').'" />';
+	}
+	echo '</p>'.
+	
 	'</div>'.
 	'</form>'.
@@ -285,9 +288,12 @@
 	{
 		echo
-		'<div class="multi-part clear" id="add-theme" title="'.__('Install or upgrade a theme').'">';
+		'<div class="multi-part clear" id="add-theme" title="'.__('Install or upgrade a theme').'">'.
+		'<h3>'.__('Add themes to your installation').'</h3>'.
+		'<p>'.sprintf(__('You can find additional themes for your blog on %s.'),
+		'<a href="http://themes.dotaddict.org/galerie-dc2/">Dotaddict</a>').'</p>';
 		
 		if ($is_writable)
 		{
-			echo '<p>'.__('You can install themes by uploading or downloading zip files.').'</p>';
+			echo '<p>'.__('You can also install themes by uploading or downloading zip files.').'</p>';
 			
 			# 'Upload theme' form
@@ -296,8 +302,8 @@
 			'<fieldset>'.
 			'<legend>'.__('Upload a zip file').'</legend>'.
-			'<p class="field"><label for="pkg_file" class="classic required"><abbr title="'.__('Required field').'">*</abbr> '.__('Theme zip file:').' '.
-			'<input type="file" name="pkg_file" id="pkg_file" /></label></p>'.
-			'<p class="field"><label for="your_pwd1" class="classic required"><abbr title="'.__('Required field').'">*</abbr> '.__('Your password:').' '.
-			form::password(array('your_pwd','your_pwd1'),20,255).'</label></p>'.
+			'<p class="field"><label for="pkg_file" class="classic required"><abbr title="'.__('Required field').'">*</abbr> '.__('Theme zip file:').'</label> '.
+			'<input type="file" name="pkg_file" id="pkg_file" /></p>'.
+			'<p class="field"><label for="your_pwd1" class="classic required"><abbr title="'.__('Required field').'">*</abbr> '.__('Your password:').'</label> '.
+			form::password(array('your_pwd','your_pwd1'),20,255).'</p>'.
 			'<input type="submit" name="upload_pkg" value="'.__('Upload theme').'" />'.
 			$core->formNonce().
@@ -310,8 +316,8 @@
 			'<fieldset>'.
 			'<legend>'.__('Download a zip file').'</legend>'.
-			'<p class="field"><label for="pkg_url" class="classic required"><abbr title="'.__('Required field').'">*</abbr> '.__('Theme zip file URL:').' '.
-			form::field(array('pkg_url','pkg_url'),40,255).'</label></p>'.
-			'<p class="field"><label for="your_pwd2" class="classic required"><abbr title="'.__('Required field').'">*</abbr> '.__('Your password:').' '.
-			form::password(array('your_pwd','your_pwd2'),20,255).'</label></p>'.
+			'<p class="field"><label for="pkg_url" class="classic required"><abbr title="'.__('Required field').'">*</abbr> '.__('Theme zip file URL:').'</label> '.
+			form::field(array('pkg_url','pkg_url'),40,255).'</p>'.
+			'<p class="field"><label for="your_pwd2" class="classic required"><abbr title="'.__('Required field').'">*</abbr> '.__('Your password:').'</label> '.
+			form::password(array('your_pwd','your_pwd2'),20,255).'</p>'.
 			'<input type="submit" name="fetch_pkg" value="'.__('Download theme').'" />'.
 			$core->formNonce().
@@ -334,11 +340,4 @@
 	$core->themes->loadModuleL10Nresources($core->blog->settings->system->theme,$_lang);
 
-	echo dcPage::breadcrumb(
-		array(
-			html::escapeHTML($core->blog->name) => '',
-			__('Blog appearance') => 'blog_theme.php',
-			'<span class="page-title">'.__('Theme configuration').'</span>' => ''
-		));
-
 	echo
 	'<p><a class="back" href="blog_theme.php">'.__('back').'</a></p>';
Index: admin/blogs.php
===================================================================
--- admin/blogs.php	(revision 1332)
+++ admin/blogs.php	(revision 1426)
@@ -73,15 +73,15 @@
 	$starting_script .= dcPage::jsLoad('js/filter-controls.js');
 }
-dcPage::open(__('List of blogs'),$starting_script);
+dcPage::open(__('List of blogs'),$starting_script,
+	dcPage::breadcrumb(
+		array(
+			__('System') => '',
+			'<span class="page-title">'.__('List of blogs').'</span>' => ''
+		))
+);
 
 if (!empty($_GET['del'])) {
 	dcPage::message(__('Blog has been successfully deleted.'));
 }
-
-echo dcPage::breadcrumb(
-	array(
-		__('System') => '',
-		'<span class="page-title">'.__('List of blogs').'</span>' => ''
-	));
 
 if (!$core->error->flag())
@@ -92,31 +92,29 @@
 	
 	if (!$show_filters) {
-		echo '<p><a id="filter-control" class="form-control" href="#">'.__('Filters').'</a></p>';
+		echo '<p><a id="filter-control" class="form-control" href="#">'.__('Filter blogs list').'</a></p>';
 	}
 	
 	echo
 	'<form action="blogs.php" method="get" id="filters-form">'.
-	'<fieldset class="two-cols"><legend>'.__('Filters').'</legend>'.
+	'<h3>'.__('Filter blogs list').'</h3>'.
 	
-	'<div class="col">'.
-	'<p><label for="sortby">'.__('Order by:').' '.
-	form::combo('sortby',$sortby_combo,html::escapeHTML($sortby)).
-	'</label> '.
-	'<label for="order">'.__('Sort:').' '.
-	form::combo('order',$order_combo,html::escapeHTML($order)).
-	'</label></p>'.
+	'<div class="table">'.
+	'<div class="cell">'.
+	'<p><label for="q" class="ib">'.__('Search:').'</label> '.
+	form::field('q',20,255,html::escapeHTML($q)).'</p>'.
 	'</div>'.
 	
-	'<div class="col">'.
-	'<p><label for="q">'.__('Search:').' '.
-	form::field('q',20,255,html::escapeHTML($q)).
-	'</label></p>'.
-	'<p><label for="nb" class="classic">'.	form::field('nb',3,3,$nb_per_page).' '.
-	__('Blogs per page').'</label> '.
-	'<input type="submit" value="'.__('Apply filters').'" /></p>'.
+	'<div class="cell filters-options">'.
+	'<p><label for="sortby" class="ib">'.__('Order by:').'</label> '.
+	form::combo('sortby',$sortby_combo,html::escapeHTML($sortby)).'</p>'.
+	'<p><label for="order" class="ib">'.__('Sort:').'</label> '.
+	form::combo('order',$order_combo,html::escapeHTML($order)).'</p>'.
+	'<p><span class="label ib">'.__('Show').'</span> <label for="nb" class="classic">'.	
+	form::field('nb',3,3,$nb_per_page).' '.__('blogs per page').'</label></p>'.
 	'</div>'.
-	
-	'<br class="clear" />'. //Opera sucks
-	'</fieldset>'.
+	'</div>'.
+
+	'<p><input type="submit" value="'.__('Apply filters').'" />'.
+	'<br class="clear" /></p>'. //Opera sucks
 	'</form>';
 	
@@ -131,5 +129,5 @@
 		$pager->var_page = 'page';
 		
-		echo '<p>'.__('Page(s)').' : '.$pager->getLinks().'</p>';
+		echo '<p class="pagination">'.__('Page(s)').' : '.$pager->getLinks().'</p>';
 		
 		echo
@@ -149,5 +147,5 @@
 		echo '</table>';
 		
-		echo '<p>'.__('Page(s)').' : '.$pager->getLinks().'</p>';
+		echo '<p class="pagination">'.__('Page(s)').' : '.$pager->getLinks().'</p>';
 	}
 }
Index: admin/categories.php
===================================================================
--- admin/categories.php	(revision 1332)
+++ admin/categories.php	(revision 1399)
@@ -73,5 +73,10 @@
 dcPage::open(__('Categories'),
 	dcPage::jsToolMan()."\n".
-	dcPage::jsLoad('js/_categories.js')
+	dcPage::jsLoad('js/_categories.js'),
+	dcPage::breadcrumb(
+		array(
+			html::escapeHTML($core->blog->name) => '',
+			'<span class="page-title">'.__('Categories').'</span>' => ''
+		))
 );
 
@@ -88,10 +93,4 @@
 	dcPage::message(__('The category has been successfully moved.'));
 }
-
-echo dcPage::breadcrumb(
-	array(
-		html::escapeHTML($core->blog->name) => '',
-		'<span class="page-title">'.__('Categories').'</span>' => ''
-	));
 
 $rs = $core->blog->getCategories(array('post_type'=>'post'));
@@ -148,8 +147,8 @@
 
 '<form action="category.php" method="post">'.
-'<fieldset><legend>'.__('Add a new category').'</legend>'.
-'<p><label class="required" for="cat_title"><abbr title="'.__('Required field').'">*</abbr> '.__('Title:').' '.
-form::field('cat_title',30,255).'</label></p>'.
-'<p><label for="new_cat_parent">'.__('Parent:').' '.
+'<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>'.
+'<p><label for="new_cat_parent">'.__('Parent:').'</label> '.
 '<select id="new_cat_parent" name="new_cat_parent">'.
 '<option value="0">'.__('Top level').'</option>';
@@ -160,8 +159,7 @@
 }
 echo
-'</select></label></p>'.
-'<p><input type="submit" value="'.__('Create').'" /></p>'.
-$core->formNonce().
-'</fieldset>'.
+'</select></p>'.
+'<p><input type="submit" value="'.__('Create').'" />'.
+$core->formNonce().'</p>'.
 '</form>';
 
@@ -188,23 +186,21 @@
 	
 	echo
-	'<form action="categories.php" method="post" id="delete-category">'.
-	'<fieldset><legend>'.__('Remove a category').'</legend>'.
-	'<p><label for="del_cat">'.__('Choose a category to remove:').' '.
-	form::combo('del_cat',$cats).'</label></p> '.
-	'<p><label for="mov_cat">'.__('And choose the category which will receive its entries:').' '.
-	form::combo('mov_cat',$dest).'</label></p> '.
-	'<p><input type="submit" value="'.__('Delete').'" class="delete" /></p>'.
-	$core->formNonce().
-	'</fieldset>'.
+	'<form action="categories.php" method="post" id="delete-category" class="border-top">'.
+	'<h3>'.__('Remove a category').'</h3>'.
+	'<p><label for="del_cat">'.__('Choose a category to remove:').'</label> '.
+	form::combo('del_cat',$cats).'</p> '.
+	'<p><label for="mov_cat">'.__('And choose the category which will receive its entries:').'</label> '.
+	form::combo('mov_cat',$dest).'</p> '.
+	'<p><input type="submit" value="'.__('Delete').'" class="delete" />'.
+	$core->formNonce().'</p>'.
 	'</form>';
 	
 	echo
-	'<form action="categories.php" method="post" id="reset-order">'.
-	'<fieldset><legend>'.__('Reorder categories').'</legend>'.
+	'<form action="categories.php" method="post" id="reset-order" class="border-top">'.
+	'<h3>'.__('Reorder categories').'</h3>'.
 	'<p>'.__('This will relocate all categories on the top level').'</p> '.
-	'<p><input type="submit" value="'.__('Reorder').'" /></p>'.
+	'<p><input type="submit" value="'.__('Reorder').'" />'.
 	form::hidden(array('reset'),1).
-	$core->formNonce().
-	'</fieldset>'.
+	$core->formNonce().'</p>'.
 	'</form>';
 }
Index: admin/category.php
===================================================================
--- admin/category.php	(revision 1332)
+++ admin/category.php	(revision 1399)
@@ -157,14 +157,4 @@
 $title = $cat_id ? html::escapeHTML($cat_title) : __('New category');
 
-dcPage::open($title,
-	dcPage::jsConfirmClose('category-form').
-	dcPage::jsToolBar().
-	dcPage::jsLoad('js/_category.js')
-);
-
-if (!empty($_GET['upd'])) {
-	dcPage::message(__('Category has been successfully updated.'));
-}
-
 $elements = array(
 	html::escapeHTML($core->blog->name) => '',
@@ -177,12 +167,22 @@
 }
 $elements['<span class="page-title">'.$title.'</span>'] = '';
-echo dcPage::breadcrumb($elements);
+
+dcPage::open($title,
+	dcPage::jsConfirmClose('category-form').
+	dcPage::jsToolBar().
+	dcPage::jsLoad('js/_category.js'),
+	dcPage::breadcrumb($elements)
+);
+
+if (!empty($_GET['upd'])) {
+	dcPage::message(__('Category has been successfully updated.'));
+}
 
 echo
 '<form action="category.php" method="post" id="category-form">'.
-'<fieldset><legend>'.__('Category information').'</legend>'.
-'<p><label class="required" for="cat_title"><abbr title="'.__('Required field').'">*</abbr> '.__('Title:').' '.
+'<h3>'.__('Category information').'</h3>'.
+'<p><label class="required" for="cat_title"><abbr title="'.__('Required field').'">*</abbr> '.__('Title:').'</label> '.
 form::field('cat_title',40,255,html::escapeHTML($cat_title)).
-'</label></p>';
+'</p>';
 if (!$cat_id)
 {
@@ -202,6 +202,7 @@
 echo
 '<div class="lockable">'.
-'<p><label for="cat_url">'.__('URL:').' '.form::field('cat_url',40,255,html::escapeHTML($cat_url)).
-'</label></p>'.
+'<p><label for="cat_url">'.__('URL:').'</label> '
+.form::field('cat_url',40,255,html::escapeHTML($cat_url)).
+'</p>'.
 '<p class="form-note warn" id="note-cat-url">'.
 __('Warning: If you set the URL manually, it may conflict with another category.').'</p>'.
@@ -216,5 +217,4 @@
 $core->formNonce().
 '</p>'.
-'</fieldset>'.
 '</form>';
 
@@ -222,5 +222,5 @@
 {
 	echo
-	'<h3>'.__('Move this category').'</h3>'.
+	'<h3 class="border-top">'.__('Move this category').'</h3>'.
 	'<div class="two-cols">'.
 	'<div class="col">'.
@@ -228,6 +228,6 @@
 	'<form action="category.php" method="post">'.
 	'<fieldset><legend>'.__('Category parent').'</legend>'.
-	'<p><label for="cat_parent" class="classic">'.__('Parent:').' '.
-	form::combo('cat_parent',$allowed_parents,$cat_parent).'</label></p>'.
+	'<p><label for="cat_parent" class="classic">'.__('Parent:').'</label> '.
+	form::combo('cat_parent',$allowed_parents,$cat_parent).'</p>'.
 	'<p><input type="submit" accesskey="s" value="'.__('Save').'" />'.
 	form::hidden(array('id'),$cat_id).$core->formNonce().'</p>'.
Index: admin/comment.php
===================================================================
--- admin/comment.php	(revision 1332)
+++ admin/comment.php	(revision 1399)
@@ -160,4 +160,20 @@
 /* DISPLAY
 -------------------------------------------------------- */
+if ($comment_id) {
+	$breadcrumb = dcPage::breadcrumb(
+		array(
+			html::escapeHTML($core->blog->name) => '',
+			html::escapeHTML($post_title) => $core->getPostAdminURL($post_type,$post_id).'&amp;co=1#c'.$comment_id,
+			'<span class="page-title">'.__('Edit comment').'</span>' => ''
+		));
+} else {
+	$breadcrumb = dcPage::breadcrumb(
+		array(
+			html::escapeHTML($core->blog->name) => '',
+			html::escapeHTML($post_title) => $core->getPostAdminURL($post_type,$post_id),
+			'<span class="page-title">'.__('Edit comment').'</span>' => ''
+		));
+}
+
 dcPage::open(__('Edit comment'),
 	dcPage::jsConfirmClose('comment-form').
@@ -165,5 +181,6 @@
 	dcPage::jsLoad('js/_comment.js').
 	# --BEHAVIOR-- adminCommentHeaders
-	$core->callBehavior('adminCommentHeaders')
+	$core->callBehavior('adminCommentHeaders'),
+	$breadcrumb
 );
 
@@ -183,36 +200,33 @@
 		.'">'.__('Send an e-mail').'</a>';
 	}
-	
-	echo dcPage::breadcrumb(
-		array(
-			html::escapeHTML($core->blog->name) => '',
-			html::escapeHTML($post_title) => $core->getPostAdminURL($post_type,$post_id).'&amp;co=1#c'.$comment_id,
-			'<span class="page-title">'.__('Edit comment').'</span>' => ''
-		));
 
 	echo
 	'<form action="comment.php" method="post" id="comment-form">'.
-	'<p>'.__('IP address:').'<br /> '.
+	'<div class="fieldset">'.
+	'<h3>'.__('Information collected').'</h3>'.
+	'<p>'.__('IP address:').' '.
 	'<a href="comments.php?ip='.$comment_ip.'">'.$comment_ip.'</a></p>'.
 	
-	'<p>'.__('Date:').'<br /> '.
+	'<p>'.__('Date:').' '.
 	dt::dt2str(__('%Y-%m-%d %H:%M'),$comment_dt).'</p>'.
-	
-	'<p><label for="comment_author" class="required"><abbr title="'.__('Required field').'">*</abbr>'.__('Author:').
+	'</div>'.
+
+	'<h3>'.__('Comment submitted').'</h3>'.	
+	'<p><label for="comment_author" class="required"><abbr title="'.__('Required field').'">*</abbr>'.__('Author:').'</label>'.
 	form::field('comment_author',30,255,html::escapeHTML($comment_author)).
-	'</label></p>'.
-	
-	'<p><label for="comment_email">'.__('Email:').
+	'</p>'.
+	
+	'<p><label for="comment_email">'.__('Email:').'</label>'.
 	form::field('comment_email',30,255,html::escapeHTML($comment_email)).
-	$comment_mailto.
-	'</label></p>'.
-	
-	'<p><label for="comment_site">'.__('Web site:').
+	'<span>'.$comment_mailto.'</span>'.
+	'</p>'.
+	
+	'<p><label for="comment_site">'.__('Web site:').'</label>'.
 	form::field('comment_site',30,255,html::escapeHTML($comment_site)).
-	'</label></p>'.
-	
-	'<p><label for="comment_status">'.__('Status:').
+	'</p>'.
+	
+	'<p><label for="comment_status">'.__('Status:').'</label>'.
 	form::combo('comment_status',$status_combo,$comment_status,'','',!$can_publish).
-	'</label></p>'.
+	'</p>'.
 	
 	# --BEHAVIOR-- adminAfterCommentDesc
Index: admin/comments.php
===================================================================
--- admin/comments.php	(revision 1332)
+++ admin/comments.php	(revision 1424)
@@ -169,11 +169,11 @@
 $starting_script .= $core->callBehavior('adminCommentsHeaders');
 
-dcPage::open(__('Comments and trackbacks'),$starting_script);
-
-echo dcPage::breadcrumb(
-	array(
-		html::escapeHTML($core->blog->name) => '',
-		'<span class="page-title">'.__('Comments and trackbacks').'</span>' => ''
-	));
+dcPage::open(__('Comments and trackbacks'),$starting_script,
+	dcPage::breadcrumb(
+		array(
+			html::escapeHTML($core->blog->name) => '',
+			'<span class="page-title">'.__('Comments and trackbacks').'</span>' => ''
+		))
+);
 
 if (!$core->error->flag())
@@ -183,49 +183,4 @@
 		unset($_SESSION['comments_del_spam']);
 	}
-	
-	# Filters
-	if (!$show_filters) {
-		echo '<p><a id="filter-control" class="form-control" href="#">'.
-		__('Filters').'</a></p>';
-	}
-	
-	echo
-	'<form action="comments.php" method="get" id="filters-form">'.
-	'<fieldset><legend>'.__('Filters').'</legend>'.
-	'<div class="three-cols">'.
-	'<div class="col">'.
-	'<label for="type">'.__('Type:').' '.
-	form::combo('type',$type_combo,$type).
-	'</label> '.
-	'<label for="status">'.__('Status:').' '.
-	form::combo('status',$status_combo,$status).
-	'</label>'.
-	'</div>'.
-	
-	'<div class="col">'.
-	'<p><label for="sortby">'.__('Order by:').' '.
-	form::combo('sortby',$sortby_combo,$sortby).
-	'</label> '.
-	'<label for="order">'.__('Sort:').' '.
-	form::combo('order',$order_combo,$order).
-	'</label></p>'.
-	'<p><label for="nb" class="classic">'.	form::field('nb',3,3,$nb_per_page).' '.
-	__('Comments per page').'</label></p>'.
-	'</div>'.
-	
-	'<div class="col">'.
-	'<p><label for="author">'.__('Comment author:').' '.
-	form::field('author',20,255,html::escapeHTML($author)).
-	'</label>'.
-	'<label for="ip">'.__('IP address:').' '.
-	form::field('ip',20,39,html::escapeHTML($ip)).
-	'</label></p>'.
-	'<p><input type="submit" value="'.__('Apply filters').'" /></p>'.
-	'</div>'.
-	
-	'</div>'.
-	'<br class="clear" />'. //Opera sucks
-	'</fieldset>'.
-	'</form>';
 	
 	$spam_count = $core->blog->getComments(array('comment_status'=>-2),true)->f(0);
@@ -237,5 +192,5 @@
 		if (!$with_spam || ($status != -2)) {
 			if ($spam_count == 1) {
-				echo '<p>'.sprintf(__('You have one spam comments.'),'<strong>'.$spam_count.'</strong>').' '.
+				echo '<p>'.sprintf(__('You have one spam comment.'),'<strong>'.$spam_count.'</strong>').' '.
 				'<a href="comments.php?status=-2">'.__('Show it.').'</a></p>';
 			} elseif ($spam_count > 1) {
@@ -246,4 +201,5 @@
 		
 		echo
+			'<p class="no-margin">'.
 			$core->formNonce().
 			'<input name="delete_all_spam" class="delete" type="submit" value="'.__('Delete all spams').'" /></p>';
@@ -254,4 +210,44 @@
 		echo '</form>';
 	}
+
+	# Filters
+	if (!$show_filters) {
+		echo '<p><a id="filter-control" class="form-control" href="#">'.
+		__('Filter comments and trackbacks list').'</a></p>';
+	}
+	
+	echo
+	'<form action="comments.php" method="get" id="filters-form">'.
+	'<h3>'.__('Filter comments and trackbacks list').'</h3>'.
+	'<div class="table">'.
+
+	'<div class="cell">'.
+	'<p><label for="type" class="ib">'.__('Type:').'</label> '.
+	form::combo('type',$type_combo,$type).'</p> '.
+	'<p><label for="status" class="ib">'.__('Status:').'</label> '.
+	form::combo('status',$status_combo,$status).'</p>'.
+	'</div>'.
+	
+	'<div class="cell">'.
+	'<p><label for="author" class="ib">'.__('Author:').'</label> '.
+	form::field('author',20,255,html::escapeHTML($author)).'</p>'.
+	'<p><label for="ip" class="ib">'.__('IP address:').'</label> '.
+	form::field('ip',20,39,html::escapeHTML($ip)).'</p>'.
+	'</div>'.
+	
+	'<div class="cell filters-options">'.
+	'<p><label for="sortby" class="ib">'.__('Order by:').'</label> '.
+	form::combo('sortby',$sortby_combo,$sortby).'</p>'.
+	'<p><label for="order" class="ib">'.__('Sort:').'</label> '.
+	form::combo('order',$order_combo,$order).'</p>'.
+	'<p><span class="label ib">Afficher</span> <label for="nb" class="classic">'.
+	form::field('nb',3,3,$nb_per_page).' '.
+	__('comments per page').'</label></p>'.
+	'</div>'.
+	
+	'</div>'.
+	'<p><input type="submit" value="'.__('Apply filters').'" />'.
+	'<br class="clear" /></p>'. //Opera sucks
+	'</form>';
 	
 	# Show comments
Index: admin/install/index.php
===================================================================
--- admin/install/index.php	(revision 1280)
+++ admin/install/index.php	(revision 1399)
@@ -320,19 +320,19 @@
 	'<form action="index.php" method="post">'.
 	'<fieldset><legend>'.__('User information').'</legend>'.
-	'<p><label for="u_firstname">'.__('First Name:').' '.
-	form::field('u_firstname',30,255,html::escapeHTML($u_firstname)).'</label></p>'.
-	'<p><label for="u_name">'.__('Last Name:').' '.
-	form::field('u_name',30,255,html::escapeHTML($u_name)).'</label></p>'.
-	'<p><label for="u_email">'.__('Email:').' '.
-	form::field('u_email',30,255,html::escapeHTML($u_email)).'</label></p>'.
+	'<p><label for="u_firstname">'.__('First Name:').'</label> '.
+	form::field('u_firstname',30,255,html::escapeHTML($u_firstname)).'</p>'.
+	'<p><label for="u_name">'.__('Last Name:').'</label> '.
+	form::field('u_name',30,255,html::escapeHTML($u_name)).'</p>'.
+	'<p><label for="u_email">'.__('Email:').'</label> '.
+	form::field('u_email',30,255,html::escapeHTML($u_email)).'</p>'.
 	'</fieldset>'.
 	
 	'<fieldset><legend>'.__('Username and password').'</legend>'.
-	'<p><label for="u_login" class="required"><abbr title="'.__('Required field').'">*</abbr> '.__('Username:').' '.
-	form::field('u_login',30,32,html::escapeHTML($u_login)).'</label></p>'.
-	'<p><label for="u_pwd" class="required"><abbr title="'.__('Required field').'">*</abbr> '.__('Password:').' '.
-	form::password('u_pwd',30,255).'</label></p>'.
-	'<p><label for="u_pwd2" class="required"><abbr title="'.__('Required field').'">*</abbr> '.__('Confirm password:').' '.
-	form::password('u_pwd2',30,255).'</label></p>'.
+	'<p><label for="u_login" class="required"><abbr title="'.__('Required field').'">*</abbr> '.__('Username:').'</label> '.
+	form::field('u_login',30,32,html::escapeHTML($u_login)).'</p>'.
+	'<p><label for="u_pwd" class="required"><abbr title="'.__('Required field').'">*</abbr> '.__('Password:').'</label> '.
+	form::password('u_pwd',30,255).'</p>'.
+	'<p><label for="u_pwd2" class="required"><abbr title="'.__('Required field').'">*</abbr> '.__('Confirm password:').'</label> '.
+	form::password('u_pwd2',30,255).'</p>'.
 	'</fieldset>'.
 	
Index: admin/install/wizard.php
===================================================================
--- admin/install/wizard.php	(revision 1179)
+++ admin/install/wizard.php	(revision 1399)
@@ -178,16 +178,16 @@
 
 '<form action="wizard.php" method="post">'.
-'<p><label class="required" for="DBDRIVER"><abbr title="'.__('Required field').'">*</abbr> '.__('Database type:').' '.
-form::combo('DBDRIVER',array('MySQL'=>'mysql','PostgreSQL'=>'pgsql'),$DBDRIVER).'</label></p>'.
-'<p><label for="DBHOST">'.__('Database Host Name:').' '.
-form::field('DBHOST',30,255,html::escapeHTML($DBHOST)).'</label></p>'.
-'<p><label for="DBNAME">'.__('Database Name:').' '.
-form::field('DBNAME',30,255,html::escapeHTML($DBNAME)).'</label></p>'.
-'<p><label for="DBUSER">'.__('Database User Name:').' '.
-form::field('DBUSER',30,255,html::escapeHTML($DBUSER)).'</label></p>'.
-'<p><label for="DBPASSWORD">'.__('Database Password:').' '.
-form::password('DBPASSWORD',30,255).'</label></p>'.
-'<p><label for="DBPREFIX" class="required"><abbr title="'.__('Required field').'">*</abbr> '.__('Database Tables Prefix:').' '.
-form::field('DBPREFIX',30,255,html::escapeHTML($DBPREFIX)).'</label></p>'.
+'<p><label class="required" for="DBDRIVER"><abbr title="'.__('Required field').'">*</abbr> '.__('Database type:').'</label> '.
+form::combo('DBDRIVER',array('MySQL'=>'mysql','PostgreSQL'=>'pgsql'),$DBDRIVER).'</p>'.
+'<p><label for="DBHOST">'.__('Database Host Name:').'</label> '.
+form::field('DBHOST',30,255,html::escapeHTML($DBHOST)).'</p>'.
+'<p><label for="DBNAME">'.__('Database Name:').'</label> '.
+form::field('DBNAME',30,255,html::escapeHTML($DBNAME)).'</p>'.
+'<p><label for="DBUSER">'.__('Database User Name:').'</label> '.
+form::field('DBUSER',30,255,html::escapeHTML($DBUSER)).'</p>'.
+'<p><label for="DBPASSWORD">'.__('Database Password:').'</label> '.
+form::password('DBPASSWORD',30,255).'</p>'.
+'<p><label for="DBPREFIX" class="required"><abbr title="'.__('Required field').'">*</abbr> '.__('Database Tables Prefix:').'</label> '.
+form::field('DBPREFIX',30,255,html::escapeHTML($DBPREFIX)).'</p>'.
 
 '<p><input type="submit" value="'.__('Continue').'" /></p>'.
Index: admin/js/_media.js
===================================================================
--- admin/js/_media.js	(revision 1325)
+++ admin/js/_media.js	(revision 1461)
@@ -57,5 +57,8 @@
 		autoUpload: false,
 		sequentialUploads: true,
-		disabled: true
+		uploadTemplateId: null,
+		downloadTemplateId: null,
+		uploadTemplate: template_upload,
+		downloadTemplate: template_download
 	}).bind('fileuploadadd', function(e, data) {
 		$('.button.cancel','#fileupload .fileupload-buttonbar').show();
Index: admin/js/_post.js
===================================================================
--- admin/js/_post.js	(revision 1414)
+++ admin/js/_post.js	(revision 1490)
@@ -122,11 +122,24 @@
 			hide: $('#post_password').val() == ''
 		});
-		
+		$('#post_status').parent().toggleWithLegend($('#post_status'),{
+			cookie: 'dcx_post_status'
+		});
+		$('#post_dt').parent().toggleWithLegend($('#post_dt').parent().children().not('label'),{
+			cookie: 'dcx_post_dt'
+		});
+		$('#post_format').parent().toggleWithLegend($('#post_format').parent().children().not('label').add($('#post_format').parents('p').next()),{
+			cookie: 'dcx_post_format'
+		});
+		$('#cat_id').parent().toggleWithLegend($('#cat_id'),{
+			cookie: 'cat_id'
+		});
+		$('#post_url').parent().toggleWithLegend($('#post_url').parent().children().not('label'),{
+			cookie: 'post_url'
+		});
 		// We load toolbar on excerpt only when it's ready
 		$('#excerpt-area label').toggleWithLegend($('#excerpt-area').children().not('label'),{
 			fn: function() { excerptTb.switchMode(formatField.value); },
 			cookie: 'dcx_post_excerpt',
-			hide: $('#post_excerpt').val() == '',
-			legend_click: true
+			hide: $('#post_excerpt').val() == ''
 		});
 		
@@ -150,4 +163,5 @@
 		var a = document.createElement('a');
 		a.href = '#';
+		a.className = 'button';
 		$(a).click(function() {
 			var params = {
Index: admin/js/common.js
===================================================================
--- admin/js/common.js	(revision 1303)
+++ admin/js/common.js	(revision 1395)
@@ -224,4 +224,5 @@
 				imgE.style.top = '1.7em';
 				imgE.style.left = ($(this).width()+4)+'px';
+				imgE.alt=dotclear.msg.click_to_unlock;
 				$(imgE).css('cursor','pointer');
 
Index: admin/js/ie7/IE9.js
===================================================================
--- admin/js/ie7/IE9.js	(revision 1456)
+++ admin/js/ie7/IE9.js	(revision 1456)
@@ -0,0 +1,2901 @@
+/*
+  IE7/IE8/IE9.js - copyright 2004-2010, Dean Edwards
+  http://code.google.com/p/ie7-js/
+  http://www.opensource.org/licenses/mit-license.php
+*/
+
+/* W3C compliance for Microsoft Internet Explorer */
+
+/* credits/thanks:
+  Shaggy, Martijn Wargers, Jimmy Cerra, Mark D Anderson,
+  Lars Dieckow, Erik Arvidsson, Gellért Gyuris, James Denny,
+  Unknown W Brackets, Benjamin Westfarer, Rob Eberhardt,
+  Bill Edney, Kevin Newman, James Crompton, Matthew Mastracci,
+  Doug Wright, Richard York, Kenneth Kolano, MegaZone,
+  Thomas Verelst, Mark 'Tarquin' Wilton-Jones, Rainer Åhlfors,
+  David Zulaica, Ken Kolano, Kevin Newman, Sjoerd Visscher,
+  Ingo Chao
+*/
+
+// timestamp: Fri, 30 Apr 2010 20:59:18
+
+(function(window, document) {
+
+var IE7 = window.IE7 = {
+  version: "2.1(beta4)",
+  toString: K("[IE7]")
+};
+IE7.compat = 9;
+var appVersion = IE7.appVersion = navigator.appVersion.match(/MSIE (\d\.\d)/)[1] - 0;
+
+if (/ie7_off/.test(top.location.search) || appVersion < 5.5 || appVersion >= IE7.compat) return;
+
+var MSIE5 = appVersion < 6;
+
+var Undefined = K();
+var documentElement = document.documentElement, body, viewport;
+var ANON = "!";
+var HEADER = ":link{ie7-link:link}:visited{ie7-link:visited}";
+
+// -----------------------------------------------------------------------
+// external
+// -----------------------------------------------------------------------
+
+var RELATIVE = /^[\w\.]+[^:]*$/;
+function makePath(href, path) {
+  if (RELATIVE.test(href)) href = (path || "") + href;
+  return href;
+};
+
+function getPath(href, path) {
+  href = makePath(href, path);
+  return href.slice(0, href.lastIndexOf("/") + 1);
+};
+
+// Get the path to this script
+var script = document.scripts[document.scripts.length - 1];
+var path = getPath(script.src);
+
+// Use microsoft's http request object to load external files
+try {
+  var httpRequest = new ActiveXObject("Microsoft.XMLHTTP");
+} catch (ex) {
+  // ActiveX disabled
+}
+
+var fileCache = {};
+function loadFile(href, path) {
+  try {
+    href = makePath(href, path);
+    if (!fileCache[href]) {
+      httpRequest.open("GET", href, false);
+      httpRequest.send();
+      if (httpRequest.status == 0 || httpRequest.status == 200) {
+        fileCache[href] = httpRequest.responseText;
+      }
+    }
+  } catch (ex) {
+    // ignore errors
+  }
+  return fileCache[href] || "";
+};
+
+// -----------------------------------------------------------------------
+// OO support
+// -----------------------------------------------------------------------
+
+
+// This is a cut-down version of base2 (http://code.google.com/p/base2/)
+
+var _slice = Array.prototype.slice;
+
+// private
+var _FORMAT = /%([1-9])/g;
+var _LTRIM = /^\s\s*/;
+var _RTRIM = /\s\s*$/;
+var _RESCAPE = /([\/()[\]{}|*+-.,^$?\\])/g;           // safe regular expressions
+var _BASE = /\bbase\b/;
+var _HIDDEN = ["constructor", "toString"];            // only override these when prototyping
+
+var prototyping;
+
+function Base(){};
+Base.extend = function(_instance, _static) {
+  // Build the prototype.
+  prototyping = true;
+  var _prototype = new this;
+  extend(_prototype, _instance);
+  prototyping = false;
+
+  // Create the wrapper for the constructor function.
+  var _constructor = _prototype.constructor;
+  function klass() {
+    // Don't call the constructor function when prototyping.
+    if (!prototyping) _constructor.apply(this, arguments);
+  };
+  _prototype.constructor = klass;
+
+  // Build the static interface.
+  klass.extend = arguments.callee;
+  extend(klass, _static);
+  klass.prototype = _prototype;
+  return klass;
+};
+Base.prototype.extend = function(source) {
+  return extend(this, source);
+};
+
+
+// A collection of regular expressions and their associated replacement values.
+// A Base class for creating parsers.
+
+var HASH     = "#";
+var ITEMS    = "#";
+var KEYS     = ".";
+var COMPILED = "/";
+
+var REGGRP_BACK_REF        = /\\(\d+)/g,
+    REGGRP_ESCAPE_COUNT    = /\[(\\.|[^\]\\])+\]|\\.|\(\?/g,
+    REGGRP_PAREN           = /\(/g,
+    REGGRP_LOOKUP          = /\$(\d+)/,
+    REGGRP_LOOKUP_SIMPLE   = /^\$\d+$/,
+    REGGRP_LOOKUPS         = /(\[(\\.|[^\]\\])+\]|\\.|\(\?)|\(/g,
+    REGGRP_DICT_ENTRY      = /^<#\w+>$/,
+    REGGRP_DICT_ENTRIES    = /<#(\w+)>/g;
+
+var RegGrp = Base.extend({
+  constructor: function(values) {
+    this[KEYS] = [];
+    this[ITEMS] = {};
+    this.merge(values);
+  },
+
+  //dictionary: null,
+  //ignoreCase: false,
+
+  add: function(expression, replacement) {
+    delete this[COMPILED];
+    if (expression instanceof RegExp) {
+      expression = expression.source;
+    }
+    if (!this[HASH + expression]) this[KEYS].push(String(expression));
+    return this[ITEMS][HASH + expression] = new RegGrp.Item(expression, replacement, this);
+  },
+
+  compile: function(recompile) {
+    if (recompile || !this[COMPILED]) {
+      this[COMPILED] = new RegExp(this, this.ignoreCase ? "gi" : "g");
+    }
+    return this[COMPILED];
+  },
+
+  merge: function(values) {
+    for (var i in values) this.add(i, values[i]);
+  },
+
+  exec: function(string) {
+    var group = this,
+        patterns = group[KEYS],
+        items = group[ITEMS], item;
+    var result = this.compile(true).exec(string);
+    if (result) {
+      // Loop through the RegGrp items.
+      var i = 0, offset = 1;
+      while ((item = items[HASH + patterns[i++]])) {
+        var next = offset + item.length + 1;
+        if (result[offset]) { // do we have a result?
+          if (item.replacement === 0) {
+            return group.exec(string);
+          } else {
+            var args = result.slice(offset, next), j = args.length;
+            while (--j) args[j] = args[j] || ""; // some platforms return null/undefined for non-matching sub-expressions
+            args[0] = {match: args[0], item: item};
+            return args;
+          }
+        }
+        offset = next;
+      }
+    }
+    return null;
+  },
+
+  parse: function(string) {
+    string += ""; // type safe
+    var group = this,
+        patterns = group[KEYS],
+        items = group[ITEMS];
+    return string.replace(this.compile(), function(match) {
+      var args = [], item, offset = 1, i = arguments.length;
+      while (--i) args[i] = arguments[i] || ""; // some platforms return null/undefined for non-matching sub-expressions
+      // Loop through the RegGrp items.
+      while ((item = items[HASH + patterns[i++]])) {
+        var next = offset + item.length + 1;
+        if (args[offset]) { // do we have a result?
+          var replacement = item.replacement;
+          switch (typeof replacement) {
+            case "function":
+              return replacement.apply(group, args.slice(offset, next));
+            case "number":
+              return args[offset + replacement];
+            default:
+              return replacement;
+          }
+        }
+        offset = next;
+      }
+      return match;
+    });
+  },
+
+  toString: function() {
+    var strings = [],
+        keys = this[KEYS],
+        items = this[ITEMS], item;
+    for (var i = 0; item = items[HASH + keys[i]]; i++) {
+      strings[i] = item.source;
+    }
+    return "(" + strings.join(")|(") + ")";
+  }
+}, {
+  IGNORE: null, // a null replacement value means that there is no replacement.
+
+  Item: Base.extend({
+    constructor: function(source, replacement, owner) {
+      var length = source.indexOf("(") === -1 ? 0 : RegGrp.count(source);
+
+      var dictionary = owner.dictionary;
+      if (dictionary && source.indexOf("<#") !== -1) {
+        if (REGGRP_DICT_ENTRY.test(source)) {
+          var entry = dictionary[ITEMS][HASH + source.slice(2, -1)];
+          source = entry.replacement;
+          length = entry._length;
+        } else {
+          source = dictionary.parse(source);
+        }
+      }
+
+      if (typeof replacement == "number") replacement = String(replacement);
+      else if (replacement == null) replacement = 0;
+
+      // Does the expression use sub-expression lookups?
+      if (typeof replacement == "string" && REGGRP_LOOKUP.test(replacement)) {
+        if (REGGRP_LOOKUP_SIMPLE.test(replacement)) { // A simple lookup? (e.g. "$2").
+          // Store the index (used for fast retrieval of matched strings).
+          var index = replacement.slice(1) - 0;
+          if (index && index <= length) replacement = index;
+        } else {
+          // A complicated lookup (e.g. "Hello $2 $1.").
+          var lookup = replacement, regexp;
+          replacement = function(match) {
+            if (!regexp) {
+              regexp = new RegExp(source, "g" + (this.ignoreCase ? "i": ""));
+            }
+            return match.replace(regexp, lookup);
+          };
+        }
+      }
+
+      this.length = length;
+      this.source = String(source);
+      this.replacement = replacement;
+    }
+  }),
+
+  count: function(expression) {
+    return (String(expression).replace(REGGRP_ESCAPE_COUNT, "").match(REGGRP_PAREN) || "").length;
+  }
+});
+
+var Dictionary = RegGrp.extend({
+  parse: function(phrase) {
+    // Prevent sub-expressions in dictionary entries from capturing.
+    var entries = this[ITEMS];
+    return phrase.replace(REGGRP_DICT_ENTRIES, function(match, entry) {
+      entry = entries[HASH + entry];
+      return entry ? entry._nonCapturing : match;
+    });
+  },
+
+  add: function(expression, replacement) {
+    // Get the underlying replacement value.
+    if (replacement instanceof RegExp) {
+      replacement = replacement.source;
+    }
+    // Translate the replacement.
+    // The result is the original replacement recursively parsed by this dictionary.
+    var nonCapturing = replacement.replace(REGGRP_LOOKUPS, _nonCapture);
+    if (replacement.indexOf("(") !== -1) {
+      var realLength = RegGrp.count(replacement);
+    }
+    if (replacement.indexOf("<#") !== -1) {
+      replacement = this.parse(replacement);
+      nonCapturing = this.parse(nonCapturing);
+    }
+    var item = this.base(expression, replacement);
+    item._nonCapturing = nonCapturing;
+    item._length = realLength || item.length; // underlying number of sub-groups
+    return item;
+  },
+
+  toString: function() {
+    return "(<#" + this[PATTERNS].join(">)|(<#") + ">)";
+  }
+});
+
+function _nonCapture(match, escaped) {
+  return escaped || "(?:"; // non-capturing
+};
+
+// =========================================================================
+// lang/extend.js
+// =========================================================================
+
+function extend(object, source) { // or extend(object, key, value)
+  if (object && source) {
+    var proto = (typeof source == "function" ? Function : Object).prototype;
+    // Add constructor, toString etc
+    var i = _HIDDEN.length, key;
+    if (prototyping) while (key = _HIDDEN[--i]) {
+      var value = source[key];
+      if (value != proto[key]) {
+        if (_BASE.test(value)) {
+          _override(object, key, value)
+        } else {
+          object[key] = value;
+        }
+      }
+    }
+    // Copy each of the source object's properties to the target object.
+    for (key in source) if (typeof proto[key] == "undefined") {
+      var value = source[key];
+      // Check for method overriding.
+      if (object[key] && typeof value == "function" && _BASE.test(value)) {
+        _override(object, key, value);
+      } else {
+        object[key] = value;
+      }
+    }
+  }
+  return object;
+};
+
+function _override(object, name, method) {
+  // Override an existing method.
+  var ancestor = object[name];
+  object[name] = function() {
+    var previous = this.base;
+    this.base = ancestor;
+    var returnValue = method.apply(this, arguments);
+    this.base = previous;
+    return returnValue;
+  };
+};
+
+function combine(keys, values) {
+  // Combine two arrays to make a hash.
+  if (!values) values = keys;
+  var hash = {};
+  for (var i in keys) hash[i] = values[i];
+  return hash;
+};
+
+function format(string) {
+  // Replace %n with arguments[n].
+  // e.g. format("%1 %2%3 %2a %1%3", "she", "se", "lls");
+  // ==> "she sells sea shells"
+  // Only %1 - %9 supported.
+  var args = arguments;
+  var _FORMAT = new RegExp("%([1-" + arguments.length + "])", "g");
+  return String(string).replace(_FORMAT, function(match, index) {
+    return index < args.length ? args[index] : match;
+  });
+};
+
+function match(string, expression) {
+  // Same as String.match() except that this function will return an empty
+  // array if there is no match.
+  return String(string).match(expression) || [];
+};
+
+function rescape(string) {
+  // Make a string safe for creating a RegExp.
+  return String(string).replace(_RESCAPE, "\\$1");
+};
+
+// http://blog.stevenlevithan.com/archives/faster-trim-javascript
+function trim(string) {
+  return String(string).replace(_LTRIM, "").replace(_RTRIM, "");
+};
+
+function K(k) {
+  return function() {
+    return k;
+  };
+};
+
+// -----------------------------------------------------------------------
+// parsing
+// -----------------------------------------------------------------------
+
+var Parser = RegGrp.extend({ignoreCase: true});
+
+var SINGLE_QUOTES       = /'/g,
+    ESCAPED             = /'(\d+)'/g,
+    ESCAPE              = /\\/g,
+    UNESCAPE            = /\\([nrtf'"])/g;
+
+var strings = [];
+
+var encoder = new Parser({
+  // comments
+  "<!\\-\\-|\\-\\->": "",
+  "\\/\\*[^*]*\\*+([^\\/][^*]*\\*+)*\\/": "",
+  // get rid
+  "@(namespace|import)[^;\\n]+[;\\n]": "",
+  // strings
+  "'(\\\\.|[^'\\\\])*'": encodeString,
+  '"(\\\\.|[^"\\\\])*"': encodeString,
+  // white space
+  "\\s+": " "
+});
+
+function encode(selector) {
+  return encoder.parse(selector).replace(UNESCAPE, "$1");
+};
+
+function decode(query) {
+  // put string values back
+  return query.replace(ESCAPED, decodeString);
+};
+
+function encodeString(string) {
+  var index = strings.length;
+  strings[index] = string.slice(1, -1)
+    .replace(UNESCAPE, "$1")
+    .replace(SINGLE_QUOTES, "\\'");
+  return "'" + index + "'";
+};
+
+function decodeString(match, index) {
+  var string = strings[index];
+  if (string == null) return match;
+  return "'" + strings[index] + "'";
+};
+
+function getString(value) {
+  return value.indexOf("'") === 0 ? strings[value.slice(1, - 1)] : value;
+};
+
+// clone a "width" function to create a "height" function
+var rotater = new RegGrp({
+  Width: "Height",
+  width: "height",
+  Left:  "Top",
+  left:  "top",
+  Right: "Bottom",
+  right: "bottom",
+  onX:   "onY"
+});
+
+function rotate(fn) {
+  return rotater.parse(fn);
+};
+
+// -----------------------------------------------------------------------
+// event handling
+// -----------------------------------------------------------------------
+
+var eventHandlers = [];
+
+function addResize(handler) {
+  addRecalc(handler);
+  addEventHandler(window, "onresize", handler);
+};
+
+// add an event handler (function) to an element
+function addEventHandler(element, type, handler) {
+  element.attachEvent(type, handler);
+  // store the handler so it can be detached later
+  eventHandlers.push(arguments);
+};
+
+// remove an event handler assigned to an element by IE7
+function removeEventHandler(element, type, handler) {
+  try {
+    element.detachEvent(type, handler);
+  } catch (ex) {
+    // write a letter of complaint to microsoft..
+  }
+};
+
+// remove event handlers (they eat memory)
+addEventHandler(window, "onunload", function() {
+  var handler;
+  while (handler = eventHandlers.pop()) {
+    removeEventHandler(handler[0], handler[1], handler[2]);
+  }
+});
+
+function register(handler, element, condition) { // -@DRE
+  //var set = handler[element.uniqueID];
+  if (!handler.elements) handler.elements = {};
+  if (condition) handler.elements[element.uniqueID] = element;
+  else delete handler.elements[element.uniqueID];
+  //return !set && condition;
+  return condition;
+};
+
+addEventHandler(window, "onbeforeprint", function() {
+  if (!IE7.CSS.print) new StyleSheet("print");
+  IE7.CSS.print.recalc();
+});
+
+// -----------------------------------------------------------------------
+// pixel conversion
+// -----------------------------------------------------------------------
+
+// this is handy because it means that web developers can mix and match
+//  measurement units in their style sheets. it is not uncommon to
+//  express something like padding in "em" units whilst border thickness
+//  is most often expressed in pixels.
+
+var PIXEL = /^\d+(px)?$/i;
+var PERCENT = /^\d+%$/;
+var getPixelValue = function(element, value) {
+  if (PIXEL.test(value)) return parseInt(value);
+  var style = element.style.left;
+  var runtimeStyle = element.runtimeStyle.left;
+  element.runtimeStyle.left = element.currentStyle.left;
+  element.style.left = value || 0;
+  value = element.style.pixelLeft;
+  element.style.left = style;
+  element.runtimeStyle.left = runtimeStyle;
+  return value;
+};
+
+// -----------------------------------------------------------------------
+// generic
+// -----------------------------------------------------------------------
+
+var $IE7 = "ie7-";
+
+var Fix = Base.extend({
+  constructor: function() {
+    this.fixes = [];
+    this.recalcs = [];
+  },
+  init: Undefined
+});
+
+// a store for functions that will be called when refreshing IE7
+var recalcs = [];
+function addRecalc(recalc) {
+  recalcs.push(recalc);
+};
+
+IE7.recalc = function() {
+  IE7.HTML.recalc();
+  // re-apply style sheet rules (re-calculate ie7 classes)
+  IE7.CSS.recalc();
+  // apply global fixes to the document
+  for (var i = 0; i < recalcs.length; i++) recalcs[i]();
+};
+
+function isFixed(element) {
+  return element.currentStyle["ie7-position"] == "fixed";
+};
+
+// original style
+function getDefinedStyle(element, propertyName) {
+  return element.currentStyle[$IE7 + propertyName] || element.currentStyle[propertyName];
+};
+
+function setOverrideStyle(element, propertyName, value) {
+  if (element.currentStyle[$IE7 + propertyName] == null) {
+    element.runtimeStyle[$IE7 + propertyName] = element.currentStyle[propertyName];
+  }
+  element.runtimeStyle[propertyName] = value;
+};
+
+// Create a temporary element which is used to inherit styles
+// from the target element.
+function createTempElement(tagName) {
+  var element = document.createElement(tagName || "object");
+  element.style.cssText = "position:absolute;padding:0;display:block;border:none;clip:rect(0 0 0 0);left:-9999";
+  element.ie7_anon = true;
+  return element;
+};
+
+
+// =========================================================================
+// ie7-css.js
+// =========================================================================
+
+var NEXT_SIBLING        = "(e.nextSibling&&IE7._getElementSibling(e,'next'))",
+    PREVIOUS_SIBLING    = NEXT_SIBLING.replace(/next/g, "previous"),
+    IS_ELEMENT          = "e.nodeName>'@'",
+    IF_ELEMENT          = "if(" + IS_ELEMENT + "){";
+
+var ID_ATTRIBUTE  = "(e.nodeName==='FORM'?IE7._getAttribute(e,'id'):e.id)";
+
+var HYPERLINK = /a(#[\w-]+)?(\.[\w-]+)?:(hover|active)/i;
+var FIRST_LINE_LETTER = /(.*)(:first-(line|letter))/;
+var SPACE = /\s/;
+var RULE = /((?:\\.|[^{\\])+)\{((?:\\.|[^}\\])+)\}/g;
+var SELECTOR = /(?:\\.|[^,\\])+/g;
+
+var styleSheets = document.styleSheets;
+
+var inheritedProperties = [];
+
+IE7.CSS = new (Fix.extend({ // single instance
+  parser: new Parser,
+  screen: "",
+  print: "",
+  styles: [],
+  rules: [],
+  pseudoClasses: appVersion < 7 ? "first\\-child" : "",
+  dynamicPseudoClasses: {
+    toString: function() {
+      var strings = [];
+      for (var pseudoClass in this) strings.push(pseudoClass);
+      return strings.join("|");
+    }
+  },
+  
+  init: function() {
+    var NONE = "^\x01$";
+    var CLASS = "\\[class=?[^\\]]*\\]";
+    var pseudoClasses = [];
+    if (this.pseudoClasses) pseudoClasses.push(this.pseudoClasses);
+    var dynamicPseudoClasses = this.dynamicPseudoClasses.toString(); 
+    if (dynamicPseudoClasses) pseudoClasses.push(dynamicPseudoClasses);
+    pseudoClasses = pseudoClasses.join("|");
+    var unknown = appVersion < 7 ? ["[>+~\\[(]|([:.])[\\w-]+\\1"] : [CLASS];
+    if (pseudoClasses) unknown.push(":(" + pseudoClasses + ")");
+    this.UNKNOWN = new RegExp(unknown.join("|") || NONE, "i");
+    var complex = appVersion < 7 ? ["\\[[^\\]]+\\]|[^\\s(\\[]+\\s*[+~]"] : [CLASS];
+    var complexRule = complex.concat();
+    if (pseudoClasses) complexRule.push(":(" + pseudoClasses + ")");
+    Rule.COMPLEX = new RegExp(complexRule.join("|") || NONE, "ig");
+    if (this.pseudoClasses) complex.push(":(" + this.pseudoClasses + ")");
+    DynamicRule.COMPLEX = new RegExp(complex.join("|") || NONE, "i");
+    dynamicPseudoClasses = "not\\(:" + dynamicPseudoClasses.split("|").join("\\)|not\\(:") + "\\)|" + dynamicPseudoClasses;
+    DynamicRule.MATCH = new RegExp(dynamicPseudoClasses ? "(.*?):(" + dynamicPseudoClasses + ")(.*)" : NONE, "i");
+    
+    this.createStyleSheet();
+    this.refresh();
+  },
+  
+	addEventHandler: function() {
+		addEventHandler.apply(null, arguments);
+	},
+  
+  addFix: function(expression, replacement) {
+    this.parser.add(expression, replacement);
+  },
+  
+  addRecalc: function(propertyName, test, handler, replacement) {
+    // recalcs occur whenever the document is refreshed using document.recalc()
+    propertyName = propertyName.source || propertyName;
+    test = new RegExp("([{;\\s])" + propertyName + "\\s*:\\s*" + test + "[^;}]*");
+    var id = this.recalcs.length;
+    if (typeof replacement == "string") replacement = propertyName + ":" + replacement;
+    this.addFix(test, function(match) {
+      if (typeof replacement == "function") replacement = replacement(match);
+      return (replacement ? replacement : match) + ";ie7-" + match.slice(1) + ";ie7_recalc" + id + ":1";
+    });
+    this.recalcs.push(arguments);
+    return id;
+  },
+  
+  apply: function() {
+    this.getInlineCSS();
+    new StyleSheet("screen");
+    this.trash();
+  },
+  
+  createStyleSheet: function() {
+    // create the IE7 style sheet
+    document.getElementsByTagName("head")[0].appendChild(document.createElement("style"));
+    this.styleSheet = styleSheets[styleSheets.length - 1];
+    // flag it so we can ignore it during parsing
+    this.styleSheet.ie7 = true;
+    this.styleSheet.owningElement.ie7 = true;
+    this.styleSheet.cssText = HEADER;
+  },
+  
+  getInlineCSS: function() {// load inline styles
+    var styleSheets = document.getElementsByTagName("style"), styleSheet;
+    for (var i = styleSheets.length - 1; styleSheet = styleSheets[i]; i--) {
+      if (!styleSheet.disabled && !styleSheet.ie7) {
+        styleSheet._cssText = styleSheet.innerHTML;
+      }
+    }
+  },
+  
+  getText: function(styleSheet, path) {
+    // Internet Explorer will trash unknown selectors (it converts them to "UNKNOWN").
+    // So we must reload external style sheets (internal style sheets can have their text
+    // extracted through the innerHTML property).
+
+    // load the style sheet text from an external file
+    try {
+      var cssText = styleSheet.cssText;
+    } catch (e) {
+      cssText = "";
+    }
+    if (httpRequest) cssText = loadFile(styleSheet.href, path) || cssText;
+    return cssText;
+  },
+  
+  recalc: function() {
+    this.screen.recalc();
+    // we're going to read through all style rules.
+    //  certain rules have had ie7 properties added to them.
+    //   e.g. p{top:0; ie7_recalc2:1; left:0}
+    //  this flags a property in the rule as needing a fix.
+    //  the selector text is then used to query the document.
+    //  we can then loop through the results of the query
+    //  and fix the elements.
+    // we ignore the IE7 rules - so count them in the header
+    var RECALCS = /ie7_recalc\d+/g;
+    var start = HEADER.match(/[{,]/g).length;
+    // only calculate screen fixes. print fixes don't show up anyway
+    var rules = this.styleSheet.rules, rule;
+    var calcs, calc, elements, element, i, j, k, id;
+    // loop through all rules
+    for (i = start; rule = rules[i]; i++) {
+      var cssText = rule.style.cssText;
+      // search for the "ie7_recalc" flag (there may be more than one)
+      if (calcs = cssText.match(RECALCS)) {
+        // use the selector text to query the document
+        elements = cssQuery(rule.selectorText);
+        // if there are matching elements then loop
+        //  through the recalc functions and apply them
+        //  to each element
+        if (elements.length) for (j = 0; j < calcs.length; j++) {
+          // get the matching flag (e.g. ie7_recalc3)
+          id = calcs[j];
+          // extract the numeric id from the end of the flag
+          //  and use it to index the collection of recalc
+          //  functions
+          calc = IE7.CSS.recalcs[id.slice(10)][2];
+          for (k = 0; (element = elements[k]); k++) {
+            // apply the fix
+            if (element.currentStyle[id]) calc(element, cssText);
+          }
+        }
+      }
+    }
+  },
+  
+  refresh: function() {
+    this.styleSheet.cssText = HEADER + this.screen + this.print;
+  },
+  
+  trash: function() {
+    // trash the old style sheets
+    for (var i = 0; i < styleSheets.length; i++) {
+      if (!styleSheets[i].ie7) {
+        try {
+          var cssText = styleSheets[i].cssText;
+        } catch (e) {
+          cssText = "";
+        }
+        if (cssText) styleSheets[i].cssText = "";
+      }
+    }
+  }
+}));
+
+// -----------------------------------------------------------------------
+//  IE7 StyleSheet class
+// -----------------------------------------------------------------------
+
+var StyleSheet = Base.extend({
+  constructor: function(media) {
+    this.media = media;
+    this.load();
+    IE7.CSS[media] = this;
+    IE7.CSS.refresh();
+  },
+  
+  createRule: function(selector, cssText) {
+    var match;
+    if (PseudoElement && (match = selector.match(PseudoElement.MATCH))) {
+      return new PseudoElement(match[1], match[2], cssText);
+    } else if (match = selector.match(DynamicRule.MATCH)) {
+      if (!HYPERLINK.test(match[0]) || DynamicRule.COMPLEX.test(match[0])) {
+        return new DynamicRule(selector, match[1], match[2], match[3], cssText);
+      }
+    } else {
+      return new Rule(selector, cssText);
+    }
+    return selector + " {" + cssText + "}";
+  },
+  
+  getText: function() {
+    // store for style sheet text
+    // parse media decalarations
+    var MEDIA        = /@media\s+([^{]+?)\s*\{([^@]+\})\s*\}/gi;
+    var IMPORTS      = /@import[^;\n]+/gi;
+    var TRIM_IMPORTS = /@import\s+url\s*\(\s*["']?|["']?\s*\)\s*/gi;
+    var URL          = /(url\s*\(\s*['"]?)([\w\.]+[^:\)]*['"]?\))/gi;
+
+    var self = this;
+    
+    // Store loaded cssText URLs
+    var fileCache = {};
+    
+    function getCSSText(styleSheet, path, media, level) {
+      var cssText = "";
+      if (!level) {
+        media = toSimpleMedia(styleSheet.media);
+        level = 0;
+      }
+      if (media === "none") {
+        styleSheet.disabled = true;
+        return "";
+      }
+      if (media === "all" || media === self.media) {
+        // IE only allows importing style sheets three levels deep.
+        // it will crash if you try to access a level below this
+        try {
+          var canAcess = !!styleSheet.cssText;
+        } catch (exe) {}
+        if (level < 3 && canAcess) {
+          var hrefs = styleSheet.cssText.match(IMPORTS);
+          // loop through imported style sheets
+          for (var i = 0, imported; i < styleSheet.imports.length; i++) {
+            var imported = styleSheet.imports[i];
+            var href = styleSheet._href || styleSheet.href;
+            imported._href = hrefs[i].replace(TRIM_IMPORTS, "");
+            // call this function recursively to get all imported style sheets
+            cssText += getCSSText(imported, getPath(href, path), media, level + 1);
+          }
+        }
+        // retrieve inline style or load an external style sheet
+        cssText += encode(styleSheet.href ? loadStyleSheet(styleSheet, path) : styleSheet.owningElement._cssText);
+        cssText = parseMedia(cssText, self.media);
+      }
+      return cssText;
+    };
+
+    // Load all style sheets in the document
+    for (var i = 0; i < styleSheets.length; i++) {
+      var styleSheet = styleSheets[i];
+      if (!styleSheet.disabled && !styleSheet.ie7) this.cssText += getCSSText(styleSheet);
+    }
+    
+    // helper functions
+    function parseMedia(cssText, media) {
+      filterMedia.value = media;
+      return cssText.replace(MEDIA, filterMedia);
+    };
+    
+    function filterMedia(match, media, cssText) {
+      media = toSimpleMedia(media);
+      switch (media) {
+        case "screen":
+        case "print":
+          if (media !== filterMedia.value) return "";
+        case "all":
+          return cssText;
+      }
+      return "";
+    };
+    
+    function toSimpleMedia(media) {
+      if (!media) return "all";
+      var split = media.toLowerCase().split(/\s*,\s*/);
+      media = "none";
+      for (var i = 0; i < split.length; i++) {
+        if (split[i] === "all") return "all";
+        if (split[i] === "screen") {
+          if (media === "print") return "all";
+          media = "screen";
+        } else if (split[i] === "print") {
+          if (media === "screen") return "all";
+          media = "print";
+        }
+      }
+      return media;
+    };
+    
+    // Load an external style sheet
+    function loadStyleSheet(styleSheet, path) {
+      var href = styleSheet._href || styleSheet.href;
+      var url = makePath(href, path);
+      // If the style sheet has already loaded then don't reload it
+      if (fileCache[url]) return "";
+      // Load from source
+      fileCache[url] = styleSheet.disabled ? "" :
+        fixUrls(IE7.CSS.getText(styleSheet, path), getPath(href, path));
+      return fileCache[url];
+    };
+
+    // Fix CSS paths.
+    // We're lumping all css text into one big style sheet so relative
+    // paths have to be fixed. This is necessary anyway because of other
+    // Internet Explorer bugs.
+    function fixUrls(cssText, pathname) {
+      // hack & slash
+      return cssText.replace(URL, "$1" + pathname.slice(0, pathname.lastIndexOf("/") + 1) + "$2");
+    };
+  },
+  
+  load: function() {
+    this.cssText = "";
+    this.getText();
+    this.parse();
+    if (inheritedProperties.length) {
+      this.cssText = parseInherited(this.cssText);
+    }
+    this.cssText = decode(this.cssText);
+    fileCache = {};
+  },
+  
+  parse: function() {
+    var cssText = IE7.CSS.parser.parse(this.cssText);
+    
+    var declarations = "";
+    this.cssText = cssText.replace(/@charset[^;]+;|@font\-face[^\}]+\}/g, function(match) {
+      declarations += match + "\n";
+      return "";
+    });
+    this.declarations = decode(declarations);
+    
+    // Parse the style sheet
+    var offset = IE7.CSS.rules.length;
+    var rules = [], rule;
+    while ((rule = RULE.exec(this.cssText))) {
+      var cssText = rule[2];
+      if (cssText) {
+        var fixDescendants = appVersion < 7 && cssText.indexOf("AlphaImageLoader") !== -1;
+        var selectors = rule[1].match(SELECTOR), selector;
+        for (var i = 0; selector = selectors[i]; i++) {
+          selector = trim(selector);
+          var isUnknown = IE7.CSS.UNKNOWN.test(selector);
+          selectors[i] = isUnknown ? this.createRule(selector, cssText) : selector + "{" + cssText + "}";
+          if (fixDescendants) selectors[i] += this.createRule(selector + ">*", "position:relative");
+        }
+        rules.push(selectors.join("\n"));
+      }
+    }
+    this.cssText = rules.join("\n");
+    this.rules = IE7.CSS.rules.slice(offset);
+  },
+  
+  recalc: function() {
+    var rule, i;
+    for (i = 0; (rule = this.rules[i]); i++) rule.recalc();
+  },
+  
+  toString: function() {
+    return this.declarations + "@media " + this.media + "{" + this.cssText + "}";
+  }
+});
+
+var PseudoElement;
+
+// -----------------------------------------------------------------------
+// IE7 style rules
+// -----------------------------------------------------------------------
+
+var Rule = IE7.Rule = Base.extend({
+  constructor: function(selector, cssText) {
+    this.id = IE7.CSS.rules.length;
+    this.className = Rule.PREFIX + this.id;
+    var pseudoElement = selector.match(FIRST_LINE_LETTER);
+    this.selector = (pseudoElement ? pseudoElement[1] : selector) || "*";
+    this.selectorText = this.parse(this.selector) + (pseudoElement ? pseudoElement[2] : "");
+    this.cssText = cssText;
+    this.MATCH = new RegExp("\\s" + this.className + "(\\s|$)", "g");
+    IE7.CSS.rules.push(this);
+    this.init();
+  },
+  
+  init: Undefined,
+  
+  add: function(element) {
+    // allocate this class
+    element.className += " " + this.className;
+  },
+  
+  recalc: function() {
+    // execute the underlying css query for this class
+    var match = cssQuery(this.selector);
+    // add the class name for all matching elements
+    for (var i = 0; i < match.length; i++) this.add(match[i]);
+  },
+
+  parse: function(selector) {
+    // attempt to preserve specificity for "loose" parsing by
+    //  removing unknown tokens from a css selector but keep as
+    //  much as we can..
+    var simple = selector.replace(Rule.CHILD, " ").replace(Rule.COMPLEX, "");
+    if (appVersion < 7) simple = simple.replace(Rule.MULTI, "");
+    var tags = match(simple, Rule.TAGS).length - match(selector, Rule.TAGS).length;
+    var classes = match(simple, Rule.CLASSES).length - match(selector, Rule.CLASSES).length + 1;
+    while (classes > 0 && Rule.CLASS.test(simple)) {
+      simple = simple.replace(Rule.CLASS, "");
+      classes--;
+    }
+    while (tags > 0 && Rule.TAG.test(simple)) {
+      simple = simple.replace(Rule.TAG, "$1*");
+      tags--;
+    }
+    simple += "." + this.className;
+    classes = Math.min(classes, 2);
+    tags = Math.min(tags, 2);
+    var score = -10 * classes - tags;
+    if (score > 0) {
+      simple = simple + "," + Rule.MAP[score] + " " + simple;
+    }
+    return simple;
+  },
+  
+  remove: function(element) {
+    // deallocate this class
+    element.className = element.className.replace(this.MATCH, "$1");
+  },
+  
+  toString: function() {
+    return format("%1 {%2}", this.selectorText, this.cssText);
+  }
+}, {
+  CHILD: />/g,
+  CLASS: /\.[\w-]+/,
+  CLASSES: /[.:\[]/g,
+  MULTI: /(\.[\w-]+)+/g,
+  PREFIX: "ie7_class",
+  TAG: /^\w+|([\s>+~])\w+/,
+  TAGS: /^\w|[\s>+~]\w/g,
+  MAP: {
+    "1":  "html",
+    "2":  "html body",
+    "10": ".ie7_html",
+    "11": "html.ie7_html",
+    "12": "html.ie7_html body",
+    "20": ".ie7_html .ie7_body",
+    "21": "html.ie7_html .ie7_body",
+    "22": "html.ie7_html body.ie7_body"
+  }
+});
+
+// -----------------------------------------------------------------------
+// IE7 dynamic style
+// -----------------------------------------------------------------------
+
+// object properties:
+// attach: the element that an event handler will be attached to
+// target: the element that will have the IE7 class applied
+
+var DynamicRule = Rule.extend({
+  // properties
+  constructor: function(selector, attach, dynamicPseudoClass, target, cssText) {
+    this.negated = dynamicPseudoClass.indexOf("not") === 0;
+    if (this.negated) dynamicPseudoClass = dynamicPseudoClass.slice(5, -1);
+    // initialise object properties
+    this.attach = attach || "*";
+    this.dynamicPseudoClass = IE7.CSS.dynamicPseudoClasses[dynamicPseudoClass];
+    this.target = target;
+    this.base(selector, cssText);
+  },
+  
+  recalc: function() {
+    // execute the underlying css query for this class
+    var attaches = cssQuery(this.attach), attach;
+    // process results
+    for (var i = 0; attach = attaches[i]; i++) {
+      // retrieve the event handler's target element(s)
+      var target = this.target ? cssQuery(this.target, attach) : [attach];
+      // attach event handlers for dynamic pseudo-classes
+      if (target.length) this.dynamicPseudoClass.apply(attach, target, this);
+    }
+  }
+});
+
+// -----------------------------------------------------------------------
+//  IE7 dynamic pseudo-classes
+// -----------------------------------------------------------------------
+
+var DynamicPseudoClass = Base.extend({
+  constructor: function(name, apply) {
+    this.name = name;
+    this.apply = apply;
+    this.instances = {};
+    IE7.CSS.dynamicPseudoClasses[name] = this;
+  },
+  
+  register: function(instance, negated) {
+    // an "instance" is actually an Arguments object
+    var _class = instance[2];
+    if (!negated && _class.negated) {
+      this.unregister(instance, true);
+    } else {
+      instance.id = _class.id + instance[0].uniqueID;
+      if (!this.instances[instance.id]) {
+        var target = instance[1], j;
+        for (j = 0; j < target.length; j++) _class.add(target[j]);
+        this.instances[instance.id] = instance;
+      }
+    }
+  },
+  
+  unregister: function(instance, negated) {
+    var _class = instance[2];
+    if (!negated && _class.negated) {
+      this.register(instance, true);
+    } else {
+      if (this.instances[instance.id]) {
+        var target = instance[1], j;
+        for (j = 0; j < target.length; j++) _class.remove(target[j]);
+        delete this.instances[instance.id];
+      }
+    }
+  }
+});
+  
+// -----------------------------------------------------------------------
+// dynamic pseudo-classes
+// -----------------------------------------------------------------------
+
+var Hover = new DynamicPseudoClass("hover", function(element) {
+  var instance = arguments;
+  IE7.CSS.addEventHandler(element, "onmouseenter", function() {
+    Hover.register(instance);
+  });
+  IE7.CSS.addEventHandler(element, "onmouseleave", function() {
+    Hover.unregister(instance);
+  });
+});
+
+// globally trap the mouseup event (thanks Martijn!)
+addEventHandler(document, "onmouseup", function() {
+  var instances = Hover.instances;
+  for (var i in instances)
+    if (!instances[i][0].contains(event.srcElement))
+      Hover.unregister(instances[i]);
+});
+
+var ATTR = {
+  "=":  "%1==='%2'",                           // "[@%1='%2']"
+  "~=": "(' '+%1+' ').indexOf(' %2 ')!==-1",   // "[contains(concat(' ',@%1,' '),' %2 ')]",
+  "|=": "%1==='%2'||%1.indexOf('%2-')===0",    // "[@%1='%2' or starts-with(@%1,'%2-')]",
+  "^=": "%1.indexOf('%2')===0",                // "[starts-with(@%1,'%2')]",
+  "$=": "%1.slice(-'%2'.length)==='%2'",       // "[ends-with(@%1,'%2')]",
+  "*=": "%1.indexOf('%2')!==-1"                // "[contains(@%1,'%2')]"
+};
+ATTR[""] = "%1!=null";                         // "[@%1]"
+
+var FILTER = {
+  "<#attr>": function(match, name, operator, value) {
+    var attr = "IE7._getAttribute(e,'" + name + "')";
+    value = getString(value);
+    if (operator.length > 1) {
+      if (!value || operator === "~=" && SPACE.test(value)) {
+        return "false&&";
+      }
+      attr = "(" + attr + "||'')";
+    }
+    return "(" + format(ATTR[operator], attr, value) + ")&&";
+  },
+
+  "<#id>":    ID_ATTRIBUTE + "==='$1'&&",
+
+  "<#class>": "e.className&&(' '+e.className+' ').indexOf(' $1 ')!==-1&&",
+
+  // PSEDUO
+  ":first-child":     "!" + PREVIOUS_SIBLING + "&&",
+  ":link":           "e.currentStyle['ie7-link']=='link'&&",
+  ":visited":        "e.currentStyle['ie7-link']=='visited'&&"
+};
+
+// =========================================================================
+// ie7-html.js
+// =========================================================================
+
+// default font-sizes
+//HEADER += "h1{font-size:2em}h2{font-size:1.5em;}h3{font-size:1.17em;}h4{font-size:1em}h5{font-size:.83em}h6{font-size:.67em}";
+
+IE7.HTML = new (Fix.extend({ // single instance  
+  fixed: {},
+  
+  init: Undefined,
+  
+  addFix: function() {
+    // fixes are a one-off, they are applied when the document is loaded
+    this.fixes.push(arguments);
+  },
+  
+  apply: function() {
+    for (var i = 0; i < this.fixes.length; i++) {
+      var match = cssQuery(this.fixes[i][0]);
+      var fix = this.fixes[i][1];
+      for (var j = 0; j < match.length; j++) fix(match[j]);
+    }
+  },
+  
+  addRecalc: function() {
+    // recalcs occur whenever the document is refreshed using document.recalc()
+    this.recalcs.push(arguments);
+  },
+  
+  recalc: function() {
+    // loop through the fixes
+    for (var i = 0; i < this.recalcs.length; i++) {
+      var match = cssQuery(this.recalcs[i][0]);
+      var recalc = this.recalcs[i][1], element;
+      var key = Math.pow(2, i);
+      for (var j = 0; (element = match[j]); j++) {
+        var uniqueID = element.uniqueID;
+        if ((this.fixed[uniqueID] & key) === 0) {
+          element = recalc(element) || element;
+          this.fixed[uniqueID] |= key;
+        }
+      }
+    }
+  }
+}));
+
+if (appVersion < 7) {  
+  // provide support for the <abbr> tag.
+  document.createElement("abbr");
+  
+  // bind to the first child control
+  IE7.HTML.addRecalc("label", function(label) {
+    if (!label.htmlFor) {
+      var firstChildControl = cssQuery("input,textarea", label, true);
+      if (firstChildControl) {
+        addEventHandler(label, "onclick", function() {
+          firstChildControl.click();
+        });
+      }
+    }
+  });
+}
+
+// =========================================================================
+// ie7-layout.js
+// =========================================================================
+
+var NUMERIC = "[.\\d]";
+
+(function() {
+  var layout = IE7.Layout = {};
+
+  // big, ugly box-model hack + min/max stuff
+
+  // #tantek > #erik > #dean { voice-family: hacker; }
+
+  // -----------------------------------------------------------------------
+  // "layout"
+  // -----------------------------------------------------------------------
+
+  HEADER += "*{boxSizing:content-box}";
+
+  // give an element "layout"
+  layout.boxSizing = function(element) {
+    if (!element.currentStyle.hasLayout) {
+    //#  element.runtimeStyle.fixedHeight =
+      element.style.height = "0cm";
+      if (element.currentStyle.verticalAlign === "auto")
+        element.runtimeStyle.verticalAlign = "top";
+      // when an element acquires "layout", margins no longer collapse correctly
+      collapseMargins(element);
+    }
+  };
+
+  // -----------------------------------------------------------------------
+  // Margin Collapse
+  // -----------------------------------------------------------------------
+
+  function collapseMargins(element) {
+    if (element != viewport && element.currentStyle.position !== "absolute") {
+      collapseMargin(element, "marginTop");
+      collapseMargin(element, "marginBottom");
+    }
+  };
+
+  function collapseMargin(element, type) {
+    if (!element.runtimeStyle[type]) {
+      var parentElement = element.parentElement;
+      var isTopMargin = type === "marginTop";
+      if (parentElement && parentElement.currentStyle.hasLayout && !IE7._getElementSibling(element, isTopMargin ? "previous" : "next")) return;
+      var child = element[isTopMargin ? "firstChild" : "lastChild"];
+      if (child && child.nodeName < "@") child = IE7._getElementSibling(child, isTopMargin ? "next" : "previous");
+      if (child && child.currentStyle.styleFloat === "none" && child.currentStyle.hasLayout) {
+        collapseMargin(child, type);
+        margin = _getMargin(element, element.currentStyle[type]);
+        childMargin = _getMargin(child, child.currentStyle[type]);
+        if (margin < 0 || childMargin < 0) {
+          element.runtimeStyle[type] = margin + childMargin;
+        } else {
+          element.runtimeStyle[type] = Math.max(childMargin, margin);
+        }
+        child.runtimeStyle[type] = "0px";
+      }
+    }
+  };
+
+  function _getMargin(element, value) {
+    return value === "auto" ? 0 : getPixelValue(element, value);
+  };
+
+  // -----------------------------------------------------------------------
+  // box-model
+  // -----------------------------------------------------------------------
+
+  // constants
+  var UNIT = /^[.\d][\w]*$/, AUTO = /^(auto|0cm)$/;
+
+  var apply = {};
+  layout.borderBox = function(element){
+    apply.Width(element);
+    apply.Height(element);
+  };
+
+  var _fixWidth = function(HEIGHT) {
+    apply.Width = function(element) {
+      if (!PERCENT.test(element.currentStyle.width)) _fixWidth(element);
+      if (HEIGHT) collapseMargins(element);
+    };
+
+    function _fixWidth(element, value) {
+      if (!element.runtimeStyle.fixedWidth) {
+        if (!value) value = element.currentStyle.width;
+        element.runtimeStyle.fixedWidth = UNIT.test(value) ? Math.max(0, getFixedWidth(element, value)) + "px" : value;
+        setOverrideStyle(element, "width", element.runtimeStyle.fixedWidth);
+      }
+    };
+
+    function layoutWidth(element) {
+      if (!isFixed(element)) {
+        var layoutParent = element.offsetParent;
+        while (layoutParent && !layoutParent.currentStyle.hasLayout) layoutParent = layoutParent.offsetParent;
+      }
+      return (layoutParent || viewport).clientWidth;
+    };
+
+    function getPixelWidth(element, value) {
+      if (PERCENT.test(value)) return parseInt(parseFloat(value) / 100 * layoutWidth(element));
+      return getPixelValue(element, value);
+    };
+
+    var getFixedWidth = function(element, value) {
+      var borderBox = element.currentStyle["ie7-box-sizing"] === "border-box";
+      var adjustment = 0;
+      if (MSIE5 && !borderBox)
+        adjustment += getBorderWidth(element) + getWidth(element, "padding");
+      else if (!MSIE5 && borderBox)
+        adjustment -= getBorderWidth(element) + getWidth(element, "padding");
+      return getPixelWidth(element, value) + adjustment;
+    };
+
+    // easy way to get border thickness for elements with "layout"
+    function getBorderWidth(element) {
+      return element.offsetWidth - element.clientWidth;
+    };
+
+    // have to do some pixel conversion to get padding/margin thickness :-(
+    function getWidth(element, type) {
+      return getPixelWidth(element, element.currentStyle[type + "Left"]) + getPixelWidth(element, element.currentStyle[type + "Right"]);
+    };
+
+    // -----------------------------------------------------------------------
+    // min/max
+    // -----------------------------------------------------------------------
+
+    HEADER += "*{minWidth:none;maxWidth:none;min-width:none;max-width:none}";
+
+    // handle min-width property
+    layout.minWidth = function(element) {
+      // IE6 supports min-height so we frig it here
+      //#if (element.currentStyle.minHeight === "auto") element.runtimeStyle.minHeight = 0;
+      if (element.currentStyle["min-width"] != null) {
+        element.style.minWidth = element.currentStyle["min-width"];
+      }
+      if (register(arguments.callee, element, element.currentStyle.minWidth !== "none")) {
+        layout.boxSizing(element);
+        _fixWidth(element);
+        resizeWidth(element);
+      }
+    };
+
+    // clone the minWidth function to make a maxWidth function
+    eval("IE7.Layout.maxWidth=" + String(layout.minWidth).replace(/min/g, "max"));
+
+    // apply min/max restrictions
+    function resizeWidth(element) {
+      // check boundaries
+      if (element == document.body) {
+        var width = element.clientWidth;
+      } else {
+        var rect = element.getBoundingClientRect();
+        width = rect.right - rect.left;
+      }
+      if (element.currentStyle.minWidth !== "none" && width < getFixedWidth(element, element.currentStyle.minWidth)) {
+        element.runtimeStyle.width = element.currentStyle.minWidth;
+      } else if (element.currentStyle.maxWidth !== "none" && width >= getFixedWidth(element, element.currentStyle.maxWidth)) {
+        element.runtimeStyle.width = element.currentStyle.maxWidth;
+      } else {
+        element.runtimeStyle.width = element.runtimeStyle.fixedWidth;
+      }
+    };
+
+    // -----------------------------------------------------------------------
+    // right/bottom
+    // -----------------------------------------------------------------------
+
+    function fixRight(element) {
+      if (register(fixRight, element, /^(fixed|absolute)$/.test(element.currentStyle.position) &&
+        getDefinedStyle(element, "left") !== "auto" &&
+        getDefinedStyle(element, "right") !== "auto" &&
+        AUTO.test(getDefinedStyle(element, "width")))) {
+          resizeRight(element);
+          layout.boxSizing(element);
+      }
+    };
+    layout.fixRight = fixRight;
+
+    function resizeRight(element) {
+      var left = getPixelWidth(element, element.runtimeStyle._left || element.currentStyle.left);
+      var width = layoutWidth(element) - getPixelWidth(element, element.currentStyle.right) -  left - getWidth(element, "margin");
+      if (parseInt(element.runtimeStyle.width) === width) return;
+      element.runtimeStyle.width = "";
+      if (isFixed(element) || HEIGHT || element.offsetWidth < width) {
+        if (!MSIE5) width -= getBorderWidth(element) + getWidth(element, "padding");
+        if (width < 0) width = 0;
+        element.runtimeStyle.fixedWidth = width;
+        setOverrideStyle(element, "width", width);
+      }
+    };
+
+  // -----------------------------------------------------------------------
+  // window.onresize
+  // -----------------------------------------------------------------------
+
+    // handle window resize
+    var clientWidth = 0;
+    addResize(function() {
+      if (!viewport) return;
+      var i, wider = (clientWidth < viewport.clientWidth);
+      clientWidth = viewport.clientWidth;
+      // resize elements with "min-width" set
+      var elements = layout.minWidth.elements;
+      for (i in elements) {
+        var element = elements[i];
+        var fixedWidth = (parseInt(element.runtimeStyle.width) === getFixedWidth(element, element.currentStyle.minWidth));
+        if (wider && fixedWidth) element.runtimeStyle.width = "";
+        if (wider == fixedWidth) resizeWidth(element);
+      }
+      // resize elements with "max-width" set
+      var elements = layout.maxWidth.elements;
+      for (i in elements) {
+        var element = elements[i];
+        var fixedWidth = (parseInt(element.runtimeStyle.width) === getFixedWidth(element, element.currentStyle.maxWidth));
+        if (!wider && fixedWidth) element.runtimeStyle.width = "";
+        if (wider !== fixedWidth) resizeWidth(element);
+      }
+      // resize elements with "right" set
+      for (i in fixRight.elements) resizeRight(fixRight.elements[i]);
+    });
+
+  // -----------------------------------------------------------------------
+  // fix CSS
+  // -----------------------------------------------------------------------
+    if (MSIE5) {
+      IE7.CSS.addRecalc("width", NUMERIC, apply.Width);
+    }
+    if (appVersion < 7) {
+      IE7.CSS.addRecalc("max-width", NUMERIC, layout.maxWidth);
+      IE7.CSS.addRecalc("right", NUMERIC, fixRight);
+    } else if (appVersion == 7) {
+      if (HEIGHT) IE7.CSS.addRecalc("height", "[\\d.]+%", function(element) {
+        element.runtimeStyle.pixelHeight = parseInt(layoutWidth(element) * element.currentStyle["ie7-height"].slice(0, -1) / 100);
+      });
+    }
+  };
+
+  eval("var _fixHeight=" + rotate(_fixWidth));
+
+  // apply box-model + min/max fixes
+  _fixWidth();
+  _fixHeight(true);
+  
+  if (appVersion < 7) {
+    IE7.CSS.addRecalc("min-width", NUMERIC, layout.minWidth);
+    IE7.CSS.addFix(/\bmin-height\s*/, "height");
+  }
+})();
+
+// =========================================================================
+// ie7-graphics.js
+// =========================================================================
+
+// a small transparent image used as a placeholder
+var BLANK_GIF = makePath("blank.gif", path);
+
+var ALPHA_IMAGE_LOADER = "DXImageTransform.Microsoft.AlphaImageLoader";
+var PNG_FILTER = "progid:" + ALPHA_IMAGE_LOADER + "(src='%1',sizingMethod='%2')";
+  
+// regular expression version of the above
+var PNG;
+
+var filtered = [];
+
+function fixImage(element) {
+  if (PNG.test(element.src)) {
+    // we have to preserve width and height
+    var image = new Image(element.width, element.height);
+    image.onload = function() {
+      element.width = image.width;
+      element.height = image.height;
+      image = null;
+    };
+    image.src = element.src;
+    // store the original url (we'll put it back when it's printed)
+    element.pngSrc = element.src;
+    // add the AlphaImageLoader thingy
+    addFilter(element);
+  }
+};
+
+if (appVersion < 7) {
+  // ** IE7 VARIABLE
+  // e.g. apply the hack to all files ending in ".png"
+  // IE7_PNG_SUFFIX = ".png";
+  // You can also set it to a RegExp
+  // IE7_PNG_SUFFIX = /\d+\.png$/;
+
+  // replace background(-image): url(..) ..  with background(-image): .. ;filter: ..;
+  IE7.CSS.addFix(/background(-image)?\s*:\s*([^};]*)?url\(([^\)]+)\)([^;}]*)?/, function(match, $1, $2, url, $4) {
+    url = getString(url);
+    return PNG.test(url) ? "filter:" + format(PNG_FILTER, url, $4.indexOf("no-repeat") === -1 ? "scale" : "crop") +
+      ";zoom:1;background" + ($1||"") + ":" + ($2||"") + "none" + ($4||"") : match;
+  });
+
+  // list-style-image
+  IE7.CSS.addRecalc(/list\-style(\-image)?/, "[^};]*url", function(element) {
+    var url = element.currentStyle.listStyleImage.slice(5, -2);
+    if (PNG.test(url)) {
+      if (element.nodeName === "LI") {
+        fixListStyleImage(element, url)
+      } else if (element.nodeName === "UL") {
+        for (var i = 0, li; li = element.childNodes[i]; i++) {
+          if (li.nodeName === "LI") fixListStyleImage(li, url);
+        }
+      }
+    }
+  });
+
+  function fixListStyleImage(element, src) {
+    var style = element.runtimeStyle;
+    var originalHeight = element.offsetHeight;
+    var image = new Image;
+    image.onload = function() {
+      var paddingLeft = element.currentStyle.paddingLeft;
+      paddingLeft = paddingLeft === "0px" ? 0 : getPixelValue(element, paddingLeft);
+      style.paddingLeft = (paddingLeft + this.width) + "px";
+      style.marginLeft = -this.width + "px";
+      style.listStyleType = "none";
+      style.listStyleImage = "none";
+      style.paddingTop = Math.max(originalHeight - element.offsetHeight, 0) + "px";
+      addFilter(element, "crop", src);
+      element.style.zoom = "100%";
+    };
+    image.src = src;
+  };
+  
+  // -----------------------------------------------------------------------
+  //  fix PNG transparency (HTML images)
+  // -----------------------------------------------------------------------
+
+  IE7.HTML.addRecalc("img,input", function(element) {
+    if (element.nodeName === "INPUT" && element.type !== "image") return;
+    fixImage(element);
+    addEventHandler(element, "onpropertychange", function() {
+      if (!printing && event.propertyName === "src" &&
+        element.src.indexOf(BLANK_GIF) === -1) fixImage(element);
+    });
+  });
+
+  // assume that background images should not be printed
+  //  (if they are not transparent then they'll just obscure content)
+  // but we'll put foreground images back...
+  var printing = false;
+  addEventHandler(window, "onbeforeprint", function() {
+    printing = true;
+    for (var i = 0; i < filtered.length; i++) removeFilter(filtered[i]);
+  });
+  addEventHandler(window, "onafterprint", function() {
+    for (var i = 0; i < filtered.length; i++) addFilter(filtered[i]);
+    printing = false;
+  });
+}
+
+// apply a filter
+function addFilter(element, sizingMethod, src) {
+  var filter = element.filters[ALPHA_IMAGE_LOADER];
+  if (filter) {
+    filter.src = src || element.src;
+    filter.enabled = true;
+  } else {
+    element.runtimeStyle.filter = format(PNG_FILTER, src || element.src, sizingMethod || "scale");
+    filtered.push(element);
+  }
+  // remove the real image
+  element.src = BLANK_GIF;
+};
+
+function removeFilter(element) {
+  element.src = element.pngSrc;
+  element.filters[ALPHA_IMAGE_LOADER].enabled = false;
+};
+
+// =========================================================================
+// ie7-fixed.js
+// =========================================================================
+
+(function() {
+  if (appVersion >= 7) return;
+  
+  // some things to consider for this hack.
+  // the document body requires a fixed background. even if
+  //  it is just a blank image.
+  // you have to use setExpression instead of onscroll, this
+  //  together with a fixed body background helps avoid the
+  //  annoying screen flicker of other solutions.
+  
+  IE7.CSS.addRecalc("position", "fixed", _positionFixed, "absolute");
+  IE7.CSS.addRecalc("background(-attachment)?", "[^};]*fixed", _backgroundFixed);
+  
+  // scrolling is relative to the documentElement (HTML tag) when in
+  //  standards mode, otherwise it's relative to the document body
+  var $viewport = MSIE5 ? "body" : "documentElement";
+  
+  function _fixBackground() {
+    // this is required by both position:fixed and background-attachment:fixed.
+    // it is necessary for the document to also have a fixed background image.
+    // we can fake this with a blank image if necessary
+    if (body.currentStyle.backgroundAttachment !== "fixed") {
+      if (body.currentStyle.backgroundImage === "none") {
+        body.runtimeStyle.backgroundRepeat = "no-repeat";
+        body.runtimeStyle.backgroundImage = "url(" + BLANK_GIF + ")"; // dummy
+      }
+      body.runtimeStyle.backgroundAttachment = "fixed";
+    }
+    _fixBackground = Undefined;
+  };
+  
+  var _tmp = createTempElement("img");
+  
+  function _isFixed(element) {
+    return element ? isFixed(element) || _isFixed(element.parentElement) : false;
+  };
+  
+  function _setExpression(element, propertyName, expression) {
+    setTimeout("document.all." + element.uniqueID + ".runtimeStyle.setExpression('" + propertyName + "','" + expression + "')", 0);
+  };
+  
+  // -----------------------------------------------------------------------
+  //  backgroundAttachment: fixed
+  // -----------------------------------------------------------------------
+  
+  function _backgroundFixed(element) {
+    if (register(_backgroundFixed, element, element.currentStyle.backgroundAttachment === "fixed" && !element.contains(body))) {
+      _fixBackground();
+      util.bgLeft(element);
+      util.bgTop(element);
+      _backgroundPosition(element);
+    }
+  };
+  
+  function _backgroundPosition(element) {
+    _tmp.src = element.currentStyle.backgroundImage.slice(5, -2);
+    var parentElement = element.canHaveChildren ? element : element.parentElement;
+    parentElement.appendChild(_tmp);
+    util.setOffsetLeft(element);
+    util.setOffsetTop(element);
+    parentElement.removeChild(_tmp);
+  };
+  
+  // -----------------------------------------------------------------------
+  //  position: fixed
+  // -----------------------------------------------------------------------
+  
+  function _positionFixed(element) {
+    if (register(_positionFixed, element, isFixed(element))) {
+      setOverrideStyle(element, "position",  "absolute");
+      setOverrideStyle(element, "left",  element.currentStyle.left);
+      setOverrideStyle(element, "top",  element.currentStyle.top);
+      _fixBackground();
+      IE7.Layout.fixRight(element);
+      //IE7.Layout.fixBottom(element);
+      _foregroundPosition(element);
+    }
+  };
+  
+  function _foregroundPosition(element, recalc) {
+    document.body.getBoundingClientRect(); // force a reflow
+    util.positionTop(element, recalc);
+    util.positionLeft(element, recalc, true);
+    if (!element.runtimeStyle.autoLeft && element.currentStyle.marginLeft === "auto" &&
+      element.currentStyle.right !== "auto") {
+      var left = viewport.clientWidth - util.getPixelWidth(element, element.currentStyle.right) -
+        util.getPixelWidth(element, element.runtimeStyle._left) - element.clientWidth;
+      if (element.currentStyle.marginRight === "auto") left = parseInt(left / 2);
+      if (_isFixed(element.offsetParent)) element.runtimeStyle.pixelLeft += left;
+      else element.runtimeStyle.shiftLeft = left;
+    }
+    if (!element.runtimeStyle.fixedWidth) util.clipWidth(element);
+    if (!element.runtimeStyle.fixedHeight) util.clipHeight(element);
+  };
+  
+  // -----------------------------------------------------------------------
+  //  capture window resize
+  // -----------------------------------------------------------------------
+  
+  function _resize() {
+    // if the window has been resized then some positions need to be
+    //  recalculated (especially those aligned to "right" or "top"
+    var elements = _backgroundFixed.elements;
+    for (var i in elements) _backgroundPosition(elements[i]);
+    elements = _positionFixed.elements;
+    for (i in elements) {
+      _foregroundPosition(elements[i], true);
+      _foregroundPosition(elements[i], true);
+    }
+    _timer = 0;
+  };
+  
+  // use a timer (sometimes this is a good way to prevent resize loops)
+  var _timer;
+  addResize(function() {
+    if (!_timer) _timer = setTimeout(_resize, 100);
+  });
+
+  // -----------------------------------------------------------------------
+  //  rotated
+  // -----------------------------------------------------------------------
+
+  var util = {};
+  
+  var _horizontal = function(util) {
+    util.bgLeft = function(element) {
+      element.style.backgroundPositionX = element.currentStyle.backgroundPositionX;
+      if (!_isFixed(element)) {
+        _setExpression(element, "backgroundPositionX", "(parseInt(runtimeStyle.offsetLeft)+document." + $viewport + ".scrollLeft)||0");
+      }
+    };
+
+    util.setOffsetLeft = function(element) {
+      var propertyName = _isFixed(element) ? "backgroundPositionX" : "offsetLeft";
+      element.runtimeStyle[propertyName] =
+        util.getOffsetLeft(element, element.style.backgroundPositionX) -
+        element.getBoundingClientRect().left - element.clientLeft + 2;
+    };
+
+    util.getOffsetLeft = function(element, position) {
+      switch (position) {
+        case "left":
+        case "top":
+          return 0;
+        case "right":
+        case "bottom":
+          return viewport.clientWidth - _tmp.offsetWidth;
+        case "center":
+          return (viewport.clientWidth - _tmp.offsetWidth) / 2;
+        default:
+          if (PERCENT.test(position)) {
+            return parseInt((viewport.clientWidth - _tmp.offsetWidth) * parseFloat(position) / 100);
+          }
+          _tmp.style.left = position;
+          return _tmp.offsetLeft;
+      }
+    };
+
+    util.clipWidth = function(element) {
+      var fixWidth = element.runtimeStyle.fixWidth;
+      element.runtimeStyle.borderRightWidth = "";
+      element.runtimeStyle.width = fixWidth ? util.getPixelWidth(element, fixWidth) + "px" : "";
+      if (element.currentStyle.width !== "auto") {
+        var rect = element.getBoundingClientRect();
+        var width = element.offsetWidth - viewport.clientWidth + rect.left - 2;
+        if (width >= 0) {
+          element.runtimeStyle.borderRightWidth = "0px";
+          width = Math.max(getPixelValue(element, element.currentStyle.width) - width, 0);
+          setOverrideStyle(element, "width",  width);
+          return width;
+        }
+      }
+    };
+
+    util.positionLeft = function(element, recalc) {
+      // if the element's width is in % units then it must be recalculated
+      //  with respect to the viewport
+      if (!recalc && PERCENT.test(element.currentStyle.width)) {
+        element.runtimeStyle.fixWidth = element.currentStyle.width;
+      }
+      if (element.runtimeStyle.fixWidth) {
+        element.runtimeStyle.width = util.getPixelWidth(element, element.runtimeStyle.fixWidth);
+      }
+      //if (recalc) {
+      //  // if the element is fixed on the right then no need to recalculate
+      //  if (!element.runtimeStyle.autoLeft) return;
+      //} else {
+        element.runtimeStyle.shiftLeft = 0;
+        element.runtimeStyle._left = element.currentStyle.left;
+        // is the element fixed on the right?
+        element.runtimeStyle.autoLeft = element.currentStyle.right !== "auto" && element.currentStyle.left === "auto";
+      //}
+      // reset the element's "left" value and get it's natural position
+      element.runtimeStyle.left = "";
+      element.runtimeStyle.screenLeft = util.getScreenLeft(element);
+      element.runtimeStyle.pixelLeft = element.runtimeStyle.screenLeft;
+      // if the element is contained by another fixed element then there is no need to
+      //  continually recalculate it's left position
+      if (!recalc && !_isFixed(element.offsetParent)) {
+        // onsrcoll produces jerky movement, so we use an expression
+        _setExpression(element, "pixelLeft", "runtimeStyle.screenLeft+runtimeStyle.shiftLeft+document." + $viewport + ".scrollLeft");
+      }
+    };
+
+    // I've forgotten how this works...
+    util.getScreenLeft = function(element) { // thanks to kevin newman (captainn)
+      var screenLeft = element.offsetLeft, nested = 1;
+      if (element.runtimeStyle.autoLeft) {
+        screenLeft = viewport.clientWidth - element.offsetWidth - util.getPixelWidth(element, element.currentStyle.right);
+      }
+      // accommodate margins
+      if (element.currentStyle.marginLeft !== "auto") {
+        screenLeft -= util.getPixelWidth(element, element.currentStyle.marginLeft);
+      }
+      while (element = element.offsetParent) {
+        if (element.currentStyle.position !== "static") nested = -1;
+        screenLeft += element.offsetLeft * nested;
+      }
+      return screenLeft;
+    };
+
+    util.getPixelWidth = function(element, value) {
+      return PERCENT.test(value) ? parseInt(parseFloat(value) / 100 * viewport.clientWidth) : getPixelValue(element, value);
+    };
+  };
+  eval("var _vertical=" + rotate(_horizontal));
+  _horizontal(util);
+  _vertical(util);
+})();
+
+// =========================================================================
+// ie7-oveflow.js
+// =========================================================================
+
+/* ---------------------------------------------------------------------
+
+  This module alters the structure of the document.
+  It may adversely affect other CSS rules. Be warned.
+
+--------------------------------------------------------------------- */
+
+if (appVersion < 7) {
+  var WRAPPER_STYLE = {
+    backgroundColor: "transparent",
+    backgroundImage: "none",
+    backgroundPositionX: null,
+    backgroundPositionY: null,
+    backgroundRepeat: null,
+    borderTopWidth: 0,
+    borderRightWidth: 0,
+    borderBottomWidth: 0,
+    borderLeftStyle: "none",
+    borderTopStyle: "none",
+    borderRightStyle: "none",
+    borderBottomStyle: "none",
+    borderLeftWidth: 0,
+    borderLeftColor: "#000",
+    borderTopColor: "#000",
+    borderRightColor: "#000",
+    borderBottomColor: "#000",
+    height: null,
+    marginTop: 0,
+    marginBottom: 0,
+    marginRight: 0,
+    marginLeft: 0,
+    width: "100%"
+  };
+
+  IE7.CSS.addRecalc("overflow", "visible", function(element) {
+    if (element.currentStyle.position === "absolute") return;
+    
+    // don't do this again
+    if (element.parentNode.ie7_wrapped) return;
+
+    // if max-height is applied, makes sure it gets applied first
+    if (IE7.Layout && element.currentStyle["max-height"] !== "auto") {
+      IE7.Layout.maxHeight(element);
+    }
+
+    if (element.currentStyle.marginLeft === "auto") element.style.marginLeft = 0;
+    if (element.currentStyle.marginRight === "auto") element.style.marginRight = 0;
+
+    var wrapper = document.createElement(ANON);
+    wrapper.ie7_wrapped = element;
+    for (var propertyName in WRAPPER_STYLE) {
+      wrapper.style[propertyName] = element.currentStyle[propertyName];
+      if (WRAPPER_STYLE[propertyName] != null) {
+        element.runtimeStyle[propertyName] = WRAPPER_STYLE[propertyName];
+      }
+    }
+    wrapper.style.display = "block";
+    wrapper.style.position = "relative";
+    element.runtimeStyle.position = "absolute";
+    element.parentNode.insertBefore(wrapper, element);
+    wrapper.appendChild(element);
+  });
+}
+
+// =========================================================================
+// ie7-quirks.js
+// =========================================================================
+
+function ie7Quirks() {
+  var FONT_SIZES = "xx-small,x-small,small,medium,large,x-large,xx-large".split(",");
+  for (var i = 0; i < FONT_SIZES.length; i++) {
+    FONT_SIZES[FONT_SIZES[i]] = FONT_SIZES[i - 1] || "0.67em";
+  }
+  
+  IE7.CSS.addFix(/(font(-size)?\s*:\s*)([\w.-]+)/, function(match, label, size, value) {
+    return label + (FONT_SIZES[value] || value);
+  });
+  
+  var NEGATIVE = /^\-/, LENGTH = /(em|ex)$/i;
+  var EM = /em$/i, EX = /ex$/i;
+
+  getPixelValue = function(element, value) {
+    if (PIXEL.test(value)) return parseInt(value)||0;
+    var scale = NEGATIVE.test(value)? -1 : 1;
+    if (LENGTH.test(value)) scale *= getFontScale(element);
+    temp.style.width = scale < 0 ? value.slice(1) : value;
+    body.appendChild(temp);
+    // retrieve pixel width
+    value = scale * temp.offsetWidth;
+    // remove the temporary element
+    temp.removeNode();
+    return parseInt(value);
+  };
+
+  var temp = createTempElement();
+  function getFontScale(element) {
+    var scale = 1;
+    temp.style.fontFamily = element.currentStyle.fontFamily;
+    temp.style.lineHeight = element.currentStyle.lineHeight;
+    //temp.style.fontSize = "";
+    while (element != body) {
+      var fontSize = element.currentStyle["ie7-font-size"];
+      if (fontSize) {
+        if (EM.test(fontSize)) scale *= parseFloat(fontSize);
+        else if (PERCENT.test(fontSize)) scale *= (parseFloat(fontSize) / 100);
+        else if (EX.test(fontSize)) scale *= (parseFloat(fontSize) / 2);
+        else {
+          temp.style.fontSize = fontSize;
+          return 1;
+        }
+      }
+      element = element.parentElement;
+    }
+    return scale;
+  };
+
+  // cursor:pointer (IE5.x)
+  IE7.CSS.addFix(/cursor\s*:\s*pointer/, "cursor:hand");
+  // display:list-item (IE5.x)
+  IE7.CSS.addFix(/display\s*:\s*list-item/, "display:block");
+  
+  // -----------------------------------------------------------------------
+  //  margin:auto
+  // -----------------------------------------------------------------------
+  
+  function fixMargin(element) {
+    var parent = element.parentElement;
+    var margin = parent.offsetWidth - element.offsetWidth - getPaddingWidth(parent);
+    var autoRight = (element.currentStyle["ie7-margin"] && element.currentStyle.marginRight === "auto") ||
+      element.currentStyle["ie7-margin-right"] === "auto";
+    switch (parent.currentStyle.textAlign) {
+      case "right":
+        margin = autoRight ? parseInt(margin / 2) : 0;
+        element.runtimeStyle.marginRight = margin + "px";
+        break;
+      case "center":
+        if (autoRight) margin = 0;
+      default:
+        if (autoRight) margin /= 2;
+        element.runtimeStyle.marginLeft = parseInt(margin) + "px";
+    }
+  };
+
+  function getPaddingWidth(element) {
+    return getPixelValue(element, element.currentStyle.paddingLeft) +
+      getPixelValue(element, element.currentStyle.paddingRight);
+  };
+  
+  IE7.CSS.addRecalc("margin(-left|-right)?", "[^};]*auto", function(element) {
+    if (register(fixMargin, element,
+      element.parentElement &&
+      element.currentStyle.display === "block" &&
+      element.currentStyle.marginLeft === "auto" &&
+      element.currentStyle.position !== "absolute")) {
+        fixMargin(element);
+    }
+  });
+  
+  addResize(function() {
+    for (var i in fixMargin.elements) {
+      var element = fixMargin.elements[i];
+      element.runtimeStyle.marginLeft =
+      element.runtimeStyle.marginRight = "";
+      fixMargin(element);
+    }
+  });
+};
+
+
+// =========================================================================
+// ie8-css.js
+// =========================================================================
+
+var BRACKETS = "\\([^)]+\\)";
+
+// pseudo-elements can be declared with a double colon
+encoder.add(/::(before|after)/, ":$1");
+
+if (appVersion < 8) {
+
+  if (IE7.CSS.pseudoClasses) IE7.CSS.pseudoClasses += "|";
+  IE7.CSS.pseudoClasses += "before|after|lang" + BRACKETS;
+
+  // -----------------------------------------------------------------------
+  // propertyName: inherit;
+  // -----------------------------------------------------------------------
+  
+  function parseInherited(cssText) {
+    return cssText.replace(new RegExp("([{;\\s])(" + inheritedProperties.join("|") + ")\\s*:\\s*([^;}]+)", "g"), "$1$2:$3;ie7-$2:$3");
+  };
+
+  var INHERITED = /[\w-]+\s*:\s*inherit/g;
+  var STRIP_IE7_FLAGS = /ie7\-|\s*:\s*inherit/g;
+  var DASH_LOWER = /\-([a-z])/g;
+  function toUpper(match, chr) {return chr.toUpperCase()};
+  
+  IE7.CSS.addRecalc("[\\w-]+", "inherit", function(element, cssText) {
+    if (element.parentElement) {
+      var inherited = cssText.match(INHERITED);
+      for (var i = 0; i < inherited.length; i++) {
+        var propertyName = inherited[i].replace(STRIP_IE7_FLAGS, "");
+        if (element.currentStyle["ie7-" + propertyName] === "inherit") {
+          propertyName = propertyName.replace(DASH_LOWER, toUpper);
+          element.runtimeStyle[propertyName] = element.parentElement.currentStyle[propertyName];
+        }
+      }
+    }
+  }, function(match) {
+    inheritedProperties.push(rescape(match.slice(1).split(":")[0]));
+    return match;
+  });
+
+  // -----------------------------------------------------------------------
+  // dynamic pseudo-classes
+  // -----------------------------------------------------------------------
+
+  var Focus = new DynamicPseudoClass("focus", function(element) {
+    var instance = arguments;
+
+    IE7.CSS.addEventHandler(element, "onfocus", function() {
+      Focus.unregister(instance); // in case it starts with focus
+      Focus.register(instance);
+    });
+
+    IE7.CSS.addEventHandler(element, "onblur", function() {
+      Focus.unregister(instance);
+    });
+
+    // check the active element for initial state
+    if (element == document.activeElement) {
+      Focus.register(instance)
+    }
+  });
+
+  var Active = new DynamicPseudoClass("active", function(element) {
+    var instance = arguments;
+    IE7.CSS.addEventHandler(element, "onmousedown", function() {
+      Active.register(instance);
+    });
+  });
+
+  // globally trap the mouseup event (thanks Martijn!)
+  addEventHandler(document, "onmouseup", function() {
+    var instances = Active.instances;
+    for (var i in instances) Active.unregister(instances[i]);
+  });
+
+  // -----------------------------------------------------------------------
+  // IE7 pseudo elements
+  // -----------------------------------------------------------------------
+
+  // constants
+  var URL = /^url\s*\(\s*([^)]*)\)$/;
+  var POSITION_MAP = {
+    before0: "beforeBegin",
+    before1: "afterBegin",
+    after0: "afterEnd",
+    after1: "beforeEnd"
+  };
+
+  var PseudoElement = IE7.PseudoElement = Rule.extend({
+    constructor: function(selector, position, cssText) {
+      // initialise object properties
+      this.position = position;
+      var content = cssText.match(PseudoElement.CONTENT), match, entity;
+      if (content) {
+        content = content[1];
+        match = content.split(/\s+/);
+        for (var i = 0; (entity = match[i]); i++) {
+          match[i] = /^attr/.test(entity) ? {attr: entity.slice(5, -1)} :
+            entity.charAt(0) === "'" ? getString(entity) : decode(entity);
+        }
+        content = match;
+      }
+      this.content = content;
+      // CSS text needs to be decoded immediately
+      this.base(selector, decode(cssText));
+    },
+
+    init: function() {
+      // execute the underlying css query for this class
+      this.match = cssQuery(this.selector);
+      for (var i = 0; i < this.match.length; i++) {
+        var runtimeStyle = this.match[i].runtimeStyle;
+        if (!runtimeStyle[this.position]) runtimeStyle[this.position] = {cssText:""};
+        runtimeStyle[this.position].cssText += ";" + this.cssText;
+        if (this.content != null) runtimeStyle[this.position].content = this.content;
+      }
+    },
+
+    create: function(target) {
+      var generated = target.runtimeStyle[this.position];
+      if (generated) {
+        // copy the array of values
+        var content = [].concat(generated.content || "");
+        for (var j = 0; j < content.length; j++) {
+          if (typeof content[j] == "object") {
+            content[j] = target.getAttribute(content[j].attr);
+          }
+        }
+        content = content.join("");
+        var url = content.match(URL);
+        var cssText = "overflow:hidden;" + generated.cssText.replace(/'/g, '"');
+        var position = POSITION_MAP[this.position + Number(target.canHaveChildren)];
+        var id = 'ie7_pseudo' + PseudoElement.count++;
+        target.insertAdjacentHTML(position, format(PseudoElement.ANON, this.className, id, cssText, url ? "" : content));
+        if (url) {
+          var src = getString(url[1]);
+          var pseudoElement = document.getElementById(id);
+          pseudoElement.src = src;
+          addFilter(pseudoElement, "crop");
+          var targetIsFloated = target.currentStyle.styleFloat !== "none";
+          if (pseudoElement.currentStyle.display === "inline" || targetIsFloated) {
+            if (appVersion < 7 && targetIsFloated && target.canHaveChildren) {
+              target.runtimeStyle.display = "inline";
+              target.runtimeStyle.position = "relative";
+              pseudoElement.runtimeStyle.position = "absolute";
+            }
+            pseudoElement.style.display = "inline-block";
+            if (target.currentStyle.styleFloat !== "none") {
+              pseudoElement.style.pixelWidth = target.offsetWidth;
+            }
+            var image = new Image;
+            image.onload = function() {
+              pseudoElement.style.pixelWidth = this.width;
+              pseudoElement.style.pixelHeight = Math.max(this.height, pseudoElement.offsetHeight);
+            };
+            image.src = src;
+          }
+        }
+        target.runtimeStyle[this.position] = null;
+      }
+    },
+
+    recalc: function() {
+      if (this.content == null) return;
+      for (var i = 0; i < this.match.length; i++) {
+        this.create(this.match[i]);
+      }
+    },
+
+    toString: function() {
+      return "." + this.className + "{display:inline}";
+    }
+  }, {
+    CONTENT: /content\s*:\s*([^;]*)(;|$)/,
+    ANON: "<ie7:! class='ie7_anon %1' id=%2 style='%3'>%4</ie7:!>",
+    MATCH: /(.*):(before|after).*/,
+
+    count: 0
+  });
+
+  IE7._getLang = function(element) {
+    var lang = "";
+    while (element && element.nodeType === 1) {
+      lang = element.lang || element.getAttribute("lang") || "";
+      if (lang) break;
+      element = element.parentNode;
+    }
+    return lang;
+  };
+
+  FILTER = extend(FILTER, {
+    ":lang\\(([^)]+)\\)":    "((ii=IE7._getLang(e))==='$1'||ii.indexOf('$1-')===0)&&"
+  });
+}
+
+// =========================================================================
+// ie8-html.js
+// =========================================================================
+
+var UNSUCCESSFUL = /^(submit|reset|button)$/;
+
+// -----------------------------------------------------------------------
+// <button>
+// -----------------------------------------------------------------------
+
+// IE bug means that innerText is submitted instead of "value"
+IE7.HTML.addRecalc("button,input", function(button) {
+  if (button.nodeName === "BUTTON") {
+    var match = button.outerHTML.match(/ value="([^"]*)"/i);
+    button.runtimeStyle.value = match ? match[1] : "";
+  }
+  // flag the button/input that was used to submit the form
+  if (button.type === "submit") {
+    addEventHandler(button, "onclick", function() {
+      button.runtimeStyle.clicked = true;
+      setTimeout("document.all." + button.uniqueID + ".runtimeStyle.clicked=false", 1);
+    });
+  }
+});
+
+// -----------------------------------------------------------------------
+// <form>
+// -----------------------------------------------------------------------
+
+// only submit "successful controls
+IE7.HTML.addRecalc("form", function(form) {
+  addEventHandler(form, "onsubmit", function() {
+    for (var element, i = 0; element = form[i]; i++) {
+      if (UNSUCCESSFUL.test(element.type) && !element.disabled && !element.runtimeStyle.clicked) {
+        element.disabled = true;
+        setTimeout("document.all." + element.uniqueID + ".disabled=false", 1);
+      } else if (element.nodeName === "BUTTON" && element.type === "submit") {
+        setTimeout("document.all." + element.uniqueID + ".value='" + element.value + "'", 1);
+        element.value = element.runtimeStyle.value;
+      }
+    }
+  });
+});
+
+// -----------------------------------------------------------------------
+// <img>
+// -----------------------------------------------------------------------
+
+// get rid of the spurious tooltip produced by the alt attribute on images
+IE7.HTML.addRecalc("img", function(img) {
+  if (img.alt && !img.title) img.title = "";
+});
+
+// =========================================================================
+// ie8-layout.js
+// =========================================================================
+
+if (appVersion < 8) {
+  IE7.CSS.addRecalc("border-spacing", NUMERIC, function(element) {
+    if (element.currentStyle.borderCollapse !== "collapse") {
+      element.cellSpacing = getPixelValue(element, element.currentStyle["ie7-border-spacing"].split(" ")[0]);
+    }
+  });
+  IE7.CSS.addRecalc("box-sizing", "content-box", IE7.Layout.boxSizing);
+  IE7.CSS.addRecalc("box-sizing", "border-box", IE7.Layout.borderBox);
+}
+
+// =========================================================================
+// ie8-graphics.js
+// =========================================================================
+
+if (appVersion < 8) {
+  // fix object[type=image/*]
+  var IMAGE = /^image/i;
+  IE7.HTML.addRecalc("object", function(element) {
+    if (IMAGE.test(element.type)) {
+      element.body.style.cssText = "margin:0;padding:0;border:none;overflow:hidden";
+      return element;
+    }
+  });
+}
+
+// =========================================================================
+// ie9-css.js
+// =========================================================================
+
+var NOT_NEXT_BY_TYPE     = "!IE7._getElementSiblingByType(e,'next')&&",
+    NOT_PREVIOUS_BY_TYPE = NOT_NEXT_BY_TYPE.replace("next", "previous");
+
+if (IE7.CSS.pseudoClasses) IE7.CSS.pseudoClasses += "|";
+IE7.CSS.pseudoClasses += "(?:first|last|only)\\-(?:child|of\\-type)|empty|root|target|" +
+  ("not|nth\\-child|nth\\-last\\-child|nth\\-of\\-type|nth\\-last\\-of\\-type".split("|").join(BRACKETS + "|") + BRACKETS);
+  
+// :checked
+var Checked = new DynamicPseudoClass("checked", function(element) {
+  if (typeof element.checked !== "boolean") return;
+  var instance = arguments;
+  IE7.CSS.addEventHandler(element, "onpropertychange", function() {
+    if (event.propertyName === "checked") {
+      if (element.checked === true) Checked.register(instance);
+      else Checked.unregister(instance);
+    }
+  });
+  // check current checked state
+  if (element.checked === true) Checked.register(instance);
+});
+
+// :enabled
+var Enabled = new DynamicPseudoClass("enabled", function(element) {
+  if (typeof element.disabled !== "boolean") return;
+  var instance = arguments;
+  IE7.CSS.addEventHandler(element, "onpropertychange", function() {
+    if (event.propertyName === "disabled") {
+      if (element.disabled === false) Enabled.register(instance);
+      else Enabled.unregister(instance);
+    }
+  });
+  // check current disabled state
+  if (element.disabled === false) Enabled.register(instance);
+});
+
+// :disabled
+var Disabled = new DynamicPseudoClass("disabled", function(element) {
+  if (typeof element.disabled !== "boolean") return;
+  var instance = arguments;
+  IE7.CSS.addEventHandler(element, "onpropertychange", function() {
+    if (event.propertyName === "disabled") {
+      if (element.disabled === true) Disabled.register(instance);
+      else Disabled.unregister(instance);
+    }
+  });
+  // check current disabled state
+  if (element.disabled === true) Disabled.register(instance);
+});
+
+// :indeterminate (Kevin Newman)
+var Indeterminate = new DynamicPseudoClass("indeterminate", function(element) {
+  if (typeof element.indeterminate !== "boolean") return;
+  var instance = arguments;
+  IE7.CSS.addEventHandler(element, "onpropertychange", function() {
+    if (event.propertyName === "indeterminate") {
+      if (element.indeterminate === true) Indeterminate.register(instance);
+      else Indeterminate.unregister(instance);
+    }
+  });
+  IE7.CSS.addEventHandler(element, "onclick", function() {
+    Indeterminate.unregister(instance);
+  });
+  // clever Kev says no need to check this up front
+});
+
+// :target
+var Target = new DynamicPseudoClass("target", function(element) {
+  var instance = arguments;
+  // if an element has a tabIndex then it can become "active".
+  //  The default is zero anyway but it works...
+  if (!element.tabIndex) element.tabIndex = 0;
+  // this doesn't detect the back button. I don't know how to do that without adding an iframe :-(
+  IE7.CSS.addEventHandler(document, "onpropertychange", function() {
+    if (event.propertyName === "activeElement") {
+      if (element.id && element.id === location.hash.slice(1)) Target.register(instance);
+      else Target.unregister(instance);
+    }
+  });
+  // check the current location
+  if (element.id && element.id === location.hash.slice(1)) Target.register(instance);
+});
+
+// Register a node and index its siblings.
+var _currentIndex = 1, // -@DRE
+    allIndexes = {_currentIndex: 1};
+
+IE7._indexOf = function(element, last, ofType) {
+  var parent = element.parentNode;
+  if (!parent || parent.nodeType !== 1) return NaN;
+
+  var tagName = ofType ? element.nodeName : "";
+  if (tagName === "TR" && element.sectionRowIndex >= 0) {
+    var index = element.sectionRowIndex;
+    return last ? element.parentNode.rows.length - index + 1 : index;
+  }
+  if ((tagName === "TD" || tagName === "TH") && element.cellIndex >= 0) {
+    index = element.cellIndex;
+    return last ? element.parentNode.cells.length - index + 1 : index;
+  }
+  if (allIndexes._currentIndex !== _currentIndex) {
+    allIndexes = {_currentIndex: _currentIndex};
+  }
+  var id = (parent.uniqueID) + "-" + tagName,
+      indexes = allIndexes[id];
+  if (!indexes) {
+    indexes = {};
+    var index = 0,
+        child = parent.firstChild;
+    while (child) {
+      if (ofType ? child.nodeName === tagName : child.nodeName > "@") {
+        indexes[child.uniqueID] = ++index;
+      }
+      child = child.nextSibling;
+    }
+    indexes.length = index;
+    allIndexes[id] = indexes;
+  }
+  index = indexes[element.uniqueID];
+  return last ? indexes.length - index + 1 : index;
+};
+
+IE7._isEmpty = function(node) {
+  node = node.firstChild;
+  while (node) {
+    if (node.nodeType === 3 || node.nodeName > "@") return false;
+    node = node.nextSibling;
+  }
+  return true;
+};
+
+IE7._getElementSiblingByType = function(node, direction) {
+  var tagName = node.nodeName;
+  direction += "Sibling";
+  do {
+    node = node[direction];
+    if (node && node.nodeName === tagName) break;
+  } while (node);
+  return node;
+};
+
+var ONE = {"+": 1, "-": -1}, SPACES = / /g;
+
+FILTER = extend(extend({
+  ":nth(-last)?-(?:child|(of-type))\\((<#nth_arg>)\\)(<#filter>)?": function(match, last, ofType, args, filters) { // :nth- pseudo classes
+    args = args.replace(SPACES, "");
+
+    var index = "IE7._indexOf(e," + !!last + "," + !!ofType + ")";
+
+    if (args === "even") args = "2n";
+    else if (args === "odd") args = "2n+1";
+    else if (!isNaN(args)) args = "0n" + ~~args;
+
+    args = args.split("n");
+    var a = ~~(ONE[args[0]] || args[0] || 1),
+        b = ~~args[1];
+    if (a === 0) {
+      var expr = index + "===" + b;
+    } else {
+      expr = "((ii=" + index + ")-(" + b + "))%" + a + "===0&&ii" + (a < 0 ? "<" : ">") + "=" + b;
+    }
+    return this.parse(filters) + expr + "&&";
+  },
+
+  "<#negation>": function(match, simple) {
+    if (/:not/i.test(simple)) throwSelectorError();
+
+    if (/^[#.:\[]/.test(simple)) {
+      simple = "*" + simple;
+    }
+    return "!(" + MATCHER.parse(simple).slice(3, -2) + ")&&";
+  }
+}, FILTER), {
+  ":checked":         "e.checked===true&&",
+  ":disabled":        "e.disabled===true&&",
+  ":enabled":         "e.disabled===false&&",
+  ":last-child":      "!" + NEXT_SIBLING + "&&",
+  ":only-child":      "!" + PREVIOUS_SIBLING + "&&!" + NEXT_SIBLING + "&&",
+  ":first-of-type":   NOT_PREVIOUS_BY_TYPE,
+  ":last-of-type":    NOT_NEXT_BY_TYPE,
+  ":only-of-type":    NOT_PREVIOUS_BY_TYPE + NOT_NEXT_BY_TYPE,
+
+  ":empty":          "IE7._isEmpty(e)&&",
+  ":root":           "e==R&&",
+  ":target":         "H&&" + ID_ATTRIBUTE + "===H&&"
+});
+
+var HTML5 = "article,aside,audio,canvas,details,figcaption,figure,footer,header,hgroup,mark,menu,meter,nav,output,progress,section,summary,time,video".split(",");
+for (var i = 0, tagName; tagName = HTML5[i]; i++) document.createElement(tagName);
+
+HEADER += "datalist{display:none}\
+details{padding-left:40px;display:block;margin:1em 0}\
+meter,progress{vertical-align:-0.2em;width:5em;height:1em;display:inline-block}\
+progress{width:10em;}\
+article,aside,figcaption,footer,header,hgroup,summary,section,nav{display:block;margin:1em 0}\
+figure{margin:1em 40px;display:block}\
+mark{background:yellow}";
+
+// =========================================================================
+// ie9-layout.js
+// =========================================================================
+
+// =========================================================================
+// ie9-graphics.js
+// =========================================================================
+
+IE7.CSS.addFix(/\bopacity\s*:\s*([\d.]+)/, function(match, value) {
+  return "zoom:1;filter:Alpha(opacity=" + ((value * 100) || 1) + ")";
+});
+
+var MATCHER;
+
+var cssQuery = (function() {
+  var CONTEXT = /^[>+~]/;
+  
+  var useContext = false;
+  
+  // This is not a selector engine in the strictest sense. So it's best to silently error.
+  function cssQuery(selector, context, single) {
+    selector = trim(selector);
+    if (!context) context = document;
+    var ref = context;
+    useContext = CONTEXT.test(selector);
+    if (useContext) {
+      context = context.parentNode;
+      selector = "*" + selector;
+    }
+    try {
+      return selectQuery.create(selector, useContext)(context, single ? null : [], ref);
+    } catch (ex) {
+      return single ? null : [];
+    }
+  };
+
+  var VALID_SELECTOR = /^(\\.|[' >+~#.\[\]:*(),\w-\^|$=]|[^\x00-\xa0])+$/;
+
+  var _EVALUATED = /^(href|src)$/;
+  var _ATTRIBUTES = {
+    "class": "className",
+    "for": "htmlFor"
+  };
+
+  var IE7_CLASS_NAMES = /\sie7_\w+/g;
+
+  var USE_IFLAG = /^(action|cite|codebase|data|dynsrc|href|longdesc|lowsrc|src|usemap|url)$/i;
+
+  IE7._getAttribute = function(element, name) {
+    if (element.getAttributeNode) {
+      var attribute = element.getAttributeNode(name);
+    }
+    name = _ATTRIBUTES[name.toLowerCase()] || name;
+    if (!attribute) attribute = element.attributes[name];
+    var specified = attribute && attribute.specified;
+
+    if (element[name] && typeof element[name] == "boolean") return name.toLowerCase();
+    if ((specified && USE_IFLAG.test(name)) || (!attribute && MSIE5) || name === "value" || name === "type") {
+      return element.getAttribute(name, 2);
+    }
+    if (name === "style") return element.style.cssText.toLowerCase() || null;
+
+    return specified ? String(attribute.nodeValue) : null;
+  };
+
+  var names = "colSpan,rowSpan,vAlign,dateTime,accessKey,tabIndex,encType,maxLength,readOnly,longDesc";
+  // Convert the list of strings to a hash, mapping the lowercase name to the camelCase name.
+  extend(_ATTRIBUTES, combine(names.toLowerCase().split(","), names.split(",")));
+
+  IE7._getElementSibling = function(node, direction) {
+    direction += "Sibling";
+    do {
+      node = node[direction];
+      if (node && node.nodeName > "@") break;
+    } while (node);
+    return node;
+  };
+
+  var IMPLIED_ASTERISK    = /(^|[, >+~])([#.:\[])/g,
+      BLOCKS              = /\)\{/g,
+      COMMA               = /,/,
+      QUOTED              = /^['"]/,
+      HEX_ESCAPE          = /\\([\da-f]{2,2})/gi,
+      LAST_CHILD          = /last/i;
+
+  IE7._byId = function(document, id) {
+    var result = document.all[id] || null;
+    // Returns a single element or a collection.
+    if (!result || (result.nodeType && IE7._getAttribute(result, "id") === id)) return result;
+    // document.all has returned a collection of elements with name/id
+    for (var i = 0; i < result.length; i++) {
+      if (IE7._getAttribute(result[i], "id") === id) return result[i];
+    }
+    return null;
+  };
+
+  // =========================================================================
+  // dom/selectors-api/CSSSelectorParser.js
+  // =========================================================================
+
+  // http://www.w3.org/TR/css3-selectors/#w3cselgrammar (kinda)
+  var CSSSelectorParser = RegGrp.extend({
+    dictionary: new Dictionary({
+      ident:           /\-?(\\.|[_a-z]|[^\x00-\xa0])(\\.|[\w-]|[^\x00-\xa0])*/,
+      combinator:      /[\s>+~]/,
+      operator:        /[\^~|$*]?=/,
+      nth_arg:         /[+-]?\d+|[+-]?\d*n(?:\s*[+-]\s*\d+)?|even|odd/,
+      tag:             /\*|<#ident>/,
+      id:              /#(<#ident>)/,
+      'class':         /\.(<#ident>)/,
+      pseudo:          /\:([\w-]+)(?:\(([^)]+)\))?/,
+      attr:            /\[(<#ident>)(?:(<#operator>)((?:\\.|[^\[\]#.:])+))?\]/,
+      negation:        /:not\((<#tag>|<#id>|<#class>|<#attr>|<#pseudo>)\)/,
+      sequence:        /(\\.|[~*]=|\+\d|\+?\d*n\s*\+\s*\d|[^\s>+~,\*])+/,
+      filter:          /[#.:\[]<#sequence>/,
+      selector:        /[^>+~](\\.|[^,])*?/,
+      grammar:         /^(<#selector>)((,<#selector>)*)$/
+    }),
+
+    ignoreCase: true
+  });
+
+  var normalizer = new CSSSelectorParser({
+    "\\\\.|[~*]\\s+=|\\+\\s+\\d": RegGrp.IGNORE,
+    "\\[\\s+": "[",
+    "\\(\\s+": "(",
+    "\\s+\\)": ")",
+    "\\s+\\]": "]",
+    "\\s*([,>+~]|<#operator>)\\s*": "$1",
+    "\\s+$": "",
+    "\\s+": " "
+  });
+
+  function normalize(selector) {
+    selector = normalizer.parse(selector.replace(HEX_ESCAPE, "\\x$1"))
+      .replace(UNESCAPE, "$1")
+      .replace(IMPLIED_ASTERISK, "$1*$2");
+    if (!VALID_SELECTOR.test(selector)) throwSelectorError();
+    return selector;
+  };
+
+  function unescape(query) {
+    // put string values back
+    return query.replace(ESCAPED, unescapeString);
+  };
+
+  function unescapeString(match, index) {
+    return strings[index];
+  };
+
+  var BRACES = /\{/g, BRACES_ESCAPED = /\\{/g;
+
+  function closeBlock(group) {
+    return Array((group.replace(BRACES_ESCAPED, "").match(BRACES) || "").length + 1).join("}");
+  };
+
+  FILTER = new CSSSelectorParser(FILTER);
+
+  var TARGET = /:target/i, ROOT = /:root/i;
+
+  function getConstants(selector) {
+    var constants = "";
+    if (ROOT.test(selector)) constants += ",R=d.documentElement";
+    if (TARGET.test(selector)) constants += ",H=d.location;H=H&&H.hash.replace('#','')";
+    if (constants || selector.indexOf("#") !== -1) {
+      constants = ",t=c.nodeType,d=t===9?c:c.ownerDocument||(c.document||c).parentWindow.document" + constants;
+    }
+    return "var ii" + constants + ";";
+  };
+
+  var COMBINATOR = {
+    " ":   ";while(e!=s&&(e=e.parentNode)&&e.nodeType===1){",
+    ">":   ".parentElement;if(e){",
+    "+":   ";while((e=e.previousSibling)&&!(" + IS_ELEMENT + "))continue;if(e){",
+    "~":   ";while((e=e.previousSibling)){" + IF_ELEMENT
+  };
+
+  var TOKEN = /\be\b/g;
+
+  MATCHER = new CSSSelectorParser({
+    "(?:(<#selector>)(<#combinator>))?(<#tag>)(<#filter>)?$": function(match, before, combinator, tag, filters) {
+      var group = "";
+      if (tag !== "*") {
+        var TAG = tag.toUpperCase();
+        group += "if(e.nodeName==='" + TAG + (TAG === tag ? "" : "'||e.nodeName==='" + tag) + "'){";
+      }
+      if (filters) {
+        group += "if(" + FILTER.parse(filters).slice(0, -2) + "){";
+      }
+      group = group.replace(TOKEN, "e" + this.index);
+      if (combinator) {
+        group += "var e=e" + (this.index++) + COMBINATOR[combinator];
+        group = group.replace(TOKEN, "e" + this.index);
+      }
+      if (before) {
+        group += this.parse(before);
+      }
+      return group;
+    }
+  });
+  
+  var BY_ID       = "e0=IE7._byId(d,'%1');if(e0){",
+      BY_TAG_NAME = "var n=c.getElementsByTagName('%1');",
+      STORE       = "if(r==null)return e0;r[k++]=e0;";
+
+  var TAG_NAME = 1;
+
+  var SELECTOR = new CSSSelectorParser({
+    "^((?:<#selector>)?(?:<#combinator>))(<#tag>)(<#filter>)?$": true
+  });
+
+  var cache = {};
+
+  var selectById = new CSSSelectorParser({
+    "^(<#tag>)#(<#ident>)(<#filter>)?( [^,]*)?$": function(match, tagName, id, filters, after) {
+      var block = format(BY_ID, id), endBlock = "}";
+      if (filters) {
+        block += MATCHER.parse(tagName + filters);
+        endBlock = closeBlock(block);
+      }
+      if (after) {
+        block += "s=c=e0;" + selectQuery.parse("*" + after);
+      } else {
+        block += STORE;
+      }
+      return block + endBlock;
+    },
+
+    "^([^#,]+)#(<#ident>)(<#filter>)?$": function(match, before, id, filters) {
+      var block = format(BY_ID, id);
+      if (before === "*") {
+        block += STORE;
+      } else {
+        block += MATCHER.parse(before + filters) + STORE + "break";
+      }
+      return block + closeBlock(block);
+    },
+
+    "^.*$": ""
+  });
+
+  var selectQuery = new CSSSelectorParser({
+    "<#grammar>": function(match, selector, remainingSelectors) {
+      if (!this.groups) this.groups = [];
+
+      var group = SELECTOR.exec(" " + selector);
+
+      if (!group) throwSelectorError();
+
+      this.groups.push(group.slice(1));
+
+      if (remainingSelectors) {
+        return this.parse(remainingSelectors.replace(COMMA, ""));
+      }
+
+      var groups = this.groups,
+          tagName = groups[0][TAG_NAME]; // first tag name
+
+      for (var i = 1; group = groups[i]; i++) { // search tag names
+        if (tagName !== group[TAG_NAME]) {
+          tagName = "*"; // mixed tag names, so use "*"
+          break;
+        }
+      }
+
+      var matcher = "", store = STORE + "continue filtering;";
+
+      for (var i = 0; group = groups[i]; i++) {
+        MATCHER.index = 0;
+        if (tagName !== "*") group[TAG_NAME] = "*"; // we are already filtering by tagName
+        group = group.join("");
+        if (group === " *") { // select all
+          matcher = store;
+          break;
+        } else {
+          group = MATCHER.parse(group);
+          if (useContext) group += "if(e" + MATCHER.index + "==s){";
+          matcher += group + store + closeBlock(group);
+        }
+      }
+
+      // reduce to a single loop
+      var isWild = tagName === "*";
+      return (isWild ? "var n=c.all;" : format(BY_TAG_NAME, tagName)) +
+        "filtering:while((e0=n[i++]))" +
+        (isWild ? IF_ELEMENT.replace(TOKEN, "e0") : "{") +
+          matcher +
+        "}";
+    },
+
+    "^.*$": throwSelectorError
+  });
+
+  var REDUNDANT_NODETYPE_CHECKS = /\&\&(e\d+)\.nodeType===1(\)\{\s*if\(\1\.nodeName=)/g;
+
+  selectQuery.create = function(selector) {
+    if (!cache[selector]) {
+      selector = normalize(selector);
+      this.groups = null;
+      MATCHER.index = 0;
+      var block = this.parse(selector);
+      this.groups = null;
+      MATCHER.index = 0;
+      if (selector.indexOf("#") !== -1) {
+        var byId  = selectById.parse(selector);
+        if (byId) {
+          block =
+            "if(t===1||t===11|!c.getElementById){" +
+              block +
+            "}else{" +
+              byId +
+            "}";
+        }
+      }
+      // remove redundant nodeType==1 checks
+      block = block.replace(REDUNDANT_NODETYPE_CHECKS, "$2");
+      block = getConstants(selector) + decode(block);
+      cache[selector] = new Function("return function(c,r,s){var i=0,k=0,e0;" + block + "return r}")();
+    }
+    return cache[selector];
+  };
+
+  return cssQuery;
+})();
+
+function throwSelectorError() {
+  throw new SyntaxError("Invalid selector.");
+};
+
+// -----------------------------------------------------------------------
+// initialisation
+// -----------------------------------------------------------------------
+
+IE7.loaded = true;
+
+(function() {
+  try {
+    // http://javascript.nwbox.com/IEContentLoaded/
+    if (!document.body) throw "continue";
+    documentElement.doScroll("left");
+  } catch (ex) {
+    setTimeout(arguments.callee, 1);
+    return;
+  }
+  // execute the inner text of the IE7 script
+  try {
+    eval(script.innerHTML);
+  } catch (ex) {
+    // ignore errors
+  }
+  if (typeof IE7_PNG_SUFFIX == "object") {
+    PNG = IE7_PNG_SUFFIX;
+  } else {
+    PNG = new RegExp(rescape(window.IE7_PNG_SUFFIX || "-trans.png") + "(\\?.*)?$", "i");
+  }
+
+  // frequently used references
+  body = document.body;
+  viewport = MSIE5 ? body : documentElement;
+
+  // classes
+  body.className += " ie7_body";
+  documentElement.className += " ie7_html";
+
+  if (MSIE5) ie7Quirks();
+
+  IE7.CSS.init();
+  IE7.HTML.init();
+
+  IE7.HTML.apply();
+  IE7.CSS.apply();
+
+  IE7.recalc();
+})();
+
+})(this, document);
Index: admin/js/jsUpload/template-download.js
===================================================================
--- admin/js/jsUpload/template-download.js	(revision 1461)
+++ admin/js/jsUpload/template-download.js	(revision 1461)
@@ -0,0 +1,1 @@
+var template_download = tmpl('{% for (var i=0, file; file=o.files[i]; i++) { %}<li class="template-download fade"><div class="upload-file"><div class="upload-fileinfo"><span class="upload-filename">{%=file.name%}</span><span class="upload-filesize">({%=o.formatFileSize(file.size)%})</span><span class="upload-filemsg{% if (file.error) { %} upload-error{% } %}">{% if (file.error) { %}'+dotclear.jsUpload.msg.error+' {%=file.error%}{% } else { %}'+dotclear.jsUpload.msg.file_successfully_uploaded+'{% } %}</span></div><div class="upload-progress">{% if (!file.error) { %}<div class="bar" style="width:100%;">100%</div>{% } %}</div></li>{% } %}');
Index: admin/js/jsUpload/template-upload.js
===================================================================
--- admin/js/jsUpload/template-upload.js	(revision 1461)
+++ admin/js/jsUpload/template-upload.js	(revision 1461)
@@ -0,0 +1,1 @@
+var template_upload = tmpl('{% for (var i=0, file; file=o.files[i]; i++) { %}<li class="template-upload fade"><div class="upload-file"><div class="upload-fileinfo"><span class="upload-filename">{%=file.name%}</span><span class="upload-filesize">({%=o.formatFileSize(file.size)%})</span><span class="upload-filecancel cancel">'+dotclear.jsUpload.msg.cancel+'</span>{% if (!o.files.error && !i && !o.options.autoUpload) { %}<input type="submit" class="button start"  value="'+dotclear.jsUpload.msg.send+'"/>{% } %}<span class="upload-filemsg"></span></div>{% if (!o.files.error) { %}<div class="upload-progress progress progress-success progress-striped active"><div class="bar" style="width:0%;"></div></div>{% } %}</li>{% } %}');
Index: admin/js/prelude.js
===================================================================
--- admin/js/prelude.js	(revision 447)
+++ admin/js/prelude.js	(revision 1446)
@@ -6,5 +6,6 @@
 			aElts[i].className="hidden";
 			aElts[i].onfocus=function() {
-				this.className="";
+				$('#prelude a').removeClass('hidden');
+				$('#main-menu').css('padding-top', '4.5em');
 			}
 		}
@@ -19,2 +20,7 @@
 }
 addLoadEvent(aFocus);
+
+// init
+$(function() {
+	$('#main-menu').css('padding-top', '.5em');
+});
Index: admin/langs.php
===================================================================
--- admin/langs.php	(revision 1332)
+++ admin/langs.php	(revision 1399)
@@ -129,12 +129,11 @@
 -------------------------------------------------------- */
 dcPage::open(__('Languages management'),
-	dcPage::jsLoad('js/_langs.js')
-);
-
-echo dcPage::breadcrumb(
+	dcPage::jsLoad('js/_langs.js'),
+	dcPage::breadcrumb(
 	array(
 		__('System') => '',
 		'<span class="page-title">'.__('Languages management').'</span>' => ''
-	));
+	))
+);
 
 if (!empty($_GET['removed'])) {
@@ -228,11 +227,11 @@
 	'<p>'.sprintf(__('You can download and install a additional language directly from Dotclear.net. '.
 	'Proposed languages are based on your version: %s.'),'<strong>'.DC_VERSION.'</strong>').'</p>'.
-	'<p class="field"><label for="pkg_url" class="classic">'.__('Language:').' '.
-	form::combo(array('pkg_url'),$dc_langs_combo).'</label></p>'.
-	'<p class="field"><label for="your_pwd1" class="classic required"><abbr title="'.__('Required field').'">*</abbr> '.__('Your password:').' '.
-	form::password(array('your_pwd','your_pwd1'),20,255).'</label></p>'.
-	'<input type="submit" value="'.__('Install language').'" />'.
+	'<p class="field"><label for="pkg_url" class="classic">'.__('Language:').'</label> '.
+	form::combo(array('pkg_url'),$dc_langs_combo).'</p>'.
+	'<p class="field"><label for="your_pwd1" class="classic required"><abbr title="'.__('Required field').'">*</abbr> '.__('Your password:').'</label> '.
+	form::password(array('your_pwd','your_pwd1'),20,255).'</p>'.
+	'<p><input type="submit" value="'.__('Install language').'" />'.
 	$core->formNonce().
-	'</fieldset>'.
+	'</p></fieldset>'.
 	'</form>';
 }
@@ -246,11 +245,11 @@
 	'<legend>'.__('Upload a zip file').'</legend>'.
 	'<p>'.__('You can install languages by uploading zip files.').'</p>'.
-	'<p class="field"><label for="pkg_file" class="classic required"><abbr title="'.__('Required field').'">*</abbr> '.__('Language zip file:').' '.
-	'<input type="file" id="pkg_file" name="pkg_file" /></label></p>'.
-	'<p class="field"><label for="your_pwd2" class="classic required"><abbr title="'.__('Required field').'">*</abbr> '.__('Your password:').' '.
-	form::password(array('your_pwd','your_pwd2'),20,255).'</label></p>'.
-	'<input type="submit" name="upload_pkg" value="'.__('Upload language').'" />'.
+	'<p class="field"><label for="pkg_file" class="classic required"><abbr title="'.__('Required field').'">*</abbr> '.__('Language zip file:').'</label> '.
+	'<input type="file" id="pkg_file" name="pkg_file" /></p>'.
+	'<p class="field"><label for="your_pwd2" class="classic required"><abbr title="'.__('Required field').'">*</abbr> '.__('Your password:').'</label> '.
+	form::password(array('your_pwd','your_pwd2'),20,255).'</p>'.
+	'<p><input type="submit" name="upload_pkg" value="'.__('Upload language').'" />'.
 	$core->formNonce().
-	'</fieldset>'.
+	'</p></fieldset>'.
 	'</form>';
 }
Index: admin/media.php
===================================================================
--- admin/media.php	(revision 1332)
+++ admin/media.php	(revision 1455)
@@ -203,12 +203,12 @@
 if ($dir && !empty($_GET['remove']) && empty($_GET['noconfirm']))
 {
-	call_user_func($open_f,__('Media manager'));
-	
-	echo dcPage::breadcrumb(
-		array(
-			html::escapeHTML($core->blog->name) => '',
-			__('Media manager') => '',
-			'<span class="page-title">'.__('confirm removal').'</span>' => ''
-		));
+	call_user_func($open_f,__('Media manager'),'',
+		dcPage::breadcrumb(
+			array(
+				html::escapeHTML($core->blog->name) => '',
+				__('Media manager') => '',
+				'<span class="page-title">'.__('confirm removal').'</span>' => ''
+			),!$popup)
+	);
 	
 	echo
@@ -232,55 +232,57 @@
 $user_ui_enhanceduploader = $core->auth->user_prefs->interface->enhanceduploader;
 
-call_user_func($open_f,__('Media manager'),
-	dcPage::jsLoad('js/_media.js').
-	($core_media_writable ? dcPage::jsUpload(array('d='.$d)) : '')
-	);
-
-if (!empty($_GET['mkdok'])) {
-	dcPage::message(__('Directory has been successfully created.'));
-}
-
-if (!empty($_GET['upok'])) {
-	dcPage::message(__('Files have been successfully uploaded.'));
-}
-
-if (!empty($_GET['rmfok'])) {
-	dcPage::message(__('File has been successfully removed.'));
-}
-
-if (!empty($_GET['rmdok'])) {
-	dcPage::message(__('Directory has been successfully removed.'));
-}
-
-if (!empty($_GET['rebuildok'])) {
-	dcPage::message(__('Directory has been successfully rebuilt.'));
-}
-
-if (!empty($_GET['unzipok'])) {
-	dcPage::message(__('Zip file has been successfully extracted.'));
-}
 
 if (!isset($core->media)) {
-	echo dcPage::breadcrumb(
+	$breadcrumb = dcPage::breadcrumb(
 		array(
 			html::escapeHTML($core->blog->name) => '',
 			'<span class="page-title">'.__('Media manager').'</span>' => ''
-		));
+		),!$popup);
 } else {
-	$breadcrumb = $core->media->breadCrumb(html::escapeURL($page_url).'&amp;d=%s','<span class="page-title">%s</span>');
-	if ($breadcrumb == '') {
-		echo dcPage::breadcrumb(
+	$breadcrumb_media = $core->media->breadCrumb(html::escapeURL($page_url).'&amp;d=%s','<span class="page-title">%s</span>');
+	if ($breadcrumb_media == '') {
+		$breadcrumb = dcPage::breadcrumb(
 			array(
 				html::escapeHTML($core->blog->name) => '',
 				'<span class="page-title">'.__('Media manager').'</span>' => ''
-			));
+			),!$popup);
 	} else {
-		echo dcPage::breadcrumb(
+		$breadcrumb = dcPage::breadcrumb(
 			array(
 				html::escapeHTML($core->blog->name) => '',
 				__('Media manager') => html::escapeURL($page_url.'&d='),
-				$breadcrumb => ''
-			));
-	}
+				$breadcrumb_media => ''
+			),!$popup);
+	}
+}
+
+call_user_func($open_f,__('Media manager'),
+	dcPage::jsLoad('js/_media.js').
+	($core_media_writable ? dcPage::jsUpload(array('d='.$d)) : ''),
+	$breadcrumb
+	);
+
+if (!empty($_GET['mkdok'])) {
+	dcPage::message(__('Directory has been successfully created.'));
+}
+
+if (!empty($_GET['upok'])) {
+	dcPage::message(__('Files have been successfully uploaded.'));
+}
+
+if (!empty($_GET['rmfok'])) {
+	dcPage::message(__('File has been successfully removed.'));
+}
+
+if (!empty($_GET['rmdok'])) {
+	dcPage::message(__('Directory has been successfully removed.'));
+}
+
+if (!empty($_GET['rebuildok'])) {
+	dcPage::message(__('Directory has been successfully rebuilt.'));
+}
+
+if (!empty($_GET['unzipok'])) {
+	dcPage::message(__('Zip file has been successfully extracted.'));
 }
 
@@ -315,6 +317,6 @@
 	echo
 	'<form action="media.php" method="get">'.
-	'<p><label for="file_sort" class="classic">'.__('Sort files:').' '.
-	form::combo('file_sort',$sort_combo,$file_sort).'</label>'.
+	'<p><label for="file_sort" class="classic">'.__('Sort files:').'</label> '.
+	form::combo('file_sort',$sort_combo,$file_sort).
 	form::hidden(array('popup'),$popup).
 	form::hidden(array('post_id'),$post_id).
@@ -322,5 +324,5 @@
 	'</form>'.
 	
-	'<p>'.__('Page(s)').' : '.$pager->getLinks().'</p>';
+	'<p class="pagination">'.__('Page(s)').' : '.$pager->getLinks().'</p>';
 	
 	for ($i=$pager->index_start, $j=0; $i<=$pager->index_end; $i++, $j++)
@@ -330,5 +332,5 @@
 	
 	echo
-	'<p class="clear">'.__('Page(s)').' : '.$pager->getLinks().'</p>';
+	'<p class="clear pagination">'.__('Page(s)').' : '.$pager->getLinks().'</p>';
 }
 if (!isset($pager)) {
@@ -352,10 +354,11 @@
 
 	echo
-	'<fieldset id="add-file-f"><legend>'.__('Add files').'</legend>'.
+	'<div class="fieldset">'.
+	'<h3>'.__('Add files').'</h3>'.
 	'<p>'.__('Please take care to publish media that you own and that are not protected by copyright.').'</p>'.
-	' <form id="fileupload" action="'.html::escapeURL($page_url).'" method="POST" enctype="multipart/form-data">'.
-	'<div>'.form::hidden(array('MAX_FILE_SIZE'),DC_MAX_UPLOAD_SIZE).
-	$core->formNonce().'</div>'.
-	'<div class="fileupload-ctrl"><div class="queue-message"></div><div class="files"></div></div>';
+	' <form id="fileupload" action="'.html::escapeURL($page_url).'" method="post" enctype="multipart/form-data" aria-disabled="false">'.
+	'<p>'.form::hidden(array('MAX_FILE_SIZE'),DC_MAX_UPLOAD_SIZE).
+	$core->formNonce().'</p>'.
+	'<div class="fileupload-ctrl"><p class="queue-message"></p><ul class="files"></ul></div>';
 
 	echo
@@ -364,12 +367,12 @@
 	echo
 	'<p class="max-sier form-note info">&nbsp;'.__('Maximum file size allowed:').' '.files::size(DC_MAX_UPLOAD_SIZE).'</p>'.
-	'<label for="upfile">'.'<span class="add-label one-file">'.__('Choose file').'</span>'.'</label>'.
+	'<p><label for="upfile">'.'<span class="add-label one-file">'.__('Choose file').'</span>'.'</label>'.
 	'<button class="button add">'.__('Choose files').'</button>'.
-	'<input type="file" id="upfile" name="upfile[]"'.($user_ui_enhanceduploader?' multiple="mutiple"':'').' data-url="'.html::escapeURL($page_url).'" />';
-
-	echo
-	'<p class="one-file"><label for="upfiletitle">'.__('Title:').form::field(array('upfiletitle','upfiletitle'),35,255).'</label></p>'.
-	'<p class="one-file"><label for="upfilepriv" class="classic">'.form::checkbox(array('upfilepriv','upfilepriv'),1).' '.
-	__('Private').'</label></p>';
+	'<input type="file" id="upfile" name="upfile[]"'.($user_ui_enhanceduploader?' multiple="mutiple"':'').' data-url="'.html::escapeURL($page_url).'" /></p>';
+
+	echo
+	'<p class="one-file"><label for="upfiletitle">'.__('Title:').'</label>'.form::field(array('upfiletitle','upfiletitle'),35,255).'</p>'.
+	'<p class="one-file"><label for="upfilepriv" class="classic">'.__('Private').'</label> '.
+	form::checkbox(array('upfilepriv','upfilepriv'),1).'</p>';
 
 	if (!$user_ui_enhanceduploader) {
@@ -380,15 +383,14 @@
 
 	echo
-	'<button class="button clean">'.__('Refresh').'</button>'.
+	'<p><button class="button clean">'.__('Refresh').'</button>'.
 	'<input class="button cancel one-file" type="reset" value="'.__('Clear all').'"/>'.
-	'<input class="button start" type="submit" value="'.__('Upload').'"/>'.
+	'<input class="button start" type="submit" value="'.__('Upload').'"/></p>'.
 	'</div>';
 
 	echo
-	'<div>'.form::hidden(array('d'),$d).'</div>'.
-	'</fieldset>'.
+	'<p>'.form::hidden(array('d'),$d).'</p>'.
 	'</form>'.
-	'</div>';
-	
+	'</div></div>';
+
 	echo
 	'<div class="col">'.
@@ -397,6 +399,6 @@
 	'<legend>'.__('New directory').'</legend>'.
 	$core->formNonce().
-	'<p><label for="newdir">'.__('Directory Name:').
-	form::field(array('newdir','newdir'),35,255).'</label></p>'.
+	'<p><label for="newdir">'.__('Directory Name:').'</label>'.
+	form::field(array('newdir','newdir'),35,255).'</p>'.
 	'<p><input type="submit" value="'.__('Create').'" />'.
 	form::hidden(array('d'),html::escapeHTML($d)).'</p>'.
Index: admin/media_item.php
===================================================================
--- admin/media_item.php	(revision 1332)
+++ admin/media_item.php	(revision 1454)
@@ -175,5 +175,11 @@
 	$starting_scripts.
 	dcPage::jsDatePicker().
-	dcPage::jsPageTabs($tab)
+	dcPage::jsPageTabs($tab),
+	dcPage::breadcrumb(
+		array(
+			html::escapeHTML($core->blog->name) => '',
+			__('Media manager') => html::escapeURL($media_page_url),
+			$core->media->breadCrumb(html::escapeURL($media_page_url).'&amp;d=%s').'<span class="page-title">'.$file->basename.'</span>' => ''
+		),!$popup)
 );
 
@@ -189,11 +195,4 @@
 	dcPage::message(__('Thumbnails have been successfully updated.'));
 }
-
-echo dcPage::breadcrumb(
-	array(
-		html::escapeHTML($core->blog->name) => '',
-		__('Media manager') => html::escapeURL($media_page_url),
-		$core->media->breadCrumb(html::escapeURL($media_page_url).'&amp;d=%s').'<span class="page-title">'.$file->basename.'</span>' => ''
-	));
 
 # Insertion popup
@@ -349,5 +348,6 @@
 
 echo
-'<div id="media-details">';
+'<div id="media-details">'.
+'<div class="near-icon">';
 
 if ($file->media_image)
@@ -358,14 +358,4 @@
 		$thumb_size = 's';
 	}
-	
-	echo '<p>'.__('Available sizes:').' ';
-	foreach (array_reverse($file->media_thumb) as $s => $v)
-	{
-		$strong_link = ($s == $thumb_size) ? '<strong>%s</strong>' : '%s';
-		printf($strong_link,'<a href="'.html::escapeURL($page_url).
-		'&amp;id='.$id.'&amp;size='.$s.'&amp;tab=media-details-tab">'.$core->media->thumb_sizes[$s][2].'</a> | ');
-	}
-	echo '<a href="'.html::escapeURL($page_url).'&amp;id='.$id.'&amp;size=o&amp;tab=media-details-tab">'.__('original').'</a>';
-	echo '</p>';
 	
 	if (isset($file->media_thumb[$thumb_size])) {
@@ -377,4 +367,14 @@
 		echo '<p id="media-original-image"'.$class.'><img src="'.$file->file_url.'?'.time()*rand().'" alt="" /></p>';
 	}
+	
+	echo '<p>'.__('Available sizes:').' ';
+	foreach (array_reverse($file->media_thumb) as $s => $v)
+	{
+		$strong_link = ($s == $thumb_size) ? '<strong>%s</strong>' : '%s';
+		printf($strong_link,'<a href="'.html::escapeURL($page_url).
+		'&amp;id='.$id.'&amp;size='.$s.'&amp;tab=media-details-tab">'.$core->media->thumb_sizes[$s][2].'</a> | ');
+	}
+	echo '<a href="'.html::escapeURL($page_url).'&amp;id='.$id.'&amp;size=o&amp;tab=media-details-tab">'.__('original').'</a>';
+	echo '</p>';
 }
 
@@ -401,5 +401,5 @@
 {
 	echo
-	'<p><strong><a href="'.html::escapeHTML($page_url).'&amp;id='.$id.'&amp;find_posts=1&amp;tab=media-details-tab">'.
+	'<p><strong><a class="button" href="'.html::escapeHTML($page_url).'&amp;id='.$id.'&amp;find_posts=1&amp;tab=media-details-tab">'.
 	__('Show entries containing this media').'</a></strong></p>';
 }
@@ -487,4 +487,6 @@
 }
 
+echo '</div>';
+
 if ($file->editable && $core_media_writable)
 {
@@ -517,6 +519,6 @@
 		__('This will extract archive in current directory and will overwrite existing files or directory.').'</li>'.
 		'</ul>'.
-		'<p><label for="inflate_mode" class="classic">'.__('Extract mode:').' '.
-		form::combo('inflate_mode',$inflate_combo,'new').'</label> '.
+		'<p><label for="inflate_mode" class="classic">'.__('Extract mode:').'</label> '.
+		form::combo('inflate_mode',$inflate_combo,'new').
 		'<input type="submit" name="unzip" value="'.__('Extract').'" />'.
 		form::hidden(array('id'),$id).
@@ -528,14 +530,14 @@
 	'<form class="clear" action="'.html::escapeURL($page_url).'" method="post">'.
 	'<fieldset><legend>'.__('Change media properties').'</legend>'.
-	'<p><label for="media_file">'.__('File name:').
-	form::field('media_file',30,255,html::escapeHTML($file->basename)).'</label></p>'.
-	'<p><label for="media_title">'.__('File title:').
-	form::field('media_title',30,255,html::escapeHTML($file->media_title)).'</label></p>'.
-	'<p><label for="media_dt">'.__('File date:').
-	form::field('media_dt',16,16,html::escapeHTML($file->media_dtstr)).'</label></p>'.
+	'<p><label for="media_file">'.__('File name:').'</label>'.
+	form::field('media_file',30,255,html::escapeHTML($file->basename)).'</p>'.
+	'<p><label for="media_title">'.__('File title:').'</label>'.
+	form::field('media_title',30,255,html::escapeHTML($file->media_title)).'</p>'.
+	'<p><label for="media_dt">'.__('File date:').'</label>'.
+	form::field('media_dt',16,16,html::escapeHTML($file->media_dtstr)).'</p>'.
 	'<p><label for="media_private" class="classic">'.form::checkbox('media_private',1,$file->media_priv).' '.
 	__('Private').'</label></p>'.
-	'<p><label for="media_path">'.__('New directory:').
-	form::combo('media_path',$dirs_combo,dirname($file->relname)).'</label></p>'.
+	'<p><label for="media_path">'.__('New directory:').'</label>'.
+	form::combo('media_path',$dirs_combo,dirname($file->relname)).'</p>'.
 	'<p><input type="submit" accesskey="s" value="'.__('Save').'" />'.
 	form::hidden(array('id'),$id).
Index: admin/plugins.php
===================================================================
--- admin/plugins.php	(revision 1332)
+++ admin/plugins.php	(revision 1399)
@@ -191,12 +191,11 @@
 dcPage::open(__('Plugins management'),
 	dcPage::jsLoad('js/_plugins.js').
-	dcPage::jsPageTabs($default_tab)
+	dcPage::jsPageTabs($default_tab),
+	dcPage::breadcrumb(
+		array(
+			__('System') => '',
+			'<span class="page-title">'.__('Plugins management').'</span>' => ''
+		))
 );
-
-echo dcPage::breadcrumb(
-	array(
-		__('System') => '',
-		'<span class="page-title">'.__('Plugins management').'</span>' => ''
-	));
 
 if (!empty($_GET['removed'])) {
@@ -358,11 +357,11 @@
 	'<fieldset>'.
 	'<legend>'.__('Upload a zip file').'</legend>'.
-	'<p class="field"><label for="pkg_file" class="classic required"><abbr title="'.__('Required field').'">*</abbr> '.__('Plugin zip file:').' '.
-	'<input type="file" id="pkg_file" name="pkg_file" /></label></p>'.
-	'<p class="field"><label for="your_pwd1" class="classic required"><abbr title="'.__('Required field').'">*</abbr> '.__('Your password:').' '.
-	form::password(array('your_pwd','your_pwd1'),20,255).'</label></p>'.
-	'<input type="submit" name="upload_pkg" value="'.__('Upload plugin').'" />'.
+	'<p class="field"><label for="pkg_file" class="classic required"><abbr title="'.__('Required field').'">*</abbr> '.__('Plugin zip file:').'</label> '.
+	'<input type="file" id="pkg_file" name="pkg_file" /></p>'.
+	'<p class="field"><label for="your_pwd1" class="classic required"><abbr title="'.__('Required field').'">*</abbr> '.__('Your password:').'</label> '.
+	form::password(array('your_pwd','your_pwd1'),20,255).'</p>'.
+	'<p><input type="submit" name="upload_pkg" value="'.__('Upload plugin').'" />'.
 	$core->formNonce().
-	'</fieldset>'.
+	'</p></fieldset>'.
 	'</form>';
 	
@@ -372,8 +371,8 @@
 	'<fieldset>'.
 	'<legend>'.__('Download a zip file').'</legend>'.
-	'<p class="field"><label for="pkg_url" class="classic required"><abbr title="'.__('Required field').'">*</abbr> '.__('Plugin zip file URL:').' '.
-	form::field(array('pkg_url','pkg_url'),40,255).'</label></p>'.
-	'<p class="field"><label for="your_pwd2" class="classic required"><abbr title="'.__('Required field').'">*</abbr> '.__('Your password:').' '.
-	form::password(array('your_pwd','your_pwd2'),20,255).'</label></p>'.
+	'<p class="field"><label for="pkg_url" class="classic required"><abbr title="'.__('Required field').'">*</abbr> '.__('Plugin zip file URL:').'</label> '.
+	form::field(array('pkg_url','pkg_url'),40,255).'</p>'.
+	'<p class="field"><label for="your_pwd2" class="classic required"><abbr title="'.__('Required field').'">*</abbr> '.__('Your password:').'</label> '.
+	form::password(array('your_pwd','your_pwd2'),20,255).'</p>'.
 	'<input type="submit" name="fetch_pkg" value="'.__('Download plugin').'" />'.
 	$core->formNonce().
Index: admin/popup_link.php
===================================================================
--- admin/popup_link.php	(revision 1179)
+++ admin/popup_link.php	(revision 1399)
@@ -40,11 +40,11 @@
 echo
 '<form id="link-insert-form" action="#" method="get">'.
-'<p><label class="required"><abbr title="'.__('Required field').'">*</abbr> '.__('Link URL:').' '.
-form::field('href',35,512,html::escapeHTML($href)).'</label></p>'.
-'<p><label>'.__('Link title:').' '. 
-form::field('title',35,512,html::escapeHTML($title)).'</label></p>'. 
-'<p><label>'.__('Link language:').' '.
+'<p><label class="required" for="href"><abbr title="'.__('Required field').'">*</abbr> '.__('Link URL:').'</label> '.
+form::field('href',35,512,html::escapeHTML($href)).'</p>'.
+'<p><label for="title">'.__('Link title:').'</label> '. 
+form::field('title',35,512,html::escapeHTML($title)).'</p>'. 
+'<p><label for="hreflang">'.__('Link language:').'</label> '.
 form::combo('hreflang',$lang_combo,$hreflang).
-'</label></p>'.
+'</p>'.
 
 '</form>'.
Index: admin/popup_posts.php
===================================================================
--- admin/popup_posts.php	(revision 1179)
+++ admin/popup_posts.php	(revision 1399)
@@ -53,14 +53,14 @@
 
 echo '<form action="popup_posts.php" method="post">'.
-	'<p><label for"type" class="classic">'.__('Entry type:').' '.form::combo('type',$type_combo,$type).'</label></p>'.
-	$core->formNonce().
+	'<p><label for"type" class="classic">'.__('Entry type:').'</label> '.form::combo('type',$type_combo,$type).''.
+	$core->formNonce().'</p>'.
 	'<noscript><div><input type="submit" value="'.__('Ok').'" /></div></noscript>'.
 	'</form>';
 
 echo '<form action="popup_posts.php" method="get">'.
-	'<p><label for="q" class="classic">'.__('Search entry:').' '.form::field('q',30,255,html::escapeHTML($q)).'</label> '.
-	' <input type="submit" value="'.__('Search').'" /></p>'.
+	'<p><label for="q" class="classic">'.__('Search entry:').'</label> '.form::field('q',30,255,html::escapeHTML($q)).
+	' <input type="submit" value="'.__('Search').'" />'.
 	form::hidden('type',html::escapeHTML($type)).
-	'</form>';
+	'</p></form>';
 
 try {
Index: admin/posts_actions.php
===================================================================
--- admin/posts_actions.php	(revision 1179)
+++ admin/posts_actions.php	(revision 1399)
@@ -262,7 +262,6 @@
 	echo
 	'<form action="posts_actions.php" method="post">'.
-	'<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,'');
 	
 	echo
@@ -295,7 +294,6 @@
 	echo
 	'<form action="posts_actions.php" method="post">'.
-	'<p><label for="new_lang" class="classic">'.__('Entry lang:').' '.
-	form::combo('new_lang',$lang_combo,'').
-	'</label> ';
+	'<p><label for="new_lang" class="classic">'.__('Entry lang:').'</label> '.
+	form::combo('new_lang',$lang_combo,'');
 	
 	echo
@@ -313,7 +311,6 @@
 	echo
 	'<form action="posts_actions.php" method="post">'.
-	'<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 1332)
+++ admin/preferences.php	(revision 1399)
@@ -348,31 +348,31 @@
 	
 	# --BEHAVIOR-- adminPreferencesHeaders
-	$core->callBehavior('adminPreferencesHeaders')
-);
-
-if (!empty($_GET['upd'])) {
-	dcPage::message(__('Personal information has been successfully updated.'));
-}
-if (!empty($_GET['updated'])) {
-	dcPage::message(__('Personal options has been successfully updated.'));
-}
-if (!empty($_GET['append'])) {
-	dcPage::message(__('Favorites have been successfully added.'));
-}
-if (!empty($_GET['neworder'])) {
-	dcPage::message(__('Favorites have been successfully updated.'));
-}
-if (!empty($_GET['removed'])) {
-	dcPage::message(__('Favorites have been successfully removed.'));
-}
-if (!empty($_GET['replaced'])) {
-	dcPage::message(__('Default favorites have been successfully updated.'));
-}
-
-echo dcPage::breadcrumb(
+	$core->callBehavior('adminPreferencesHeaders'),
+
+	dcPage::breadcrumb(
 	array(
 		html::escapeHTML($core->auth->userID()) => '',
 		'<span class="page-title">'.$page_title.'</span>' => ''
-	));
+	))
+);
+
+if (!empty($_GET['upd'])) {
+	dcPage::message(__('Personal information has been successfully updated.'));
+}
+if (!empty($_GET['updated'])) {
+	dcPage::message(__('Personal options has been successfully updated.'));
+}
+if (!empty($_GET['append'])) {
+	dcPage::message(__('Favorites have been successfully added.'));
+}
+if (!empty($_GET['neworder'])) {
+	dcPage::message(__('Favorites have been successfully updated.'));
+}
+if (!empty($_GET['removed'])) {
+	dcPage::message(__('Favorites have been successfully removed.'));
+}
+if (!empty($_GET['replaced'])) {
+	dcPage::message(__('Default favorites have been successfully updated.'));
+}
 
 # User profile
@@ -384,18 +384,18 @@
 '<div class="two-cols">'.
 '<div class="col">'.
-'<p><label for="user_name">'.__('Last Name:').
-form::field('user_name',20,255,html::escapeHTML($user_name)).'</label></p>'.
-
-'<p><label for="user_firstname">'.__('First Name:').
-form::field('user_firstname',20,255,html::escapeHTML($user_firstname)).'</label></p>'.
-
-'<p><label for="user_displayname">'.__('Display name:').
-form::field('user_displayname',20,255,html::escapeHTML($user_displayname)).'</label></p>'.
-
-'<p><label for="user_email">'.__('Email:').
-form::field('user_email',20,255,html::escapeHTML($user_email)).'</label></p>'.
-
-'<p><label for="user_url">'.__('URL:').
-form::field('user_url',30,255,html::escapeHTML($user_url)).'</label></p>'.
+'<p><label for="user_name">'.__('Last Name:').'</label>'.
+form::field('user_name',20,255,html::escapeHTML($user_name)).'</p>'.
+
+'<p><label for="user_firstname">'.__('First Name:').'</label>'.
+form::field('user_firstname',20,255,html::escapeHTML($user_firstname)).'</p>'.
+
+'<p><label for="user_displayname">'.__('Display name:').'</label>'.
+form::field('user_displayname',20,255,html::escapeHTML($user_displayname)).'</p>'.
+
+'<p><label for="user_email">'.__('Email:').'</label>'.
+form::field('user_email',20,255,html::escapeHTML($user_email)).'</p>'.
+
+'<p><label for="user_url">'.__('URL:').'</label>'.
+form::field('user_url',30,255,html::escapeHTML($user_url)).'</p>'.
 
 '</div>'.
@@ -403,9 +403,9 @@
 '<div class="col">'.
 
-'<p><label for="user_lang">'.__('User language:').
-form::combo('user_lang',$lang_combo,$user_lang,'l10n').'</label></p>'.
-
-'<p><label for="user_tz">'.__('User timezone:').
-form::combo('user_tz',dt::getZones(true,true),$user_tz).'</label></p>'.
+'<p><label for="user_lang">'.__('User language:').'</label>'.
+form::combo('user_lang',$lang_combo,$user_lang,'l10n').'</p>'.
+
+'<p><label for="user_tz">'.__('User timezone:').'</label>'.
+form::combo('user_tz',dt::getZones(true,true),$user_tz).'</p>'.
 
 '</div>'.
@@ -420,14 +420,14 @@
 	'<legend>'.__('Change your password').'</legend>'.
 	
-	'<p><label for="new_pwd">'.__('New password:').
-	form::password('new_pwd',20,255).'</label></p>'.
+	'<p><label for="new_pwd">'.__('New password:').'</label>'.
+	form::password('new_pwd',20,255).'</p>'.
 	
-	'<p><label for="new_pwd_c">'.__('Confirm password:').
-	form::password('new_pwd_c',20,255).'</label></p>'.
+	'<p><label for="new_pwd_c">'.__('Confirm password:').'</label>'.
+	form::password('new_pwd_c',20,255).'</p>'.
 	'</fieldset>'.
 	
 	'<p>'.__('If you have changed this user email or password you must provide your current password to save these modifications.').'</p>'.
-	'<p><label for="cur_pwd">'.__('Your password:').
-	form::password('cur_pwd',20,255).'</label></p>';
+	'<p><label for="cur_pwd">'.__('Your password:').'</label>'.
+	form::password('cur_pwd',20,255).'</p>';
 }
 
@@ -447,12 +447,12 @@
 '<fieldset><legend>'.__('My options').'</legend>'.
 
-'<p><label for="user_post_format">'.__('Preferred format:').
-form::combo('user_post_format',$formaters_combo,$user_options['post_format']).'</label></p>'.
-
-'<p><label for="user_post_status">'.__('Default entry status:').
-form::combo('user_post_status',$status_combo,$user_post_status).'</label></p>'.
-
-'<p><label for="user_edit_size">'.__('Entry edit field height:').
-form::field('user_edit_size',5,4,(integer) $user_options['edit_size']).'</label></p>'.
+'<p><label for="user_post_format">'.__('Preferred format:').'</label>'.
+form::combo('user_post_format',$formaters_combo,$user_options['post_format']).'</p>'.
+
+'<p><label for="user_post_status">'.__('Default entry status:').'</label>'.
+form::combo('user_post_status',$status_combo,$user_post_status).'</p>'.
+
+'<p><label for="user_edit_size">'.__('Entry edit field height:').'</label>'.
+form::field('user_edit_size',5,4,(integer) $user_options['edit_size']).'</p>'.
 
 '<p><label for="user_wysiwyg" class="classic">'.
@@ -470,6 +470,6 @@
 if (count($iconsets_combo) > 1) {
 	echo 
-		'<p><label for="user_ui_iconset">'.__('Iconset:').
-		form::combo('user_ui_iconset',$iconsets_combo,$user_ui_iconset).'</label></p>';
+		'<p><label for="user_ui_iconset">'.__('Iconset:').'</label>'.
+		form::combo('user_ui_iconset',$iconsets_combo,$user_ui_iconset).'</p>';
 } else {
 	form::hidden('user_ui_iconset','');
Index: admin/search.php
===================================================================
--- admin/search.php	(revision 1333)
+++ admin/search.php	(revision 1358)
@@ -70,11 +70,11 @@
 
 
-dcPage::open(__('Search'),$starting_scripts);
-
-echo dcPage::breadcrumb(
-	array(
-		html::escapeHTML($core->blog->name) => '',
-		'<span class="page-title">'.__('Search').'</span>' => ''
-	));
+dcPage::open(__('Search'),$starting_scripts,
+	dcPage::breadcrumb(
+		array(
+			html::escapeHTML($core->blog->name) => '',
+			'<span class="page-title">'.__('Search').'</span>' => ''
+		))
+);
 
 echo
@@ -84,5 +84,5 @@
 '<p><label for="qtype1" class="classic">'.form::radio(array('qtype','qtype1'),'p',$qtype == 'p').' '.__('Search in entries').'</label> '.
 '<label for="qtype2" class="classic">'.form::radio(array('qtype','qtype2'),'c',$qtype == 'c').' '.__('Search in comments').'</label></p>'.
-'</p><input type="submit" value="'.__('Search').'" /></p>'.
+'<p><input type="submit" value="'.__('Search').'" /></p>'.
 '</div>'.
 '</form>';
Index: admin/style/default.css
===================================================================
--- admin/style/default.css	(revision 1413)
+++ admin/style/default.css	(revision 1490)
@@ -36,5 +36,5 @@
 }
 
-h1, h2, h3, h4, h5, h6, p {
+h1, h2, h3, .as_h3, h4, h5, h6, p {
 	margin-top: 0;
 	margin-bottom: 1rem;
@@ -53,4 +53,8 @@
 	color: #d30e60;
 }
+.page-title img {
+	padding-left: .6rem;
+	vertical-align: middle;
+}
 #content > h2 {
 	padding: 0 1.8rem .6rem;
@@ -58,7 +62,23 @@
 	background: #fff url(bg_h2.png) repeat-x center bottom;
 }
-h3 {
+h3, .as_h3 {
 	color: #575859;
 	font-size: 1.4rem;
+}
+h4 {
+	font-size: 1.1em;
+	color: #575859;
+}
+h5 {
+	font-size: 1em;
+	color: #575859;
+}
+#entry-sidebar h5 {
+	font-weight: normal;
+	color: #333;
+}
+.entry-status label img {
+	padding-left: .4rem;
+	vertical-align: text-top;
 }
 p, div.p {
@@ -232,26 +252,32 @@
 }
 .two-cols .col {
-	width: 49%;
+	width: 47%;
 	margin-left: 2%;
 	float: left;
 }
-.two-cols .col:first-child {
-	width: 49%;
-	margin-left: 0;
-}
 .two-cols .col70{
-	width: 69%;
+	width: 68%;
 	margin-left: 0;
 	float: left;
 }
-.two-cols .col30 {
+.col30 {
 	width: 28%;
 	margin-left: 2%;
 	float: left;
 }
+.two-cols .col:first-child,
+.two-cols .col30.first-col {
+	margin-left: 0;
+	margin-right: 2%;
+}
+.two-cols .col:last-child,
+.two-cols .col70.last-col {
+	margin-left: 2%;
+	margin-right: 0;
+}
 /* -------------------------------------------------------------- layout - onglets */
 .part-tabs ul {
-	padding: .5em 0 .3em 1em;
-	border-bottom: 1px solid #ccc;
+	padding: .5em 0 .3em 1.2rem;
+	border-bottom: 1px solid #ddd;
 }
 .part-tabs li {
@@ -261,18 +287,11 @@
 }
 .part-tabs li a {
-	padding: .5em 0.5em;
-	margin-right: .5em;
-	border: 1px solid #ccc;
+	padding: .5em 2em;
+	margin-right: -1px;
+	border: 1px solid #aaa;
 	border-bottom: none;
-	background: #dfdfdf;
 	text-decoration: none;
-	color: #000;
-	background:-webkit-gradient( linear, left top, left bottom, color-stop(0.05, #dfdfdf), color-stop(1, #fafafa) );
-	background:-moz-linear-gradient( center top, #dfdfdf 5%, #fafafa 100% );
-	filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#dfdfdf', endColorstr='#fafafa');
-	background-color:#ededed;
-}
-.part-tabs li.part-tabs-link a {
-	background: #ffe;
+	color: #333;
+	background-color:#E4E0EC;
 }
 .part-tabs li a:hover, .part-tabs li a:focus {
@@ -283,8 +302,7 @@
 .part-tabs li.part-tabs-active a {
 	background: #fff;
-	border: 1px solid #d30e60;
-	color: #d30e60;
 	font-weight: bold;
 	border-bottom-color: #fff;
+	padding-bottom: .7rem;
 }
 /* ------------------------------------------------------------------ main-menu */
@@ -293,5 +311,5 @@
 	float: left;
 	margin:0;
-	padding-top: .5em;
+	padding-top: 4.5em;
 	padding-bottom: 1em;
 	background: #f7f7f7;
@@ -318,4 +336,7 @@
 	background-repeat: no-repeat;
 	background-position: 8px .3em;
+}
+#main-menu li.active {
+	background-color: #fff;
 }
 #main-menu a {
@@ -356,5 +377,5 @@
 	background: #dfdfdf;
 	border-color: #999;
-	color: #666;
+	color: #444;
 	border-bottom-right-radius: .6em;
 	border-top-right-radius: .6em;
@@ -378,7 +399,5 @@
 	color: #000;
 	font-variant: small-caps;
-}
-#favorites-menu a {
-	color: #333;
+	padding-top: .6rem;
 }
 /* ------------------------------------------------------------------ footer */
@@ -416,4 +435,5 @@
 	padding: 1em 1em 0 1em;
 	border-radius: 4px;
+	background: #fff;
 }
 #login-screen legend {
@@ -432,13 +452,5 @@
 /* ------------------------------------------------------------------ dashboard */
 #dashboard-main {
-	float: left;
-	overflow: hidden;
-	padding: 1em 2% 1em 0;
-	width: 70%;
-}
-#dashboard-main.fullwidth {
-	width: 100%;
 	padding: 1em 0;
-	float: none;
 }
 #icons {
@@ -450,6 +462,8 @@
 	width: 210px;
 	text-align: center;
-	margin: 2em 0;
+	margin: 1em 0 2em;
+	padding: 1em 0;
 	display:inline-block;
+	vertical-align: top;
 }
 #icons a,
@@ -463,4 +477,15 @@
 #icons a span {
 	border-bottom: 1px dotted #f90;
+	color: #333;
+}
+#icons a img {
+	padding: 2em;
+	background: #eee;
+	border-radius: 1.6rem;
+	box-shadow: 0 3px 3px 0 #ccc;
+	margin-bottom: .6rem;
+}
+#icons a img:hover, #icons a:focus img {
+	background-color: #BBDB58;
 }
 #icons a:focus span, #icons a:hover span {
@@ -468,5 +493,4 @@
 }
 #quick {
-	clear: left;
 	margin-top: 2em;
 }
@@ -483,9 +507,14 @@
 }
 #dashboard-items {
-	float: left;
-	width: 27%;
-	overflow: hidden;
-	padding-bottom: 1em;
-	padding-top: 3em;
+	margin: 3em auto;
+	display: table;
+	width: 100%;
+	border-collapse: collapse;
+}
+.db-item {
+	display: table-cell;
+	padding: 1em 3em;
+	vertical-align: top;
+	border: 1px solid #ccc;
 }
 #dashboard-items img {
@@ -512,12 +541,4 @@
 }
 
-#upg-notify {
-}
-#upg-notify ul {
-	padding-left: 15px;
-}
-#upg-notify li {
-	color: #fff;
-}
 /* ------------------------------------------------------------------ post */
 #entry-wrapper {
@@ -528,5 +549,13 @@
 #entry-content {
 	margin-right: 19em;
-	margin-left: 1.2rem;
+	margin-left: 0;
+}
+.multi-part {
+	padding-left: 1.2rem;
+}
+#entry-content label {
+	text-transform: uppercase;
+	font-weight: bold;
+	margin-top: 2em;
 }
 #entry-sidebar {
@@ -534,11 +563,14 @@
 	float: right;
 }
+#entry-sidebar input[type="text"],
+#entry-sidebar select {
+	width: 14em; /* to prevent inline with label */
+}
+.box {
+	border-bottom: 1px solid #ddd;
+	margin-bottom: 1em;
+}
 #comments {
 	clear: both;
-}
-.preview_entry a {
-	border: 1px solid #ccc;
-	padding: .2rem .5rem;
-	background: #eef;
 }
 /* ------------------------------------------------------------------ categories */
@@ -575,5 +607,8 @@
 }
 #media-details {
+}
+.near-icon {
 	margin-left: 70px;
+	margin-bottom: 3em;
 }
 #media-details ul {
@@ -710,26 +745,31 @@
 /* -------------------------------------------------------------------- Themes */
 #themes {
-	border-bottom: 1px solid #ccc;
-	margin: 1em 0;
+	margin: 0;
+	width: 100%;
+	padding: 0;
+}
+#themes h3 {
 }
 #themes div.theme-details {
-	clear: left;
 	border-top: 1px solid #ccc;
-	padding: 1em 0;
+	padding: 12px;
+	display: inline-block;
+	vertical-align: top;
+	width: 284px;
+}
+.current-theme {
+	background: #eef;
 }
 #themes div.theme-details:hover {
-	background: #eee;
+	background: #f0f0f0;
 }
 #themes div.theme-details div.theme-shot {
-	float: left;
 }
 #themes div.theme-details div.theme-shot img {
 	display: block;
-	width: 57px;
-	height: 50px;
 	border: 1px solid #ccc;
+	margin-bottom: 1.5em;
 }
 #themes div.theme-details div.theme-info {
-	margin-left: 67px;
 }
 #themes div.theme-details div.theme-info span.theme-desc {
@@ -740,21 +780,34 @@
 }
 #themes div.theme-details div.theme-actions {
-	margin-left: 67px;
-}
+}
+#themes-actions {
+	border-bottom: 1px solid #999;
+	margin-bottom: 3em;
+}
+.theme-css {
+	display: block;
+}
+
 /* Themes list, JS version */
 #themes-wrapper {
+	display: table;
+}
+#themes-wrapper #themes {
+	display: table-cell;
+	vertical-align: top;
+	padding-left: 1em;
 }
 #theme-box {
-	border: 1px solid #999;
-	border-left: none;
-	padding: 5px;
-	float: right;
-	height: 420px;
-	width: 320px;
-	overflow: auto;
+	display: table-cell;
+	vertical-align: top;
+	padding: 1rem 0; 
+	width: 312px;
+	background: #eef;
+	border: 1px solid #ccc;
+	border-radius: 3px;
 }
 #theme-box div.theme-shot img {
 	display: block;
-	margin: 0 0 0 10px;
+	margin: 0 16px;
 	width: 280px;
 	height: 245px;
@@ -762,11 +815,8 @@
 }
 #theme-box div.theme-info {
-	margin: 1em 0 0 10px;
-}
-#theme-box h3 {
-	margin: 0;
-}
-#theme-box div.theme-info span {
-	display: block;
+	margin: 1em 16px;
+}
+#theme-box h4 {
+	color: #000;
 }
 #theme-box span.theme-version {
@@ -781,12 +831,5 @@
 }
 #theme-box div.theme-actions {
-	margin-left: 10px;
-}
-#themes-wrapper #themes {
-	border: 1px solid #999;
-	overflow: auto;
-	height: 420px;
-	padding: 5px;
-	margin: 0;
+	padding: 0 16px;
 }
 #themes div.theme-details-js {
@@ -794,9 +837,9 @@
 	width: 120px;
 	height: 150px;
-	margin: 0 10px 20px;
-	padding: 10px 10px 0;
+	margin: 0 12px 24px;
+	padding: 12px 12px 0;
 	text-align: center;
 	background: #f3f3f3;
-	border: 1px solid #f3f3f3;
+	border: 1px solid #ddd;
 	cursor: pointer;
 	border-radius: 4px;
@@ -806,5 +849,5 @@
 }
 #themes div.theme-details-js.theme-selected {
-	background: #E5E3DA;
+	background: #ddd;
 	border: 1px solid #999;
 }
@@ -813,10 +856,4 @@
 	height: 105px;
 	border: 1px solid #fff;
-}
-#themes div.theme-details-js h3 {
-	font-family: inherit;
-	font-weight: normal;
-	margin: 0;
-	padding: 0;
 }
 /* ----------------------------------------------------------  Plugins list */
@@ -949,7 +986,4 @@
 	color: #fff;
 }
-#content > .message, #content > .error {
-	margin-right: 14em
-}
 /* ------------------------------------------------------------------ navigation */
 .anchor-nav {
@@ -958,4 +992,25 @@
 	padding: .4rem 1.2rem;
 	float: right;
+}
+.nav_prevnext {
+	margin-bottom: 2em;
+	color: #fff;
+}
+.nav_prevnext a, a.back {
+	border: 1px solid #ddd;
+	padding: .2rem 2rem;
+	border-radius: 1rem;
+	background-color: #f0f0f0;
+}
+a.back:before {
+	content: "\ab\a0";
+}
+a.onblog_link {
+	color: #333;
+	float: right;
+	border: 1px solid #eee;
+	padding: .2rem 2rem;
+	border-radius: 1rem;
+	background-color: #ffe;
 }
 /* ------------------------------------------------------------------ debug */
@@ -982,6 +1037,21 @@
 /* -------------------------------------------------------------------- CLASSES COMMUNES */
 
-.no-margin {
-	margin: 0;
+.no-margin, #entry-content label.no-margin {
+	margin: 0;
+}
+.border-top {
+	border-top: 1px solid #999;
+	padding-top: 1em;
+	margin-top:	1em;
+}
+.fieldset {
+	background: #fff;
+	border: 1px solid #aaa;
+	border-radius: 6px; 
+	padding: 1em .7em .5em;
+	margin-bottom: 1em;
+}
+.fieldset h3 {
+	color: #333;
 }
 
@@ -1090,5 +1160,5 @@
 }
 
-th, td {
+td {
 	border-width: 0 0 1px 0;
 	border-style: solid;
@@ -1098,9 +1168,20 @@
 }
 th {
+	border-width: 1px 0 1px 0;
+	border-style: solid;
+	border-color: #ccc;
+	background: #f3f3ff;
+	padding: .4rem .5rem;
+	vertical-align: top;
 	text-align: left;
-	border-bottom-color: #aaa;
 }
 .noborder td, td.noborder, .noborder th, th.noborder {
-	border-width: 0;
+	border-width: 0 0 1px 0;
+	border-color: #ddd;
+	line-height: 2.4rem;
+	padding-bottom: 0;
+}
+.noborder p {
+	margin-bottom: 0;
 }
 table .maximal, table.maximal {
@@ -1116,4 +1197,9 @@
 table.settings, table.prefs {
 	width: 80%;
+	border: 1px solid #999;
+	margin-bottom: 3em; 
+}
+table.settings th, table.prefs th {
+	background: #eef;
 }
 table.settings th:first-child, table.prefs th:first-child {
@@ -1129,5 +1215,4 @@
 	width: 40%;
 }
-
 td.status {
 	vertical-align: middle;
@@ -1168,5 +1253,4 @@
 	padding-left: 15px;
 }
-
 /* ----------------------------------------------------------------- FORMS */
 form {
@@ -1175,5 +1259,5 @@
 	padding: 0;
 }
-fieldset, .fieldset {
+fieldset {
 	display: block;
 	margin: 0 0 1em 0;
@@ -1189,7 +1273,8 @@
 	border-width: 1px;
 	border-style: solid;
-	border-color: #ccc;
-	background: #f5f5f5;
+	border-color: #333;
+	background: #fff;
 	margin-bottom: 0.5em;
+	border-radius: 3px;
 }
 optgroup {
@@ -1243,4 +1328,5 @@
 	font-style:italic;
 	font-weight: normal;
+	text-transform: none;
 	color: #666;
 }
@@ -1254,9 +1340,12 @@
 }
 p.form-note.info {
-	background: #eef url(info.png) no-repeat .3em .2em;
-	border: 1px solid #99f;
-}
-.form-note a {border-bottom: 1px solid #99f;}
-
+	background: #f5eaff url(info.png) no-repeat .3em .2em;
+	border: 1px solid #ddbaff;
+}
+.form-note a {border-bottom: 1px solid #ddbaff;}
+
+label.ib {
+	display: inline-block;
+}
 label.classic {
 	display: inline;
@@ -1307,8 +1396,7 @@
 a.form-control {
 	display: none;
-	font-weight: bold;
-	background: url(magnifier.png) no-repeat 0 0;
-	color: green;
+	background: url(../images/expand.png) no-repeat .4rem center;
 	padding-left: 20px;
+	color: #000;
 }
 .constrained {
@@ -1325,5 +1413,4 @@
 input[type=button],
 a.button,
-a.back,
 a.submit {
 	display: inline-block;
@@ -1337,4 +1424,6 @@
 	margin-bottom: .1em;
 }
+h4 a.button {font-weight: normal;}
+
 /* validation */
 input[type=submit],
@@ -1361,5 +1450,4 @@
 /* suppression et reset */
 a.button,
-a.back,
 input[type=submit].reset,
 input[type=submit].delete {
@@ -1372,10 +1460,8 @@
 	}
 a.button:hover,
-a.back:hover,
 input[type=reset]:hover,
 input[type=submit].reset:hover,
 input[type=submit].delete:hover,
 a.button:focus,
-a.back:focus,
 input[type=reset]:focus,
 input[type=submit].reset:focus,
@@ -1390,5 +1476,5 @@
 input[type=submit].delete {
 	color: #c00;
-	padding-bottom: .1em;
+	padding-bottom: .2rem;
 }
 #entry-content .delete {
@@ -1411,7 +1497,4 @@
 	margin-left: 2em;
 }
-a.back:before {
-	content: "\ab\a0";
-}
 .button.add {
 	background:-webkit-gradient( linear, left top, left bottom, color-stop(0.05, #9dce2c), color-stop(1, #8cb82b) );
@@ -1421,5 +1504,4 @@
 	border:1px solid #83c41a;
 	padding:.6rem 1.8rem;
-	text-shadow:1px 1px 0 #689324;
 	color: #000;
 	text-shadow: 1px 1px 0 #BBDB58;
@@ -1436,8 +1518,4 @@
 .button-add:focus {
 	outline: dotted 1px;
-}
-.button.add:active {
-	position:relative;
-	top:1px;
 }
 
@@ -1475,9 +1553,74 @@
 }
 
+/* ------------------------------------------------------- Filters */
+#filters-form {
+	border: 1px dashed #999;
+	border-radius: .6rem;
+	margin-bottom: 2em;
+	padding: .5em 1em 0;
+}
+#filters-form .table {
+	display: table;
+	width: 100%;
+	padding: 0;
+	margin-bottom: 1em;
+	margin-top: 1.5em;
+}
+#filters-form .cell {
+	padding: 0 2em 0 0;
+	display: table-cell;
+	vertical-align: top;
+}
+#filters-form .filters-options {
+	padding-left: 2em;
+	border-left: 1px solid #ccc;
+}
+#filters-form label.ib, span.ib {
+	width:7em;
+	display: inline-block;
+}
+#filters-form label.ibw, span.ibw {
+	width: 9em;
+	display: inline-block;
+}
+#filters-form select {
+	width: 14em;
+}
+
+/* ---------------------------------------------------- Pagination */
+.pagination {
+	height: 22px;
+	margin-top: 1em;
+	line-height: 22px;
+	padding: 0 1rem; 
+	border: 1px solid #ddd;
+	overflow: hidden; 
+	background: #e1e1e1; 
+	background: -moz-linear-gradient(center top , #f2f2f2, #e1e1e1); 
+	background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#f2f2f2), color-stop(100%,#e1e1e1)); 
+	-moz-border-radius: 4px; 
+	-webkit-border-radius: 4px; 
+	border-radius: 4px; 
+	clear: left;
+}
+.pagination a, .pagination strong {
+	height: 20px;
+	border: none;
+	padding: 2px 6px; 
+	background-color : transparent;
+	background-position : 50% 50%;
+	background-repeat: no-repeat;
+}
+.pagination a:hover, .pagination strong {
+	border-color : #ccc;
+	background-color: #fff;
+}
+
 /* ---------------------------------------------------------------------------
 	Media queries vite fait en attendant la reprise complète du layout
 ---------------------------------------------------------------------------- */
 @media screen and (max-width: 920px) {
-	#top, #top h1 a {width: 42px !important; height:100%; overflow: hidden;}
+	#top, #top h1 a {width: 42px !important; height:100%; overflow: hidden;
+}
 	#top h1 a:link {
 		background: transparent url(dc_logos/b-dotclear120.png) no-repeat -180px 6px; 
@@ -1497,4 +1640,5 @@
 		line-height: 3.2rem;
 	}
+	#info-box1 {margin-left: 1rem;}
 	#info-box1 select {width: 14rem;}
 	#main-menu, #main, #content, #content h2, #entry-wrapper, #entry-sidebar, #entry-content, .two-cols .col, .two-cols .col:first-child {
@@ -1515,5 +1659,6 @@
 	.smallscreen {display: none;}
 	#help-button {width:20px; overflow: hidden;}
-	#info-box1 {margin-left: 1rem;}
+	#info-box2 {float:none;}
+	#dashboard-items div {display: block;margin-bottom: 1em; padding: 0 1em;}
 }
 @media screen and (max-width: 492px) {
@@ -1522,4 +1667,5 @@
 	.page-title, #info-boxes, .media-item {display: inline-block;}
 	div.media-list .media-item {width: 90%; float: none}
+	#info-box1 select {width: 12rem; margin-right: .6rem;}
 	#info-box1 p.nomobile, label.nomobile {display: none;}
 	#help-button {height:26px; width:26px; background-color: #A2CBE9; padding: 0; margin:0;font-size: 1rem;line-height: 68px}
Index: admin/style/jsToolBar/jsToolBar.css
===================================================================
--- admin/style/jsToolBar/jsToolBar.css	(revision 1065)
+++ admin/style/jsToolBar/jsToolBar.css	(revision 1399)
@@ -2,6 +2,5 @@
 	border-width : 0 1px 1px 1px;
 	border-style : solid;
-	border-color : #000 #ccc #ccc #000;
-	padding-left: 5px;
+	border-color : #ccc;
 	background : #f9f9f9;
 }
@@ -9,6 +8,10 @@
   margin: 0;
   border: 0;
+  padding: 0;
 }
-
+.jstEditor textarea {
+  width: 99%;
+  padding: 1rem 0 0 1%;
+}
 .jstHandle {
 	height: 8px;
@@ -22,9 +25,17 @@
 
 .jstElements {
-	padding: 3px 3px;
-	border-width: 1px 1px 0 1px;
-	border-style: solid;
-	border-color: #000 #ccc #ccc #000;
-	background: #dfdfdf;
+	height: 28px;
+	padding: 0 1rem; 
+	border: 1px solid #ccc;
+	overflow: hidden; 
+	background: #e1e1e1; 
+	background: -moz-linear-gradient(center top , #f2f2f2, #e1e1e1); 
+	background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#f2f2f2), color-stop(100%,#e1e1e1)); 
+	-moz-border-radius: 4px 4px 0 0; 
+	-webkit-border-radius: 4px 4px 0 0; 
+	border-radius: 4px 4px 0 0; 
+	-webkit-box-shadow: 0 1px 0 #FFF inset; 
+	-moz-box-shadow: 0 1px 0 #FFF inset; 
+	box-shadow: 0 1px 0 #FFF inset;
 }
 
@@ -34,13 +45,12 @@
 .jstElements select {
 	width: 12em;
+	margin-right: .6rem;
 }
 .jstElements button {
-	margin-right : 2px;
-	width : 20px;
-	height: 20px;
-	padding: 0;
-	border-style: solid;
-	border-width: 1px;
-	border-color: #dfdfdf;
+	width : 30px;
+	height: 28px;
+	border-style: groove;
+	border-width:  0 1px 0 0;
+	border-color: #666;
 	background-color : transparent;
 	background-position : 50% 50%;
@@ -55,11 +65,16 @@
 }
 .jstElements span {
-	display : inline;
+	display : inline-block;
+	vertical-align: top;
+	background: #dfdfdf;
 }
 
 .jstSpacer {
-	width : 0px;
-	font-size: 1px;
-	margin-right: 4px;
+	width : 2px;
+	height: 28px;
+	margin-right: 0;
+	border-style: groove;
+	border-width:  0 1px 0 0;
+	border-color: #666;
 }
 
Index: admin/style/jsUpload/style.css
===================================================================
--- admin/style/jsUpload/style.css	(revision 1325)
+++ admin/style/jsUpload/style.css	(revision 1452)
@@ -107,4 +107,13 @@
 
 /* files */
+.files {
+	list-style-type: none;
+	margin-left: 0;
+	padding-left: 0;
+}
+.files li {
+	margin-left: 0;
+	padding-left: 0;
+}
 .upload-msg {
 	font-weight: bold;
Index: admin/trackbacks.php
===================================================================
--- admin/trackbacks.php	(revision 1332)
+++ admin/trackbacks.php	(revision 1459)
@@ -83,5 +83,15 @@
 /* DISPLAY
 -------------------------------------------------------- */
-dcPage::open($page_title,dcPage::jsLoad('js/_trackbacks.js'));
+if ($can_view_page) {
+	$breadcrumb = dcPage::breadcrumb(
+	array(
+		html::escapeHTML($core->blog->name) => '',
+		html::escapeHTML($post->post_title) => $core->getPostAdminURL($post->post_type,$id),
+		'<span class="page-title">'.$page_title.'</span>' => ''
+	));
+} else {
+	$breadcrumb = '';
+}
+dcPage::open($page_title,dcPage::jsLoad('js/_trackbacks.js'),$breadcrumb);
 
 # Exit if we cannot view page
@@ -94,10 +104,4 @@
 	dcPage::message(__('All pings sent.'));
 }
-
-echo dcPage::breadcrumb(
-	array(
-		html::escapeHTML($core->blog->name) => '',
-		'<span class="page-title">'.$page_title.'</span>' => ''
-	));
 
 echo '<p><a class="back" href="'.$core->getPostAdminURL($post->post_type,$id).'">'.
@@ -123,10 +127,10 @@
 '<h3>'.__('Ping blogs').'</h3>'.
 '<form action="trackbacks.php" id="trackback-form" method="post">'.
-'<p><label for="tb_urls" class="area">'.__('URLs to ping:').
+'<p><label for="tb_urls" class="area">'.__('URLs to ping:').'</label>'.
 form::textarea('tb_urls',60,5,$tb_urls).
-'</label></p>'.
+'</p>'.
 
-'<p><label for="tb_excerpt" class="area">'.__('Send excerpt:').
-form::textarea('tb_excerpt',60,3,$tb_excerpt).'</label></p>'.
+'<p><label for="tb_excerpt" class="area">'.__('Send excerpt:').'</label>'.
+form::textarea('tb_excerpt',60,3,$tb_excerpt).'</p>'.
 
 '<p>'.form::hidden('id',$id).
@@ -151,4 +155,5 @@
 }
 
+dcPage::helpBlock('core_trackbacks');
 dcPage::close();
 ?>
Index: admin/update.php
===================================================================
--- admin/update.php	(revision 1332)
+++ admin/update.php	(revision 1358)
@@ -168,14 +168,11 @@
 -------------------------------------------------------- */
 dcPage::open(__('Dotclear update'),
-	(!$step ? dcPage::jsPageTabs($default_tab) : '')
-);
-
-if (!$core->error->flag()) {
-	echo dcPage::breadcrumb(
+	(!$step ? dcPage::jsPageTabs($default_tab) : ''),
+	dcPage::breadcrumb(
 		array(
 			__('System') => '',
 			'<span class="page-title">'.__('Dotclear update').'</span>' => ''
-		));
-}
+		))
+);
 
 if (!$step)
Index: admin/user.php
===================================================================
--- admin/user.php	(revision 1332)
+++ admin/user.php	(revision 1399)
@@ -174,5 +174,12 @@
 	
 	# --BEHAVIOR-- adminUserHeaders
-	$core->callBehavior('adminUserHeaders')
+	$core->callBehavior('adminUserHeaders'),
+
+	dcPage::breadcrumb(
+		array(
+			__('System') => '',
+			__('Users') => 'users.php',
+			'<span class="page-title">'.$page_title.'</span>' => ''
+		))
 );
 
@@ -184,11 +191,4 @@
 	dcPage::message(__('User has been successfully created.'));
 }
-
-echo dcPage::breadcrumb(
-	array(
-		__('System') => '',
-		__('Users') => 'users.php',
-		'<span class="page-title">'.$page_title.'</span>' => ''
-	));
 
 if ($user_id == $core->auth->userID()) {
@@ -203,26 +203,26 @@
 '<div class="two-cols">'.
 '<div class="col">'.
-'<p><label for="user_id" class="required"><abbr title="'.__('Required field').'">*</abbr> '.__('Username:').' '.
+'<p><label for="user_id" class="required"><abbr title="'.__('Required field').'">*</abbr> '.__('Username:').'</label> '.
 form::field('user_id',20,255,html::escapeHTML($user_id)).
-'</label></p>'.
+'</p>'.
 '<p class="form-note">'.__('At least 2 characters using letters, numbers or symbols.').'</p>'.
 
 '<p><label for="new_pwd" '.($user_id != '' ? '' : 'class="required"').'>'.
 ($user_id != '' ? '' : '<abbr title="'.__('Required field').'">*</abbr> ').
-($user_id != '' ? __('New password:') : __('Password:')).' '.
+($user_id != '' ? __('New password:') : __('Password:')).'</label> '.
 form::password('new_pwd',20,255).
-'</label></p>'.
+'</p>'.
 '<p class="form-note">'.__('Password must contain at least 6 characters.').'</p>'.
 
 '<p><label for="new_pwd_c" '.($user_id != '' ? '' : 'class="required"').'>'.
-($user_id != '' ? '' : '<abbr title="'.__('Required field').'">*</abbr> ').__('Confirm password:').' '.
+($user_id != '' ? '' : '<abbr title="'.__('Required field').'">*</abbr> ').__('Confirm password:').'</label> '.
 form::password('new_pwd_c',20,255).
-'</label></p>'.
-
-'<p><label for="user_name">'.__('Last Name:').' '.
+'</p>'.
+
+'<p><label for="user_name">'.__('Last Name:').'</label> '.
 form::field('user_name',20,255,html::escapeHTML($user_name)).
-'</label></p>'.
-
-'<p><label for="user_firstname">'.__('First Name:').' '.
+'</p>'.
+
+'<p><label for="user_firstname">'.__('First Name:').'</label> '.
 form::field('user_firstname',20,255,html::escapeHTML($user_firstname)).
 '</label></p>'.
@@ -230,35 +230,35 @@
 '<p><label for="user_displayname">'.__('Display name:').' '.
 form::field('user_displayname',20,255,html::escapeHTML($user_displayname)).
-'</label></p>'.
-
-'<p><label for="user_email">'.__('Email:').' '.
+'</p>'.
+
+'<p><label for="user_email">'.__('Email:').'</label> '.
 form::field('user_email',20,255,html::escapeHTML($user_email)).
-'</label></p>'.
+'</p>'.
 '<p class="form-note">'.__('Mandatory for password recovering procedure.').'</p>'.
 '</div>'.
 
 '<div class="col">'.
-'<p><label for="user_url">'.__('URL:').' '.
+'<p><label for="user_url">'.__('URL:').'</label> '.
 form::field('user_url',30,255,html::escapeHTML($user_url)).
-'</label></p>'.
-'<p><label for="user_post_format">'.__('Preferred format:').' '.
+'</p>'.
+'<p><label for="user_post_format">'.__('Preferred format:').'</label> '.
 form::combo('user_post_format',$formaters_combo,$user_options['post_format']).
-'</label></p>'.
-
-'<p><label for="user_post_status">'.__('Default entry status:').' '.
+'</p>'.
+
+'<p><label for="user_post_status">'.__('Default entry status:').'</label> '.
 form::combo('user_post_status',$status_combo,$user_post_status).
-'</label></p>'.
-
-'<p><label for="user_edit_size">'.__('Entry edit field height:').' '.
+'</p>'.
+
+'<p><label for="user_edit_size">'.__('Entry edit field height:').'</label> '.
 form::field('user_edit_size',5,4,(integer) $user_options['edit_size']).
-'</label></p>'.
-
-'<p><label for="user_lang">'.__('User language:').' '.
+'</p>'.
+
+'<p><label for="user_lang">'.__('User language:').'</label> '.
 form::combo('user_lang',$lang_combo,$user_lang,'l10n').
-'</label></p>'.
-
-'<p><label for="user_tz">'.__('User timezone:').' '.
+'</p>'.
+
+'<p><label for="user_tz">'.__('User timezone:').'</label> '.
 form::combo('user_tz',dt::getZones(true,true),$user_tz).
-'</label></p>';
+'</p>';
 
 if ($core->auth->allowPassChange()) {
@@ -283,6 +283,6 @@
 echo
 '<p><label for="your_pwd" '.($user_id != '' ? '' : 'class="required"').'>'.
-($user_id != '' ? '' : '<abbr title="'.__('Required field').'">*</abbr> ').__('Your password:').
-form::password('your_pwd',20,255).'</label></p>'.
+($user_id != '' ? '' : '<abbr title="'.__('Required field').'">*</abbr> ').__('Your password:').'</label>'.
+form::password('your_pwd',20,255).'</p>'.
 '<p class="clear"><input type="submit" name="save" accesskey="s" value="'.__('Save').'" />'.
 ($user_id != '' ? '' : ' <input type="submit" name="saveplus" value="'.__('Save and create another').'" />').
Index: admin/users.php
===================================================================
--- admin/users.php	(revision 1332)
+++ admin/users.php	(revision 1426)
@@ -94,5 +94,11 @@
 }
 
-dcPage::open(__('Users'),$starting_script);
+dcPage::open(__('Users'),$starting_script,
+	dcPage::breadcrumb(
+		array(
+			__('System') => '',
+			'<span class="page-title">'.__('Users').'</span>' => ''
+		))
+);
 
 if (!$core->error->flag())
@@ -105,41 +111,33 @@
 	}
 	
-	echo dcPage::breadcrumb(
-		array(
-			__('System') => '',
-			'<span class="page-title">'.__('Users').'</span>' => ''
-		));
-
 	echo
 	'<p class="top-add"><strong><a class="button add" href="user.php">'.__('Create a new user').'</a></strong></p>';
 	
 	if (!$show_filters) {
-		echo '<p><a id="filter-control" class="form-control" href="#">'.__('Filters').'</a></p>';
+		echo '<p><a id="filter-control" class="form-control" href="#">'.__('Filter users list').'</a></p>';
 	}
 	
 	echo
 	'<form action="users.php" method="get" id="filters-form">'.
-	'<fieldset class="two-cols"><legend>'.__('Filters').'</legend>'.
+	'<h3>'.__('Filter users list').'</h3>'.
 	
-	'<div class="col">'.
-	'<p><label for="sortby">'.__('Order by:').' '.
-	form::combo('sortby',$sortby_combo,$sortby).
-	'</label> '.
-	'<label for="order">'.__('Sort:').' '.
-	form::combo('order',$order_combo,$order).
-	'</label></p>'.
+	'<div class="table">'.
+	'<div class="cell">'.
+	'<p><label for="q" class="ib">'.__('Search:').'</label> '.
+	form::field('q',20,255,html::escapeHTML($q)).'</p>'.
 	'</div>'.
-	
-	'<div class="col">'.
-	'<p><label for="q">'.__('Search:').' '.
-	form::field('q',20,255,html::escapeHTML($q)).
-	'</label></p>'.
-	'<p><label for="nb" class="classic">'.	form::field('nb',3,3,$nb_per_page).' '.
-	__('Users per page').'</label> '.
-	'<input type="submit" value="'.__('Apply filters').'" /></p>'.
+
+	'<div class="cell filters-options">'.
+	'<p><label for="sortby" class="ib">'.__('Order by:').'</label> '.
+	form::combo('sortby',$sortby_combo,$sortby).'</p> '.
+	'<p><label for="order" class="ib">'.__('Sort:').'</label> '.
+	form::combo('order',$order_combo,$order).'</p>'.
+	'<p><span class="label ib">'.__('Show').'</span> <label for="nb" class="classic">'.	
+	form::field('nb',3,3,$nb_per_page).' '.__('users per page').'</p> '.
 	'</div>'.
-	
-	'<br class="clear" />'. //Opera sucks
-	'</fieldset>'.
+	'</div>'.
+
+	'<p><input type="submit" value="'.__('Apply filters').'" />'.	
+	'<br class="clear" /></p>'. //Opera sucks
 	'</form>';
 	
Index: admin/users_actions.php
===================================================================
--- admin/users_actions.php	(revision 1332)
+++ admin/users_actions.php	(revision 1399)
@@ -131,9 +131,26 @@
 /* DISPLAY
 -------------------------------------------------------- */
+if (!empty($users) && empty($blogs) && $action == 'blogs') {
+	$breadcrumb = dcPage::breadcrumb(
+		array(
+			__('System') => '',
+			__('Users') => 'users.php',
+			'<span class="page-title">'.__('Permissions').'</span>' => ''
+		));
+} else {
+	$breadcrumb = dcPage::breadcrumb(
+		array(
+			__('System') => '',
+			__('Users') => 'users.php',
+			'<span class="page-title">'.__('Actions').'</span>' => ''
+		));
+}
+
 dcPage::open(
 	__('Users'),
 	dcPage::jsLoad('js/_users_actions.js').
 	# --BEHAVIOR-- adminUsersActionsHeaders
-	$core->callBehavior('adminUsersActionsHeaders')
+	$core->callBehavior('adminUsersActionsHeaders'),
+	$breadcrumb
 );
 
@@ -177,11 +194,4 @@
 	}
 	
-	echo dcPage::breadcrumb(
-		array(
-			__('System') => '',
-			__('Users') => 'users.php',
-			'<span class="page-title">'.__('Permissions').'</span>' => ''
-		));
-
 	echo
 	'<p>'.sprintf(
@@ -275,6 +285,6 @@
 	echo
 	'<fieldset><legend>'.__('Validate permissions').'</legend>'.
-	'<p><label for="your_pwd">'.__('Your password:').
-	form::password('your_pwd',20,255).'</label></p>'.
+	'<p><label for="your_pwd">'.__('Your password:').'</label>'.
+	form::password('your_pwd',20,255).'</p>'.
 	'</fieldset>'.
 	'<p><input type="submit" accesskey="s" value="'.__('Save').'" />'.
Index: inc/admin/lib.pager.php
===================================================================
--- inc/admin/lib.pager.php	(revision 1179)
+++ inc/admin/lib.pager.php	(revision 1415)
@@ -58,5 +58,5 @@
 			}
 			
-			echo '<p>'.__('Page(s)').' : '.$pager->getLinks().'</p>';
+			echo '<p class="pagination">'.__('Page(s)').' : '.$pager->getLinks().'</p>';
 			
 			$blocks = explode('%s',$html_block);
@@ -71,5 +71,5 @@
 			echo $blocks[1];
 			
-			echo '<p>'.__('Page(s)').' : '.$pager->getLinks().'</p>';
+			echo '<p class="pagination">'.__('Page(s)').' : '.$pager->getLinks().'</p>';
 		}
 	}
@@ -93,14 +93,14 @@
 		switch ($this->rs->post_status) {
 			case 1:
-				$img_status = sprintf($img,__('published'),'check-on.png');
+				$img_status = sprintf($img,__('Published'),'check-on.png');
 				break;
 			case 0:
-				$img_status = sprintf($img,__('unpublished'),'check-off.png');
+				$img_status = sprintf($img,__('Unpublished'),'check-off.png');
 				break;
 			case -1:
-				$img_status = sprintf($img,__('scheduled'),'scheduled.png');
+				$img_status = sprintf($img,__('Scheduled'),'scheduled.png');
 				break;
 			case -2:
-				$img_status = sprintf($img,__('pending'),'check-wrn.png');
+				$img_status = sprintf($img,__('Pending'),'check-wrn.png');
 				break;
 		}
@@ -108,10 +108,10 @@
 		$protected = '';
 		if ($this->rs->post_password) {
-			$protected = sprintf($img,__('protected'),'locker.png');
+			$protected = sprintf($img,__('Protected'),'locker.png');
 		}
 		
 		$selected = '';
 		if ($this->rs->post_selected) {
-			$selected = sprintf($img,__('selected'),'selected.png');
+			$selected = sprintf($img,__('Selected'),'selected.png');
 		}
 		
@@ -170,5 +170,5 @@
 			}
 			
-			echo '<p>'.__('Page(s)').' : '.$pager->getLinks().'</p>';
+			echo '<p class="pagination">'.__('Page(s)').' : '.$pager->getLinks().'</p>';
 			
 			$blocks = explode('%s',$html_block);
@@ -183,5 +183,5 @@
 			echo $blocks[1];
 			
-			echo '<p>'.__('Page(s)').' : '.$pager->getLinks().'</p>';
+			echo '<p class="pagination">'.__('Page(s)').' : '.$pager->getLinks().'</p>';
 		}
 	}
@@ -192,14 +192,14 @@
 		switch ($this->rs->post_status) {
 			case 1:
-				$img_status = sprintf($img,__('published'),'check-on.png');
+				$img_status = sprintf($img,__('Published'),'check-on.png');
 				break;
 			case 0:
-				$img_status = sprintf($img,__('unpublished'),'check-off.png');
+				$img_status = sprintf($img,__('Unpublished'),'check-off.png');
 				break;
 			case -1:
-				$img_status = sprintf($img,__('scheduled'),'scheduled.png');
+				$img_status = sprintf($img,__('Scheduled'),'scheduled.png');
 				break;
 			case -2:
-				$img_status = sprintf($img,__('pending'),'check-wrn.png');
+				$img_status = sprintf($img,__('Pending'),'check-wrn.png');
 				break;
 		}
@@ -207,10 +207,10 @@
 		$protected = '';
 		if ($this->rs->post_password) {
-			$protected = sprintf($img,__('protected'),'locker.png');
+			$protected = sprintf($img,__('Protected'),'locker.png');
 		}
 		
 		$selected = '';
 		if ($this->rs->post_selected) {
-			$selected = sprintf($img,__('selected'),'selected.png');
+			$selected = sprintf($img,__('Selected'),'selected.png');
 		}
 		
@@ -267,5 +267,5 @@
 			}
 			
-			echo '<p>'.__('Page(s)').' : '.$pager->getLinks().'</p>';
+			echo '<p class="pagination">'.__('Page(s)').' : '.$pager->getLinks().'</p>';
 			
 			$blocks = explode('%s',$html_block);
@@ -280,5 +280,5 @@
 			echo $blocks[1];
 			
-			echo '<p>'.__('Page(s)').' : '.$pager->getLinks().'</p>';
+			echo '<p class="pagination">'.__('Page(s)').' : '.$pager->getLinks().'</p>';
 		}
 	}
@@ -306,14 +306,14 @@
 		switch ($this->rs->comment_status) {
 			case 1:
-				$img_status = sprintf($img,__('published'),'check-on.png');
+				$img_status = sprintf($img,__('Published'),'check-on.png');
 				break;
 			case 0:
-				$img_status = sprintf($img,__('unpublished'),'check-off.png');
+				$img_status = sprintf($img,__('Unpublished'),'check-off.png');
 				break;
 			case -1:
-				$img_status = sprintf($img,__('pending'),'check-wrn.png');
+				$img_status = sprintf($img,__('Pending'),'check-wrn.png');
 				break;
 			case -2:
-				$img_status = sprintf($img,__('junk'),'junk.png');
+				$img_status = sprintf($img,__('Junk'),'junk.png');
 				break;
 		}
@@ -374,5 +374,5 @@
 			}
 			
-			echo '<p>'.__('Page(s)').' : '.$pager->getLinks().'</p>';
+			echo '<p class="pagination">'.__('Page(s)').' : '.$pager->getLinks().'</p>';
 			
 			$blocks = explode('%s',$html_block);
@@ -387,5 +387,5 @@
 			echo $blocks[1];
 			
-			echo '<p>'.__('Page(s)').' : '.$pager->getLinks().'</p>';
+			echo '<p class="pagination">'.__('Page(s)').' : '.$pager->getLinks().'</p>';
 		}
 	}
Index: locales/_pot/main.pot
===================================================================
--- locales/_pot/main.pot	(revision 1039)
+++ locales/_pot/main.pot	(revision 1425)
@@ -1091,5 +1091,5 @@
 
 #: admin/comments.php:214
-msgid "You have one spam comments."
+msgid "You have one spam comment."
 msgstr ""
 
Index: locales/_pot/plugins.pot
===================================================================
--- locales/_pot/plugins.pot	(revision 963)
+++ locales/_pot/plugins.pot	(revision 1354)
@@ -2311,5 +2311,5 @@
 
 #: plugins/widgets/index.php:250
-msgid "Once included in a sidebar, widgets have configuration options that you can reach by clicking on the + sign next to their name."
+msgid "Once included in a sidebar, widgets have configuration options that you can reach by clicking on the arrow next to their name."
 msgstr ""
 
Index: locales/bn/main.po
===================================================================
--- locales/bn/main.po	(revision 1039)
+++ locales/bn/main.po	(revision 1425)
@@ -759,5 +759,5 @@
 msgstr "মন্তব্যের লেখক:"
 
-msgid "You have one spam comments."
+msgid "You have one spam comment."
 msgstr "আপনার একটি স্প্যাম মন্তব্য আছে।"
 
Index: locales/bn/plugins.po
===================================================================
--- locales/bn/plugins.po	(revision 1126)
+++ locales/bn/plugins.po	(revision 1354)
@@ -1540,5 +1540,5 @@
 msgstr ""
 
-msgid "Once included in a sidebar, widgets have configuration options that you can reach by clicking on the + sign next to their name."
+msgid "Once included in a sidebar, widgets have configuration options that you can reach by clicking on the arrow next to their name."
 msgstr ""
 
Index: locales/ca/main.po
===================================================================
--- locales/ca/main.po	(revision 1039)
+++ locales/ca/main.po	(revision 1425)
@@ -787,5 +787,5 @@
 msgstr "Autor del comentari:"
 
-msgid "You have one spam comments."
+msgid "You have one spam comment."
 msgstr "Te un comentari no desitjat."
 
Index: locales/ca/plugins.po
===================================================================
--- locales/ca/plugins.po	(revision 1126)
+++ locales/ca/plugins.po	(revision 1354)
@@ -1529,5 +1529,5 @@
 msgstr ""
 
-msgid "Once included in a sidebar, widgets have configuration options that you can reach by clicking on the + sign next to their name."
+msgid "Once included in a sidebar, widgets have configuration options that you can reach by clicking on the arrow next to their name."
 msgstr ""
 
Index: locales/cs/main.po
===================================================================
--- locales/cs/main.po	(revision 1039)
+++ locales/cs/main.po	(revision 1425)
@@ -764,5 +764,5 @@
 msgstr "Autor komentáře:"
 
-msgid "You have one spam comments."
+msgid "You have one spam comment."
 msgstr "Máte jeden spam komentář."
 
Index: locales/cs/plugins.po
===================================================================
--- locales/cs/plugins.po	(revision 1126)
+++ locales/cs/plugins.po	(revision 1354)
@@ -1565,5 +1565,5 @@
 msgstr ""
 
-msgid "Once included in a sidebar, widgets have configuration options that you can reach by clicking on the + sign next to their name."
+msgid "Once included in a sidebar, widgets have configuration options that you can reach by clicking on the arrow next to their name."
 msgstr ""
 
Index: locales/da/main.po
===================================================================
--- locales/da/main.po	(revision 1039)
+++ locales/da/main.po	(revision 1425)
@@ -765,5 +765,5 @@
 msgstr "Kommentar ejer:"
 
-msgid "You have one spam comments."
+msgid "You have one spam comment."
 msgstr "Du har en spam kommentar."
 
Index: locales/da/plugins.po
===================================================================
--- locales/da/plugins.po	(revision 1126)
+++ locales/da/plugins.po	(revision 1354)
@@ -1529,5 +1529,5 @@
 msgstr ""
 
-msgid "Once included in a sidebar, widgets have configuration options that you can reach by clicking on the + sign next to their name."
+msgid "Once included in a sidebar, widgets have configuration options that you can reach by clicking on the arrow next to their name."
 msgstr ""
 
Index: locales/de/main.po
===================================================================
--- locales/de/main.po	(revision 1039)
+++ locales/de/main.po	(revision 1425)
@@ -763,5 +763,5 @@
 msgstr "Autor des Kommentars"
 
-msgid "You have one spam comments."
+msgid "You have one spam comment."
 msgstr "Du hast Spam in deinen Kommentaren."
 
Index: locales/de/plugins.po
===================================================================
--- locales/de/plugins.po	(revision 1126)
+++ locales/de/plugins.po	(revision 1354)
@@ -1569,5 +1569,5 @@
 msgstr ""
 
-msgid "Once included in a sidebar, widgets have configuration options that you can reach by clicking on the + sign next to their name."
+msgid "Once included in a sidebar, widgets have configuration options that you can reach by clicking on the arrow next to their name."
 msgstr ""
 
Index: locales/en/help/post.html
===================================================================
--- locales/en/help/post.html	(revision 175)
+++ locales/en/help/post.html	(revision 1459)
@@ -88,24 +88,4 @@
 </dl>
 
-<h3>Trackback</h3>
-<p>To make a trackback, click on the <em>Ping blogs</em> link.
-You will not see this link if your entry's status is not <em>published</em>.</p>
-
-<dl>
-  <dt>URLs to ping</dt>
-  <dd>Paste here the trackback URLs you found in the posts you want to ping.</dd>
-  
-  
-  <dt>Send excerpt</dt>
-  <dd>This field defaults to your entry's first few sentences. That's wht will be
-  sent to the blog you're pinging, along with a link to your post. You can modify
-  the excerpt by editing this field.</dd>
-  
-  
-  <dt>Auto discover ping URLs</dt>
-  <dd>If your entries links specific posts and if the blog carrying those posts
-  is set to allow it, this tool will find the URLs to ping for you.</dd>
-</dl>
-
 <h3>Comments</h3>
 <dl>
Index: locales/en/help/trackbacks.html
===================================================================
--- locales/en/help/trackbacks.html	(revision 1459)
+++ locales/en/help/trackbacks.html	(revision 1459)
@@ -0,0 +1,29 @@
+<html>
+<head>
+  <title>Editing an entry</title>
+</head>
+
+<body>
+
+<h3>Trackback</h3>
+<p>To make a trackback, click on the <em>Ping blogs</em> link.
+You will not see this link if your entry's status is not <em>published</em>.</p>
+
+<dl>
+  <dt>URLs to ping</dt>
+  <dd>Paste here the trackback URLs you found in the posts you want to ping.</dd>
+  
+  
+  <dt>Send excerpt</dt>
+  <dd>This field defaults to your entry's first few sentences. That's wht will be
+  sent to the blog you're pinging, along with a link to your post. You can modify
+  the excerpt by editing this field.</dd>
+  
+  
+  <dt>Auto discover ping URLs</dt>
+  <dd>If your entries links specific posts and if the blog carrying those posts
+  is set to allow it, this tool will find the URLs to ping for you.</dd>
+</dl>
+
+</body>
+</html>
Index: locales/en/main.po
===================================================================
--- locales/en/main.po	(revision 1280)
+++ locales/en/main.po	(revision 1425)
@@ -753,5 +753,5 @@
 msgstr ""
 
-msgid "You have one spam comments."
+msgid "You have one spam comment."
 msgstr ""
 
Index: locales/en/plugins.po
===================================================================
--- locales/en/plugins.po	(revision 1126)
+++ locales/en/plugins.po	(revision 1354)
@@ -1546,5 +1546,5 @@
 msgstr ""
 
-msgid "Once included in a sidebar, widgets have configuration options that you can reach by clicking on the + sign next to their name."
+msgid "Once included in a sidebar, widgets have configuration options that you can reach by clicking on the arrow next to their name."
 msgstr ""
 
Index: locales/en/resources.php
===================================================================
--- locales/en/resources.php	(revision 1179)
+++ locales/en/resources.php	(revision 1459)
@@ -15,9 +15,9 @@
 
 $__resources['doc'] = array(
-	"Dotclear 2 documentation" => 'http://dotclear.org/documentation/2.0',
-	'Dotclear 2 presentation' => 'http://dotclear.org/documentation/2.0/overview/tour',
+	"Dotclear documentation" => 'http://dotclear.org/documentation/2.0',
+	'Dotclear presentation' => 'http://dotclear.org/documentation/2.0/overview/tour',
 	"User manual" => 'http://dotclear.org/documentation/2.0/usage',
 	"Installation and administration guides" => 'http://dotclear.org/documentation/2.0/admin',
-	"Dotclear 2 support forum" => 'http://forum.dotclear.net/'
+	"Dotclear support forum" => 'http://forum.dotclear.net/'
 );
 
@@ -29,4 +29,5 @@
 	'core_post' => dirname(__FILE__).'/help/post.html',
 	'core_posts' => dirname(__FILE__).'/help/posts.html',
+	'core_trackbacks' => dirname(__FILE__).'/help/trackbacks.html',
 	'core_user_pref' => dirname(__FILE__).'/help/user_pref.html',
 	'core_user' => dirname(__FILE__).'/help/user.html',
Index: locales/eo/main.po
===================================================================
--- locales/eo/main.po	(revision 1039)
+++ locales/eo/main.po	(revision 1425)
@@ -750,5 +750,5 @@
 msgstr ""
 
-msgid "You have one spam comments."
+msgid "You have one spam comment."
 msgstr ""
 
Index: locales/eo/plugins.po
===================================================================
--- locales/eo/plugins.po	(revision 1126)
+++ locales/eo/plugins.po	(revision 1354)
@@ -1529,5 +1529,5 @@
 msgstr ""
 
-msgid "Once included in a sidebar, widgets have configuration options that you can reach by clicking on the + sign next to their name."
+msgid "Once included in a sidebar, widgets have configuration options that you can reach by clicking on the arrow next to their name."
 msgstr ""
 
Index: locales/es-ar/main.po
===================================================================
--- locales/es-ar/main.po	(revision 1039)
+++ locales/es-ar/main.po	(revision 1425)
@@ -767,5 +767,5 @@
 msgstr "Autor del comentario:"
 
-msgid "You have one spam comments."
+msgid "You have one spam comment."
 msgstr "Tiene un comentario no deseado."
 
Index: locales/es-ar/plugins.po
===================================================================
--- locales/es-ar/plugins.po	(revision 1126)
+++ locales/es-ar/plugins.po	(revision 1354)
@@ -1572,5 +1572,5 @@
 msgstr ""
 
-msgid "Once included in a sidebar, widgets have configuration options that you can reach by clicking on the + sign next to their name."
+msgid "Once included in a sidebar, widgets have configuration options that you can reach by clicking on the arrow next to their name."
 msgstr ""
 
Index: locales/es/main.po
===================================================================
--- locales/es/main.po	(revision 1039)
+++ locales/es/main.po	(revision 1425)
@@ -769,5 +769,5 @@
 msgstr "Autor del comentario:"
 
-msgid "You have one spam comments."
+msgid "You have one spam comment."
 msgstr "Tiene un comentario no deseado."
 
Index: locales/es/plugins.po
===================================================================
--- locales/es/plugins.po	(revision 1126)
+++ locales/es/plugins.po	(revision 1354)
@@ -1576,5 +1576,5 @@
 msgstr ""
 
-msgid "Once included in a sidebar, widgets have configuration options that you can reach by clicking on the + sign next to their name."
+msgid "Once included in a sidebar, widgets have configuration options that you can reach by clicking on the arrow next to their name."
 msgstr ""
 
Index: locales/eu/main.po
===================================================================
--- locales/eu/main.po	(revision 1039)
+++ locales/eu/main.po	(revision 1425)
@@ -750,5 +750,5 @@
 msgstr ""
 
-msgid "You have one spam comments."
+msgid "You have one spam comment."
 msgstr ""
 
Index: locales/eu/plugins.po
===================================================================
--- locales/eu/plugins.po	(revision 1126)
+++ locales/eu/plugins.po	(revision 1354)
@@ -1529,5 +1529,5 @@
 msgstr ""
 
-msgid "Once included in a sidebar, widgets have configuration options that you can reach by clicking on the + sign next to their name."
+msgid "Once included in a sidebar, widgets have configuration options that you can reach by clicking on the arrow next to their name."
 msgstr ""
 
Index: locales/fr/help/blowupConfig.html
===================================================================
--- locales/fr/help/blowupConfig.html	(revision 1280)
+++ locales/fr/help/blowupConfig.html	(revision 1348)
@@ -14,5 +14,5 @@
 <p>Quand vous devez indiquer une valeur de couleur, celle-ci doit être au format
 hexadécimal. Par exemple&nbsp;: "#FF0000" donnera du rouge. Vous pouvez vous aider
-de la pipette à côté de chaque champs de couleur.</p>
+de la pipette à côté de chaque champ de couleur.</p>
 <p>Si vous manquez d'inspiration vous pouvez consulter&nbsp;:</p>
 <ul>
Index: locales/fr/help/core_blog_pref.html
===================================================================
--- locales/fr/help/core_blog_pref.html	(revision 990)
+++ locales/fr/help/core_blog_pref.html	(revision 1354)
@@ -13,5 +13,6 @@
   
   <dt>Nom du blog</dt>
-  <dd>Nom du blog, obligatoire.</dd>
+  <dd>Nom du blog, obligatoire. Il peut être modifié à tout moment sans incidence sur
+  le fonctionnement du blog.</dd>
   
   <dt>URL du blog</dt>
@@ -44,5 +45,5 @@
   <dt>Nom de l'éditeur du blog</dt>
   <dd>Nom de la personne responsable du contenu du blog. Peut être le propriétaire
-  ou le directeur de publication s'il existe. Information affichée dans les
+  ou le directeur de publication s'il existe. Cette information sera affichée dans les
   informations du flux de syndication.</dd>
   
@@ -53,5 +54,5 @@
   <dd>Langue de l'interface du blog. Si cette langue existe parmi les
   traductions, l'interface sera traduite dans celle-ci, sinon elle apparaîtra
-  en Anglais.</dd>
+  en anglais.</dd>
   
   <dt>Fuseau horaire du blog</dt>
Index: locales/fr/help/core_post.html
===================================================================
--- locales/fr/help/core_post.html	(revision 175)
+++ locales/fr/help/core_post.html	(revision 1459)
@@ -94,29 +94,4 @@
 </dl>
 
-<h3>Rétroliens</h3>
-<p>Pour faire un rétrolien cliquez sur le lien <em>Faire des rétroliens</em>.
-Si vous ne voyez pas ce lien, vérifiez que votre billet est bien dans l'état
-<em>publié</em>.</p>
-
-<dl>
-  <dt>URLs à rétrolier</dt>
-  <dd>Indiquez ici la ou les URL que vous aurez relevé dans le billet vers lequel
-  vous souhaitez envoyer un rétrolien.</dd>
-  
-  
-  <dt>Envoyer l'extrait</dt>
-  <dd>Par défaut, ce champ comporte le début de votre billet. C'est ce qui sera
-  envoyé vers le blog que vous rétroliez avec un lien vers votre billet complet.
-  Vous pouvez modifier le contenu de cette "accroche" en saisissant directement le
-  texte de votre choix dans ce champ.</dd>
-  
-  
-  <dt>Découverte automatique des URLs à rétrolier</dt>
-  <dd>Si votre billet comporte des liens vers des billets précis et si la
-  plate-forme du blog destinataire est configurée pour le permettre, cette
-  fonction découvrira automatiquement les URLs spécifiques d'envoi de
-  rétrolien.</dd>
-</dl>
-
 <h3>Commentaires</h3>
 <dl>
Index: locales/fr/help/core_trackbacks.html
===================================================================
--- locales/fr/help/core_trackbacks.html	(revision 1459)
+++ locales/fr/help/core_trackbacks.html	(revision 1459)
@@ -0,0 +1,34 @@
+<html>
+<head>
+  <title>Rédaction d'un billet</title>
+</head>
+
+<body>
+
+<h3>Rétroliens</h3>
+<p>Pour faire un rétrolien cliquez sur le lien <em>Faire des rétroliens</em>.
+Si vous ne voyez pas ce lien, vérifiez que votre billet est bien dans l'état
+<em>publié</em>.</p>
+
+<dl>
+  <dt>URLs à rétrolier</dt>
+  <dd>Indiquez ici la ou les URL que vous aurez relevé dans le billet vers lequel
+  vous souhaitez envoyer un rétrolien.</dd>
+  
+  
+  <dt>Envoyer l'extrait</dt>
+  <dd>Par défaut, ce champ comporte le début de votre billet. C'est ce qui sera
+  envoyé vers le blog que vous rétroliez avec un lien vers votre billet complet.
+  Vous pouvez modifier le contenu de cette "accroche" en saisissant directement le
+  texte de votre choix dans ce champ.</dd>
+  
+  
+  <dt>Découverte automatique des URLs à rétrolier</dt>
+  <dd>Si votre billet comporte des liens vers des billets précis et si la
+  plate-forme du blog destinataire est configurée pour le permettre, cette
+  fonction découvrira automatiquement les URLs spécifiques d'envoi de
+  rétrolien.</dd>
+</dl>
+
+</body>
+</html>
Index: locales/fr/main.po
===================================================================
--- locales/fr/main.po	(revision 1333)
+++ locales/fr/main.po	(revision 1454)
@@ -793,5 +793,5 @@
 msgstr "Auteur du commentaire :"
 
-msgid "You have one spam comments."
+msgid "You have one spam comment."
 msgstr "Vous avez un commentaire indésirable."
 
@@ -1484,5 +1484,5 @@
 
 msgid "Plugins"
-msgstr "Extensions"
+msgstr "Plugins"
 
 msgid "Activated plugins"
@@ -1622,5 +1622,5 @@
 
 msgid "Text formating:"
-msgstr "Format du texte :"
+msgstr "Syntaxe de saisie :"
 
 msgid "Convert to XHTML"
@@ -2247,5 +2247,5 @@
 
 msgid "XHTML markup validator"
-msgstr "Validation XHTML"
+msgstr "Vérifier la validité XHTML"
 
 msgid "XHTML content is valid."
@@ -2936,9 +2936,126 @@
 
 msgid "Personal notes:"
-msgstr "Notes personnelles:"
+msgstr "Notes personnelles :"
 
 msgid "New user"
 msgstr "Nouvel utilisateur"
 
-msgid "faut virer ça ça ne sert qu'a contourner le bug corrige en 2.5.2"
-msgstr "Notes personnelles :"
+msgid "Published"
+msgstr "Publié"
+
+msgid "Unpublished"
+msgstr "Non publié"
+
+msgid "Pending"
+msgstr "En attente"
+
+msgid "Junk"
+msgstr "Indésirable"
+
+msgid "Scheduled"
+msgstr "Programmé"
+
+msgid "Protected"
+msgstr "Protégé"
+
+msgid "Publish"
+msgstr "Publier"
+
+msgid "Unpublish"
+msgstr "Mettre hors ligne"
+
+msgid "Mark as pending"
+msgstr "Mettre en attente"
+
+msgid "Mark as junk"
+msgstr "Mettre en indésirable"
+
+msgid "Next entry"
+msgstr "Billet suivant"
+
+msgid "Previous entry"
+msgstr "Billet précédent"
+
+msgid "Add an introduction to the post."
+msgstr "Ajoute une introduction au billet."
+
+msgid "Add unpublished notes."
+msgstr "Ajoute des notes non publiées."
+
+msgid "Edit basename:"
+msgstr "Modifier l'URL spécifique :"
+
+msgid "Protect with password"
+msgstr "Protéger par un mot de passe"
+
+msgid "Information collected"
+msgstr "Informations recueillies"
+
+msgid "Comment submitted"
+msgstr "Commentaire déposé"
+
+msgid "Entry status"
+msgstr "État du billet"
+
+msgid "Publication date and hour"
+msgstr "Date et heure de publication"
+
+msgid "Text formating"
+msgstr "Syntaxe de saisie"
+
+msgid "Entry lang"
+msgstr "Langue du billet"
+
+msgid "Password"
+msgstr "Mot de passe"
+
+msgid "Edit basename"
+msgstr "URL spécifique"
+
+msgid "Ordering"
+msgstr "Classement"
+
+msgid "Filter posts list"
+msgstr "Filtrer la liste des billets"
+
+msgid "entries per page"
+msgstr "billets par page"
+
+msgid "Show"
+msgstr "Afficher"
+
+msgid "Filter blogs list"
+msgstr "Filtrer la liste des blogs"
+
+msgid "blogs per page"
+msgstr "blogs par page"
+
+msgid "Filter comments and trackbacks list"
+msgstr "Filtrer la liste des commentaires et rétroliens"
+
+msgid "Filter users list"
+msgstr "Filtrer la liste des utilisateurs"
+
+msgid "users per page"
+msgstr "utilisateurs par page"
+
+msgid "Available themes in your installation"
+msgstr "Thèmes disponibles sur votre installation"
+
+msgid "You can also install themes by uploading or downloading zip files."
+msgstr "Vous pouvez aussi installer des thèmes en les déposant ou en téléchargeant des fichiers zip."
+
+msgid "Add themes to your installation"
+msgstr "Ajouter des thèmes sur votre installation"
+
+msgid "Select this comment"
+msgstr "Sélectionner ce commentaire"
+
+msgid "Next page"
+msgstr "Page suivante"
+
+msgid "Previous page"
+msgstr "Page précédente"
+
+msgid "Add an introduction to the page."
+msgstr "Ajoute une introduction à la page."
Index: locales/fr/plugins.po
===================================================================
--- locales/fr/plugins.po	(revision 1312)
+++ locales/fr/plugins.po	(revision 1396)
@@ -238,6 +238,6 @@
 
 #, php-format
-msgid "%s configuration"
-msgstr "configuration %s"
+msgid "%s filter configuration"
+msgstr "Configuration du filtre %s"
 
 msgid "Information"
@@ -1024,6 +1024,6 @@
 msgid ""
 "On the other hand, in WordPress, a post can not be uncategorized, and a "
-"default installation has a first category labelised <i>\"Uncategorized\"</"
-"i>. If you did not change that category, you can just ignore it while "
+"default installation has a first category labelised <i>\"Uncategorized\"</i>."
+"If you did not change that category, you can just ignore it while "
 "importing your blog, as Dotclear allows you to actually keep your posts "
 "uncategorized."
@@ -1241,5 +1241,5 @@
 
 msgid "Go to this page on the site"
-msgstr "Aller sur cette page"
+msgstr "Voir cette page sur le site"
 
 msgid "Page status:"
@@ -1277,5 +1277,5 @@
 
 msgid "Pings"
-msgstr "Signalements"
+msgstr "Signalements (pings)"
 
 msgid "Ping services"
@@ -1777,8 +1777,8 @@
 msgid ""
 "Once included in a sidebar, widgets have configuration options that you can "
-"reach by clicking on the + sign next to their name."
+"reach by clicking on the arrow next to their name."
 msgstr ""
 "Une fois inclus dans un bandeau, les widgets ont généralement des options "
-"que vous pouvez configurer. Cliquez sur le signe + à côté de leur nom pour y "
+"que vous pouvez configurer. Cliquez sur la flèche à côté de leur nom pour y "
 "accéder."
 
@@ -1919,2 +1919,11 @@
 msgid "Settings for %s"
 msgstr "Réglages pour %s"
+
+msgid "User preferences"
+msgstr "Préférences utilisateur"
+
+msgid "Global preferences"
+msgstr "Préférences globales"
+
+msgid "Edit theme files"
+msgstr "Modifier les fichiers du thème"
Index: locales/fr/resources.php
===================================================================
--- locales/fr/resources.php	(revision 1179)
+++ locales/fr/resources.php	(revision 1343)
@@ -15,9 +15,9 @@
 
 $__resources['doc'] = array(
-	"Accueil de l'aide Dotclear 2" => 'http://doc.dotclear.net/2.0',
-	'Présentation de Dotclear 2' => 'http://doc.dotclear.net/2.0/overview/tour',
+	"Accueil de l'aide Dotclear" => 'http://fr.dotclear.org/documentation/2.0',
+	'Présentation de Dotclear' => 'http://doc.dotclear.net/2.0/overview/tour',
 	"Manuel de l'utilisateur" => 'http://doc.dotclear.net/2.0/usage',
 	"Guide d'installation et d'administration" => 'http://doc.dotclear.net/2.0/admin',
-	"Forum de support de Dotclear 2" => 'http://forum.dotclear.net/'
+	"Forum de support de Dotclear" => 'http://forum.dotclear.net/'
 );
 ?>
Index: locales/hu/main.po
===================================================================
--- locales/hu/main.po	(revision 1039)
+++ locales/hu/main.po	(revision 1425)
@@ -787,5 +787,5 @@
 msgstr "Megjegyzés szerzője:"
 
-msgid "You have one spam comments."
+msgid "You have one spam comment."
 msgstr "Van egy spam megjegyzésed."
 
Index: locales/hu/plugins.po
===================================================================
--- locales/hu/plugins.po	(revision 1126)
+++ locales/hu/plugins.po	(revision 1354)
@@ -1582,5 +1582,5 @@
 msgstr ""
 
-msgid "Once included in a sidebar, widgets have configuration options that you can reach by clicking on the + sign next to their name."
+msgid "Once included in a sidebar, widgets have configuration options that you can reach by clicking on the arrow next to their name."
 msgstr ""
 
Index: locales/it/main.po
===================================================================
--- locales/it/main.po	(revision 1039)
+++ locales/it/main.po	(revision 1425)
@@ -763,5 +763,5 @@
 msgstr "Autore del commento:"
 
-msgid "You have one spam comments."
+msgid "You have one spam comment."
 msgstr "È presente un commento di spam."
 
Index: locales/it/plugins.po
===================================================================
--- locales/it/plugins.po	(revision 1126)
+++ locales/it/plugins.po	(revision 1354)
@@ -1529,5 +1529,5 @@
 msgstr ""
 
-msgid "Once included in a sidebar, widgets have configuration options that you can reach by clicking on the + sign next to their name."
+msgid "Once included in a sidebar, widgets have configuration options that you can reach by clicking on the arrow next to their name."
 msgstr ""
 
Index: locales/ja/main.po
===================================================================
--- locales/ja/main.po	(revision 1039)
+++ locales/ja/main.po	(revision 1425)
@@ -772,5 +772,5 @@
 msgstr "コメントの投稿者："
 
-msgid "You have one spam comments."
+msgid "You have one spam comment."
 msgstr "1 のスパムコメントがあります。"
 
Index: locales/ja/plugins.po
===================================================================
--- locales/ja/plugins.po	(revision 1126)
+++ locales/ja/plugins.po	(revision 1354)
@@ -1576,5 +1576,5 @@
 msgstr ""
 
-msgid "Once included in a sidebar, widgets have configuration options that you can reach by clicking on the + sign next to their name."
+msgid "Once included in a sidebar, widgets have configuration options that you can reach by clicking on the arrow next to their name."
 msgstr ""
 
Index: locales/ko/main.po
===================================================================
--- locales/ko/main.po	(revision 1039)
+++ locales/ko/main.po	(revision 1425)
@@ -771,5 +771,5 @@
 msgstr "댓글 글쓴이 :"
 
-msgid "You have one spam comments."
+msgid "You have one spam comment."
 msgstr "스팸댓글이 하나 있습니다."
 
Index: locales/ko/plugins.po
===================================================================
--- locales/ko/plugins.po	(revision 1126)
+++ locales/ko/plugins.po	(revision 1354)
@@ -1583,5 +1583,5 @@
 msgstr ""
 
-msgid "Once included in a sidebar, widgets have configuration options that you can reach by clicking on the + sign next to their name."
+msgid "Once included in a sidebar, widgets have configuration options that you can reach by clicking on the arrow next to their name."
 msgstr ""
 
Index: locales/lt/main.po
===================================================================
--- locales/lt/main.po	(revision 1039)
+++ locales/lt/main.po	(revision 1425)
@@ -742,5 +742,5 @@
 msgstr "Komentaro autorius:"
 
-msgid "You have one spam comments."
+msgid "You have one spam comment."
 msgstr "Turite vieną spamo komentarą."
 
Index: locales/nl/main.po
===================================================================
--- locales/nl/main.po	(revision 1039)
+++ locales/nl/main.po	(revision 1425)
@@ -753,5 +753,5 @@
 msgstr ""
 
-msgid "You have one spam comments."
+msgid "You have one spam comment."
 msgstr ""
 
Index: locales/nl/plugins.po
===================================================================
--- locales/nl/plugins.po	(revision 1126)
+++ locales/nl/plugins.po	(revision 1354)
@@ -1536,5 +1536,5 @@
 msgstr ""
 
-msgid "Once included in a sidebar, widgets have configuration options that you can reach by clicking on the + sign next to their name."
+msgid "Once included in a sidebar, widgets have configuration options that you can reach by clicking on the arrow next to their name."
 msgstr ""
 
Index: locales/oc/main.po
===================================================================
--- locales/oc/main.po	(revision 1039)
+++ locales/oc/main.po	(revision 1425)
@@ -757,5 +757,5 @@
 msgstr ""
 
-msgid "You have one spam comments."
+msgid "You have one spam comment."
 msgstr ""
 
Index: locales/oc/plugins.po
===================================================================
--- locales/oc/plugins.po	(revision 1126)
+++ locales/oc/plugins.po	(revision 1354)
@@ -1529,5 +1529,5 @@
 msgstr ""
 
-msgid "Once included in a sidebar, widgets have configuration options that you can reach by clicking on the + sign next to their name."
+msgid "Once included in a sidebar, widgets have configuration options that you can reach by clicking on the arrow next to their name."
 msgstr ""
 
Index: locales/pl/main.po
===================================================================
--- locales/pl/main.po	(revision 1039)
+++ locales/pl/main.po	(revision 1425)
@@ -760,5 +760,5 @@
 msgstr "Autor komentarza:"
 
-msgid "You have one spam comments."
+msgid "You have one spam comment."
 msgstr "Masz jeden komentarz oznaczony jako spam."
 
Index: locales/pl/plugins.po
===================================================================
--- locales/pl/plugins.po	(revision 1126)
+++ locales/pl/plugins.po	(revision 1354)
@@ -1559,5 +1559,5 @@
 msgstr ""
 
-msgid "Once included in a sidebar, widgets have configuration options that you can reach by clicking on the + sign next to their name."
+msgid "Once included in a sidebar, widgets have configuration options that you can reach by clicking on the arrow next to their name."
 msgstr ""
 
Index: locales/pt-br/main.po
===================================================================
--- locales/pt-br/main.po	(revision 1039)
+++ locales/pt-br/main.po	(revision 1425)
@@ -790,5 +790,5 @@
 msgstr "Autor do comentário:"
 
-msgid "You have one spam comments."
+msgid "You have one spam comment."
 msgstr "Você tem um comentário indesejável."
 
Index: locales/pt-br/plugins.po
===================================================================
--- locales/pt-br/plugins.po	(revision 1126)
+++ locales/pt-br/plugins.po	(revision 1354)
@@ -1529,5 +1529,5 @@
 msgstr ""
 
-msgid "Once included in a sidebar, widgets have configuration options that you can reach by clicking on the + sign next to their name."
+msgid "Once included in a sidebar, widgets have configuration options that you can reach by clicking on the arrow next to their name."
 msgstr ""
 
Index: locales/pt/main.po
===================================================================
--- locales/pt/main.po	(revision 1039)
+++ locales/pt/main.po	(revision 1425)
@@ -768,5 +768,5 @@
 msgstr "Autor do comentário:"
 
-msgid "You have one spam comments."
+msgid "You have one spam comment."
 msgstr "Tem um comentário de \"spam\""
 
Index: locales/pt/plugins.po
===================================================================
--- locales/pt/plugins.po	(revision 1126)
+++ locales/pt/plugins.po	(revision 1354)
@@ -1576,5 +1576,5 @@
 msgstr ""
 
-msgid "Once included in a sidebar, widgets have configuration options that you can reach by clicking on the + sign next to their name."
+msgid "Once included in a sidebar, widgets have configuration options that you can reach by clicking on the arrow next to their name."
 msgstr ""
 
Index: locales/ro/main.po
===================================================================
--- locales/ro/main.po	(revision 1039)
+++ locales/ro/main.po	(revision 1425)
@@ -752,5 +752,5 @@
 msgstr ""
 
-msgid "You have one spam comments."
+msgid "You have one spam comment."
 msgstr ""
 
Index: locales/ro/plugins.po
===================================================================
--- locales/ro/plugins.po	(revision 1126)
+++ locales/ro/plugins.po	(revision 1354)
@@ -1554,5 +1554,5 @@
 msgstr ""
 
-msgid "Once included in a sidebar, widgets have configuration options that you can reach by clicking on the + sign next to their name."
+msgid "Once included in a sidebar, widgets have configuration options that you can reach by clicking on the arrow next to their name."
 msgstr ""
 
Index: locales/ru/main.po
===================================================================
--- locales/ru/main.po	(revision 1039)
+++ locales/ru/main.po	(revision 1425)
@@ -767,5 +767,5 @@
 msgstr "Автор комментария:"
 
-msgid "You have one spam comments."
+msgid "You have one spam comment."
 msgstr "У вас один спам комментарий."
 
Index: locales/ru/plugins.po
===================================================================
--- locales/ru/plugins.po	(revision 1126)
+++ locales/ru/plugins.po	(revision 1354)
@@ -1565,5 +1565,5 @@
 msgstr ""
 
-msgid "Once included in a sidebar, widgets have configuration options that you can reach by clicking on the + sign next to their name."
+msgid "Once included in a sidebar, widgets have configuration options that you can reach by clicking on the arrow next to their name."
 msgstr ""
 
Index: locales/sr/main.po
===================================================================
--- locales/sr/main.po	(revision 1039)
+++ locales/sr/main.po	(revision 1425)
@@ -778,5 +778,5 @@
 msgstr "Auteur du commentaire :"
 
-msgid "You have one spam comments."
+msgid "You have one spam comment."
 msgstr "Vous avez un commentaire indésirable."
 
Index: locales/sr/plugins.po
===================================================================
--- locales/sr/plugins.po	(revision 1126)
+++ locales/sr/plugins.po	(revision 1354)
@@ -1529,5 +1529,5 @@
 msgstr ""
 
-msgid "Once included in a sidebar, widgets have configuration options that you can reach by clicking on the + sign next to their name."
+msgid "Once included in a sidebar, widgets have configuration options that you can reach by clicking on the arrow next to their name."
 msgstr ""
 
Index: locales/sv/main.po
===================================================================
--- locales/sv/main.po	(revision 1039)
+++ locales/sv/main.po	(revision 1425)
@@ -750,5 +750,5 @@
 msgstr ""
 
-msgid "You have one spam comments."
+msgid "You have one spam comment."
 msgstr ""
 
Index: locales/sv/plugins.po
===================================================================
--- locales/sv/plugins.po	(revision 1126)
+++ locales/sv/plugins.po	(revision 1354)
@@ -1529,5 +1529,5 @@
 msgstr ""
 
-msgid "Once included in a sidebar, widgets have configuration options that you can reach by clicking on the + sign next to their name."
+msgid "Once included in a sidebar, widgets have configuration options that you can reach by clicking on the arrow next to their name."
 msgstr ""
 
Index: locales/te/main.po
===================================================================
--- locales/te/main.po	(revision 1039)
+++ locales/te/main.po	(revision 1425)
@@ -775,5 +775,5 @@
 msgstr "వ్యాఖ్యాత:"
 
-msgid "You have one spam comments."
+msgid "You have one spam comment."
 msgstr "ఒక చెత్త వ్యాఖ్య ఉంది."
 
Index: locales/te/plugins.po
===================================================================
--- locales/te/plugins.po	(revision 1126)
+++ locales/te/plugins.po	(revision 1354)
@@ -1558,5 +1558,5 @@
 msgstr ""
 
-msgid "Once included in a sidebar, widgets have configuration options that you can reach by clicking on the + sign next to their name."
+msgid "Once included in a sidebar, widgets have configuration options that you can reach by clicking on the arrow next to their name."
 msgstr ""
 
Index: locales/tr/main.po
===================================================================
--- locales/tr/main.po	(revision 1039)
+++ locales/tr/main.po	(revision 1425)
@@ -761,5 +761,5 @@
 msgstr "Ahkamı yazan:"
 
-msgid "You have one spam comments."
+msgid "You have one spam comment."
 msgstr ""
 
Index: locales/tr/plugins.po
===================================================================
--- locales/tr/plugins.po	(revision 1126)
+++ locales/tr/plugins.po	(revision 1354)
@@ -1546,5 +1546,5 @@
 msgstr ""
 
-msgid "Once included in a sidebar, widgets have configuration options that you can reach by clicking on the + sign next to their name."
+msgid "Once included in a sidebar, widgets have configuration options that you can reach by clicking on the arrow next to their name."
 msgstr ""
 
Index: locales/zh-cn/main.po
===================================================================
--- locales/zh-cn/main.po	(revision 1039)
+++ locales/zh-cn/main.po	(revision 1425)
@@ -765,5 +765,5 @@
 msgstr "评论作者："
 
-msgid "You have one spam comments."
+msgid "You have one spam comment."
 msgstr "您有一个垃圾评论。"
 
Index: locales/zh-cn/plugins.po
===================================================================
--- locales/zh-cn/plugins.po	(revision 1126)
+++ locales/zh-cn/plugins.po	(revision 1354)
@@ -1573,5 +1573,5 @@
 msgstr ""
 
-msgid "Once included in a sidebar, widgets have configuration options that you can reach by clicking on the + sign next to their name."
+msgid "Once included in a sidebar, widgets have configuration options that you can reach by clicking on the arrow next to their name."
 msgstr ""
 
Index: plugins/akismet/class.dc.filter.akismet.php
===================================================================
--- plugins/akismet/class.dc.filter.akismet.php	(revision 1179)
+++ plugins/akismet/class.dc.filter.akismet.php	(revision 1454)
@@ -137,6 +137,6 @@
 		$res =
 		'<form action="'.html::escapeURL($url).'" method="post" class="fieldset">'.
-		'<p><label for="ak_key" class="classic">'.__('Akismet API key:').' '.
-		form::field('ak_key',12,128,$ak_key).'</label>';
+		'<p><label for="ak_key" class="classic">'.__('Akismet API key:').'</label> '.
+		form::field('ak_key',12,128,$ak_key);
 		
 		if ($ak_verified !== null) {
Index: plugins/antispam/antispam.js
===================================================================
--- plugins/antispam/antispam.js	(revision 1130)
+++ plugins/antispam/antispam.js	(revision 1423)
@@ -6,5 +6,5 @@
 		$(this).css({'cursor':'auto'});
 	});
-	$('#filters-form').submit(function() {
+	$('#filters-list-form').submit(function() {
 		var order=[];
 		$("#filters-list tr td input.position").each(function() {
Index: plugins/antispam/filters/class.dc.filter.ip.php
===================================================================
--- plugins/antispam/filters/class.dc.filter.ip.php	(revision 1179)
+++ plugins/antispam/filters/class.dc.filter.ip.php	(revision 1454)
@@ -124,12 +124,13 @@
 
 		'<form action="'.html::escapeURL($url).'" method="post" class="fieldset">'.
+
+		'<p>'.
 		form::hidden(array('ip_type'),$type).
-		'<label class="classic" for="addip_'.$type.'">'.__('Add an IP address: ').' '.
-		form::field(array('addip', 'addip_'.$type),18,255).
-		'</label>';
-		if ($core->auth->isSuperAdmin()) {
-			$res .= '<label class="classic" for="globalip_'.$type.'">'.form::checkbox(array('globalip', 'globalip_'.$type),1).' '.
-			__('Global IP (used for all blogs)').'</label> ';
-		}
+		'<label class="classic" for="addip_'.$type.'">'.__('Add an IP address: ').'</label> '.
+		form::field(array('addip', 'addip_'.$type),18,255);
+			if ($core->auth->isSuperAdmin()) {
+				$res .= '<label class="classic" for="globalip_'.$type.'">'.form::checkbox(array('globalip', 'globalip_'.$type),1).' '.
+				__('Global IP (used for all blogs)').'</label> ';
+			}
 
 		$res .=
Index: plugins/antispam/filters/class.dc.filter.iplookup.php
===================================================================
--- plugins/antispam/filters/class.dc.filter.iplookup.php	(revision 1179)
+++ plugins/antispam/filters/class.dc.filter.iplookup.php	(revision 1454)
@@ -84,8 +84,8 @@
 		'<form action="'.html::escapeURL($url).'" method="post">'.
 		'<fieldset><legend>' . __('IP Lookup servers') . '</legend>'.
-		'<p><label for="bls">'.__('Add here a coma separated list of servers.').
+		'<p><label for="bls">'.__('Add here a coma separated list of servers.').'</label>'.
 		form::textarea('bls',40,3,html::escapeHTML($bls),'maximal').
 		'</p>'.
-		'<p><input type="submit" value="'.__('Save').'" /></label></p>'.
+		'<p><input type="submit" value="'.__('Save').'" /></p>'.
 		$this->core->formNonce().'</p>'.
 		'</fieldset>'.
Index: plugins/antispam/filters/class.dc.filter.words.php
===================================================================
--- plugins/antispam/filters/class.dc.filter.words.php	(revision 1179)
+++ plugins/antispam/filters/class.dc.filter.words.php	(revision 1454)
@@ -120,9 +120,9 @@
 		$res .=
 		'<form action="'.html::escapeURL($url).'" method="post" class="fieldset">'.
-		'<p><label class="classic" for="swa">'.__('Add a word ').' '.form::field('swa',20,128).'</label>';
+		'<p><label class="classic" for="swa">'.__('Add a word ').'</label> '.form::field('swa',20,128);
 
 		if ($core->auth->isSuperAdmin()) {
-			$res .= '<label class="classic" for="globalsw">'.form::checkbox('globalsw',1).' '.
-			__('Global word (used for all blogs)').'</label> ';
+			$res .= '<label class="classic" for="globalsw">'.form::checkbox('globalsw',1).'</label> '.
+			__('Global word (used for all blogs)');
 		}
 
Index: plugins/antispam/index.php
===================================================================
--- plugins/antispam/index.php	(revision 1312)
+++ plugins/antispam/index.php	(revision 1423)
@@ -123,6 +123,10 @@
 if ($filter_gui !== false)
 {
-	echo '<h2>'.__('Plugins').' &rsaquo; <a href="'.$p_url.'">'.$page_name.'</a>'.
-		' &rsaquo; <span class="page-title">'.sprintf(__('%s configuration'),$filter->name).'</span></h2>';
+	echo dcPage::breadcrumb(
+		array(
+			__('Plugins') => '',
+			$page_name => $p_url,
+			'<span class="page-title">'.sprintf(__('%s filter configuration'),$filter->name).'</span>' => ''
+		));
 
 	echo $filter_gui;
@@ -130,5 +134,9 @@
 else
 {
-	echo '<h2>'.__('Plugins').' &rsaquo; <span class="page-title">'.$page_name.'</span></h2>';
+	echo dcPage::breadcrumb(
+		array(
+			__('Plugins') => '',
+			'<span class="page-title">'.$page_name.'</span>' => ''
+		));
 
 	# Information
@@ -170,5 +178,5 @@
 	# Filters
 	echo
-	'<form action="'.$p_url.'" method="post" class="fieldset" id="filters-form">';
+	'<form action="'.$p_url.'" method="post" id="filters-list-form">';
 
 	if (!empty($_GET['upd'])) {
@@ -178,5 +186,5 @@
 	echo
 	'<table class="dragable">'.
-	'<caption>'.__('Available spam filters').'</caption>'.
+	'<caption class="as_h3">'.__('Available spam filters').'</caption>'.
 	'<thead><tr>'.
 	'<th>'.__('Order').'</th>'.
Index: plugins/attachments/_admin.php
===================================================================
--- plugins/attachments/_admin.php	(revision 1179)
+++ plugins/attachments/_admin.php	(revision 1398)
@@ -12,10 +12,16 @@
 if (!defined('DC_CONTEXT_ADMIN')) { return; }
 
-$core->addBehavior ('adminPostFormSidebar',array('attachmentAdmin','adminPostFormSidebar'));
+$core->addBehavior ('adminPostFormItems',array('attachmentAdmin','adminPostFormItems'));
 $core->addBehavior ('adminPostAfterForm',array('attachmentAdmin','adminPostAfterForm'));
+$core->addBehavior('adminPostHeaders',array('attachmentAdmin','postHeaders'));
 
 class attachmentAdmin
 {
-	public static function adminPostFormSidebar($post) 
+	public static function postHeaders()
+	{
+		return 
+		'<script type="text/javascript" src="index.php?pf=attachments/js/post.js"></script>';
+	}
+	public static function adminPostFormItems($main,$sidebar,$post) 
 	{
 		if ($post !== null)
@@ -23,6 +29,5 @@
 			$core =& $GLOBALS['core'];
 			$post_media = $core->media->getPostMedia($post->post_id);
-			echo
-			'<h3 class="clear">'.__('Attachments').'</h3>';
+			$item = '<h5 class="clear s-attachments">'.__('Attachments').'</h5>';
 			foreach ($post_media as $f)
 			{
@@ -31,6 +36,6 @@
 					$ftitle = substr($ftitle,0,16).'...';
 				}
-				echo
-				'<div class="media-item">'.
+				$item .=
+				'<div class="media-item s-attachments">'.
 				'<a class="media-icon" href="media_item.php?id='.$f->media_id.'">'.
 				'<img src="'.$f->media_icon.'" alt="" title="'.$f->basename.'" /></a>'.
@@ -53,8 +58,8 @@
 			
 			if (empty($post_media)) {
-				echo '<p>'.__('No attachment.').'</p>';
-			} else {
-			}
-			echo '<p><a class="button" href="media.php?post_id='.$post->post_id.'">'.__('Add files to this entry').'</a></p>';
+				$item .= '<p class="form-note s-attachments">'.__('No attachment.').'</p>';
+			} 
+			$item .= '<p class="s-attachments"><a class="button" href="media.php?post_id='.$post->post_id.'">'.__('Add files to this entry').'</a></p>';
+			$sidebar['metas-box']['items']['attachments']= $item;
 		}
 	}
Index: plugins/attachments/js/post.js
===================================================================
--- plugins/attachments/js/post.js	(revision 1393)
+++ plugins/attachments/js/post.js	(revision 1393)
@@ -0,0 +1,5 @@
+$(function() {
+	$('h5.s-attachments').toggleWithLegend($('.s-attachments').not('h5'),{
+		cookie: 'dcx_attachments'
+	});
+});
Index: plugins/blogroll/edit.php
===================================================================
--- plugins/blogroll/edit.php	(revision 1179)
+++ plugins/blogroll/edit.php	(revision 1466)
@@ -95,5 +95,13 @@
 
 <body>
-<?php echo '<p><a href="'.$p_url.'">'.__('Return to blogroll').'</a></p>'; ?>
+<?php
+	echo dcPage::breadcrumb(
+		array(
+			html::escapeHTML($core->blog->name) => '',
+			'<span class="page-title">'.__('Blogroll').'</span>' => $p_url
+		));
+?>
+
+<?php echo '<p><a class="back" href="'.$p_url.'">'.__('Return to blogroll').'</a></p>'; ?>
 
 <?php
@@ -106,8 +114,8 @@
 	echo
 	'<form action="'.$p_url.'" method="post">'.
-	'<fieldset><legend>'.__('Edit category').'</legend>'.
-	
-	'<p><label for="link_desc" class="required classic"><abbr title="'.__('Required field').'">*</abbr> '.__('Title:').' '.
-	form::field('link_desc',30,255,html::escapeHTML($link_desc)).'</label> '.
+	'<h3>'.__('Edit category').'</h3>'.
+	
+	'<p><label for="link_desc" class="required classic"><abbr title="'.__('Required field').'">*</abbr> '.__('Title:').'</label> '.
+	form::field('link_desc',30,255,html::escapeHTML($link_desc)).
 	
 	form::hidden('edit',1).
@@ -115,5 +123,4 @@
 	$core->formNonce().
 	'<input type="submit" name="edit_cat" value="'.__('Save').'"/></p>'.
-	'</fieldset>'.
 	'</form>';
 }
@@ -125,32 +132,29 @@
 	
 	echo
-	'<form action="plugin.php" method="post">'.
-	'<fieldset class="two-cols"><legend>'.__('Edit link').'</legend>'.
-	
-	'<p class="col"><label for="link_title" class="required"><abbr title="'.__('Required field').'">*</abbr> '.__('Title:').' '.
-	form::field('link_title',30,255,html::escapeHTML($link_title)).'</label></p>'.
-	
-	'<p class="col"><label for="link_href" class="required"><abbr title="'.__('Required field').'">*</abbr> '.__('URL:').' '.
-	form::field('link_href',30,255,html::escapeHTML($link_href)).'</label></p>'.
-	
-	'<p class="col"><label for="link_desc">'.__('Description:').' '.
-	form::field('link_desc',30,255,html::escapeHTML($link_desc)).'</label></p>'.
-	
-	'<p class="col"><label for="link_lang">'.__('Language:').' '.
-	form::field('link_lang',5,5,html::escapeHTML($link_lang)).'</label></p>'.
-	
-	'<p>'.form::hidden('p','blogroll').
-	form::hidden('edit',1).
-	form::hidden('id',$id).
-	$core->formNonce().
-	'<input type="submit" name="edit_link" value="'.__('Save').'"/></p>'.
-	'</fieldset>'.
+	'<form action="plugin.php" method="post" class="two-cols fieldset">'.
+
+	'<div class="col30 first-col">'.
+	'<h3>'.__('Edit link').'</h3>'.
+	
+	'<p><label for="link_title" class="required"><abbr title="'.__('Required field').'">*</abbr> '.__('Title:').'</label> '.
+	form::field('link_title',30,255,html::escapeHTML($link_title)).'</p>'.
+	
+	'<p><label for="link_href" class="required"><abbr title="'.__('Required field').'">*</abbr> '.__('URL:').'</label> '.
+	form::field('link_href',30,255,html::escapeHTML($link_href)).'</p>'.
+	
+	'<p><label for="link_desc">'.__('Description:').'</label> '.
+	form::field('link_desc',30,255,html::escapeHTML($link_desc)).'</p>'.
+	
+	'<p><label for="link_lang">'.__('Language:').'</label> '.
+	form::field('link_lang',5,5,html::escapeHTML($link_lang)).'</p>'.
+	'</div>'.
 	
 	
 	# XFN nightmare
-	'<fieldset><legend>'.__('XFN').'</legend>'.
+	'<div class="col70 last-col">'.
+	'<h3>'.__('XFN informations').'</h3>'.
 	'<table class="noborder">'.
 	
-	'<tr>'.
+	'<tr class="line">'.
 	'<th>'.__('_xfn_Me').'</th>'.
 	'<td><p>'.'<label class="classic">'.
@@ -159,5 +163,5 @@
 	'</tr>'.
 	
-	'<tr>'.
+	'<tr class="line">'.
 	'<th>'.__('_xfn_Friendship').'</th>'.
 	'<td><p>'.
@@ -172,5 +176,5 @@
 	'</tr>'.
 	
-	'<tr>'.
+	'<tr class="line">'.
 	'<th>'.__('_xfn_Physical').'</th>'.
 	'<td><p>'.
@@ -180,5 +184,5 @@
 	'</tr>'.
 	
-	'<tr>'.
+	'<tr class="line">'.
 	'<th>'.__('_xfn_Professional').'</th>'.
 	'<td><p>'.
@@ -190,5 +194,5 @@
 	'</tr>'.
 	
-	'<tr>'.
+	'<tr class="line">'.
 	'<th>'.__('_xfn_Geographical').'</th>'.
 	'<td><p>'.
@@ -201,5 +205,5 @@
 	'</tr>'.
 	
-	'<tr>'.
+	'<tr class="line">'.
 	'<th>'.__('_xfn_Family').'</th>'.
 	'<td><p>'.
@@ -218,5 +222,5 @@
 	'</tr>'.
 	
-	'<tr>'.
+	'<tr class="line">'.
 	'<th>'.__('_xfn_Romantic').'</th>'.
 	'<td><p>'.
@@ -233,5 +237,10 @@
 	'</table>'.
 	
-	'</fieldset>'.
+	'</div>'.
+	'<p class="clear">'.form::hidden('p','blogroll').
+	form::hidden('edit',1).
+	form::hidden('id',$id).
+	$core->formNonce().
+	'<input type="submit" name="edit_link" value="'.__('Save').'"/></p>'.
 	
 	'</form>';
Index: plugins/blogroll/index.php
===================================================================
--- plugins/blogroll/index.php	(revision 1179)
+++ plugins/blogroll/index.php	(revision 1454)
@@ -177,5 +177,11 @@
 
 <body>
-<h2><?php echo html::escapeHTML($core->blog->name); ?> &rsaquo; <span class="page-title"><?php echo __('Blogroll'); ?></span></h2>
+<?php
+	echo dcPage::breadcrumb(
+		array(
+			html::escapeHTML($core->blog->name) => '',
+			'<span class="page-title">'.__('Blogroll').'</span>' => ''
+		));
+?>
 
 <?php
@@ -271,24 +277,23 @@
 '<div class="multi-part clear" id="add-link" title="'.__('Add a link').'">'.
 '<form action="plugin.php" method="post" id="add-link-form">'.
-'<fieldset><legend>'.__('Add a new link').'</legend>'.
-'<p class="col"><label for="link_title" class="required"><abbr title="'.__('Required field').'">*</abbr> '.__('Title:').' '.
+'<h3>'.__('Add a new link').'</h3>'.
+'<p class="col"><label for="link_title" class="required"><abbr title="'.__('Required field').'">*</abbr> '.__('Title:').'</label> '.
 form::field('link_title',30,255,$link_title).
-'</label></p>'.
-
-'<p class="col"><label for="link_href" class="required"><abbr title="'.__('Required field').'">*</abbr> '.__('URL:').' '.
+'</p>'.
+
+'<p class="col"><label for="link_href" class="required"><abbr title="'.__('Required field').'">*</abbr> '.__('URL:').'</label> '.
 form::field('link_href',30,255,$link_href).
-'</label></p>'.
-
-'<p class="col"><label for="link_desc">'.__('Description:').' '.
+'</p>'.
+
+'<p class="col"><label for="link_desc">'.__('Description:').'</label> '.
 form::field('link_desc',30,255,$link_desc).
-'</label></p>'.
-
-'<p class="col"><label for="link_lang">'.__('Language:').' '.
+'</p>'.
+
+'<p class="col"><label for="link_lang">'.__('Language:').'</label> '.
 form::field('link_lang',5,5,$link_lang).
-'</label></p>'.
+'</p>'.
 '<p>'.form::hidden(array('p'),'blogroll').
 $core->formNonce().
 '<input type="submit" name="add_link" value="'.__('Save').'" /></p>'.
-'</fieldset>'.
 '</form>'.
 '</div>';
@@ -297,11 +302,10 @@
 '<div class="multi-part" id="add-cat" title="'.__('Add a category').'">'.
 '<form action="plugin.php" method="post" id="add-category-form">'.
-'<fieldset><legend>'.__('Add a new category').'</legend>'.
-'<p><label for="cat_title" class=" classic required"><abbr title="'.__('Required field').'">*</abbr> '.__('Title:').' '.
-form::field('cat_title',30,255,$cat_title).'</label> '.
+'<h3>'.__('Add a new category').'</h3>'.
+'<p><label for="cat_title" class=" classic required"><abbr title="'.__('Required field').'">*</abbr> '.__('Title:').'</label> '.
+form::field('cat_title',30,255,$cat_title).' '.
 form::hidden(array('p'),'blogroll').
 $core->formNonce().
 '<input type="submit" name="add_cat" value="'.__('Save').'" /></p>'.
-'</fieldset>'.
 '</form>'.
 '</div>';
@@ -312,11 +316,10 @@
 	echo
 	'<form action="plugin.php" method="post" id="import-links-form" enctype="multipart/form-data">'.
-	'<fieldset><legend>'.__('Import links').'</legend>'.
-	'<p><label for="links_file" class=" classic required"><abbr title="'.__('Required field').'">*</abbr> '.__('OPML or XBEL File:').' '.
-	'<input type="file" id="links_file" name="links_file" /></label></p>'.
+	'<h3>'.__('Import links').'</h3>'.
+	'<p><label for="links_file" class=" classic required"><abbr title="'.__('Required field').'">*</abbr> '.__('OPML or XBEL File:').'</label> '.
+	'<input type="file" id="links_file" name="links_file" /></p>'.
 	'<p>'.form::hidden(array('p'),'blogroll').
 	$core->formNonce().
 	'<input type="submit" name="import_links" value="'.__('Import').'" /></p>'.
-	'</fieldset>'.
 	'</form>';
 }
@@ -324,5 +327,5 @@
 	echo
 	'<form action="plugin.php" method="post" id="import-links-form">'.
-	'<fieldset><legend>'.__('Import links').'</legend>';
+	'<h3>'.__('Import links').'</h3>';
 	if (empty($imported)) {
 		echo '<p>'.__('Nothing to import').'</p>';
@@ -365,5 +368,4 @@
 	}
 	echo
-	'</fieldset>'.
 	'</form>';
 }
Index: plugins/blowupConfig/_public.php
===================================================================
--- plugins/blowupConfig/_public.php	(revision 1179)
+++ plugins/blowupConfig/_public.php	(revision 1436)
@@ -23,172 +23,7 @@
 	public static function publicHeadContent($core)
 	{
-		echo '<style type="text/css">'."\n".self::blowUpStyleHelper()."\n</style>\n";
-	}
-
-	public static function blowUpStyleHelper()
-	{
-		$s = $GLOBALS['core']->blog->settings->themes->blowup_style;
-
-		if ($s === null) {
-			return;
-		}
-
-		$s = @unserialize($s);
-		if (!is_array($s)) {
-			return;
-		}
-
-		$css = array();
-
-		/* Sidebar position
-		---------------------------------------------- */
-		if ($s['sidebar_position'] == 'left') {
-			$css['#wrapper']['background-position'] = '-300px 0';
-			$css['#main']['float'] = 'right';
-			$css['#sidebar']['float'] = 'left';
-		}
-
-		/* Properties
-		---------------------------------------------- */
-		self::prop($css,'body','background-color',$s['body_bg_c']);
-
-		self::prop($css,'body','color',$s['body_txt_c']);
-		self::prop($css,'.post-tags li a:link, .post-tags li a:visited, .post-info-co a:link, .post-info-co a:visited','color',$s['body_txt_c']);
-		self::prop($css,'#page','font-size',$s['body_txt_s']);
-		self::prop($css,'body','font-family',blowupConfig::fontDef($s['body_txt_f']));
-
-		self::prop($css,'.post-content, .post-excerpt, #comments dd, #pings dd, dd.comment-preview','line-height',$s['body_line_height']);
-
-		if (!$s['blog_title_hide'])
-		{
-			self::prop($css,'#top h1 a','color',$s['blog_title_c']);
-			self::prop($css,'#top h1','font-size',$s['blog_title_s']);
-			self::prop($css,'#top h1','font-family',blowupConfig::fontDef($s['blog_title_f']));
-
-			if ($s['blog_title_a'] == 'right' || $s['blog_title_a'] == 'left') {
-				$css['#top h1'][$s['blog_title_a']] = '0px';
-				$css['#top h1']['width'] = 'auto';
-			}
-
-			if ($s['blog_title_p'])
-			{
-				$_p = explode(':',$s['blog_title_p']);
-				$css['#top h1']['top'] = $_p[1].'px';
-				if ($s['blog_title_a'] != 'center') {
-					$_a = $s['blog_title_a'] == 'right' ? 'right' : 'left';
-					$css['#top h1'][$_a] = $_p[0].'px';
-				}
-			}
-		}
-		else
-		{
-			self::prop($css,'#top h1 span','text-indent','-5000px');
-			self::prop($css,'#top h1','top','0px');
-			$css['#top h1 a'] = array(
-				'display' => 'block',
-				'height' => $s['top_height'] ? ($s['top_height']-10).'px' : '120px',
-				'width' => '800px'
-			);
-		}
-		self::prop($css,'#top','height',$s['top_height']);
-
-		self::prop($css,'.day-date','color',$s['date_title_c']);
-		self::prop($css,'.day-date','font-family',blowupConfig::fontDef($s['date_title_f']));
-		self::prop($css,'.day-date','font-size',$s['date_title_s']);
-
-		self::prop($css,'a','color',$s['body_link_c']);
-		self::prop($css,'a:visited','color',$s['body_link_v_c']);
-		self::prop($css,'a:hover, a:focus, a:active','color',$s['body_link_f_c']);
-
-		self::prop($css,'#comment-form input, #comment-form textarea','color',$s['body_link_c']);
-		self::prop($css,'#comment-form input.preview','color',$s['body_link_c']);
-		self::prop($css,'#comment-form input.preview:hover','background',$s['body_link_f_c']);
-		self::prop($css,'#comment-form input.preview:hover','border-color',$s['body_link_f_c']);
-		self::prop($css,'#comment-form input.submit','color',$s['body_link_c']);
-		self::prop($css,'#comment-form input.submit:hover','background',$s['body_link_f_c']);
-		self::prop($css,'#comment-form input.submit:hover','border-color',$s['body_link_f_c']);
-
-		self::prop($css,'#sidebar','font-family',blowupConfig::fontDef($s['sidebar_text_f']));
-		self::prop($css,'#sidebar','font-size',$s['sidebar_text_s']);
-		self::prop($css,'#sidebar','color',$s['sidebar_text_c']);
-
-		self::prop($css,'#sidebar h2','font-family',blowupConfig::fontDef($s['sidebar_title_f']));
-		self::prop($css,'#sidebar h2','font-size',$s['sidebar_title_s']);
-		self::prop($css,'#sidebar h2','color',$s['sidebar_title_c']);
-
-		self::prop($css,'#sidebar h3','font-family',blowupConfig::fontDef($s['sidebar_title2_f']));
-		self::prop($css,'#sidebar h3','font-size',$s['sidebar_title2_s']);
-		self::prop($css,'#sidebar h3','color',$s['sidebar_title2_c']);
-
-		self::prop($css,'#sidebar ul','border-top-color',$s['sidebar_line_c']);
-		self::prop($css,'#sidebar li','border-bottom-color',$s['sidebar_line_c']);
-		self::prop($css,'#topnav ul','border-bottom-color',$s['sidebar_line_c']);
-
-		self::prop($css,'#sidebar li a','color',$s['sidebar_link_c']);
-		self::prop($css,'#sidebar li a:visited','color',$s['sidebar_link_v_c']);
-		self::prop($css,'#sidebar li a:hover, #sidebar li a:focus, #sidebar li a:active','color',$s['sidebar_link_f_c']);
-		self::prop($css,'#search input','color',$s['sidebar_link_c']);
-		self::prop($css,'#search .submit','color',$s['sidebar_link_c']);
-		self::prop($css,'#search .submit:hover','background',$s['sidebar_link_f_c']);
-		self::prop($css,'#search .submit:hover','border-color',$s['sidebar_link_f_c']);
-
-		self::prop($css,'.post-title','color',$s['post_title_c']);
-		self::prop($css,'.post-title a, .post-title a:visited','color',$s['post_title_c']);
-		self::prop($css,'.post-title','font-family',blowupConfig::fontDef($s['post_title_f']));
-		self::prop($css,'.post-title','font-size',$s['post_title_s']);
-
-		self::prop($css,'#comments dd','background-color',$s['post_comment_bg_c']);
-		self::prop($css,'#comments dd','color',$s['post_comment_c']);
-		self::prop($css,'#comments dd.me','background-color',$s['post_commentmy_bg_c']);
-		self::prop($css,'#comments dd.me','color',$s['post_commentmy_c']);
-
-		self::prop($css,'#prelude, #prelude a','color',$s['prelude_c']);
-
-		self::prop($css,'#footer p','background-color',$s['footer_bg_c']);
-		self::prop($css,'#footer p','color',$s['footer_c']);
-		self::prop($css,'#footer p','font-size',$s['footer_s']);
-		self::prop($css,'#footer p','font-family',blowupConfig::fontDef($s['footer_f']));
-		self::prop($css,'#footer p a','color',$s['footer_l_c']);
-
-		/* Images
-		------------------------------------------------------ */
-		self::backgroundImg($css,'body',$s['body_bg_c'],'body-bg.png');
-		self::backgroundImg($css,'body',$s['body_bg_g'] != 'light','body-bg.png');
-		self::backgroundImg($css,'body',$s['prelude_c'],'body-bg.png');
-		self::backgroundImg($css,'#top',$s['body_bg_c'],'page-t.png');
-		self::backgroundImg($css,'#top',$s['body_bg_g'] != 'light','page-t.png');
-		self::backgroundImg($css,'#top',$s['uploaded'] || $s['top_image'],'page-t.png');
-		self::backgroundImg($css,'#footer',$s['body_bg_c'],'page-b.png');
-		self::backgroundImg($css,'#comments dt',$s['post_comment_bg_c'],'comment-t.png');
-		self::backgroundImg($css,'#comments dd',$s['post_comment_bg_c'],'comment-b.png');
-		self::backgroundImg($css,'#comments dt.me',$s['post_commentmy_bg_c'],'commentmy-t.png');
-		self::backgroundImg($css,'#comments dd.me',$s['post_commentmy_bg_c'],'commentmy-b.png');
-
-		$res = '';
-		foreach ($css as $selector => $values) {
-			$res .= $selector." {\n";
-			foreach ($values as $k => $v) {
-				$res .= $k.':'.$v.";\n";
-			}
-			$res .= "}\n";
-		}
-
-		$res .= $s['extra_css'];
-
-		return $res;
-	}
-
-	protected static function prop(&$css,$selector,$prop,$value)
-	{
-		if ($value) {
-			$css[$selector][$prop] = $value;
-		}
-	}
-
-	protected static function backgroundImg(&$css,$selector,$value,$image)
-	{
-		$file = blowupConfig::imagesPath().'/'.$image;
-		if ($value && file_exists($file)){
-			$css[$selector]['background-image'] = 'url('.blowupConfig::imagesURL().'/'.$image.')';
+		$url = blowupConfig::publicCssUrlHelper();
+		if ($url) {
+			echo '<link rel="stylesheet" href="'.$url.'" type="text/css" />';
 		}
 	}
Index: plugins/blowupConfig/index.php
===================================================================
--- plugins/blowupConfig/index.php	(revision 1179)
+++ plugins/blowupConfig/index.php	(revision 1454)
@@ -15,4 +15,5 @@
 
 $can_write_images = blowupConfig::canWriteImages();
+$can_write_css = blowupConfig::canWriteCss();
 
 if ($core->error->flag()) {
@@ -188,4 +189,9 @@
 			$blowup_user['prelude_c'] = blowupConfig::adjustColor($_POST['prelude_c']);
 			blowupConfig::createImages($blowup_user,$uploaded);
+		}
+
+		if ($can_write_css)
+		{
+			blowupConfig::createCss($blowup_user);
 		}
 
@@ -221,7 +227,12 @@
 <body>
 <?php
-echo
-'<h2>'.html::escapeHTML($core->blog->name).
-' &rsaquo; <a href="blog_theme.php">'.__('Blog appearance').'</a> &rsaquo; <span class="page-title">'.__('Blowup configuration').'</span></h2>'.
+echo dcPage::breadcrumb(
+	array(
+		html::escapeHTML($core->blog->name) => '',
+		__('Blog appearance') => 'blog_theme.php',
+		'<span class="page-title">'.__('Blowup configuration').'</span>' => ''
+	));
+
+echo
 '<p><a class="back" href="blog_theme.php">'.__('back').'</a></p>';
 
@@ -242,34 +253,34 @@
 if ($can_write_images) {
 	echo
-	'<p class="field"><label for="body_bg_c">'.__('Background color:').' '.
-	form::field('body_bg_c',7,7,$blowup_user['body_bg_c'],'colorpicker').'</label></p>'.
-
-	'<p class="field"><label for="body_bg_g">'.__('Background color fill:').' '.
-	form::combo('body_bg_g',$gradient_types,$blowup_user['body_bg_g']).'</label></p>';
-}
-
-echo
-'<p class="field"><label for="body_txt_f">'.__('Main text font:').' '.
-form::combo('body_txt_f',blowupConfig::fontsList(),$blowup_user['body_txt_f']).'</label></p>'.
-
-'<p class="field"><label for="body_txt_s">'.__('Main text font size:').' '.
-form::field('body_txt_s',7,7,$blowup_user['body_txt_s']).'</label></p>'.
-
-'<p class="field"><label for="body_txt_c">'.__('Main text color:').' '.
-form::field('body_txt_c',7,7,$blowup_user['body_txt_c'],'colorpicker').'</label></p>'.
-
-'<p class="field"><label for="body_line_height">'.__('Text line height:').' '.
-form::field('body_line_height',7,7,$blowup_user['body_line_height']).'</label></p>'.
+	'<p class="field"><label for="body_bg_c">'.__('Background color:').'</label> '.
+	form::field('body_bg_c',7,7,$blowup_user['body_bg_c'],'colorpicker').'</p>'.
+
+	'<p class="field"><label for="body_bg_g">'.__('Background color fill:').'</label> '.
+	form::combo('body_bg_g',$gradient_types,$blowup_user['body_bg_g']).'</p>';
+}
+
+echo
+'<p class="field"><label for="body_txt_f">'.__('Main text font:').'</label> '.
+form::combo('body_txt_f',blowupConfig::fontsList(),$blowup_user['body_txt_f']).'</p>'.
+
+'<p class="field"><label for="body_txt_s">'.__('Main text font size:').'</label> '.
+form::field('body_txt_s',7,7,$blowup_user['body_txt_s']).'</p>'.
+
+'<p class="field"><label for="body_txt_c">'.__('Main text color:').'</label> '.
+form::field('body_txt_c',7,7,$blowup_user['body_txt_c'],'colorpicker').'</p>'.
+
+'<p class="field"><label for="body_line_height">'.__('Text line height:').'</label> '.
+form::field('body_line_height',7,7,$blowup_user['body_line_height']).'</p>'.
 '</fieldset>'.
 
 '<fieldset><legend>'.__('Links').'</legend>'.
-'<p class="field"><label for="body_link_c">'.__('Links color:').' '.
-form::field('body_link_c',7,7,$blowup_user['body_link_c'],'colorpicker').'</label></p>'.
-
-'<p class="field"><label for="body_link_v_c">'.__('Visited links color:').' '.
-form::field('body_link_v_c',7,7,$blowup_user['body_link_v_c'],'colorpicker').'</label></p>'.
-
-'<p class="field"><label for="body_link_f_c">'.__('Focus links color:').' '.
-form::field('body_link_f_c',7,7,$blowup_user['body_link_f_c'],'colorpicker').'</label></p>'.
+'<p class="field"><label for="body_link_c">'.__('Links color:').'</label> '.
+form::field('body_link_c',7,7,$blowup_user['body_link_c'],'colorpicker').'</p>'.
+
+'<p class="field"><label for="body_link_v_c">'.__('Visited links color:').'</label> '.
+form::field('body_link_v_c',7,7,$blowup_user['body_link_v_c'],'colorpicker').'</p>'.
+
+'<p class="field"><label for="body_link_f_c">'.__('Focus links color:').'</label> '.
+form::field('body_link_f_c',7,7,$blowup_user['body_link_f_c'],'colorpicker').'</p>'.
 '</fieldset>'.
 
@@ -278,6 +289,6 @@
 if ($can_write_images) {
 	echo
-	'<p class="field"><label for="prelude_c">'.__('Prelude color:').' '.
-	form::field('prelude_c',7,7,$blowup_user['prelude_c'],'colorpicker').'</label></p>';
+	'<p class="field"><label for="prelude_c">'.__('Prelude color:').'</label> '.
+	form::field('prelude_c',7,7,$blowup_user['prelude_c'],'colorpicker').'</p>';
 }
 
@@ -286,18 +297,18 @@
 form::checkbox('blog_title_hide',1,$blowup_user['blog_title_hide']).'</label></p>'.
 
-'<p class="field"><label for="blog_title_f">'.__('Main title font:').' '.
-form::combo('blog_title_f',blowupConfig::fontsList(),$blowup_user['blog_title_f']).'</label></p>'.
-
-'<p class="field"><label for="blog_title_s">'.__('Main title font size:').' '.
-form::field('blog_title_s',7,7,$blowup_user['blog_title_s']).'</label></p>'.
-
-'<p class="field"><label for="blog_title_c">'.__('Main title color:').' '.
-form::field('blog_title_c',7,7,$blowup_user['blog_title_c'],'colorpicker').'</label></p>'.
-
-'<p class="field"><label for="blog_title_a">'.__('Main title alignment:').' '.
-form::combo('blog_title_a',array(__('center')=>'center',__('left')=>'left',__('right')=>'right'),$blowup_user['blog_title_a']).'</label></p>'.
-
-'<p class="field"><label for="blog_title_p">'.__('Main title position (x:y)').' '.
-form::field('blog_title_p',7,7,$blowup_user['blog_title_p']).'</label></p>'.
+'<p class="field"><label for="blog_title_f">'.__('Main title font:').'</label> '.
+form::combo('blog_title_f',blowupConfig::fontsList(),$blowup_user['blog_title_f']).'</p>'.
+
+'<p class="field"><label for="blog_title_s">'.__('Main title font size:').'</label> '.
+form::field('blog_title_s',7,7,$blowup_user['blog_title_s']).'</p>'.
+
+'<p class="field"><label for="blog_title_c">'.__('Main title color:').'</label> '.
+form::field('blog_title_c',7,7,$blowup_user['blog_title_c'],'colorpicker').'</p>'.
+
+'<p class="field"><label for="blog_title_a">'.__('Main title alignment:').'</label> '.
+form::combo('blog_title_a',array(__('center')=>'center',__('left')=>'left',__('right')=>'right'),$blowup_user['blog_title_a']).'</p>'.
+
+'<p class="field"><label for="blog_title_p">'.__('Main title position (x:y)').'</label> '.
+form::field('blog_title_p',7,7,$blowup_user['blog_title_p']).'</p>'.
 '</fieldset>';
 
@@ -311,12 +322,12 @@
 	echo
 	'<fieldset><legend>'.__('Top image').'</legend>'.
-	'<p class="field"><label for="top_image">'.__('Top image').
-	form::combo('top_image',$top_images,($blowup_user['top_image'] ? $blowup_user['top_image'] : 'default')).'</label></p>'.
+	'<p class="field"><label for="top_image">'.__('Top image').'</label> '.
+	form::combo('top_image',$top_images,($blowup_user['top_image'] ? $blowup_user['top_image'] : 'default')).'</p>'.
 	'<p>'.__('Choose "Custom..." to upload your own image.').'</p>'.
 
-	'<p id="uploader"><label for="upfile">'.__('Add your image:').
+	'<p id="uploader"><label for="upfile">'.__('Add your image:').'</label> '.
 	' ('.sprintf(__('JPEG or PNG file, 800 pixels wide, maximum size %s'),files::size(DC_MAX_UPLOAD_SIZE)).')'.
 	'<input type="file" name="upfile" id="upfile" size="35" />'.
-	'</label></p>'.
+	'</p>'.
 
 	'<h3>'.__('Preview').'</h3>'.
@@ -329,109 +340,109 @@
 echo
 '<fieldset><legend>'.__('Sidebar').'</legend>'.
-'<p class="field"><label for="sidebar_position">'.__('Sidebar position:').' '.
-form::combo('sidebar_position',array(__('right')=>'right',__('left')=>'left'),$blowup_user['sidebar_position']).'</label></p>'.
-
-'<p class="field"><label for="sidebar_text_f">'.__('Sidebar text font:').' '.
-form::combo('sidebar_text_f',blowupConfig::fontsList(),$blowup_user['sidebar_text_f']).'</label></p>'.
-
-'<p class="field"><label for="sidebar_text_s">'.__('Sidebar text font size:').' '.
-form::field('sidebar_text_s',7,7,$blowup_user['sidebar_text_s']).'</label></p>'.
-
-'<p class="field"><label for="sidebar_text_c">'.__('Sidebar text color:').' '.
-form::field('sidebar_text_c',7,7,$blowup_user['sidebar_text_c'],'colorpicker').'</label></p>'.
-
-'<p class="field"><label for="sidebar_title_f">'.__('Sidebar titles font:').' '.
-form::combo('sidebar_title_f',blowupConfig::fontsList(),$blowup_user['sidebar_title_f']).'</label></p>'.
-
-'<p class="field"><label for="sidebar_title_s">'.__('Sidebar titles font size:').' '.
-form::field('sidebar_title_s',7,7,$blowup_user['sidebar_title_s']).'</label></p>'.
-
-'<p class="field"><label for="sidebar_title_c">'.__('Sidebar titles color:').' '.
-form::field('sidebar_title_c',7,7,$blowup_user['sidebar_title_c'],'colorpicker').'</label></p>'.
-
-'<p class="field"><label for="sidebar_title2_f">'.__('Sidebar 2nd level titles font:').' '.
-form::combo('sidebar_title2_f',blowupConfig::fontsList(),$blowup_user['sidebar_title2_f']).'</label></p>'.
-
-'<p class="field"><label for="sidebar_title2_s">'.__('Sidebar 2nd level titles font size:').' '.
-form::field('sidebar_title2_s',7,7,$blowup_user['sidebar_title2_s']).'</label></p>'.
-
-'<p class="field"><label for="sidebar_title2_c">'.__('Sidebar 2nd level titles color:').' '.
-form::field('sidebar_title2_c',7,7,$blowup_user['sidebar_title2_c'],'colorpicker').'</label></p>'.
-
-'<p class="field"><label for="sidebar_line_c">'.__('Sidebar lines color:').' '.
-form::field('sidebar_line_c',7,7,$blowup_user['sidebar_line_c'],'colorpicker').'</label></p>'.
-
-'<p class="field"><label for="sidebar_link_c">'.__('Sidebar links color:').' '.
-form::field('sidebar_link_c',7,7,$blowup_user['sidebar_link_c'],'colorpicker').'</label></p>'.
-
-'<p class="field"><label for="sidebar_link_v_c">'.__('Sidebar visited links color:').' '.
-form::field('sidebar_link_v_c',7,7,$blowup_user['sidebar_link_v_c'],'colorpicker').'</label></p>'.
-
-'<p class="field"><label for="sidebar_link_f_c">'.__('Sidebar focus links color:').' '.
-form::field('sidebar_link_f_c',7,7,$blowup_user['sidebar_link_f_c'],'colorpicker').'</label></p>'.
+'<p class="field"><label for="sidebar_position">'.__('Sidebar position:').'</label> '.
+form::combo('sidebar_position',array(__('right')=>'right',__('left')=>'left'),$blowup_user['sidebar_position']).'</p>'.
+
+'<p class="field"><label for="sidebar_text_f">'.__('Sidebar text font:').'</label> '.
+form::combo('sidebar_text_f',blowupConfig::fontsList(),$blowup_user['sidebar_text_f']).'</p>'.
+
+'<p class="field"><label for="sidebar_text_s">'.__('Sidebar text font size:').'</label> '.
+form::field('sidebar_text_s',7,7,$blowup_user['sidebar_text_s']).'</p>'.
+
+'<p class="field"><label for="sidebar_text_c">'.__('Sidebar text color:').'</label> '.
+form::field('sidebar_text_c',7,7,$blowup_user['sidebar_text_c'],'colorpicker').'</p>'.
+
+'<p class="field"><label for="sidebar_title_f">'.__('Sidebar titles font:').'</label> '.
+form::combo('sidebar_title_f',blowupConfig::fontsList(),$blowup_user['sidebar_title_f']).'</p>'.
+
+'<p class="field"><label for="sidebar_title_s">'.__('Sidebar titles font size:').'</label> '.
+form::field('sidebar_title_s',7,7,$blowup_user['sidebar_title_s']).'</p>'.
+
+'<p class="field"><label for="sidebar_title_c">'.__('Sidebar titles color:').'</label> '.
+form::field('sidebar_title_c',7,7,$blowup_user['sidebar_title_c'],'colorpicker').'</p>'.
+
+'<p class="field"><label for="sidebar_title2_f">'.__('Sidebar 2nd level titles font:').'</label> '.
+form::combo('sidebar_title2_f',blowupConfig::fontsList(),$blowup_user['sidebar_title2_f']).'</p>'.
+
+'<p class="field"><label for="sidebar_title2_s">'.__('Sidebar 2nd level titles font size:').'</label> '.
+form::field('sidebar_title2_s',7,7,$blowup_user['sidebar_title2_s']).'</p>'.
+
+'<p class="field"><label for="sidebar_title2_c">'.__('Sidebar 2nd level titles color:').'</label> '.
+form::field('sidebar_title2_c',7,7,$blowup_user['sidebar_title2_c'],'colorpicker').'</p>'.
+
+'<p class="field"><label for="sidebar_line_c">'.__('Sidebar lines color:').'</label> '.
+form::field('sidebar_line_c',7,7,$blowup_user['sidebar_line_c'],'colorpicker').'</p>'.
+
+'<p class="field"><label for="sidebar_link_c">'.__('Sidebar links color:').'</label> '.
+form::field('sidebar_link_c',7,7,$blowup_user['sidebar_link_c'],'colorpicker').'</p>'.
+
+'<p class="field"><label for="sidebar_link_v_c">'.__('Sidebar visited links color:').'</label> '.
+form::field('sidebar_link_v_c',7,7,$blowup_user['sidebar_link_v_c'],'colorpicker').'</p>'.
+
+'<p class="field"><label for="sidebar_link_f_c">'.__('Sidebar focus links color:').'</label> '.
+form::field('sidebar_link_f_c',7,7,$blowup_user['sidebar_link_f_c'],'colorpicker').'</p>'.
 '</fieldset>'.
 
 '<fieldset><legend>'.__('Entries').'</legend>'.
-'<p class="field"><label for="date_title_f">'.__('Date title font:').' '.
-form::combo('date_title_f',blowupConfig::fontsList(),$blowup_user['date_title_f']).'</label></p>'.
-
-'<p class="field"><label for="date_title_s">'.__('Date title font size:').' '.
-form::field('date_title_s',7,7,$blowup_user['date_title_s']).'</label></p>'.
-
-'<p class="field"><label for="date_title_c">'.__('Date title color:').' '.
-form::field('date_title_c',7,7,$blowup_user['date_title_c'],'colorpicker').'</label></p>'.
-
-'<p class="field"><label for="post_title_f">'.__('Entry title font:').' '.
-form::combo('post_title_f',blowupConfig::fontsList(),$blowup_user['post_title_f']).'</label></p>'.
-
-'<p class="field"><label for="post_title_s">'.__('Entry title font size:').' '.
-form::field('post_title_s',7,7,$blowup_user['post_title_s']).'</label></p>'.
-
-'<p class="field"><label for="post_title_c">'.__('Entry title color:').' '.
-form::field('post_title_c',7,7,$blowup_user['post_title_c'],'colorpicker').'</label></p>';
+'<p class="field"><label for="date_title_f">'.__('Date title font:').'</label> '.
+form::combo('date_title_f',blowupConfig::fontsList(),$blowup_user['date_title_f']).'</p>'.
+
+'<p class="field"><label for="date_title_s">'.__('Date title font size:').'</label> '.
+form::field('date_title_s',7,7,$blowup_user['date_title_s']).'</p>'.
+
+'<p class="field"><label for="date_title_c">'.__('Date title color:').'</label> '.
+form::field('date_title_c',7,7,$blowup_user['date_title_c'],'colorpicker').'</p>'.
+
+'<p class="field"><label for="post_title_f">'.__('Entry title font:').'</label> '.
+form::combo('post_title_f',blowupConfig::fontsList(),$blowup_user['post_title_f']).'</p>'.
+
+'<p class="field"><label for="post_title_s">'.__('Entry title font size:').'</label> '.
+form::field('post_title_s',7,7,$blowup_user['post_title_s']).'</p>'.
+
+'<p class="field"><label for="post_title_c">'.__('Entry title color:').'</label> '.
+form::field('post_title_c',7,7,$blowup_user['post_title_c'],'colorpicker').'</p>';
 
 if ($can_write_images) {
 	echo
-	'<p class="field"><label for="post_comment_bg_c">'.__('Comment background color:').' '.
-	form::field('post_comment_bg_c',7,7,$blowup_user['post_comment_bg_c'],'colorpicker').'</label></p>';
-}
-
-echo
-'<p class="field"><label for="post_comment_c">'.__('Comment text color:').' '.
-form::field('post_comment_c',7,7,$blowup_user['post_comment_c'],'colorpicker').'</label></p>';
+	'<p class="field"><label for="post_comment_bg_c">'.__('Comment background color:').'</label> '.
+	form::field('post_comment_bg_c',7,7,$blowup_user['post_comment_bg_c'],'colorpicker').'</p>';
+}
+
+echo
+'<p class="field"><label for="post_comment_c">'.__('Comment text color:').'</label> '.
+form::field('post_comment_c',7,7,$blowup_user['post_comment_c'],'colorpicker').'</p>';
 
 if ($can_write_images) {
 	echo
-	'<p class="field"><label for="post_commentmy_bg_c">'.__('My comment background color:').' '.
-	form::field('post_commentmy_bg_c',7,7,$blowup_user['post_commentmy_bg_c'],'colorpicker').'</label></p>';
-}
-
-echo
-'<p class="field"><label for="post_commentmy_c">'.__('My comment text color:').' '.
-form::field('post_commentmy_c',7,7,$blowup_user['post_commentmy_c'],'colorpicker').'</label></p>'.
+	'<p class="field"><label for="post_commentmy_bg_c">'.__('My comment background color:').'</label> '.
+	form::field('post_commentmy_bg_c',7,7,$blowup_user['post_commentmy_bg_c'],'colorpicker').'</p>';
+}
+
+echo
+'<p class="field"><label for="post_commentmy_c">'.__('My comment text color:').'</label> '.
+form::field('post_commentmy_c',7,7,$blowup_user['post_commentmy_c'],'colorpicker').'</p>'.
 '</fieldset>'.
 
 '<fieldset><legend>'.__('Footer').'</legend>'.
-'<p class="field"><label for="footer_f">'.__('Footer font:').' '.
-form::combo('footer_f',blowupConfig::fontsList(),$blowup_user['footer_f']).'</label></p>'.
-
-'<p class="field"><label for="footer_s">'.__('Footer font size:').' '.
-form::field('footer_s',7,7,$blowup_user['footer_s']).'</label></p>'.
-
-'<p class="field"><label for="footer_c">'.__('Footer color:').' '.
-form::field('footer_c',7,7,$blowup_user['footer_c'],'colorpicker').'</label></p>'.
-
-'<p class="field"><label for="footer_l_c">'.__('Footer links color:').' '.
-form::field('footer_l_c',7,7,$blowup_user['footer_l_c'],'colorpicker').'</label></p>'.
-
-'<p class="field"><label for="footer_bg_c">'.__('Footer background color:').' '.
-form::field('footer_bg_c',7,7,$blowup_user['footer_bg_c'],'colorpicker').'</label></p>'.
+'<p class="field"><label for="footer_f">'.__('Footer font:').'</label> '.
+form::combo('footer_f',blowupConfig::fontsList(),$blowup_user['footer_f']).'</p>'.
+
+'<p class="field"><label for="footer_s">'.__('Footer font size:').'</label> '.
+form::field('footer_s',7,7,$blowup_user['footer_s']).'</p>'.
+
+'<p class="field"><label for="footer_c">'.__('Footer color:').'</label> '.
+form::field('footer_c',7,7,$blowup_user['footer_c'],'colorpicker').'</p>'.
+
+'<p class="field"><label for="footer_l_c">'.__('Footer links color:').'</label> '.
+form::field('footer_l_c',7,7,$blowup_user['footer_l_c'],'colorpicker').'</p>'.
+
+'<p class="field"><label for="footer_bg_c">'.__('Footer background color:').'</label> '.
+form::field('footer_bg_c',7,7,$blowup_user['footer_bg_c'],'colorpicker').'</p>'.
 '</fieldset>';
 
 echo
 '<fieldset><legend>'.__('Additional CSS').'</legend>'.
-'<p><label for="extra_css">'.__('Any additional CSS styles (must be written using the CSS syntax):').' '.
+'<p><label for="extra_css">'.__('Any additional CSS styles (must be written using the CSS syntax):').'</label> '.
 form::textarea('extra_css',72,5,html::escapeHTML($blowup_user['extra_css']),'maximal','',false,'title="'.__('Additional CSS').'"').
-'</label></p>'.
+'</p>'.
 '</fieldset>';
 
Index: plugins/blowupConfig/lib/class.blowup.config.php
===================================================================
--- plugins/blowupConfig/lib/class.blowup.config.php	(revision 1179)
+++ plugins/blowupConfig/lib/class.blowup.config.php	(revision 1436)
@@ -141,4 +141,246 @@
 	}
 
+	public static function cssPath()
+	{
+		global $core;
+		return path::real($core->blog->public_path).'/blowup-css';
+	}
+
+	public static function cssURL()
+	{
+		global $core;
+		return $core->blog->settings->system->public_url.'/blowup-css';
+	}
+
+	public static function canWriteCss($create=false)
+	{
+		global $core;
+
+		$public = path::real($core->blog->public_path);
+		$css = self::cssPath();
+
+		if (!is_dir($public)) {
+			$core->error->add(__('The \'public\' directory does not exist.'));
+			return false;
+		}
+
+		if (!is_dir($css)) {
+			if (!is_writable($public)) {
+				$core->error->add(sprintf(__('The \'%s\' directory cannot be modified.'),'public'));
+				return false;
+			}
+			if ($create) {
+				files::makeDir($css);
+			}
+			return true;
+		}
+
+		if (!is_writable($css)) {
+			$core->error->add(sprintf(__('The \'%s\' directory cannot be modified.'),'public/blowup-css'));
+			return false;
+		}
+
+		return true;
+	}
+
+	public static function createCss($s)
+	{
+		global $core;
+		
+		if ($s === null) {
+			return;
+		}
+
+		$css = array();
+
+		/* Sidebar position
+		---------------------------------------------- */
+		if ($s['sidebar_position'] == 'left') {
+			$css['#wrapper']['background-position'] = '-300px 0';
+			$css['#main']['float'] = 'right';
+			$css['#sidebar']['float'] = 'left';
+		}
+
+		/* Properties
+		---------------------------------------------- */
+		self::prop($css,'body','background-color',$s['body_bg_c']);
+
+		self::prop($css,'body','color',$s['body_txt_c']);
+		self::prop($css,'.post-tags li a:link, .post-tags li a:visited, .post-info-co a:link, .post-info-co a:visited','color',$s['body_txt_c']);
+		self::prop($css,'#page','font-size',$s['body_txt_s']);
+		self::prop($css,'body','font-family',self::fontDef($s['body_txt_f']));
+
+		self::prop($css,'.post-content, .post-excerpt, #comments dd, #pings dd, dd.comment-preview','line-height',$s['body_line_height']);
+
+		if (!$s['blog_title_hide'])
+		{
+			self::prop($css,'#top h1 a','color',$s['blog_title_c']);
+			self::prop($css,'#top h1','font-size',$s['blog_title_s']);
+			self::prop($css,'#top h1','font-family',self::fontDef($s['blog_title_f']));
+
+			if ($s['blog_title_a'] == 'right' || $s['blog_title_a'] == 'left') {
+				$css['#top h1'][$s['blog_title_a']] = '0px';
+				$css['#top h1']['width'] = 'auto';
+			}
+
+			if ($s['blog_title_p'])
+			{
+				$_p = explode(':',$s['blog_title_p']);
+				$css['#top h1']['top'] = $_p[1].'px';
+				if ($s['blog_title_a'] != 'center') {
+					$_a = $s['blog_title_a'] == 'right' ? 'right' : 'left';
+					$css['#top h1'][$_a] = $_p[0].'px';
+				}
+			}
+		}
+		else
+		{
+			self::prop($css,'#top h1 span','text-indent','-5000px');
+			self::prop($css,'#top h1','top','0px');
+			$css['#top h1 a'] = array(
+				'display' => 'block',
+				'height' => $s['top_height'] ? ($s['top_height']-10).'px' : '120px',
+				'width' => '800px'
+			);
+		}
+		self::prop($css,'#top','height',$s['top_height']);
+
+		self::prop($css,'.day-date','color',$s['date_title_c']);
+		self::prop($css,'.day-date','font-family',self::fontDef($s['date_title_f']));
+		self::prop($css,'.day-date','font-size',$s['date_title_s']);
+
+		self::prop($css,'a','color',$s['body_link_c']);
+		self::prop($css,'a:visited','color',$s['body_link_v_c']);
+		self::prop($css,'a:hover, a:focus, a:active','color',$s['body_link_f_c']);
+
+		self::prop($css,'#comment-form input, #comment-form textarea','color',$s['body_link_c']);
+		self::prop($css,'#comment-form input.preview','color',$s['body_link_c']);
+		self::prop($css,'#comment-form input.preview:hover','background',$s['body_link_f_c']);
+		self::prop($css,'#comment-form input.preview:hover','border-color',$s['body_link_f_c']);
+		self::prop($css,'#comment-form input.submit','color',$s['body_link_c']);
+		self::prop($css,'#comment-form input.submit:hover','background',$s['body_link_f_c']);
+		self::prop($css,'#comment-form input.submit:hover','border-color',$s['body_link_f_c']);
+
+		self::prop($css,'#sidebar','font-family',self::fontDef($s['sidebar_text_f']));
+		self::prop($css,'#sidebar','font-size',$s['sidebar_text_s']);
+		self::prop($css,'#sidebar','color',$s['sidebar_text_c']);
+
+		self::prop($css,'#sidebar h2','font-family',self::fontDef($s['sidebar_title_f']));
+		self::prop($css,'#sidebar h2','font-size',$s['sidebar_title_s']);
+		self::prop($css,'#sidebar h2','color',$s['sidebar_title_c']);
+
+		self::prop($css,'#sidebar h3','font-family',self::fontDef($s['sidebar_title2_f']));
+		self::prop($css,'#sidebar h3','font-size',$s['sidebar_title2_s']);
+		self::prop($css,'#sidebar h3','color',$s['sidebar_title2_c']);
+
+		self::prop($css,'#sidebar ul','border-top-color',$s['sidebar_line_c']);
+		self::prop($css,'#sidebar li','border-bottom-color',$s['sidebar_line_c']);
+		self::prop($css,'#topnav ul','border-bottom-color',$s['sidebar_line_c']);
+
+		self::prop($css,'#sidebar li a','color',$s['sidebar_link_c']);
+		self::prop($css,'#sidebar li a:visited','color',$s['sidebar_link_v_c']);
+		self::prop($css,'#sidebar li a:hover, #sidebar li a:focus, #sidebar li a:active','color',$s['sidebar_link_f_c']);
+		self::prop($css,'#search input','color',$s['sidebar_link_c']);
+		self::prop($css,'#search .submit','color',$s['sidebar_link_c']);
+		self::prop($css,'#search .submit:hover','background',$s['sidebar_link_f_c']);
+		self::prop($css,'#search .submit:hover','border-color',$s['sidebar_link_f_c']);
+
+		self::prop($css,'.post-title','color',$s['post_title_c']);
+		self::prop($css,'.post-title a, .post-title a:visited','color',$s['post_title_c']);
+		self::prop($css,'.post-title','font-family',self::fontDef($s['post_title_f']));
+		self::prop($css,'.post-title','font-size',$s['post_title_s']);
+
+		self::prop($css,'#comments dd','background-color',$s['post_comment_bg_c']);
+		self::prop($css,'#comments dd','color',$s['post_comment_c']);
+		self::prop($css,'#comments dd.me','background-color',$s['post_commentmy_bg_c']);
+		self::prop($css,'#comments dd.me','color',$s['post_commentmy_c']);
+
+		self::prop($css,'#prelude, #prelude a','color',$s['prelude_c']);
+
+		self::prop($css,'#footer p','background-color',$s['footer_bg_c']);
+		self::prop($css,'#footer p','color',$s['footer_c']);
+		self::prop($css,'#footer p','font-size',$s['footer_s']);
+		self::prop($css,'#footer p','font-family',self::fontDef($s['footer_f']));
+		self::prop($css,'#footer p a','color',$s['footer_l_c']);
+
+		/* Images
+		------------------------------------------------------ */
+		self::backgroundImg($css,'body',$s['body_bg_c'],'body-bg.png');
+		self::backgroundImg($css,'body',$s['body_bg_g'] != 'light','body-bg.png');
+		self::backgroundImg($css,'body',$s['prelude_c'],'body-bg.png');
+		self::backgroundImg($css,'#top',$s['body_bg_c'],'page-t.png');
+		self::backgroundImg($css,'#top',$s['body_bg_g'] != 'light','page-t.png');
+		self::backgroundImg($css,'#top',$s['uploaded'] || $s['top_image'],'page-t.png');
+		self::backgroundImg($css,'#footer',$s['body_bg_c'],'page-b.png');
+		self::backgroundImg($css,'#comments dt',$s['post_comment_bg_c'],'comment-t.png');
+		self::backgroundImg($css,'#comments dd',$s['post_comment_bg_c'],'comment-b.png');
+		self::backgroundImg($css,'#comments dt.me',$s['post_commentmy_bg_c'],'commentmy-t.png');
+		self::backgroundImg($css,'#comments dd.me',$s['post_commentmy_bg_c'],'commentmy-b.png');
+
+		$res = '';
+		foreach ($css as $selector => $values) {
+			$res .= $selector." {\n";
+			foreach ($values as $k => $v) {
+				$res .= $k.':'.$v.";\n";
+			}
+			$res .= "}\n";
+		}
+
+		$res .= $s['extra_css'];
+
+		if (!self::canWriteCss(true)) {
+			throw new Exception(__('Unable to create css file.'));
+		}
+
+		# erase old css file
+		self::dropCss($core->blog->settings->system->theme);
+
+		# create new css file into public blowup-css subdirectory
+		self::writeCss($core->blog->settings->system->theme, $res);
+
+		return $res;
+	}
+
+	protected static function prop(&$css,$selector,$prop,$value)
+	{
+		if ($value) {
+			$css[$selector][$prop] = $value;
+		}
+	}
+
+	protected static function backgroundImg(&$css,$selector,$value,$image)
+	{
+		$file = self::imagesPath().'/'.$image;
+		if ($value && file_exists($file)){
+			$css[$selector]['background-image'] = 'url('.self::imagesURL().'/'.$image.')';
+		}
+	}
+
+	private static function writeCss($theme,$css)
+	{
+		file_put_contents(self::cssPath().'/'.$theme.'.css', $css);
+	}
+	
+	public static function dropCss($theme)
+	{
+		$file = path::real(self::cssPath().'/'.$theme.'.css');
+		if (is_writable(dirname($file))) {
+			@unlink($file);
+		}
+	}
+
+	public static function publicCssUrlHelper()
+	{
+		$theme = $GLOBALS['core']->blog->settings->system->theme;
+		$url = blowupConfig::cssURL();
+		$path = blowupConfig::cssPath();
+
+		if (file_exists($path.'/'.$theme.'.css')) {
+			return $url.'/'.$theme.'.css';
+		}
+
+		return null;
+	}
+
 	public static function imagesPath()
 	{
Index: plugins/daInstaller/inc/lib.da.installer.ui.php
===================================================================
--- plugins/daInstaller/inc/lib.da.installer.ui.php	(revision 1046)
+++ plugins/daInstaller/inc/lib.da.installer.ui.php	(revision 1416)
@@ -64,5 +64,5 @@
 				'</table>';
 			
-			echo '<p>'.__('Page(s)').' : '.$pager->getLinks().'</p>';
+			echo '<p class="pagination">'.__('Page(s)').' : '.$pager->getLinks().'</p>';
 			$blocks = explode('%s',$html_block);
 			echo $blocks[0];
@@ -81,5 +81,5 @@
 			}
 			echo $blocks[1];
-			echo '<p>'.__('Page(s)').' : '.$pager->getLinks().'</p>';
+			echo '<p class="pagination">'.__('Page(s)').' : '.$pager->getLinks().'</p>';
 		}
 	}
Index: plugins/daInstaller/index.php
===================================================================
--- plugins/daInstaller/index.php	(revision 1312)
+++ plugins/daInstaller/index.php	(revision 1454)
@@ -255,6 +255,14 @@
 '</head>'.
 '<body>'.
-infoMessages().
-'<h2>'.__('System').' &rsaquo; <span class="page-title">'.__('DotAddict.org Installer').'</span></h2>'.
+
+dcPage::breadcrumb(
+	array(
+		__('System') => '',
+		'<span class="page-title">'.__('DotAddict.org Installer').'</span>' => ''
+	)).
+
+infoMessages();
+
+echo
 '<p>'.__('Install and update your extensions live from DotAddict.org').'</p>';
 
@@ -294,7 +302,6 @@
 	'<form method="get" action="'.$p_url.'">'.
 	'<p>'.form::hidden('p','daInstaller').
-	'<label for="q" class="classic">'.__('Query:').'&nbsp; '.
+	'<label for="q" class="classic">'.__('Query:').'&nbsp;</label> '.
 	form::field('q',30,255,html::escapeHTML($q)).
-	'</label> '.
 	'<label for="mode" class="classic">'.
 	form::radio(array('mode','mode'),'plugins',$mode == 'plugins').
Index: plugins/importExport/inc/class.dc.import.dc1.php
===================================================================
--- plugins/importExport/inc/class.dc.import.dc1.php	(revision 840)
+++ plugins/importExport/inc/class.dc.import.dc1.php	(revision 1454)
@@ -150,18 +150,18 @@
 				
 				printf($this->imForm(1,__('General information'),__('Import my blog now')),
-				'<h3>'.__('We first need some information about your old Dotclear 1.2 installation.').'</h3>'.
-				'<p><label for="db_host">'.__('Database Host Name:').' '.
-				form::field('db_host',30,255,html::escapeHTML($this->vars['db_host'])).'</label></p>'.
-				'<p><label for="db_name">'.__('Database Name:',html::escapeHTML($this->vars['db_name'])).' '.
-				form::field('db_name',30,255,html::escapeHTML($this->vars['db_name'])).'</label></p>'.
-				'<p><label for="db_user">'.__('Database User Name:').' '.
-				form::field('db_user',30,255,html::escapeHTML($this->vars['db_user'])).'</label></p>'.
-				'<p><label for="db_pwd">'.__('Database Password:').' '.
-				form::password('db_pwd',30,255).'</label></p>'.
-				'<p><label for="db_prefix">'.__('Database Tables Prefix:').' '.
-				form::field('db_prefix',30,255,html::escapeHTML($this->vars['db_prefix'])).'</label></p>'.
+				'<p class="form-note info">'.__('We first need some information about your old Dotclear 1.2 installation.').'</p>'.
+				'<p><label for="db_host">'.__('Database Host Name:').'</label> '.
+				form::field('db_host',30,255,html::escapeHTML($this->vars['db_host'])).'</p>'.
+				'<p><label for="db_name">'.__('Database Name:',html::escapeHTML($this->vars['db_name'])).'</label> '.
+				form::field('db_name',30,255,html::escapeHTML($this->vars['db_name'])).'</p>'.
+				'<p><label for="db_user">'.__('Database User Name:').'</label> '.
+				form::field('db_user',30,255,html::escapeHTML($this->vars['db_user'])).'</p>'.
+				'<p><label for="db_pwd">'.__('Database Password:').'</label> '.
+				form::password('db_pwd',30,255).'</p>'.
+				'<p><label for="db_prefix">'.__('Database Tables Prefix:').'</label> '.
+				form::field('db_prefix',30,255,html::escapeHTML($this->vars['db_prefix'])).'</p>'.
 				'<h3>'.__('Entries import options').'</h3>'.
-				'<p><label for="post_limit">'.__('Number of entries to import at once:').' '.
-				form::field('post_limit',3,3,html::escapeHTML($this->vars['post_limit'])).'</label></p>'
+				'<p><label for="post_limit">'.__('Number of entries to import at once:').'</label> '.
+				form::field('post_limit',3,3,html::escapeHTML($this->vars['post_limit'])).'</p>'
 				);
 				break;
Index: plugins/importExport/inc/class.dc.import.flat.php
===================================================================
--- plugins/importExport/inc/class.dc.import.flat.php	(revision 1298)
+++ plugins/importExport/inc/class.dc.import.flat.php	(revision 1454)
@@ -191,7 +191,7 @@
 		if ($has_files) {
 			echo 
-			'<p><label for="public_single_file" class="classic">'.__('or pick up a local file in your public directory').' '.
+			'<p><label for="public_single_file" class="classic">'.__('or pick up a local file in your public directory').'</label> '.
 			form::combo('public_single_file',$public_files).
-			'</label></p>';
+			'</p>';
 		}
 		
Index: plugins/importExport/inc/class.dc.import.wp.php
===================================================================
--- plugins/importExport/inc/class.dc.import.wp.php	(revision 1185)
+++ plugins/importExport/inc/class.dc.import.wp.php	(revision 1454)
@@ -182,14 +182,15 @@
 				printf($this->imForm(1,__('General information'),__('Import my blog now')),
 				'<h3>'.__('We first need some information about your old WordPress installation.').'</h3>'.
-				'<p><label for="db_host">'.__('Database Host Name:').' '.
-				form::field('db_host',30,255,html::escapeHTML($this->vars['db_host'])).'</label></p>'.
-				'<p><label for="db_name">'.__('Database Name:',html::escapeHTML($this->vars['db_name'])).' '.
-				form::field('db_name',30,255,html::escapeHTML($this->vars['db_name'])).'</label></p>'.
-				'<p><label for="db_user">'.__('Database User Name:').' '.
-				form::field('db_user',30,255,html::escapeHTML($this->vars['db_user'])).'</label></p>'.
-				'<p><label for="db_pwd">'.__('Database Password:').' '.
-				form::password('db_pwd',30,255).'</label></p>'.
-				'<p><label for="db_prefix">'.__('Database Tables Prefix:').' '.
-				form::field('db_prefix',30,255,html::escapeHTML($this->vars['db_prefix'])).'</label></p>'.
+				'<p><label for="db_host">'.__('Database Host Name:').'</label> '.
+				form::field('db_host',30,255,html::escapeHTML($this->vars['db_host'])).'</p>'.
+				'<p><label for="db_name">'.__('Database Name:',html::escapeHTML($this->vars['db_name'])).'</label> '.
+				form::field('db_name',30,255,html::escapeHTML($this->vars['db_name'])).'</p>'.
+				'<p><label for="db_user">'.__('Database User Name:').'</label> '.
+				form::field('db_user',30,255,html::escapeHTML($this->vars['db_user'])).'</p>'.
+				'<p><label for="db_pwd">'.__('Database Password:').'</label> '.
+				form::password('db_pwd',30,255).'</p>'.
+				'<p><label for="db_prefix">'.__('Database Tables Prefix:').'</label> '.
+				form::field('db_prefix',30,255,html::escapeHTML($this->vars['db_prefix'])).'</p>'.
+
 				'<h3>'.__('Entries import options').'</h3>'.
 				'<p>'.__('WordPress and Dotclear\'s handling of categories are quite different. '.
@@ -202,4 +203,5 @@
 				'category, you can just ignore it while importing your blog, as Dotclear allows you to '.
 				'actually keep your posts uncategorized.').'</p>'.
+
 				'<p><label for="ignore_first_cat" class="classic">'.form::checkbox('ignore_first_cat',1,$this->vars['ignore_first_cat']).' '.
 				__('Ignore the first category:').'</label></p>'.
@@ -208,13 +210,15 @@
 				'<p><label for="cat_as_tags" class="classic">'.form::checkbox('cat_as_tags',1,$this->vars['cat_as_tags']).' '.
 				__('Import all categories as tags:').'</label></p>'.
-				'<p><label for="cat_tags_prefix">'.__('Prefix such tags with:').' '.
-				form::field('cat_tags_prefix',10,20,html::escapeHTML($this->vars['cat_tags_prefix'])).'</label></p>'.
-				'<p><label for="post_limit">'.__('Number of entries to import at once:').' '.
-				form::field('post_limit',3,3,html::escapeHTML($this->vars['post_limit'])).'</label></p>'.
+				'<p><label for="cat_tags_prefix">'.__('Prefix such tags with:').'</label> '.
+				form::field('cat_tags_prefix',10,20,html::escapeHTML($this->vars['cat_tags_prefix'])).'</p>'.
+				'<p><label for="post_limit">'.__('Number of entries to import at once:').'</label> '.
+				form::field('post_limit',3,3,html::escapeHTML($this->vars['post_limit'])).'</p>'.
 				
 				'<h3>'.__('Content filters').'</h3>'.
 				'<p>'.__('You may want to process your post and/or comment content with the following filters.').'</p>'.
-				'<p><label for="post_formater">'.__('Post content formatter:').' '.form::combo('post_formater',$this->formaters,$this->vars['post_formater']).'</label></p>'.
-				'<p><label for="comment_formater">'.__('Comment content formatter:').' '.form::combo('comment_formater',$this->formaters,$this->vars['comment_formater']).'</label></p>'
+				'<p><label for="post_formater">'.__('Post content formatter:').'</label> '.
+				form::combo('post_formater',$this->formaters,$this->vars['post_formater']).'</p>'.
+				'<p><label for="comment_formater">'.__('Comment content formatter:').'</label> '
+				.form::combo('comment_formater',$this->formaters,$this->vars['comment_formater']).'</label></p>'
 				);
 				break;
Index: plugins/importExport/index.php
===================================================================
--- plugins/importExport/index.php	(revision 1298)
+++ plugins/importExport/index.php	(revision 1358)
@@ -74,7 +74,12 @@
 
 if ($type && $module !== null) {
+	echo dcPage::breadcrumb(
+		array(
+			__('Plugins') => '',
+			$title => $p_url,
+			'<span class="page-title">'.html::escapeHTML($module->name).'</span>' => ''
+		));
+
 	echo
-	'<h2>'.__('Plugins').' &rsaquo; <a href="'.$p_url.'">'.$title.'</a>'.
-	' &rsaquo; <span class="page-title">'.html::escapeHTML($module->name).'</span></h2>'.
 	'<div id="ie-gui">';
 	
@@ -84,6 +89,11 @@
 }
 else {
+	echo dcPage::breadcrumb(
+		array(
+			__('Plugins') => '',
+			'<span class="page-title">'.$title.'</span>' => ''
+		));
+
 	echo
-	'<h2>'.__('Plugins').' &rsaquo; <span class="page-title">'.$title.'</span></h2>'.
 	'<h3>'.__('Import').'</h3>'.listImportExportModules($core,$modules['import']).
 	'<h3>'.__('Export').'</h3>'.listImportExportModules($core,$modules['export']);
Index: plugins/maintenance/index.php
===================================================================
--- plugins/maintenance/index.php	(revision 1299)
+++ plugins/maintenance/index.php	(revision 1358)
@@ -69,5 +69,11 @@
 
 <body>
-<h2><?php echo __('Plugins').' &rsaquo; <span class="page-title">'.__('Maintenance').'</span></h2>'; ?>
+<?php
+	echo dcPage::breadcrumb(
+		array(
+			__('Plugins') => '',
+			'<span class="page-title">'.__('Maintenance').'</span>' => ''
+		));
+?>
 
 <?php
Index: plugins/pages/list.php
===================================================================
--- plugins/pages/list.php	(revision 1179)
+++ plugins/pages/list.php	(revision 1464)
@@ -44,5 +44,5 @@
 			}
 			
-			echo '<p>'.__('Page(s)').' : '.$pager->getLinks().'</p>';
+			echo '<p class="pagination">'.__('Page(s)').' : '.$pager->getLinks().'</p>';
 			
 			$blocks = explode('%s',$html_block);
@@ -57,5 +57,5 @@
 			echo $blocks[1];
 			
-			echo '<p>'.__('Page(s)').' : '.$pager->getLinks().'</p>';
+			echo '<p class="pagination">'.__('Page(s)').' : '.$pager->getLinks().'</p>';
 		}
 	}
@@ -66,14 +66,14 @@
 		switch ($this->rs->post_status) {
 			case 1:
-				$img_status = sprintf($img,__('published'),'check-on.png');
+				$img_status = sprintf($img,__('Published'),'check-on.png');
 				break;
 			case 0:
-				$img_status = sprintf($img,__('unpublished'),'check-off.png');
+				$img_status = sprintf($img,__('Unpublished'),'check-off.png');
 				break;
 			case -1:
-				$img_status = sprintf($img,__('scheduled'),'scheduled.png');
+				$img_status = sprintf($img,__('Scheduled'),'scheduled.png');
 				break;
 			case -2:
-				$img_status = sprintf($img,__('pending'),'check-wrn.png');
+				$img_status = sprintf($img,__('Pending'),'check-wrn.png');
 				break;
 		}
@@ -81,10 +81,10 @@
 		$protected = '';
 		if ($this->rs->post_password) {
-			$protected = sprintf($img,__('protected'),'locker.png');
+			$protected = sprintf($img,__('Protected'),'locker.png');
 		}
 		
 		$selected = '';
 		if ($this->rs->post_selected) {
-			$selected = sprintf($img,__('hidden'),'hidden.png');
+			$selected = sprintf($img,__('Hidden'),'hidden.png');
 		}
 		
@@ -101,5 +101,5 @@
 		$res .=
 		'<td class="nowrap">'.
-		form::checkbox(array('entries[]'),$this->rs->post_id,'','','',!$this->rs->isEditable(),'title="'.__('select this page').'"').'</td>'.
+		form::checkbox(array('entries[]'),$this->rs->post_id,'','','',!$this->rs->isEditable(),'title="'.__('Select this page').'"').'</td>'.
 		'<td class="maximal"><a href="'.$this->core->getPostAdminURL($this->rs->post_type,$this->rs->post_id).'">'.
 		html::escapeHTML($this->rs->post_title).'</a></td>'.
@@ -145,15 +145,15 @@
 if ($core->auth->check('publish,contentadmin',$core->blog->id))
 {
-	$combo_action[__('publish')] = 'publish';
-	$combo_action[__('unpublish')] = 'unpublish';
-	$combo_action[__('schedule')] = 'schedule';
-	$combo_action[__('mark as pending')] = 'pending';
+	$combo_action[__('Publish')] = 'publish';
+	$combo_action[__('Unpublish')] = 'unpublish';
+	$combo_action[__('Schedule')] = 'schedule';
+	$combo_action[__('Mark as pending')] = 'pending';
 }
 if ($core->auth->check('admin',$core->blog->id)) {
-	$combo_action[__('change author')] = 'author';
+	$combo_action[__('Change author')] = 'author';
 }
 if ($core->auth->check('delete,contentadmin',$core->blog->id))
 {
-	$combo_action[__('delete')] = 'delete';
+	$combo_action[__('Delete')] = 'delete';
 }
 
@@ -177,5 +177,11 @@
 <body>
 <?php
-echo '<h2>'.html::escapeHTML($core->blog->name).' &rsaquo; <span class="page-title">'.__('Pages').'</span></h2>'.
+echo dcPage::breadcrumb(
+	array(
+		html::escapeHTML($core->blog->name) => '',
+		'<span class="page-title">'.__('Pages').'</span>' => ''
+	));
+
+echo
 '<p class="top-add"><a class="button add" href="'.$p_url.'&amp;act=page">'.__('New page').'</a></p>';
 
Index: plugins/pages/page.php
===================================================================
--- plugins/pages/page.php	(revision 1280)
+++ plugins/pages/page.php	(revision 1454)
@@ -124,5 +124,5 @@
 		if ($next_rs !== null) {
 			$next_link = sprintf($post_link,$next_rs->post_id,
-				html::escapeHTML($next_rs->post_title),__('next page').'&nbsp;&#187;');
+				html::escapeHTML($next_rs->post_title),__('Next page').'&nbsp;&#187;');
 			$next_headlink = sprintf($post_headlink,'next',
 				html::escapeHTML($next_rs->post_title),$next_rs->post_id);
@@ -131,5 +131,5 @@
 		if ($prev_rs !== null) {
 			$prev_link = sprintf($post_link,$prev_rs->post_id,
-				html::escapeHTML($prev_rs->post_title),'&#171;&nbsp;'.__('previous page'));
+				html::escapeHTML($prev_rs->post_title),'&#171;&nbsp;'.__('Previous page'));
 			$prev_headlink = sprintf($post_headlink,'previous',
 				html::escapeHTML($prev_rs->post_title),$prev_rs->post_id);
@@ -315,4 +315,32 @@
 <?php
 
+if ($post_id) {
+	switch ($post_status) {
+		case 1:
+			$img_status = sprintf($img_status_pattern,__('Published'),'check-on.png');
+			break;
+		case 0:
+			$img_status = sprintf($img_status_pattern,__('Unpublished'),'check-off.png');
+			break;
+		case -1:
+			$img_status = sprintf($img_status_pattern,__('Scheduled'),'scheduled.png');
+			break;
+		case -2:
+			$img_status = sprintf($img_status_pattern,__('Pending'),'check-wrn.png');
+			break;
+		default:
+			$img_status = '';
+	}
+	$edit_entry_title = '&ldquo;'.$post_title.'&rdquo;'.' '.$img_status;
+} else {
+	$edit_entry_title = $page_title;
+}
+echo dcPage::breadcrumb(
+	array(
+		html::escapeHTML($core->blog->name) => '',
+		__('Pages') => $p_url,
+		'<span class="page-title">'.$edit_entry_title.'</span>' => ''
+	));
+
 if (!empty($_GET['upd'])) {
 	dcPage::message(__('Page has been successfully updated.'));
@@ -338,29 +366,6 @@
 }
 
-echo '<h2>'.html::escapeHTML($core->blog->name).
-' &rsaquo; <a href="'.$p_url.'">'.__('Pages').'</a> &rsaquo; <span class="page-title">'.$page_title; 
-	if ($post_id) {
-		switch ($post_status) {
-			case 1:
-				$img_status = sprintf($img_status_pattern,__('published'),'check-on.png');
-				break;
-			case 0:
-				$img_status = sprintf($img_status_pattern,__('unpublished'),'check-off.png');
-				break;
-			case -1:
-				$img_status = sprintf($img_status_pattern,__('scheduled'),'scheduled.png');
-				break;
-			case -2:
-				$img_status = sprintf($img_status_pattern,__('pending'),'check-wrn.png');
-				break;
-			default:
-				$img_status = '';
-		}
-		echo ' &ldquo;'.$post_title.'&rdquo;'.' '.$img_status;
-	}
-echo	'</span></h2>';
-
 if ($post_id && $post->post_status == 1) {
-	echo '<p><a href="'.$post->getURL().'" onclick="window.open(this.href);return false;" title="'.$post_title.' ('.__('new window').')'.'">'.__('Go to this page on the site').' <img src="images/outgoing-blue.png" alt="" /></a></p>';
+	echo '<p><a class="onblog_link" href="'.$post->getURL().'" onclick="window.open(this.href);return false;" title="'.$post_title.' ('.__('new window').')'.'">'.__('Go to this page on the site').' <img src="images/outgoing-blue.png" alt="" /></a></p>';
 }
 
@@ -369,7 +374,7 @@
 if ($post_id)
 {
-	echo '<p>';
+	echo '<p class="nav_prevnext">';
 	if ($prev_link) { echo $prev_link; }
-	if ($next_link && $prev_link) { echo ' - '; }
+	if ($next_link && $prev_link) { echo ' | '; }
 	if ($next_link) { echo $next_link; }
 	
@@ -398,9 +403,10 @@
 	
 	echo
-	'<p class="col"><label for="post_title" class="required"><abbr title="'.__('Required field').'">*</abbr> '.__('Title:').
+	'<p class="col"><label for="post_title" class="required no-margin"><abbr title="'.__('Required field').'">*</abbr> '.__('Title:').'</label>'.
 	form::field('post_title',20,255,html::escapeHTML($post_title),'maximal').
-	'</label></p>'.
-	
-	'<p class="area" id="excerpt-area"><label for="post_excerpt">'.__('Excerpt:').'</label> '.
+	'</p>'.
+	
+	'<p class="area" id="excerpt-area"><label for="post_excerpt">'.__('Excerpt:').
+	'<span class="form-note">'.__('Add an introduction to the page.').'</span></label> '.
 	form::textarea('post_excerpt',50,5,html::escapeHTML($post_excerpt)).
 	'</p>'.
@@ -412,5 +418,6 @@
 	
 	echo
-	'<p class="area" id="notes-area"><label for="post_notes">'.__('Notes:').'</label>'.
+	'<p class="area" id="notes-area"><label for="post_notes">'.__('Personal notes:').
+	'<span class="form-note">'.__('Add unpublished notes.').'</span></label>'.
 	form::textarea('post_notes',50,5,html::escapeHTML($post_notes)).
 	'</p>';
@@ -420,5 +427,5 @@
 	
 	echo
-	'<p>'.
+	'<p class="border-top">'.
 	($post_id ? form::hidden('id',$post_id) : '').
 	'<input type="submit" value="'.__('Save').' (s)" '.
@@ -448,15 +455,15 @@
 	
 	echo
-	'<p><label for="post_status">'.__('Page status:').
+	'<p><label for="post_status">'.__('Page status:').'</label> '.
 	form::combo('post_status',$status_combo,$post_status,'','',!$can_publish).
-	'</label></p>'.
-	
-	'<p><label for="post_dt">'.__('Published on:').
-	form::field('post_dt',16,16,$post_dt,($bad_dt ? 'invalid' : '')).'</label></p>'.
-	
-	'<p><label for="post_format">'.__('Text formating:').
+	'</p>'.
+	
+	'<p><label for="post_dt">'.__('Published on:').'</label>'.
+	form::field('post_dt',16,16,$post_dt,($bad_dt ? 'invalid' : '')).'</p>'.
+	
+	'<p><label for="post_format">'.__('Text formating:').'</label>'.
 	form::combo('post_format',$formaters_combo,$post_format).
-	($post_id && $post_format != 'xhtml' ? '<a href="'.html::escapeURL($redir_url).'&amp;id='.$post_id.'&amp;xconv=1">'.__('Convert to XHTML').'</a>' : '').
-	'</label></p>'.
+	($post_id && $post_format != 'xhtml' ? '<a class="button" href="'.html::escapeURL($redir_url).'&amp;id='.$post_id.'&amp;xconv=1">'.__('Convert to XHTML').'</a>' : '').
+	'</p>'.
 	
 	'<p><label for="post_open_comment" class="classic">'.form::checkbox('post_open_comment',1,$post_open_comment).' '.
@@ -482,19 +489,19 @@
 	'</p>'.
 
-	'<p><label for="post_position" class="classic">'.__('Page position:').' '.
+	'<p><label for="post_position" class="classic">'.__('Page position:').'</label> '.
 	form::field('post_position',3,3,(string) $post_position).
-	'</label></p>'.
-	
-	'<p><label for="post_lang">'.__('Page lang:').
-	form::combo('post_lang',$lang_combo,$post_lang).'</label></p>'.
-	
-	'<p><label for="post_password">'.__('Page password:').
+	'</p>'.
+	
+	'<p><label for="post_lang">'.__('Page lang:').'</label>'.
+	form::combo('post_lang',$lang_combo,$post_lang).'</p>'.
+	
+	'<p><label for="post_password">'.__('Page password:').'</label>'.
 	form::field('post_password',10,32,html::escapeHTML($post_password),'maximal').
-	'</label></p>'.
+	'</p>'.
 	
 	'<div class="lockable">'.
-	'<p><label for="post_url">'.__('Basename:').
+	'<p><label for="post_url">'.__('Basename:').'</label>'.
 	form::field('post_url',10,255,html::escapeHTML($post_url),'maximal').
-	'</label></p>'.
+	'</p>'.
 	'<p class="form-note warn">'.
 	__('Warning: If you set the URL manually, it may conflict with another page.').
@@ -525,5 +532,5 @@
 			'<li class="media-action"><a class="attachment-remove" id="attachment-'.$f->media_id.'" '.
 			'href="post_media.php?post_id='.$post_id.'&amp;media_id='.$f->media_id.'&amp;remove=1">'.
-			'<img src="images/check-off.png" alt="'.__('remove').'" /></a>'.
+			'<img src="images/check-off.png" alt="'.__('Remove').'" /></a>'.
 			'</li>'.
 			
@@ -536,5 +543,5 @@
 			echo '<p>'.__('No attachment.').'</p>';
 		}
-		echo '<p><a href="media.php?post_id='.$post_id.'">'.__('Add files to this page').'</a></p>';
+		echo '<p><a class="button" href="media.php?post_id='.$post_id.'">'.__('Add files to this page').'</a></p>';
 	}
 	
@@ -572,8 +579,8 @@
 	if ($can_edit_page && $core->auth->check('publish,contentadmin',$core->blog->id))
 	{
-		$combo_action[__('publish')] = 'publish';
-		$combo_action[__('unpublish')] = 'unpublish';
-		$combo_action[__('mark as pending')] = 'pending';
-		$combo_action[__('mark as junk')] = 'junk';
+		$combo_action[__('Publish')] = 'publish';
+		$combo_action[__('Unpublish')] = 'unpublish';
+		$combo_action[__('Mark as pending')] = 'pending';
+		$combo_action[__('Mark as junk')] = 'junk';
 	}
 	
@@ -634,15 +641,15 @@
 	'<form action="comment.php" method="post" id="comment-form">'.
 	'<div class="constrained">'.
-	'<p><label for="comment_author" class="required"><abbr title="'.__('Required field').'">*</abbr> '.__('Name:').
+	'<p><label for="comment_author" class="required"><abbr title="'.__('Required field').'">*</abbr> '.__('Name:').'</label>'.
 	form::field('comment_author',30,255,html::escapeHTML($core->auth->getInfo('user_cn'))).
-	'</label></p>'.
-	
-	'<p><label for="comment_email">'.__('Email:').
+	'</p>'.
+	
+	'<p><label for="comment_email">'.__('Email:').'</label>'.
 	form::field('comment_email',30,255,html::escapeHTML($core->auth->getInfo('user_email'))).
-	'</label></p>'.
-	
-	'<p><label for="comment_site">'.__('Web site:').
+	'</p>'.
+	
+	'<p><label for="comment_site">'.__('Web site:').'</label>'.
 	form::field('comment_site',30,255,html::escapeHTML($core->auth->getInfo('user_url'))).
-	'</label></p>'.
+	'</p>'.
 	
 	'<p class="area"><label for="comment_content" class="required"><abbr title="'.__('Required field').'">*</abbr> '.__('Comment:').'</label> '.
@@ -699,14 +706,14 @@
 		switch ($rs->comment_status) {
 			case 1:
-				$img_status = sprintf($img,__('published'),'check-on.png');
+				$img_status = sprintf($img,__('Published'),'check-on.png');
 				break;
 			case 0:
-				$img_status = sprintf($img,__('unpublished'),'check-off.png');
+				$img_status = sprintf($img,__('Unpublished'),'check-off.png');
 				break;
 			case -1:
-				$img_status = sprintf($img,__('pending'),'check-wrn.png');
+				$img_status = sprintf($img,__('Pending'),'check-wrn.png');
 				break;
 			case -2:
-				$img_status = sprintf($img,__('junk'),'junk.png');
+				$img_status = sprintf($img,__('Junk'),'junk.png');
 				break;
 		}
@@ -717,5 +724,5 @@
 		
 		'<td class="nowrap">'.
-		($has_action ? form::checkbox(array('comments[]'),$rs->comment_id,'','','',0,'title="'.__('select this comment').'"') : '').'</td>'.
+		($has_action ? form::checkbox(array('comments[]'),$rs->comment_id,'','','',0,'title="'.__('Select this comment').'"') : '').'</td>'.
 		'<td class="maximal">'.$rs->comment_author.'</td>'.
 		'<td class="nowrap">'.dt::dt2str(__('%Y-%m-%d %H:%M'),$rs->comment_dt).'</td>'.
Index: plugins/pings/_admin.php
===================================================================
--- plugins/pings/_admin.php	(revision 1179)
+++ plugins/pings/_admin.php	(revision 1398)
@@ -33,5 +33,5 @@
 
 $core->addBehavior('adminPostHeaders',array('pingsBehaviors','pingJS'));
-$core->addBehavior('adminPostFormSidebar',array('pingsBehaviors','pingsForm'));
+$core->addBehavior('adminPostFormItems',array('pingsBehaviors','pingsFormItems'));
 $core->addBehavior('adminAfterPostCreate',array('pingsBehaviors','doPings'));
 $core->addBehavior('adminAfterPostUpdate',array('pingsBehaviors','doPings'));
Index: plugins/pings/index.php
===================================================================
--- plugins/pings/index.php	(revision 1179)
+++ plugins/pings/index.php	(revision 1454)
@@ -51,5 +51,10 @@
 <body>
 <?php
-echo '<h2 class="page-title">'.__('Pings configuration').'</h2>';
+
+echo dcPage::breadcrumb(
+	array(
+		__('Plugins') => '',
+		'<span class="page-title">'.__('Pings configuration').'</span>' => ''
+	));
 
 if (!empty($_GET['up'])) {
@@ -59,6 +64,6 @@
 echo
 '<form action="'.$p_url.'" method="post">'.
-'<p><label for="pings_active" class="classic">'.form::checkbox('pings_active',1,$core->blog->settings->pings->pings_active).' '.
-__('Activate pings extension').'</label></p>';
+'<p><label for="pings_active" class="classic">'.form::checkbox('pings_active',1,$core->blog->settings->pings->pings_active).'</label> '.
+__('Activate pings extension').'</p>';
 
 $i = 0;
@@ -66,8 +71,8 @@
 {
 	echo
-	'<p><label for="pings_srv_name-'.$i.'" class="classic">'.__('Service name:').' '.
-	form::field(array('pings_srv_name[]','pings_srv_name-'.$i),20,128,html::escapeHTML($n)).'</label> '.
-	'<label for="pings_srv_uri-'.$i.'" class="classic">'.__('Service URI:').' '.
-	form::field(array('pings_srv_uri[]','pings_srv_uri-'.$i),40,255,html::escapeHTML($u)).'</label>';
+	'<p><label for="pings_srv_name-'.$i.'" class="classic">'.__('Service name:').'</label> '.
+	form::field(array('pings_srv_name[]','pings_srv_name-'.$i),20,128,html::escapeHTML($n)).' '.
+	'<label for="pings_srv_uri-'.$i.'" class="classic">'.__('Service URI:').'</label> '.
+	form::field(array('pings_srv_uri[]','pings_srv_uri-'.$i),40,255,html::escapeHTML($u));
 	
 	if (!empty($_GET['test']))
@@ -75,7 +80,7 @@
 		try {
 			pingsAPI::doPings($u,'Example site','http://example.com');
-			echo ' <img src="images/check-on.png" alt="ok" />';
+			echo ' <img src="images/check-on.png" alt="OK" />';
 		} catch (Exception $e) {
-			echo ' <img src="images/check-off.png" alt="'.__('error').'" /> '.$e->getMessage();
+			echo ' <img src="images/check-off.png" alt="'.__('Error').'" /> '.$e->getMessage();
 		}
 	}
@@ -86,8 +91,8 @@
 
 echo
-'<p><label for="pings_srv_name2" class="classic">'.__('Service name:').' '.
-form::field(array('pings_srv_name[]','pings_srv_name2'),20,128).'</label> '.
-'<label for="pings_srv_uri2" class="classic">'.__('Service URI:').' '.
-form::field(array('pings_srv_uri[]','pings_srv_uri2'),40,255).'</label>'.
+'<p><label for="pings_srv_name2" class="classic">'.__('Service name:').'</label> '.
+form::field(array('pings_srv_name[]','pings_srv_name2'),20,128).' '.
+'<label for="pings_srv_uri2" class="classic">'.__('Service URI:').'</label> '.
+form::field(array('pings_srv_uri[]','pings_srv_uri2'),40,255).
 '</p>'.
 
@@ -96,5 +101,5 @@
 '</form>';
 
-echo '<p><a href="'.$p_url.'&amp;test=1">'.__('Test ping services').'</a></p>';
+echo '<p><a class="button" href="'.$p_url.'&amp;test=1">'.__('Test ping services').'</a></p>';
 ?>
 </body>
Index: plugins/pings/lib.pings.php
===================================================================
--- plugins/pings/lib.pings.php	(revision 1179)
+++ plugins/pings/lib.pings.php	(revision 1398)
@@ -41,5 +41,5 @@
 	}
 	
-	public static function pingsForm($post)
+	public static function pingsFormItems($main,$sidebar,$post)
 	{
 		$core =& $GLOBALS['core'];
@@ -59,9 +59,9 @@
 		}
 		
-		echo '<h3 class="ping-services">'.__('Pings:').'</h3>';
+		$item = '<h5 class="ping-services">'.__('Pings').'</h5>';
 		$i = 0;
 		foreach ($pings_uris as $k => $v)
 		{
-			echo
+			$item .=
 			'<p class="ping-services"><label for="pings_do-'.$i.'" class="classic">'.
 			form::checkbox(array('pings_do[]','pings_do-'.$i),html::escapeHTML($v),in_array($v,$pings_do)).' '.
@@ -69,4 +69,6 @@
 			$i++;
 		}
+		$sidebar['options-box']['items']['pings']=$item;
+		
 	}
 	
Index: plugins/pings/post.js
===================================================================
--- plugins/pings/post.js	(revision 0)
+++ plugins/pings/post.js	(revision 1365)
@@ -12,5 +12,5 @@
 			$('p.ping-services:last').after(p.append(a));
 		}
-		$('h3.ping-services').toggleWithLegend($('p.ping-services'),{
+		$('h5.ping-services').toggleWithLegend($('p.ping-services'),{
 			cookie: 'dcx_ping_services'
 		});
Index: plugins/simpleMenu/index.php
===================================================================
--- plugins/simpleMenu/index.php	(revision 1312)
+++ plugins/simpleMenu/index.php	(revision 1358)
@@ -368,4 +368,19 @@
 <?php
 
+if ($step) {
+	echo dcPage::breadcrumb(
+		array(
+			html::escapeHTML($core->blog->name) => '',
+			$page_title => $p_url,
+			'<span class="page-title">'.__('Add item').'</span>' => ''
+		));
+} else {
+	echo dcPage::breadcrumb(
+		array(
+			html::escapeHTML($core->blog->name) => '',
+			'<span class="page-title">'.$page_title.'</span>' => ''
+		));
+}
+
 if (!empty($_GET['added'])) {
 	dcPage::message(__('Menu item has been successfully added.'));
@@ -381,9 +396,7 @@
 }
 
-if ($step) 
+if ($step)
 {
 	// Formulaire d'ajout d'un item
-	echo '<h2>'.html::escapeHTML($core->blog->name).' &rsaquo; <a href="'.$p_url.'">'.$page_title.'</a> &rsaquo; <span class="page-title">'.__('Add item').'</span></h2>';
-	
 	switch ($step) {
 		case 1:
@@ -454,8 +467,4 @@
 // Liste des items
 if (!$step) {
-	echo '<h2>'.html::escapeHTML($core->blog->name).' &rsaquo; <span class="page-title">'.$page_title.'</span></h2>';
-}
-
-if (!$step) {
 	echo '<form id="menuitemsappend" action="'.$p_url.'&add=1" method="post">';
 	echo '<p class="top-add">'.$core->formNonce().'<input class="button add" type="submit" name="appendaction" value="'.__('Add an item').'" /></p>';
Index: plugins/tags/_admin.php
===================================================================
--- plugins/tags/_admin.php	(revision 1280)
+++ plugins/tags/_admin.php	(revision 1454)
@@ -18,5 +18,5 @@
 require dirname(__FILE__).'/_widgets.php';
 
-$core->addBehavior('adminPostFormSidebar',array('tagsBehaviors','tagsField'));
+$core->addBehavior('adminPostFormItems',array('tagsBehaviors','tagsField'));
 
 $core->addBehavior('adminAfterPostCreate',array('tagsBehaviors','setTags'));
@@ -71,5 +71,5 @@
 	}
 	
-	public static function tagsField($post)
+	public static function tagsField($main,$sidebar,$post)
 	{
 		$meta =& $GLOBALS['core']->meta;
@@ -80,8 +80,7 @@
 			$value = ($post) ? $meta->getMetaStr($post->post_meta,'tag') : '';
 		}
-		
-		echo
-		'<h3><label for="post_tags">'.__('Tags:').'</label></h3>'.
-		'<div class="p" id="tags-edit">'.form::textarea('post_tags',20,3,$value,'maximal').'</div>';
+		$sidebar['metas-box']['items']['post_tags']=
+		'<h5><label class="s-tags" for="post_tags">'.__('Tags').'</label></h5>'.
+		'<div class="p s-tags" id="tags-edit">'.form::textarea('post_tags',20,3,$value,'maximal').'</div>';
 	}
 	
@@ -314,7 +313,7 @@
 		echo
 		'<fieldset><legend>'.__('Tags').'</legend>'.
-		'<p><label for="user_tag_list_format">'.__('Tags list format:').' '.
+		'<p><label for="user_tag_list_format">'.__('Tags list format:').'</label> '.
 		form::combo('user_tag_list_format',$combo,$value).
-		'</label></p></fieldset>';
+		'</p></fieldset>';
 	}
 	
Index: plugins/tags/_define.php
===================================================================
--- plugins/tags/_define.php	(revision 1179)
+++ plugins/tags/_define.php	(revision 1392)
@@ -18,5 +18,6 @@
 	/* Version */			'1.2',
 	array(
-		'permissions' =>	'usage,contentadmin'
+		'permissions' =>	'usage,contentadmin',
+		'priority' =>		998
 	)
 );
Index: plugins/tags/js/post.js
===================================================================
--- plugins/tags/js/post.js	(revision 1112)
+++ plugins/tags/js/post.js	(revision 1392)
@@ -58,4 +58,9 @@
 		});
 	});
+			
+	$('h5 .s-tags').toggleWithLegend($('.s-tags').not('label'),{
+			cookie: 'post_tags'
+	});
+
 });
 
Index: plugins/tags/tag_posts.php
===================================================================
--- plugins/tags/tag_posts.php	(revision 1312)
+++ plugins/tags/tag_posts.php	(revision 1358)
@@ -109,6 +109,12 @@
 <body>
 
-<h2><?php echo html::escapeHTML($core->blog->name); ?> &rsaquo;
-<span class="page-title"><?php echo __('Tag').' &ldquo;'.html::escapeHTML($tag).'&rdquo;'; ?></span></h2>
+<?php
+echo dcPage::breadcrumb(
+	array(
+		html::escapeHTML($core->blog->name) => '',
+		__('Tags') => $p_url.'&amp;m=tags',
+		'<span class="page-title">'.__('Tag').' &ldquo;'.html::escapeHTML($tag).'&rdquo;'.'</span>' => ''
+	));
+?>
 
 <?php
Index: plugins/tags/tags.php
===================================================================
--- plugins/tags/tags.php	(revision 1179)
+++ plugins/tags/tags.php	(revision 1358)
@@ -20,6 +20,11 @@
 
 <body>
-<h2><?php echo html::escapeHTML($core->blog->name); ?> &rsaquo;
-<span class="page-title"><?php echo __('Tags'); ?></span></h2>
+<?php
+echo dcPage::breadcrumb(
+	array(
+		html::escapeHTML($core->blog->name) => '',
+		'<span class="page-title">'.__('Tags').'</span>' => ''
+	));
+?>
 
 <?php
Index: plugins/themeEditor/_admin.php
===================================================================
--- plugins/themeEditor/_admin.php	(revision 1179)
+++ plugins/themeEditor/_admin.php	(revision 1454)
@@ -26,5 +26,5 @@
 	{
 		if ($id != 'default' && $core->auth->isSuperAdmin()) {
-			return '<p><a href="plugin.php?p=themeEditor" class="button">'.__('Theme Editor').'</a></p>';
+			return '<p><a href="plugin.php?p=themeEditor" class="button">'.__('Edit theme files').'</a></p>';
 		}
 	}
@@ -54,8 +54,8 @@
 		
 		'<p><label for="colorsyntax" class="classic">'.
-		form::checkbox('colorsyntax',1,$core->auth->user_prefs->interface->colorsyntax).' '.
-		__('Syntax color').'</label></p>'.
-
+		form::checkbox('colorsyntax',1,$core->auth->user_prefs->interface->colorsyntax).'</label>'.
+		__('Syntax color').
 		'<br class="clear" />'. //Opera sucks
+		'</p>'.
 		'</fieldset>';
 	}
Index: plugins/themeEditor/index.php
===================================================================
--- plugins/themeEditor/index.php	(revision 1179)
+++ plugins/themeEditor/index.php	(revision 1382)
@@ -61,5 +61,5 @@
 <html>
 <head>
-  <title><?php echo __('Theme Editor'); ?></title>
+  <title><?php echo __('Edit theme files'); ?></title>
   <link rel="stylesheet" type="text/css" href="index.php?pf=themeEditor/style.css" />
   <script type="text/javascript">
@@ -86,6 +86,12 @@
 
 <body>
-<?php echo '<h2>'.html::escapeHTML($core->blog->name).
-' &rsaquo; <a href="blog_theme.php">'.__('Blog appearance').'</a> &rsaquo; <span class="page-title">'.__('Theme Editor').'</span></h2>'; ?>
+<?php
+echo dcPage::breadcrumb(
+	array(
+		html::escapeHTML($core->blog->name) => '',
+		__('Blog appearance') => 'blog_theme.php',
+		'<span class="page-title">'.__('Edit theme files').'</span>' => ''
+	));
+?>
 
 <p><strong><?php echo sprintf(__('Your current theme on this blog is "%s".'),html::escapeHTML($T['name'])); ?></strong></p>
Index: plugins/userPref/index.php
===================================================================
--- plugins/userPref/index.php	(revision 1312)
+++ plugins/userPref/index.php	(revision 1358)
@@ -81,5 +81,5 @@
 	
 	return
-	'<tr>'.
+	'<tr class="line">'.
 	'<td scope="raw"><label for="s_'.$id.'">'.sprintf($slabel,html::escapeHTML($id)).'</label></td>'.
 	'<td>'.$field.'</td>'.
@@ -93,8 +93,4 @@
   <title>user:preferences</title>
   <?php echo dcPage::jsPageTabs($part); ?>
-  <style type="text/css">
-	table.prefs { border: 1px solid #999; margin-bottom: 2em; }
-	table.prefs th { background: #f5f5f5; color: #444; padding-top: 0.3em; padding-bottom: 0.3em; }
-  </style>
 	<script type="text/javascript">
 	//<![CDATA[
@@ -115,4 +111,11 @@
 <body>
 <?php
+echo dcPage::breadcrumb(
+	array(
+		__('System') => '',
+		html::escapeHTML($core->auth->userID()) => '',
+		'<span class="page-title">'.__('user:preferences').'</span>' => ''
+	));
+
 if (!empty($_GET['upd'])) {
 	dcPage::message(__('Preferences successfully updated'));
@@ -123,10 +126,9 @@
 }
 ?>
-<h2><?php echo html::escapeHTML($core->auth->userID()); ?> &rsaquo; <span class="page-title">user:preferences</span></h2>
-
-<div id="local" class="multi-part" title="<?php echo __('user preferences'); ?>">
+
+<div id="local" class="multi-part" title="<?php echo __('User preferences'); ?>">
 
 <?php 
-$table_header = '<table class="prefs" id="%s"><caption>%s</caption>'.
+$table_header = '<table class="prefs" id="%s"><caption class="as_h3">%s</caption>'.
 '<thead>'.
 '<tr>'."\n".
@@ -183,5 +185,5 @@
 </div>
 
-<div id="global" class="multi-part" title="<?php echo __('global preferences'); ?>">
+<div id="global" class="multi-part" title="<?php echo __('Global preferences'); ?>">
 
 <?php
Index: plugins/widgets/class.widgets.php
===================================================================
--- plugins/widgets/class.widgets.php	(revision 1179)
+++ plugins/widgets/class.widgets.php	(revision 1454)
@@ -238,11 +238,11 @@
 				case 'text':
 					$res .=
-					'<p><label for="'.$wfid.'">'.$s['title'].' '.
+					'<p><label for="'.$wfid.'">'.$s['title'].'</label> '.
 					form::field(array($iname,$wfid),20,255,html::escapeHTML($s['value']),'maximal').
-					'</label></p>';
+					'</p>';
 					break;
 				case 'textarea':
 					$res .=
-					'<p><label for="'.$wfid.'">'.$s['title'].' '.
+					'<p><label for="'.$wfid.'">'.$s['title'].'</label> '.
 					form::textarea(array($iname,$wfid),30,5,html::escapeHTML($s['value']),'maximal').
 					'</label></p>';
@@ -257,7 +257,7 @@
 				case 'combo':
 					$res .=
-					'<p><label for="'.$wfid.'">'.$s['title'].' '.
+					'<p><label for="'.$wfid.'">'.$s['title'].'</label> '.
 					form::combo(array($iname,$wfid),$s['options'],$s['value']).
-					'</label></p>';
+					'</p>';
 					break;
 			}
Index: plugins/widgets/index.php
===================================================================
--- plugins/widgets/index.php	(revision 1179)
+++ plugins/widgets/index.php	(revision 1454)
@@ -188,5 +188,9 @@
 <body>
 <?php
-echo '<h2>'.html::escapeHTML($core->blog->name).' &rsaquo; <span class="page-title">'.__('Widgets').'</span></h2>';
+echo dcPage::breadcrumb(
+	array(
+		html::escapeHTML($core->blog->name) => '',
+		'<span class="page-title">'.__('Widgets').'</span>' => ''
+	));
 
 # All widgets
@@ -202,6 +206,6 @@
 	'<p class="widget-name">'.form::field(array('w[void][0][order]'),2,3,0,'hideControl').' '.
 	$w->name().($w->desc() != '' ? ' <span class="form-note">('.__($w->desc()).')</span>' : '').'</p>'.
-	'<p class="js-remove"><label class="classic">'.__('Append to:').' '.
-	form::combo(array('addw['.$w->id().']'),$append_combo).'</label></p>'.
+	'<p class="js-remove"><label class="classic">'.__('Append to:').'</label> '.
+	form::combo(array('addw['.$w->id().']'),$append_combo).'</p>'.
 	'<div class="widgetSettings">'.$w->formSettings('w[void][0]',$j).'</div>'.
 	'</div>';
@@ -248,5 +252,5 @@
 'drag it from the Available widgets list on the left to one of the sidebars on the right of this page. You can order '.
 'your widgets in a sidebar by dragging them up or down. You must update sidebars to apply your changes.').'</p>'.
-'<p>'.__('Once included in a sidebar, widgets have configuration options that you can reach by clicking on the + sign next '.
+'<p>'.__('Once included in a sidebar, widgets have configuration options that you can reach by clicking on the arrow next '.
 'to their name.').'</p>'.
 '<p>'.__('Reset sidebars to get back to default widgets installation.').'</p>'.
Index: themes/customCSS/_config.php
===================================================================
--- themes/customCSS/_config.php	(revision 1179)
+++ themes/customCSS/_config.php	(revision 1454)
@@ -34,5 +34,5 @@
 
 echo
-'<p class="area"><label>'.__('Style sheet:').' '.
-form::textarea('css',60,20,html::escapeHTML($css_content)).'</label></p>';
+'<p class="area"><label>'.__('Style sheet:').'</label> '.
+form::textarea('css',60,20,html::escapeHTML($css_content)).'</p>';
 ?>
