Index: .hgignore
===================================================================
--- .hgignore	(revision 358)
+++ .hgignore	(revision 503)
@@ -1,4 +1,7 @@
 cache
-public
 inc/config.php
 \.htaccess
+public/filters
+themes/ductile/_work
+themes/ductile-work
+themes/ductile/default-templates
Index: admin/blog_theme.php
===================================================================
--- admin/blog_theme.php	(revision 500)
+++ admin/blog_theme.php	(revision 503)
@@ -156,9 +156,5 @@
 	
 	$radio_id = 'theme_'.html::escapeHTML($id);
-	if (preg_match('#^http(s)?://#',$core->blog->settings->system->themes_url)) {
-		$theme_url = http::concatURL($core->blog->settings->system->themes_url,'/'.$id);
-	} else {
-		$theme_url = http::concatURL($core->blog->url,$core->blog->settings->system->themes_url.'/'.$id);
-	}
+	$theme_url = http::concatURL($core->blog->url,$core->blog->settings->system->themes_url.'/'.$id);
 	$has_conf = file_exists(path::real($core->blog->themes_path.'/'.$id).'/_config.php');
 	$has_css = file_exists(path::real($core->blog->themes_path.'/'.$id).'/style.css');
@@ -216,5 +212,5 @@
 {
 	echo
-	'<h2>'.html::escapeHTML($core->blog->name).' &rsaquo; <span class="page-title">'.__('Blog appearance').'</span></h2>';
+	'<h2>'.html::escapeHTML($core->blog->name).' &rsaquo; '.__('Blog appearance').'</h2>';
 	
 	if (!empty($_GET['upd'])) {
@@ -333,23 +329,22 @@
 	echo
 	'<h2>'.html::escapeHTML($core->blog->name).
-	' &rsaquo; <a href="blog_theme.php">'.__('Blog appearance').'</a> &rsaquo; <span class="page-title">'.__('Theme configuration').'<span class="page-title"></h2>'.
+	' &rsaquo; <a href="blog_theme.php">'.__('Blog appearance').'</a> &rsaquo; '.__('Theme configuration').'</h2>'.
 	'<p><a class="back" href="blog_theme.php">'.__('back').'</a></p>';
 	
 	try
 	{
-		# Let theme configuration set their own form(s) if required
-		$standalone_config = (boolean) $core->themes->moduleInfo($core->blog->settings->system->theme,'standalone_config');
-
-		if (!$standalone_config)
+		# Let theme configuration set their own form(s)
+		$managed = (boolean) $core->callBehavior('adminThemeConfigManaged');
+		
+		if (!$managed)
 			echo '<form id="theme_config" action="blog_theme.php?conf=1" method="post" enctype="multipart/form-data">';
 
 		include $theme_conf_file;
 
-		if (!$standalone_config)
+		if (!$managed)
 			echo
 			'<p class="clear"><input type="submit" value="'.__('Save').'" />'.
 			$core->formNonce().'</p>'.
 			'</form>';
-
 	}
 	catch (Exception $e)
Index: dmin/help.php
===================================================================
--- admin/help.php	(revision 514)
+++ 	(revision )
@@ -1,85 +1,0 @@
-<?php
-# -- BEGIN LICENSE BLOCK ---------------------------------------
-#
-# This file is part of Dotclear 2.
-#
-# Copyright (c) 2003-2011 Olivier Meunier & Association Dotclear
-# Licensed under the GPL version 2.0 license.
-# See LICENSE file or
-# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
-#
-# -- END LICENSE BLOCK -----------------------------------------
-
-require dirname(__FILE__).'/../inc/admin/prepend.php';
-
-dcPage::check('usage');
-
-function helpPage()
-{
-	$args = func_get_args();
-	if (empty($args)) {
-		return;
-	};
-	
-	global $__resources;
-	if (empty($__resources['help'])) {
-		return;
-	}
-	
-	$content = '';
-	$title = '';
-	foreach ($args as $v)
-	{
-		if (is_object($v) && isset($v->content)) {
-			$content .= $v->content;
-			continue;
-		}
-		
-		if (!isset($__resources['help'][$v])) {
-			continue;
-		}
-		$f = $__resources['help'][$v];
-		if (!file_exists($f) || !is_readable($f)) {
-			continue;
-		}
-		
-		$fc = file_get_contents($f);
-		if (preg_match('|<body[^>]*?>(.*?)</body>|ms',$fc,$matches)) {
-			$content .= $matches[1];
-			if (preg_match('|<title[^>]*?>(.*?)</title>|ms',$fc,$matches)) {
-				$title = $matches[1];
-			}
-		} else {
-			$content .= $fc;
-		}
-	}
-	
-	if (trim($content) == '') {
-		return '';
-	}
-	
-	if ($title != '') {
-		$title = '<a href="help.php">'.__('Global help').'</a> &rsaquo; <span class="page-title">'.$title.'</span>';
-	} else {
-		$title = '<span class="page-title">'.__('Global help').'</span>';
-	}
-	return '<h2>'.$title.'</h2>'."\n".'<div id="mainhelp">'.$content.'</div>';
-}
-
-$help_page = !empty($_GET['page']) ? html::escapeHTML($_GET['page']) : 'core_main';
-$content = helpPage($help_page);
-
-/* DISPLAY
--------------------------------------------------------- */
-dcPage::open(__('Global help'),
-	# --BEHAVIOR-- adminPostHeaders
-	$core->callBehavior('adminPostHeaders')
-);
-
-if (($content == '') || ($help_page == 'core_main')) {
-	$content = helpPage('core_main');
-}
-echo $content;
-
-dcPage::close();
-?>
Index: admin/index.php
===================================================================
--- admin/index.php	(revision 510)
+++ admin/index.php	(revision 500)
@@ -191,10 +191,12 @@
 );
 
-echo '<h2>'.html::escapeHTML($core->blog->name).' &rsaquo; <span class="page-title">'.__('Dashboard').'</span></h2>';
+echo '<h2>'.html::escapeHTML($core->blog->name).' &rsaquo; <span class="page-title">'.__('Dashboard').'</span>';
 
 if ($core->auth->getInfo('user_default_blog') != $core->blog->id && $core->auth->blog_count > 1) {
 	echo
-	'<p><a href="index.php?default_blog=1" class="button">'.__('Make this blog my default blog').'</a></p>';
-}
+	' - <a href="index.php?default_blog=1" class="button">'.__('Make this blog my default blog').'</a>';
+}
+
+echo '</h2>';
 
 if ($core->blog->status == 0) {
Index: admin/media.php
===================================================================
--- admin/media.php	(revision 505)
+++ admin/media.php	(revision 500)
@@ -278,15 +278,6 @@
 }
 
-echo '<h2>'.html::escapeHTML($core->blog->name).' &rsaquo; ';
-if (!isset($core->media)) {
-	echo '<span class="page-title">'.__('Media manager').'</span></h2>';
-} else {
-	$breadcrumb = $core->media->breadCrumb(html::escapeURL($page_url).'&amp;d=%s','<span class="page-title">%s</span>');
-	if ($breadcrumb == '') {
-		echo '<span class="page-title">'.__('Media manager').'</span></h2>';
-	} else {
-		echo '<a href="'.html::escapeURL($page_url.'&d=').'">'.__('Media manager').'</a>'.' / '.$breadcrumb.'</h2>';
-	}
-}
+echo '<h2>'.html::escapeHTML($core->blog->name).' &rsaquo; <a href="'.html::escapeURL($page_url.'&d=').'">'.__('Media manager').'</a>'.
+' / '.(isset($core->media) ? $core->media->breadCrumb(html::escapeURL($page_url).'&amp;d=%s') : '').'</h2>';
 
 if (!$dir) {
Index: admin/style/default.css
===================================================================
--- admin/style/default.css	(revision 512)
+++ admin/style/default.css	(revision 503)
@@ -52,9 +52,7 @@
 	font-size: 1.2em;
 }
-
 p, div.p {
 	margin: 0 0 1em 0;
 }
-
 hr {
 	height: 1px;
@@ -63,5 +61,4 @@
 	border-style: solid;
 }
-
 pre, code {
 	font: 100% "Andale Mono","Courier New",monospace;
@@ -96,5 +93,5 @@
 	background:transparent;
 	}
-#prelude li a {
+#prelude a {
 	color:#fff;
 	}
@@ -142,5 +139,5 @@
 #info-box2 {
 	margin: .1em 0 0 0;
-	padding: .5em 1.5em 4px 0;
+	padding: .5em 1em 4px 0;
 	color: #fff;
 	float: right;
@@ -180,35 +177,5 @@
 	color: #575859;
 }
-#helplinks {
-	font-size: .95em;
-	text-align: center;
-	margin-right: 2em;
-	padding: .1em 1.66em;
-	background: #e5e5e5;
-	position: absolute;
-	top: 3.2em;
-	right: 0;
-	-webkit-border-bottom-left-radius: .5em;
-	-webkit-border-bottom-right-radius: .5em;
-	-moz-border-radius-bottomleft: .5em;
-	-moz-border-radius-bottomright: .5em;
-	border-bottom-left-radius: .5em;
-	border-bottom-right-radius: .5em;
-	-moz-box-shadow: 1px 1px 1px #cccccc;
-	-webkit-box-shadow: 1px 1px 1px #cccccc;
-	-o-box-shadow: 1px 1px 1px #cccccc;
-	box-shadow: 1px 1px 1px #cccccc;
-	border: 1px solid #ddd;
-}
-#helplinks a {
-	color: #000;
-}
-#helplinks span {
-	padding: 0 .33em;
-}
-#helplinks a.active {
-	font-weight: bold;
-	border-bottom-color: #e5e5e5;
-}
+/* prelude */
 #wrapper {
 	width: 100%;
@@ -312,5 +279,4 @@
 	margin-bottom: 1em;
 }
-
 #main-menu h3 {
 	margin: 0 0 0.5em;
@@ -829,6 +795,5 @@
 }
 #help-button {
-	display: none;
-/*	position: absolute;
+	position: absolute;
 	top: 6.2em;
 	right: 0px;
@@ -844,10 +809,5 @@
 	-webkit-border-top-left-radius: 1em;
 	-webkit-border-bottom-left-radius: 1em;
-	color: #444;*/
-}
-.helplink {
-	margin-left: 0.5em;
-	float: left;
-	display: block;
+	color: #444;
 }
 .help-box {
@@ -1219,5 +1179,5 @@
 p.field {
 	position: relative;
-
+	
 }
 p.field label {
Index: admin/trackbacks.php
===================================================================
--- admin/trackbacks.php	(revision 510)
+++ admin/trackbacks.php	(revision 270)
@@ -95,5 +95,5 @@
 }
 
-echo '<h2>'.html::escapeHTML($core->blog->name).' &rsaquo; <span class="page-title">'.$page_title.'</span></h2>';
+echo '<h2>'.html::escapeHTML($core->blog->name).' &rsaquo; '.$page_title.'</h2>';
 
 echo '<p><a class="back" href="'.$core->getPostAdminURL($post->post_type,$id).'">'.
Index: inc/admin/lib.dc.page.php
===================================================================
--- inc/admin/lib.dc.page.php	(revision 512)
+++ inc/admin/lib.dc.page.php	(revision 489)
@@ -141,8 +141,4 @@
 		'</div>'.
 		'</div>'.
-		'<p id="helplinks">'.
-		'<a href="#">Aide de cette page</a><span> | </span>'.
-		'<a'.(preg_match('/help.php(\?.*)?$/',$_SERVER['REQUEST_URI']) ? ' class="active"' : '').' href="help.php">'.__('Global help').'</a>'.
-		'</p>'.
 		'</div>';
 		
@@ -186,5 +182,4 @@
 		'</div>'."\n".		// End of #main-menu
 		'<div id="footer"><p>'.
-		'<a class="helplink'.(preg_match('/help.php(\?.*)?$/',$_SERVER['REQUEST_URI']) ? ' active' : '').'" href="help.php">'.__('Global help').'</a>'.
 		sprintf(__('Thank you for using %s.'),'<a href="http://dotclear.org/">Dotclear '.DC_VERSION.'</a>').
 		' <span class="credit"> (Icons by <a href="http://dryicons.com/">Dryicons</a>)</span>'.
@@ -353,9 +348,4 @@
 		'<div id="help"><hr /><div class="help-content clear"><h2>'.__('Help').'</h2>'.
 		$content.
-		'</div>'.
-		'<div id="helplink"><hr />'.
-		'<p>'.
-		sprintf(__('See also %s'),sprintf('<a href="help.php">%s</a>',__('the global help'))).
-		'</p>'.
 		'</div></div>';
 	}
Index: inc/admin/prepend.php
===================================================================
--- inc/admin/prepend.php	(revision 494)
+++ inc/admin/prepend.php	(revision 489)
@@ -239,8 +239,4 @@
 		'images/menu/langs.png','images/menu/langs-b.png',
 		null,null,null));
-
-	$_fav['help'] = new ArrayObject(array('help','Global help','help.php',
-		'images/menu/help.png','images/menu/help-b.png',
-		'*',null,null));
 	
 	# Menus creation
Index: inc/core/class.dc.media.php
===================================================================
--- inc/core/class.dc.media.php	(revision 505)
+++ inc/core/class.dc.media.php	(revision 407)
@@ -175,21 +175,14 @@
 	
 	@param	href		<b>string</b>		URL pattern
-	@param	last		<b>string</b>		Last item pattern
 	@return	<b>string</b> HTML code
 	*/
-	public function breadCrumb($href,$last='')
+	public function breadCrumb($href)
 	{
 		$res = '';
 		if ($this->relpwd && $this->relpwd != '.') {
 			$pwd = '';
-			$arr = explode('/',$this->relpwd);
-			$count = count($arr);
-			foreach ($arr as $v) {
-				if (($last != '') && (0 === --$count)) {
-					$res .= sprintf($last,$v);
-				} else {
-					$pwd .= rawurlencode($v).'/';
-					$res .= '<a href="'.sprintf($href,$pwd).'">'.$v.'</a> / ';
-				}
+			foreach (explode('/',$this->relpwd) as $v) {
+				$pwd .= rawurlencode($v).'/';
+				$res .= '<a href="'.sprintf($href,$pwd).'">'.$v.'</a> / ';
 			}
 		}
Index: inc/public/prepend.php
===================================================================
--- inc/public/prepend.php	(revision 270)
+++ inc/public/prepend.php	(revision 420)
@@ -113,4 +113,10 @@
 $core->themes->loadNsFile($__theme,'public');
 
+# Loading translations for selected theme
+if ($__parent_theme) {
+	$core->themes->loadModuleL10N($__parent_theme,$_lang,'main');
+}
+$core->themes->loadModuleL10N($__theme,$_lang,'main');
+
 # --BEHAVIOR-- publicPrepend
 $core->callBehavior('publicPrepend',$core);
Index: ocales/en/help/main.html
===================================================================
--- locales/en/help/main.html	(revision 491)
+++ 	(revision )
@@ -1,29 +1,0 @@
-<html>
-<head>
-	<title></title> <!-- Leave the title empty -->
-</head>
-
-<body>
-<h3>Welcome</h3>
-<ul>
-	<li><a href="help.php?page=core_user_pref">User preferences</a></li>
-</ul>
-<h3>Blog</h3>
-<ul>
-	<li><a href="help.php?page=core_post">Post edition</a></li>
-	<li><a href="help.php?page=core_posts">Posts management</a></li>
-	<li><a href="help.php?page=core_wiki">Wiki syntax</a></li>
-	<li><a href="help.php?page=core_comments">Comments and trackbacks management</a></li>
-	<li><a href="help.php?page=core_categories">Categories management</a></li>
-	<li><a href="help.php?page=core_media">Media manager</a></li>
-	<li><a href="help.php?page=core_blog_pref">Blog parameters</a></li>
-	<li><a href="help.php?page=themeEditor">Theme editor</a></li>
-	<li><a href="help.php?page=blowupConfig">Default theme configuration (Blowup)</a></li>
-</ul>
-<h3>System</h3>
-<ul>
-	<li><a href="help.php?page=core_user">User creation and management</a></li>
-</ul>
-
-</body>
-</html>
Index: locales/en/resources.php
===================================================================
--- locales/en/resources.php	(revision 491)
+++ locales/en/resources.php	(revision 270)
@@ -23,5 +23,4 @@
 
 $__resources['help'] = array(
-	'core_main' => dirname(__FILE__).'/help/main.html',
 	'core_blog_pref' => dirname(__FILE__).'/help/blog_pref.html',
 	'core_categories' => dirname(__FILE__).'/help/categories.html',
Index: ocales/fr/help/core_main.html
===================================================================
--- locales/fr/help/core_main.html	(revision 491)
+++ 	(revision )
@@ -1,29 +1,0 @@
-<html>
-<head>
-  <title></title> <!-- Laissez le titre vide -->
-</head>
-
-<body>
-<h3>Bienvenue</h3>
-<ul>
-	<li><a href="help.php?page=core_user_pref">Préférences utilisateur</a></li>
-</ul>
-<h3>Blog</h3>
-<ul>
-	<li><a href="help.php?page=core_post">Édition de billet</a></li>
-	<li><a href="help.php?page=core_posts">Gestion des billets</a></li>
-	<li><a href="help.php?page=core_wiki">Syntaxe wiki</a></li>
-	<li><a href="help.php?page=core_comments">Gestion des commentaires et rétroliens</a></li>
-	<li><a href="help.php?page=core_categories">Gestion des catégories</a></li>
-	<li><a href="help.php?page=core_media">Gestionnaire de médias</a></li>
-	<li><a href="help.php?page=core_blog_pref">Paramètres du blog</a></li>
-	<li><a href="help.php?page=themeEditor">Éditeur de thème</a></li>
-	<li><a href="help.php?page=blowupConfig">Configuration du thème par défaut (Blowup)</a></li>
-</ul>
-<h3>Système</h3>
-<ul>
-	<li><a href="help.php?page=core_user">Création et gestion d'un utilisateur</a></li>
-</ul>
-
-</body>
-</html>
Index: locales/fr/main.po
===================================================================
--- locales/fr/main.po	(revision 494)
+++ locales/fr/main.po	(revision 490)
@@ -795,13 +795,4 @@
 msgstr "Nouveau billet"
 
-msgid "Global help"
-msgstr "Aide générale"
-
-msgid "See also %s"
-msgstr "Voir également %s"
-
-msgid "the global help"
-msgstr "l'aide générale"
-
 msgid "My dashboard"
 msgstr "Mon tableau de bord"
Index: plugins/antispam/index.php
===================================================================
--- plugins/antispam/index.php	(revision 505)
+++ plugins/antispam/index.php	(revision 500)
@@ -110,9 +110,10 @@
 <body>
 <?php
+echo '<h2>'.html::escapeHTML($core->blog->name).' &rsaquo; <span class="page-title">'.$page_name.'</span></h2>';
 
 if ($filter_gui !== false)
 {
-	echo '<h2>'.html::escapeHTML($core->blog->name).' &rsaquo; <a href="'.$p_url.'">'.$page_name.'</a>'.
-		' &rsaquo; <span class="page-title">'.sprintf(__('%s configuration'),$filter->name).'</span></h2>';
+	echo '<p><a href="'.$p_url.'">'.__('Return to filters').'</a></p>';
+	printf('<h3>'.__('%s configuration').'</h3>',$filter->name);
 
 	echo $filter_gui;
@@ -120,6 +121,4 @@
 else
 {
-	echo '<h2>'.html::escapeHTML($core->blog->name).' &rsaquo; <span class="page-title">'.$page_name.'</span></h2>';
-
 	# Information
 	$spam_count = dcAntispam::countSpam($core);
Index: plugins/blowupConfig/_public.php
===================================================================
--- plugins/blowupConfig/_public.php	(revision 270)
+++ plugins/blowupConfig/_public.php	(revision 295)
@@ -25,20 +25,20 @@
 		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
 		---------------------------------------------- */
@@ -48,16 +48,16 @@
 			$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'])
 		{
@@ -65,10 +65,10 @@
 			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'])
 			{
@@ -92,13 +92,13 @@
 		}
 		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']);
@@ -108,21 +108,21 @@
 		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']);
@@ -132,17 +132,17 @@
 		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']);
@@ -150,5 +150,5 @@
 		self::prop($css,'#footer p','font-family',blowupConfig::fontDef($s['footer_f']));
 		self::prop($css,'#footer p a','color',$s['footer_l_c']);
-		
+
 		/* Images
 		------------------------------------------------------ */
@@ -164,5 +164,5 @@
 		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) {
@@ -173,7 +173,10 @@
 			$res .= "}\n";
 		}
+
+		$res .= $s['extra_css'];
+
 		return $res;
 	}
-	
+
 	protected static function prop(&$css,$selector,$prop,$value)
 	{
@@ -182,5 +185,5 @@
 		}
 	}
-	
+
 	protected static function backgroundImg(&$css,$selector,$value,$image)
 	{
Index: plugins/blowupConfig/index.php
===================================================================
--- plugins/blowupConfig/index.php	(revision 500)
+++ plugins/blowupConfig/index.php	(revision 503)
@@ -24,14 +24,14 @@
 	'body_bg_c' => null,
 	'body_bg_g' => 'light',
-	
+
 	'body_txt_f' => null,
 	'body_txt_s' => null,
 	'body_txt_c' => null,
 	'body_line_height' => null,
-	
+
 	'top_image' => 'default',
 	'top_height' => null,
 	'uploaded' => null,
-	
+
 	'blog_title_hide' => null,
 	'blog_title_f' => null,
@@ -40,9 +40,9 @@
 	'blog_title_a' => null,
 	'blog_title_p' => null,
-	
+
 	'body_link_c' => null,
 	'body_link_f_c' => null,
 	'body_link_v_c' => null,
-	
+
 	'sidebar_position' => null,
 	'sidebar_text_f' => null,
@@ -59,9 +59,9 @@
 	'sidebar_link_f_c' => null,
 	'sidebar_link_v_c' => null,
-	
+
 	'date_title_f' => null,
 	'date_title_s' => null,
 	'date_title_c' => null,
-	
+
 	'post_title_f' => null,
 	'post_title_s' => null,
@@ -71,5 +71,5 @@
 	'post_commentmy_bg_c' => null,
 	'post_commentmy_c' => null,
-	
+
 	'prelude_c' => null,
 	'footer_f' => null,
@@ -78,4 +78,6 @@
 	'footer_l_c' => null,
 	'footer_bg_c' => null,
+
+	'extra_css' => null
 );
 
@@ -108,5 +110,5 @@
 		$blowup_user['body_txt_c'] = blowupConfig::adjustColor($_POST['body_txt_c']);
 		$blowup_user['body_line_height'] = blowupConfig::adjustFontSize($_POST['body_line_height']);
-		
+
 		$blowup_user['blog_title_hide'] = (integer) !empty($_POST['blog_title_hide']);
 		$update_blog_title = !$blowup_user['blog_title_hide'] && (
@@ -115,5 +117,5 @@
 			!empty($_POST['blog_title_p'])
 		);
-		
+
 		if ($update_blog_title)
 		{
@@ -124,9 +126,9 @@
 			$blowup_user['blog_title_p'] = blowupConfig::adjustPosition($_POST['blog_title_p']);
 		}
-		
+
 		$blowup_user['body_link_c'] = blowupConfig::adjustColor($_POST['body_link_c']);
 		$blowup_user['body_link_f_c'] = blowupConfig::adjustColor($_POST['body_link_f_c']);
 		$blowup_user['body_link_v_c'] = blowupConfig::adjustColor($_POST['body_link_v_c']);
-		
+
 		$blowup_user['sidebar_text_f'] = $_POST['sidebar_text_f'];
 		$blowup_user['sidebar_text_s'] = blowupConfig::adjustFontSize($_POST['sidebar_text_s']);
@@ -142,11 +144,11 @@
 		$blowup_user['sidebar_link_f_c'] = blowupConfig::adjustColor($_POST['sidebar_link_f_c']);
 		$blowup_user['sidebar_link_v_c'] = blowupConfig::adjustColor($_POST['sidebar_link_v_c']);
-		
+
 		$blowup_user['sidebar_position'] = ($_POST['sidebar_position'] == 'left') ? 'left' : null;
-		
+
 		$blowup_user['date_title_f'] = $_POST['date_title_f'];
 		$blowup_user['date_title_s'] = blowupConfig::adjustFontSize($_POST['date_title_s']);
 		$blowup_user['date_title_c'] = blowupConfig::adjustColor($_POST['date_title_c']);
-		
+
 		$blowup_user['post_title_f'] = $_POST['post_title_f'];
 		$blowup_user['post_title_s'] = blowupConfig::adjustFontSize($_POST['post_title_s']);
@@ -154,6 +156,6 @@
 		$blowup_user['post_comment_c'] = blowupConfig::adjustColor($_POST['post_comment_c']);
 		$blowup_user['post_commentmy_c'] = blowupConfig::adjustColor($_POST['post_commentmy_c']);
-		
-		
+
+
 		$blowup_user['footer_f'] = $_POST['footer_f'];
 		$blowup_user['footer_s'] = blowupConfig::adjustFontSize($_POST['footer_s']);
@@ -161,5 +163,8 @@
 		$blowup_user['footer_l_c'] = blowupConfig::adjustColor($_POST['footer_l_c']);
 		$blowup_user['footer_bg_c'] = blowupConfig::adjustColor($_POST['footer_bg_c']);
-		
+
+
+		$blowup_user['extra_css'] = blowupConfig::cleanCSS($_POST['extra_css']);
+
 		if ($can_write_images)
 		{
@@ -168,5 +173,5 @@
 				$uploaded = blowupConfig::imagesPath().'/'.$blowup_user['uploaded'];
 			}
-			
+
 			if (!empty($_FILES['upfile']) && !empty($_FILES['upfile']['name'])) {
 				files::uploadStatus($_FILES['upfile']);
@@ -174,7 +179,7 @@
 				$blowup_user['uploaded'] = basename($uploaded);
 			}
-			
+
 			$blowup_user['top_image'] = in_array($_POST['top_image'],$top_images) ? $_POST['top_image'] : 'default';
-			
+
 			$blowup_user['body_bg_c'] = blowupConfig::adjustColor($_POST['body_bg_c']);
 			$blowup_user['body_bg_g'] = in_array($_POST['body_bg_g'],$gradient_types) ? $_POST['body_bg_g'] : '';
@@ -184,9 +189,9 @@
 			blowupConfig::createImages($blowup_user,$uploaded);
 		}
-		
+
 		$core->blog->settings->addNamespace('themes');
 		$core->blog->settings->themes->put('blowup_style',serialize($blowup_user));
 		$core->blog->triggerBlog();
-		
+
 		http::redirect($p_url.'&upd=1');
 	}
@@ -233,5 +238,5 @@
 
 echo '<form id="theme_config" action="'.$p_url.'" method="post" enctype="multipart/form-data">';
-		
+
 echo '<fieldset><legend>'.__('General').'</legend>';
 
@@ -240,5 +245,5 @@
 	'<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>';
@@ -304,5 +309,5 @@
 		$preview_image = 'index.php?pf=blowupConfig/alpha-img/page-t/'.$blowup_user['top_image'].'.png';
 	}
-	
+
 	echo
 	'<fieldset><legend>'.__('Top image').'</legend>'.
@@ -310,10 +315,10 @@
 	form::combo('top_image',$top_images,($blowup_user['top_image'] ? $blowup_user['top_image'] : 'default')).'</label></p>'.
 	'<p>'.__('Choose "Custom..." to upload your own image.').'</p>'.
-	
+
 	'<p id="uploader"><label for="upfile">'.__('Add your image:').
 	' ('.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>'.
-	
+
 	'<h3>'.__('Preview').'</h3>'.
 	'<div class="grid" style="width:800px;border:1px solid #ccc;">'.
@@ -425,4 +430,11 @@
 '</fieldset>';
 
+echo
+'<fieldset><legend>'.__('Additional CSS').'</legend>'.
+'<p>'.form::textarea('extra_css',72,5,html::escapeHTML($blowup_user['extra_css']),'maximal','',false,'title="'.__('Additional CSS').'"').'</p>'.
+'</fieldset>';
+
+
+
 // Import / Export configuration
 $tmp_array = array();
Index: plugins/blowupConfig/lib/class.blowup.config.php
===================================================================
--- plugins/blowupConfig/lib/class.blowup.config.php	(revision 270)
+++ plugins/blowupConfig/lib/class.blowup.config.php	(revision 295)
@@ -22,5 +22,5 @@
 			'ss5' => 'Impact, Charcoal, sans-serif'
 		),
-		
+
 		'serif' => array(
 			's1' => 'Times, "Times New Roman", serif',
@@ -28,5 +28,5 @@
 			's3' => 'Baskerville, "Palatino Linotype", serif'
 		),
-		
+
 		'monospace' => array(
 			'm1' => '"Andale Mono", "Courier New", monospace',
@@ -34,8 +34,8 @@
 		)
 	);
-	
+
 	protected static $fonts_combo = array();
 	protected static $fonts_list = array();
-	
+
 	public static $top_images = array(
 		'default' => 'Default',
@@ -55,5 +55,5 @@
 		'typo' => 'Typo',
 	);
-	
+
 	public static function fontsList()
 	{
@@ -70,8 +70,8 @@
 			}
 		}
-		
+
 		return self::$fonts_combo;
 	}
-	
+
 	public static function fontDef($c)
 	{
@@ -85,8 +85,8 @@
 			}
 		}
-		
+
 		return isset(self::$fonts_list[$c]) ? self::$fonts_list[$c] : null;
 	}
-	
+
 	public static function adjustFontSize($s)
 	{
@@ -97,8 +97,8 @@
 			return $m[1].$m[2];
 		}
-		
+
 		return null;
 	}
-	
+
 	public static function adjustPosition($p)
 	{
@@ -106,10 +106,10 @@
 			return null;
 		}
-		
+
 		$p = explode(':',$p);
-		
+
 		return $p[0].(count($p) == 1 ? ':0' : ':'.$p[1]);
 	}
-	
+
 	public static function adjustColor($c)
 	{
@@ -117,22 +117,28 @@
 			return '';
 		}
-		
+
 		$c = strtoupper($c);
-		
+
 		if (preg_match('/^[A-F0-9]{3,6}$/',$c)) {
 			$c = '#'.$c;
 		}
-		
+
 		if (preg_match('/^#[A-F0-9]{6}$/',$c)) {
 			return $c;
 		}
-		
+
 		if (preg_match('/^#[A-F0-9]{3,}$/',$c)) {
 			return '#'.substr($c,1,1).substr($c,1,1).substr($c,2,1).substr($c,2,1).substr($c,3,1).substr($c,3,1);
 		}
-		
+
 		return '';
 	}
-	
+
+	public static function cleanCSS($css)
+	{
+		// TODO ?
+		return $css;
+	}
+
 	public static function imagesPath()
 	{
@@ -140,5 +146,5 @@
 		return path::real($core->blog->public_path).'/blowup-images';
 	}
-	
+
 	public static function imagesURL()
 	{
@@ -146,12 +152,12 @@
 		return $core->blog->settings->system->public_url.'/blowup-images';
 	}
-	
+
 	public static function canWriteImages($create=false)
 	{
 		global $core;
-		
+
 		$public = path::real($core->blog->public_path);
 		$imgs = self::imagesPath();
-		
+
 		if (!function_exists('imagecreatetruecolor') || !function_exists('imagepng') || !function_exists('imagecreatefrompng')) {
 			$core->error->add(__('At least one of the following functions is not available: '.
@@ -159,10 +165,10 @@
 			return false;
 		}
-		
+
 		if (!is_dir($public)) {
 			$core->error->add(__('The \'public\' directory does not exist.'));
 			return false;
 		}
-		
+
 		if (!is_dir($imgs)) {
 			if (!is_writable($public)) {
@@ -175,13 +181,13 @@
 			return true;
 		}
-		
+
 		if (!is_writable($imgs)) {
 			$core->error->add(sprintf(__('The \'%s\' directory cannot be modified.'),'public/blowup-images'));
 			return false;
 		}
-		
+
 		return true;
 	}
-	
+
 	public static function uploadImage($f)
 	{
@@ -189,26 +195,26 @@
 			throw new Exception(__('Unable to create images.'));
 		}
-		
+
 		$name = $f['name'];
 		$type = files::getMimeType($name);
-		
+
 		if ($type != 'image/jpeg' && $type != 'image/png') {
 			throw new Exception(__('Invalid file type.'));
 		}
-		
+
 		$dest = self::imagesPath().'/uploaded'.($type == 'image/png' ? '.png' : '.jpg');
-		
+
 		if (@move_uploaded_file($f['tmp_name'],$dest) === false) {
 			throw new Exception(__('An error occurred while writing the file.'));
 		}
-		
+
 		$s = getimagesize($dest);
 		if ($s[0] != 800) {
 			throw new Exception(__('Uploaded image is not 800 pixels wide.'));
 		}
-		
+
 		return $dest;
 	}
-	
+
 	public static function createImages(&$config,$uploaded)
 	{
@@ -219,7 +225,7 @@
 		$comment_color_my = $config['post_commentmy_bg_c'];
 		$top_image = $config['top_image'];
-		
+
 		$config['top_height'] = null;
-		
+
 		if ($top_image != 'custom' && !isset(self::$top_images[$top_image])) {
 			$top_image = 'default';
@@ -228,9 +234,9 @@
 			$uploaded = null;
 		}
-		
+
 		if (!self::canWriteImages(true)) {
 			throw new Exception(__('Unable to create images.'));
 		}
-		
+
 		$body_fill = array(
 			'light' => dirname(__FILE__).'/../alpha-img/gradient-l.png',
@@ -238,7 +244,7 @@
 			'dark' => dirname(__FILE__).'/../alpha-img/gradient-d.png'
 		);
-		
+
 		$body_g = isset($body_fill[$gradient]) ? $body_fill[$gradient] : false;
-		
+
 		if ($top_image == 'custom' && $uploaded) {
 			$page_t = $uploaded;
@@ -246,5 +252,5 @@
 			$page_t = dirname(__FILE__).'/../alpha-img/page-t/'.$top_image.'.png';
 		}
-		
+
 		$body_bg = dirname(__FILE__).'/../alpha-img/body-bg.png';
 		$page_t_mask = dirname(__FILE__).'/../alpha-img/page-t/image-mask.png';
@@ -254,5 +260,5 @@
 		$default_bg = '#e0e0e0';
 		$default_prelude = '#ededed';
-		
+
 		self::dropImage(basename($body_bg));
 		self::dropImage('page-t.png');
@@ -260,9 +266,9 @@
 		self::dropImage(basename($comment_t));
 		self::dropImage(basename($comment_b));
-		
+
 		$body_color = self::adjustColor($body_color);
 		$prelude_color = self::adjustColor($prelude_color);
 		$comment_color = self::adjustColor($comment_color);
-		
+
 		if ($top_image || $body_color || $gradient != 'light' || $prelude_color || $uploaded)
 		{
@@ -271,10 +277,10 @@
 			}
 			$body_color = sscanf($body_color,'#%2X%2X%2X');
-			
+
 			# Create body gradient with color
 			$d_body_bg = imagecreatetruecolor(50,180);
 			$fill = imagecolorallocate($d_body_bg,$body_color[0],$body_color[1],$body_color[2]);
 			imagefill($d_body_bg,0,0,$fill);
-			
+
 			# User choosed a gradient
 			if ($body_g) {
@@ -284,18 +290,18 @@
 				imagedestroy($s_body_bg);
 			}
-			
+
 			if (!$prelude_color) {
 				$prelude_color = $default_prelude;
 			}
 			$prelude_color = sscanf($prelude_color,'#%2X%2X%2X');
-			
+
 			$s_prelude = imagecreatetruecolor(50,30);
 			$fill = imagecolorallocate($s_prelude,$prelude_color[0],$prelude_color[1],$prelude_color[2]);
 			imagefill($s_prelude,0,0,$fill);
 			imagecopy($d_body_bg,$s_prelude,0,0,0,0,50,30);
-			
+
 			imagepng($d_body_bg,self::imagesPath().'/'.basename($body_bg));
 		}
-		
+
 		if ($top_image || $body_color || $gradient != 'light')
 		{
@@ -304,7 +310,7 @@
 			$size = $size[1];
 			$type = files::getMimeType($page_t);
-			
+
 			$d_page_t = imagecreatetruecolor(800,$size);
-			
+
 			if ($type == 'image/png') {
 				$s_page_t = @imagecreatefrompng($page_t);
@@ -312,12 +318,12 @@
 				$s_page_t = @imagecreatefromjpeg($page_t);
 			}
-			
+
 			if (!$s_page_t) {
 				throw new exception(__('Unable to open image.'));
 			}
-			
+
 			$fill = imagecolorallocate($d_page_t,$body_color[0],$body_color[1],$body_color[2]);
 			imagefill($d_page_t,0,0,$fill);
-			
+
 			if ($type == 'image/png')
 			{
@@ -331,15 +337,15 @@
 				# JPEG, we add image and a frame with rounded corners
 				imagecopy($d_page_t,$s_page_t,0,0,0,0,800,$size);
-				
+
 				imagecopy($d_page_t,$d_body_bg,0,0,0,50,8,4);
 				imagecopy($d_page_t,$d_body_bg,0,4,0,54,4,4);
 				imagecopy($d_page_t,$d_body_bg,792,0,0,50,8,4);
 				imagecopy($d_page_t,$d_body_bg,796,4,0,54,4,4);
-				
+
 				$mask = imagecreatefrompng($page_t_mask);
 				imagealphablending($mask,true);
 				imagecopy($d_page_t,$mask,0,0,0,0,800,11);
 				imagedestroy($mask);
-				
+
 				$fill = imagecolorallocate($d_page_t,255,255,255);
 				imagefilledrectangle($d_page_t,0,11,3,$size-1,$fill);
@@ -347,28 +353,28 @@
 				imagefilledrectangle($d_page_t,0,$size-9,799,$size-1,$fill);
 			}
-			
+
 			$config['top_height'] = ($size).'px';
-			
+
 			imagepng($d_page_t,self::imagesPath().'/page-t.png');
-			
+
 			imagedestroy($d_body_bg);
 			imagedestroy($d_page_t);
 			imagedestroy($s_page_t);
-			
+
 			# Create bottom image with color
 			$d_page_b = imagecreatetruecolor(800,8);
 			$fill = imagecolorallocate($d_page_b,$body_color[0],$body_color[1],$body_color[2]);
 			imagefill($d_page_b,0,0,$fill);
-			
+
 			$s_page_b = imagecreatefrompng($page_b);
 			imagealphablending($s_page_b,true);
 			imagecopy($d_page_b,$s_page_b,0,0,0,0,800,160);
-			
+
 			imagepng($d_page_b,self::imagesPath().'/'.basename($page_b));
-			
+
 			imagedestroy($d_page_b);
 			imagedestroy($s_page_b);
 		}
-		
+
 		if ($comment_color) {
 			self::commentImages($comment_color,$comment_t,$comment_b,basename($comment_t),basename($comment_b));
@@ -378,34 +384,34 @@
 		}
 	}
-	
+
 	protected static function commentImages($comment_color,$comment_t,$comment_b,$dest_t,$dest_b)
 	{
 		$comment_color = sscanf($comment_color,'#%2X%2X%2X');
-			
+
 		$d_comment_t = imagecreatetruecolor(500,25);
 		$fill = imagecolorallocate($d_comment_t,$comment_color[0],$comment_color[1],$comment_color[2]);
 		imagefill($d_comment_t,0,0,$fill);
-		
+
 		$s_comment_t = imagecreatefrompng($comment_t);
 		imagealphablending($s_comment_t,true);
 		imagecopy($d_comment_t,$s_comment_t,0,0,0,0,500,25);
-		
+
 		imagepng($d_comment_t,self::imagesPath().'/'.$dest_t);
 		imagedestroy($d_comment_t);
 		imagedestroy($s_comment_t);
-		
+
 		$d_comment_b = imagecreatetruecolor(500,7);
 		$fill = imagecolorallocate($d_comment_b,$comment_color[0],$comment_color[1],$comment_color[2]);
 		imagefill($d_comment_b,0,0,$fill);
-		
+
 		$s_comment_b = imagecreatefrompng($comment_b);
 		imagealphablending($s_comment_b,true);
 		imagecopy($d_comment_b,$s_comment_b,0,0,0,0,500,7);
-		
+
 		imagepng($d_comment_b,self::imagesPath().'/'.$dest_b);
 		imagedestroy($d_comment_b);
 		imagedestroy($s_comment_b);
 	}
-	
+
 	public static function dropImage($img)
 	{
Index: themes/ductile/_config.php
===================================================================
--- themes/ductile/_config.php	(revision 515)
+++ themes/ductile/_config.php	(revision 515)
@@ -0,0 +1,356 @@
+<?php
+# -- BEGIN LICENSE BLOCK ---------------------------------------
+#
+# This file is part of Dotclear 2.
+#
+# Copyright (c) 2003-2011 Olivier Meunier & Association Dotclear
+# Licensed under the GPL version 2.0 license.
+# See LICENSE file or
+# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+#
+# -- END LICENSE BLOCK -----------------------------------------
+if (!defined('DC_CONTEXT_ADMIN')) { return; }
+
+l10n::set(dirname(__FILE__).'/locales/'.$_lang.'/admin');
+
+$sticker_images = array(
+	__('Contact') => 'sticker-contact.png',
+	__('Feed') => 'sticker-feed.png',
+	__('About') => 'sticker-about.png'
+);
+
+$fonts = array(
+	__('default') => '',
+	__('Ductile primary') => 'Ductile body',
+	__('Ductile secondary') => 'Ductile alternate',
+	__('Times New Roman') => 'Times New Roman',
+	__('Georgia') => 'Georgia',
+	__('Garamond') => 'Garamond',
+	__('Helvetica/Arial') => 'Helvetica/Arial',
+	__('Verdana') => 'Verdana',
+	__('Trebuchet MS') => 'Trebuchet MS',
+	__('Impact') => 'Impact',
+	__('Monospace') => 'Monospace'
+);
+
+function adjustFontSize($s)
+{
+	if (preg_match('/^([0-9.]+)\s*(%|pt|px|em|ex)?$/',$s,$m)) {
+		if (empty($m[2])) {
+			$m[2] = 'em';
+		}
+		return $m[1].$m[2];
+	}
+
+	return null;
+}
+
+function adjustColor($c)
+{
+	if ($c === '') {
+		return '';
+	}
+
+	$c = strtoupper($c);
+
+	if (preg_match('/^[A-F0-9]{3,6}$/',$c)) {
+		$c = '#'.$c;
+	}
+
+	if (preg_match('/^#[A-F0-9]{6}$/',$c)) {
+		return $c;
+	}
+
+	if (preg_match('/^#[A-F0-9]{3,}$/',$c)) {
+		return '#'.substr($c,1,1).substr($c,1,1).substr($c,2,1).substr($c,2,1).substr($c,3,1).substr($c,3,1);
+	}
+
+	return '';
+}
+
+$ductile_base = array(
+	// HTML
+	'subtitle_hidden' => null,
+	// CSS
+	'body_font' => null,
+	'alternate_font' => null,
+	'blog_title_w' => null,
+	'blog_title_s' => null,
+	'blog_title_c' => null,
+	'post_title_w' => null,
+	'post_title_s' => null,
+	'post_title_c' => null,
+	'post_link_w' => null,
+	'post_link_v_c' => null,
+	'post_link_f_c' => null,
+	'blog_title_w_m' => null,
+	'blog_title_s_m' => null,
+	'blog_title_c_m' => null,
+	'post_title_w_m' => null,
+	'post_title_s_m' => null,
+	'post_title_c_m' => null,
+	'post_simple_title_c' => null
+);
+
+$ductile_user = $core->blog->settings->themes->get($core->blog->settings->system->theme.'_style');
+$ductile_user = @unserialize($ductile_user);
+if (!is_array($ductile_user)) {
+	$ductile_user = array();
+}
+
+$ductile_user = array_merge($ductile_base,$ductile_user);
+
+$ductile_stickers_base = array(
+	array('label' => null,'url' => null,'image' => null),
+	array('label' => null,'url' => null,'image' => null),
+	array('label' => null,'url' => null,'image' => null)
+);
+
+$ductile_stickers = $core->blog->settings->themes->get($core->blog->settings->system->theme.'_stickers');
+$ductile_stickers = @unserialize($ductile_stickers);
+if (!is_array($ductile_stickers)) {
+	$ductile_stickers = $ductile_stickers_base;
+}
+
+$conf_tab = isset($_POST['conf_tab']) ? $_POST['conf_tab'] : 'html';
+
+if (!empty($_POST))
+{
+	try
+	{
+		# HTML
+		if ($conf_tab == 'html') {
+			$ductile_user['subtitle_hidden'] = (integer) !empty($_POST['subtitle_hidden']);
+			
+			$count = 0;
+			if (!empty($_POST['sticker1_label']) && !empty($_POST['sticker1_url'])) {
+				$ductile_stickers[$count]['label'] = $_POST['sticker1_label'];
+				$ductile_stickers[$count]['url'] = $_POST['sticker1_url'];
+				$ductile_stickers[$count]['image'] = $_POST['sticker1_image'];
+				$count++;
+			}
+			if (!empty($_POST['sticker2_label']) && !empty($_POST['sticker2_url'])) {
+				$ductile_stickers[$count]['label'] = $_POST['sticker2_label'];
+				$ductile_stickers[$count]['url'] = $_POST['sticker2_url'];
+				$ductile_stickers[$count]['image'] = $_POST['sticker2_image'];
+				$count++;
+			}
+			if (!empty($_POST['sticker3_label']) && !empty($_POST['sticker3_url'])) {
+				$ductile_stickers[$count]['label'] = $_POST['sticker3_label'];
+				$ductile_stickers[$count]['url'] = $_POST['sticker3_url'];
+				$ductile_stickers[$count]['image'] = $_POST['sticker3_image'];
+				$count++;
+			}
+			for ($i = $count; $i < 3; $i++) {
+				$ductile_stickers[$i]['label'] = null;
+				$ductile_stickers[$i]['url'] = null;
+				$ductile_stickers[$i]['image'] = null;
+			}
+		}
+		
+		# CSS
+		if ($conf_tab == 'css') {
+			$ductile_user['body_font'] = $_POST['body_font'];
+			$ductile_user['alternate_font'] = $_POST['alternate_font'];
+
+			$ductile_user['blog_title_w'] = (integer) !empty($_POST['blog_title_w']);
+			$ductile_user['blog_title_s'] = adjustFontSize($_POST['blog_title_s']);
+			$ductile_user['blog_title_c'] = adjustColor($_POST['blog_title_c']);
+		
+			$ductile_user['post_title_w'] = (integer) !empty($_POST['post_title_w']);
+			$ductile_user['post_title_s'] = adjustFontSize($_POST['post_title_s']);
+			$ductile_user['post_title_c'] = adjustColor($_POST['post_title_c']);
+		
+			$ductile_user['post_link_w'] = (integer) !empty($_POST['post_link_w']);
+			$ductile_user['post_link_v_c'] = adjustColor($_POST['post_link_v_c']);
+			$ductile_user['post_link_f_c'] = adjustColor($_POST['post_link_f_c']);
+		
+			$ductile_user['post_simple_title_c'] = adjustColor($_POST['post_simple_title_c']);
+		
+			$ductile_user['blog_title_w_m'] = (integer) !empty($_POST['blog_title_w_m']);
+			$ductile_user['blog_title_s_m'] = adjustFontSize($_POST['blog_title_s_m']);
+			$ductile_user['blog_title_c_m'] = adjustColor($_POST['blog_title_c_m']);
+		
+			$ductile_user['post_title_w_m'] = (integer) !empty($_POST['post_title_w_m']);
+			$ductile_user['post_title_s_m'] = adjustFontSize($_POST['post_title_s_m']);
+			$ductile_user['post_title_c_m'] = adjustColor($_POST['post_title_c_m']);
+		}
+		
+		$core->blog->settings->addNamespace('themes');
+		$core->blog->settings->themes->put($core->blog->settings->system->theme.'_style',serialize($ductile_user));
+		$core->blog->settings->themes->put($core->blog->settings->system->theme.'_stickers',serialize($ductile_stickers));
+		$core->blog->triggerBlog();
+
+		echo
+		'<div class="message"><p>'.
+		__('Theme configuration upgraded.').
+		'</p></div>';
+	}
+	catch (Exception $e)
+	{
+		$core->error->add($e->getMessage());
+	}
+}
+
+// To be deleted when adminThemeConfigManaged behaviour will be implemented in admin/blog_themes.php :
+echo '</form>';
+
+# HTML Tab
+
+echo '<div class="multi-part" id="themes-list'.($conf_tab == 'html' ? '' : '-html').'" title="'.__('Content').'">';
+
+echo '<form id="theme_config" action="blog_theme.php?conf=1" method="post" enctype="multipart/form-data">';
+
+echo '<fieldset><legend>'.__('Header').'</legend>'.
+'<p class="field"><label for="subtitle_hidden">'.__('Hide blog description:').' '.
+form::checkbox('subtitle_hidden',1,$ductile_user['subtitle_hidden']).'</label>'.'</p>'.
+'</fieldset>';
+
+echo '<fieldset><legend>'.__('Stickers').'</legend>';
+
+echo '<table id="stickerslist">'.'<caption>'.__('Stickers (footer)').'</caption>'.
+'<thead>'.
+'<tr>'.
+'<th scope="col">'.__('Position').'</th>'.
+'<th scope="col">'.__('Label').'</th>'.
+'<th scope="col">'.__('URL').'</th>'.
+'<th scope="col">'.__('Icon').'</th>'.
+'</tr>'.
+'</thead>'.
+'<tbody>'.
+'<tr>'.
+'<td scope="raw">1</td>'.
+'<td>'.form::field('sticker1_label',20,255,$ductile_stickers[0]['label']).'</td>'.
+'<td>'.form::field('sticker1_url',40,255,$ductile_stickers[0]['url']).'</td>'.
+'<td>'.form::combo('sticker1_image',$sticker_images,$ductile_stickers[0]['image']).'</td>'.
+'</tr>'.
+'<tr>'.
+'<td scope="raw">2</td>'.
+'<td>'.form::field('sticker2_label',20,255,$ductile_stickers[1]['label']).'</td>'.
+'<td>'.form::field('sticker2_url',40,255,$ductile_stickers[1]['url']).'</td>'.
+'<td>'.form::combo('sticker2_image',$sticker_images,$ductile_stickers[1]['image']).'</td>'.
+'</tr>'.
+'<tr>'.
+'<td scope="raw">3</td>'.
+'<td>'.form::field('sticker3_label',20,255,$ductile_stickers[2]['label']).'</td>'.
+'<td>'.form::field('sticker3_url',40,255,$ductile_stickers[2]['url']).'</td>'.
+'<td>'.form::combo('sticker3_image',$sticker_images,$ductile_stickers[2]['image']).'</td>'.
+'</tr>'.
+'</tbody>'.
+'</table>';
+
+echo '</fieldset>';
+
+echo '<input type="hidden" name="conf_tab" value="html">';
+echo '<p class="clear"><input type="submit" value="'.__('Save').'" />'.$core->formNonce().'</p>';
+echo '</form>';
+
+echo '</div>'; // Close tab
+
+# CSS tab
+
+echo '<div class="multi-part" id="themes-list'.($conf_tab == 'css' ? '' : '-css').'" title="'.__('Presentation').'">';
+
+echo '<form id="theme_config" action="blog_theme.php?conf=1" method="post" enctype="multipart/form-data">';
+
+echo '<h3>'.__('General settings').'</h3>';
+
+echo '<fieldset><legend>'.__('Fonts').'</legend>'.
+'<p class="field"><label for="body_font">'.__('Main:').' '.
+form::combo('body_font',$fonts,$ductile_user['body_font']).'</label></p>'.
+
+'<p class="field"><label for="alternate_font">'.__('Secondary:').' '.
+form::combo('alternate_font',$fonts,$ductile_user['alternate_font']).'</label></p>'.
+'</fieldset>';
+
+echo '<div class="two-cols">';
+echo '<div class="col">';
+
+echo '<fieldset><legend>'.__('Blog title').'</legend>'.
+'<p class="field"><label for="blog_title_w">'.__('In bold:').' '.
+form::checkbox('blog_title_w',1,$ductile_user['blog_title_w']).'</label>'.'</p>'.
+
+'<p class="field"><label for="blog_title_s">'.__('Font size (in em by default):').'</label> '.
+form::field('blog_title_s',7,7,$ductile_user['blog_title_s']).'</p>'.
+
+'<p class="field picker"><label for="blog_title_c">'.__('Color:').'</label> '.
+form::field('blog_title_c',7,7,$ductile_user['blog_title_c'],'colorpicker').'</p>'.
+'</fieldset>';
+
+echo '</div>';
+echo '<div class="col">';
+
+echo '<fieldset><legend>'.__('Post title').'</legend>'.
+'<p class="field"><label for="post_title_w">'.__('In bold:').' '.
+form::checkbox('post_title_w',1,$ductile_user['post_title_w']).'</label>'.'</p>'.
+
+'<p class="field"><label for="post_title_s">'.__('Font size (in em by default):').'</label> '.
+form::field('post_title_s',7,7,$ductile_user['post_title_s']).'</p>'.
+
+'<p class="field picker"><label for="post_title_c">'.__('Color:').'</label> '.
+form::field('post_title_c',7,7,$ductile_user['post_title_c'],'colorpicker').'</p>'.
+'</fieldset>';
+
+echo '</div>';
+echo '</div>';
+
+echo '<fieldset><legend>'.__('Titles without link').'</legend>'.
+
+'<p class="field picker"><label for="post_simple_title_c">'.__('Color:').'</label> '.
+form::field('post_simple_title_c',7,7,$ductile_user['post_simple_title_c'],'colorpicker').'</p>'.
+'</fieldset>';
+
+echo '<fieldset><legend>'.__('Inside posts links').'</legend>'.
+'<p class="field"><label for="post_link_w">'.__('In bold:').' '.
+form::checkbox('post_link_w',1,$ductile_user['post_link_w']).'</label>'.'</p>'.
+
+'<p class="field picker"><label for="post_link_v_c">'.__('Normal and visited links color:').'</label> '.
+form::field('post_link_v_c',7,7,$ductile_user['post_link_v_c'],'colorpicker').'</p>'.
+
+'<p class="field picker"><label for="body_link_f_c">'.__('Active, hover and focus links color:').'</label> '.
+form::field('post_link_f_c',7,7,$ductile_user['post_link_f_c'],'colorpicker').'</p>'.
+'</fieldset>';
+
+echo '<h3>'.__('Mobile specific settings').'</h3>';
+
+echo '<div class="two-cols">';
+echo '<div class="col">';
+
+echo '<fieldset><legend>'.__('Blog title').'</legend>'.
+'<p class="field"><label for="blog_title_w_m">'.__('In bold:').' '.
+form::checkbox('blog_title_w_m',1,$ductile_user['blog_title_w_m']).'</label>'.'</p>'.
+
+'<p class="field"><label for="blog_title_s_m">'.__('Font size (in em by default):').'</label> '.
+form::field('blog_title_s_m',7,7,$ductile_user['blog_title_s_m']).'</p>'.
+
+'<p class="field picker"><label for="blog_title_c_m">'.__('Color:').'</label> '.
+form::field('blog_title_c_m',7,7,$ductile_user['blog_title_c_m'],'colorpicker').'</p>'.
+'</fieldset>';
+
+echo '</div>';
+echo '<div class="col">';
+
+echo '<fieldset><legend>'.__('Post title').'</legend>'.
+'<p class="field"><label for="post_title_w_m">'.__('In bold:').' '.
+form::checkbox('post_title_w_m',1,$ductile_user['post_title_w_m']).'</label>'.'</p>'.
+
+'<p class="field"><label for="post_title_s_m">'.__('Font size (in em by default):').'</label> '.
+form::field('post_title_s_m',7,7,$ductile_user['post_title_s_m']).'</p>'.
+
+'<p class="field picker"><label for="post_title_c_m">'.__('Color:').'</label> '.
+form::field('post_title_c_m',7,7,$ductile_user['post_title_c_m'],'colorpicker').'</p>'.
+'</fieldset>';
+
+echo '</div>';
+echo '</div>';
+
+echo '<input type="hidden" name="conf_tab" value="css">';
+echo '<p class="clear"><input type="submit" value="'.__('Save').'" />'.$core->formNonce().'</p>';
+echo '</form>';
+
+echo '</div>'; // Close tab
+
+// To be deleted when adminThemeConfigManaged behaviour will be implemented in admin/blog_themes.php :
+echo '<form style="display:none">';
+
+?>
Index: themes/ductile/_define.php
===================================================================
--- themes/ductile/_define.php	(revision 446)
+++ themes/ductile/_define.php	(revision 446)
@@ -0,0 +1,18 @@
+<?php
+# -- BEGIN LICENSE BLOCK ---------------------------------------
+#
+# Copyright (c) Association Dotclear
+# Licensed under the GPL version 2.0 license.
+# See LICENSE file or
+# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+#
+# -- END LICENSE BLOCK -----------------------------------------
+if (!defined('DC_RC_PATH')) { return; }
+
+$this->registerModule(
+	/* Name */			"Ductile",
+	/* Description*/		"Chantier pour un nouveau theme",
+	/* Author */			"Dotclear Team",
+	/* Version */			'0.7'
+);
+?>
Index: themes/ductile/_prepend.php
===================================================================
--- themes/ductile/_prepend.php	(revision 435)
+++ themes/ductile/_prepend.php	(revision 435)
@@ -0,0 +1,35 @@
+<?php
+# -- BEGIN LICENSE BLOCK ---------------------------------------
+#
+# This file is part of Dotclear 2.
+#
+# Copyright (c) 2003-2011 Olivier Meunier & Association Dotclear
+# Licensed under the GPL version 2.0 license.
+# See LICENSE file or
+# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+#
+# -- END LICENSE BLOCK -----------------------------------------
+
+# Public and Admin modes :
+
+if (!defined('DC_RC_PATH')) { return; }
+
+# Admin mode only :
+
+# Behaviors
+$GLOBALS['core']->addBehavior('adminPageHTMLHead',array('tplDuctileThemeAdmin','adminPageHTMLHead'));
+$GLOBALS['core']->addBehavior('adminThemeConfigManaged',array('tplDuctileThemeAdmin','adminThemeConfigManaged'));
+
+class tplDuctileThemeAdmin
+{
+	public static function adminPageHTMLHead()
+	{
+		echo "\n".'<!-- Header directives for Ductile configuration -->'."\n";
+	}
+
+	public static function adminThemeConfigManaged()
+	{
+		return true;
+	}
+}
+?>
Index: themes/ductile/_public.php
===================================================================
--- themes/ductile/_public.php	(revision 515)
+++ themes/ductile/_public.php	(revision 515)
@@ -0,0 +1,262 @@
+<?php
+# -- BEGIN LICENSE BLOCK ---------------------------------------
+#
+# This file is part of Dotclear 2.
+#
+# Copyright (c) 2003-2011 Olivier Meunier & Association Dotclear
+# Licensed under the GPL version 2.0 license.
+# See LICENSE file or
+# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+#
+# -- END LICENSE BLOCK -----------------------------------------
+
+if (!defined('DC_RC_PATH')) { return; }
+
+# Behaviors
+$core->addBehavior('publicHeadContent',array('tplDuctileTheme','publicHeadContent'));
+$core->addBehavior('publicInsideFooter',array('tplDuctileTheme','publicInsideFooter'));
+
+class tplDuctileTheme
+{
+	public static function publicInsideFooter($core)
+	{
+		$res = '';
+		$default = false;
+		$img_url = $core->blog->settings->system->themes_url.'/'.$core->blog->settings->system->theme.'/img/';
+
+		$s = $core->blog->settings->themes->get($core->blog->settings->system->theme.'_stickers');
+
+		if ($s === null) {
+			$default = true;
+		} else {
+			$s = @unserialize($s);
+			if (!is_array($s)) {
+				$default = true;
+			} else {
+				$s = array_filter($s,"tplDuctileTheme::cleanStickers");
+				if (count($s) == 0) {
+					$default = true;
+				} else {
+					$count = 1;
+					foreach ($s as $sticker) {
+						$res .= self::setSticker($count,($count == count($s)),$sticker['label'],$sticker['url'],$img_url.$sticker['image']);
+						$count++;
+					}
+				}
+			}
+		}
+
+		if ($default || $res == '') {
+			$res = self::setSticker(1,true,__('Feed'),$core->blog->url.$core->url->getBase('feed').'/atom',$img_url.'sticker-feed.png');
+		}
+
+		if ($res != '') {
+			$res = '<ul id="stickers">'."\n".$res.'</ul>'."\n";
+			echo $res;
+		}
+	}
+	
+	protected static function cleanStickers($s)
+	{
+		if (is_array($s)) {
+			if (isset($s['label']) && isset($s['url']) && isset($s['image'])) {
+				if ($s['label'] != null && $s['url'] != null && $s['image'] != null) {
+					return true;
+				}
+			}
+		}
+		return false;
+	}
+	
+	protected static function setSticker($position,$last,$label,$url,$image)
+	{
+		return '<li id="sticker'.$position.'"'.($last ? ' class="last"' : '').'>'."\n".
+			'<a href="'.$url.'">'."\n".
+			'<img alt="" src="'.$image.'" />'."\n".
+			'<span>'.$label.'</span>'."\n".
+			'</a>'."\n".
+			'</li>'."\n";
+	}
+
+	public static function publicHeadContent($core)
+	{
+		echo 
+			'<style type="text/css">'."\n".
+			'/* '.__('Additionnal style directives').' */'."\n".
+			self::ductileStyleHelper().
+			"</style>\n";
+	}
+	
+	public static function ductileStyleHelper()
+	{
+		$s = $GLOBALS['core']->blog->settings->themes->get($GLOBALS['core']->blog->settings->system->theme.'_style');
+
+		if ($s === null) {
+			return;
+		}
+
+		$s = @unserialize($s);
+		if (!is_array($s)) {
+			return;
+		}
+
+		$css = array();
+
+		# Properties
+		
+		# Blog description
+		$selectors = '#blogdesc';
+		if (isset($s['subtitle_hidden'])) self::prop($css,$selectors,'display',($s['subtitle_hidden'] ? 'none' : null));
+
+		# Main font
+		$selectors = 'body, #supranav li a span, #comments.me, a.comment-number';
+		if (isset($s['body_font'])) self::prop($css,$selectors,'font-family',self::fontDef($s['body_font']));
+
+		# Secondary font
+		$selectors = '#blogdesc, #supranav, #content-info, #subcategories, #comments-feed, #sidebar h2, #sidebar h3, #footer p';
+		if (isset($s['alternate_font'])) self::prop($css,$selectors,'font-family',self::fontDef($s['alternate_font']));
+		
+		# Inside posts links font weight
+		$selectors = '.post-excerpt a, .post-content a';
+		if (isset($s['post_link_w'])) self::prop($css,$selectors,'font-weight',($s['post_link_w'] ? 'bold' : 'normal'));
+
+		# Inside posts links colors (normal, visited)
+		$selectors = '.post-excerpt a:link, .post-excerpt a:visited, .post-content a:link, .post-content a:visited';
+		if (isset($s['post_link_v_c'])) self::prop($css,$selectors,'color',$s['post_link_v_c']);
+
+		# Inside posts links colors (hover, active, focus)
+		$selectors = '.post-excerpt a:hover, .post-excerpt a:active, .post-excerpt a:focus, .post-content a:hover, .post-content a:active, .post-content a:focus';
+		if (isset($s['post_link_f_c'])) self::prop($css,$selectors,'color',$s['post_link_f_c']);
+
+		# Style directives
+		$res = '';
+		foreach ($css as $selector => $values) {
+			$res .= $selector." {\n";
+			foreach ($values as $k => $v) {
+				$res .= $k.':'.$v.";\n";
+			}
+			$res .= "}\n";
+		}
+
+		# Large screens
+		$css_large = array();
+
+		# Blog title font weight
+		$selectors = 'h1, h1 a:link, h1 a:visited, h1 a:hover, h1 a:visited, h1 a:focus';
+		if (isset($s['blog_title_w'])) self::prop($css_large,$selectors,'font-weight',($s['blog_title_w'] ? 'bold' : 'normal'));
+		
+		# Blog title font size
+		$selectors = 'h1';
+		if (isset($s['blog_title_s'])) self::prop($css_large,$selectors,'font-size',$s['blog_title_s']);
+		
+		# Blog title color
+		$selectors = 'h1 a:link, h1 a:visited, h1 a:hover, h1 a:visited, h1 a:focus';
+		if (isset($s['blog_title_c'])) self::prop($css_large,$selectors,'color',$s['blog_title_c']);
+
+		# Post title font weight
+		$selectors = 'h2.post-title, h2.post-title a:link, h2.post-title a:visited, h2.post-title a:hover, h2.post-title a:visited, h2.post-title a:focus';
+		if (isset($s['post_title_w'])) self::prop($css_large,$selectors,'font-weight',($s['post_title_w'] ? 'bold' : 'normal'));
+		
+		# Post title font size
+		$selectors = 'h2.post-title';
+		if (isset($s['post_title_s'])) self::prop($css_large,$selectors,'font-size',$s['post_title_s']);
+		
+		# Post title color
+		$selectors = 'h2.post-title a:link, h2.post-title a:visited, h2.post-title a:hover, h2.post-title a:visited, h2.post-title a:focus';
+		if (isset($s['post_title_c'])) self::prop($css_large,$selectors,'color',$s['post_title_c']);
+
+		# Simple title color (title without link)
+		$selectors = '#content-info h2, .post-title, .post h3, .post h4, .post h5, .post h6, .arch-block h3';
+		if (isset($s['post_simple_title_c'])) self::prop($css_large,$selectors,'color',$s['post_simple_title_c']);
+
+		# Style directives for large screens
+		if (count($css_large)) {
+			$res .= '@media only screen and (min-width: 481px) {'."\n";
+			foreach ($css_large as $selector => $values) {
+				$res .= $selector." {\n";
+				foreach ($values as $k => $v) {
+					$res .= $k.':'.$v.";\n";
+				}
+				$res .= "}\n";
+			}
+			$res .= "}\n";
+		}
+
+		# Small screens
+		$css_small = array();
+
+		# Blog title font weight
+		$selectors = 'h1, h1 a:link, h1 a:visited, h1 a:hover, h1 a:visited, h1 a:focus';
+		if (isset($s['blog_title_w_m'])) self::prop($css_small,$selectors,'font-weight',($s['blog_title_w_m'] ? 'bold' : 'normal'));
+		
+		# Blog title font size
+		$selectors = 'h1';
+		if (isset($s['blog_title_s_m'])) self::prop($css_small,$selectors,'font-size',$s['blog_title_s_m']);
+		
+		# Blog title color
+		$selectors = 'h1 a:link, h1 a:visited, h1 a:hover, h1 a:visited, h1 a:focus';
+		if (isset($s['blog_title_c_m'])) self::prop($css_small,$selectors,'color',$s['blog_title_c_m']);
+
+		# Post title font weight
+		$selectors = 'h2.post-title, h2.post-title a:link, h2.post-title a:visited, h2.post-title a:hover, h2.post-title a:visited, h2.post-title a:focus';
+		if (isset($s['post_title_w_m'])) self::prop($css_small,$selectors,'font-weight',($s['post_title_w_m'] ? 'bold' : 'normal'));
+		
+		# Post title font size
+		$selectors = 'h2.post-title';
+		if (isset($s['post_title_s_m'])) self::prop($css_small,$selectors,'font-size',$s['post_title_s_m']);
+		
+		# Post title color
+		$selectors = 'h2.post-title a:link, h2.post-title a:visited, h2.post-title a:hover, h2.post-title a:visited, h2.post-title a:focus';
+		if (isset($s['post_title_c_m'])) self::prop($css_small,$selectors,'color',$s['post_title_c_m']);
+
+		# Style directives for small screens
+		if (count($css_small)) {
+			$res .= '@media only screen and (max-width: 480px) {'."\n";
+			foreach ($css_small as $selector => $values) {
+				$res .= $selector." {\n";
+				foreach ($values as $k => $v) {
+					$res .= $k.':'.$v.";\n";
+				}
+				$res .= "}\n";
+			}
+			$res .= "}\n";
+		}
+		
+		return $res;
+	}
+
+	protected static $fonts = array(
+		// Theme standard
+		'Ductile body' => '"Century Schoolbook", "Century Schoolbook L", Georgia, serif',
+		'Ductile alternate' => '"Franklin gothic medium", "arial narrow", "DejaVu Sans Condensed", "helvetica neue", helvetica, sans-serif',
+
+		// Serif families
+		'Times New Roman' => 'Cambria, "Hoefler Text", Utopia, "Liberation Serif", "Nimbus Roman No9 L Regular", Times, "Times New Roman", serif',
+		'Georgia' => 'Constantia, "Lucida Bright", Lucidabright, "Lucida Serif", Lucida, "DejaVu Serif," "Bitstream Vera Serif", "Liberation Serif", Georgia, serif',
+		'Garamond' => '"Palatino Linotype", Palatino, Palladio, "URW Palladio L", "Book Antiqua", Baskerville, "Bookman Old Style", "Bitstream Charter", "Nimbus Roman No9 L", Garamond, "Apple Garamond", "ITC Garamond Narrow", "New Century Schoolbook", "Century Schoolbook", "Century Schoolbook L", Georgia, serif',
+
+		// Sans-serif families
+		'Helvetica/Arial' => 'Frutiger, "Frutiger Linotype", Univers, Calibri, "Gill Sans", "Gill Sans MT", "Myriad Pro", Myriad, "DejaVu Sans Condensed", "Liberation Sans", "Nimbus Sans L", Tahoma, Geneva, "Helvetica Neue", Helvetica, Arial, sans-serif',
+		'Verdana' => 'Corbel, "Lucida Grande", "Lucida Sans Unicode", "Lucida Sans", "DejaVu Sans", "Bitstream Vera Sans", "Liberation Sans", Verdana, "Verdana Ref", sans-serif',
+		'Trebuchet MS' => '"Segoe UI", Candara, "Bitstream Vera Sans", "DejaVu Sans", "Bitstream Vera Sans", "Trebuchet MS", Verdana, "Verdana Ref", sans-serif',
+
+		// Cursive families
+		'Impact' => 'Impact, Haettenschweiler, "Franklin Gothic Bold", Charcoal, "Helvetica Inserat", "Bitstream Vera Sans Bold", "Arial Black", sans-serif',
+
+		// Monospace families
+		'Monospace' => 'Consolas, "Andale Mono WT", "Andale Mono", "Lucida Console", "Lucida Sans Typewriter", "DejaVu Sans Mono", "Bitstream Vera Sans Mono", "Liberation Mono", "Nimbus Mono L", Monaco, "Courier New", Courier, monospace'
+	);
+
+	protected static function fontDef($c)
+	{
+		return isset(self::$fonts[$c]) ? self::$fonts[$c] : null;
+	}
+
+	protected static function prop(&$css,$selector,$prop,$value)
+	{
+		if ($value) {
+			$css[$selector][$prop] = $value;
+		}
+	}
+}
+?>
Index: themes/ductile/locales/fr/admin.po
===================================================================
--- themes/ductile/locales/fr/admin.po	(revision 515)
+++ themes/ductile/locales/fr/admin.po	(revision 515)
@@ -0,0 +1,86 @@
+msgid "Theme configuration upgraded."
+msgstr "Configuration du thème mise à jour."
+
+msgid "Content"
+msgstr "Contenu"
+
+msgid "Header"
+msgstr "Entête"
+
+msgid "Hide blog description:"
+msgstr "Cacher la description du blog :"
+
+msgid "Presentation"
+msgstr "Présentation"
+
+msgid "General settings"
+msgstr "Paramètres généraux"
+
+msgid "Mobile specific settings"
+msgstr "Paramètres spécifiques pour les mobiles"
+
+msgid "Blog title"
+msgstr "Titre du blog"
+
+msgid "In bold:"
+msgstr "En gras :"
+
+msgid "Font size (in em by default):"
+msgstr "Taille de police (en em par défaut) :"
+
+msgid "Color:"
+msgstr "Couleur :"
+
+msgid "Post title"
+msgstr "Titre des billets"
+
+msgid "Titles without link"
+msgstr "Titres sans lien"
+
+msgid "Inside posts links"
+msgstr "Liens dans les billets"
+
+msgid "Normal and visited links color:"
+msgstr "Couleur des liens normaux et visités :"
+
+msgid "Active, hover and focus links color:"
+msgstr "Couleur des liens actifs, survolés et ayant le focus :"
+
+msgid "Fonts"
+msgstr "Polices de caractère"
+
+msgid "Main:"
+msgstr "Principale :"
+
+msgid "Secondary:"
+msgstr "Secondaire :"
+
+msgid "Ductile primary"
+msgstr "Principale de Ductile"
+
+msgid "Ductile secondary"
+msgstr "Secondaire de Ductile"
+
+msgid "Times New Roman"
+msgstr "Times New Roman"
+
+msgid "Georgia"
+msgstr "Georgia"
+
+msgid "Garamond"
+msgstr "Garamond"
+
+msgid "Helvetica/Arial"
+msgstr "Helvetica/Arial"
+
+msgid "Verdana"
+msgstr "Verdana"
+
+msgid "Trebuchet MS"
+msgstr "Trebuchet MS"
+
+msgid "Impact"
+msgstr "Impact"
+
+msgid "Monospace"
+msgstr "Monospace"
Index: themes/ductile/locales/fr/main.po
===================================================================
--- themes/ductile/locales/fr/main.po	(revision 421)
+++ themes/ductile/locales/fr/main.po	(revision 421)
@@ -0,0 +1,2 @@
+msgid "Additionnal style directives"
+msgstr "Directives CSS supplémentaires"
Index: themes/ductile/mediaqueries.css
===================================================================
--- themes/ductile/mediaqueries.css	(revision 502)
+++ themes/ductile/mediaqueries.css	(revision 502)
@@ -0,0 +1,330 @@
+@charset "UTF-8";
+
+/* seuils retenus :
+< 480px: tout en une colonne, sidebar et stickers en bas
+> 480px: stickers en haut
+> 640px: sidebar toujours en bas mais divisé en deux colonnes
+> 1024px: passage à deux colonnes, sidebar à droite
+> 1280px: décalage du post-info vers la gauche
+> 1600px: marges plus grandes */
+
+/* --------------------------------------------------------------------
+	Moins de 480px (téléphones)
+-------------------------------------------------------------------- */
+@media only screen and (max-width:480px) {
+	.nosmall {
+		display: none !important;
+		}
+	h1 {
+		font-size: 1.8em;
+		}
+	h1 a {
+		display: block;
+		padding: 6px 8px;
+		background: #f4f4f5;
+		background: -webkit-gradient(linear, left top, left bottom, from(#f4f4f5), to(#d7d7dC));
+		background: -moz-linear-gradient(top,  #f4f4f5,  #d7d7dC);
+		border-right: 1px solid #aaa;
+		border-bottom: 1px solid #ccc;
+		}
+	.supranav, #prelude {
+		border:none;
+		margin: 8px 0 0;
+		background: #fff;
+		}
+	.supranav li a, #prelude li a {
+		border-right: 0;
+		display: block;
+		padding: 4px 8px;
+		border-bottom: 1px solid #ccc;
+		text-decoration: none;
+		white-space: nowrap;
+		margin-bottom: 4px;
+		-webkit-border-bottom-left-radius: 7px;
+		-moz-border-radius-bottomleft: 7px;
+		border-bottom-left-radius: 7px;
+		}
+	#gotop li {
+		text-transform: none;
+		}
+	#prelude li a {
+		background: transparent url(img/menumobile.png) no-repeat right center;
+		 }
+	#sn-bottom li a {
+		background: transparent url(img/menumobile.png) no-repeat right top;
+		}
+	#gotop li a {
+		background: transparent url(img/menumobile.png) no-repeat right -150px;
+		}
+	.post-title {
+		font-size: 1.5em;
+		font-weight: bold;
+		font-family: "Franklin gothic medium","arial narrow","DejaVu Sans Condensed","helvetica neue",helvetica,sans-serif;
+		}
+	.post-title a {
+		font-style: normal;
+		font-weight: bold;
+		}
+	#stickers {
+		margin: 0;
+		padding: 0;
+		border-bottom: 8px solid #fff;
+		}
+	#stickers li {
+		position: relative;
+		padding: .5em 0;
+		margin-left: 0;
+		border-style: solid;
+		border-color: #fff;
+		border-width: 2px 6px;
+		overflow: hidden;
+		}
+	#stickers img {
+		position: absolute;
+		top: -2px;
+		clip: rect(0 32px 36px 0);
+		clip: rect(0, 32px, 36px, 0);
+		}
+	#stickers span {
+		margin-left: 40px;
+		}
+	#stickers a {
+		text-decoration: none;
+		}
+}
+
+/* --------------------------------------------------------------------
+	Autres (plus de 480px)
+-------------------------------------------------------------------- */
+
+@media only screen and (min-width: 481px) {
+	.nobig {
+		display: none;
+		}
+	#prelude {
+		position: absolute;
+		margin: 0;
+		top: 0;
+		left: 3px;
+		color: #fff;
+		font-size: .875em;
+		list-style-type: none;
+		}
+	#prelude li {
+		display: inline;
+		text-transform: none !important;
+		}
+	#prelude a, #prelude a:hover, #prelude a:visited {
+		position:absolute;
+		left:0;
+		top:-500px;
+		width:1px;
+		height:1px;
+		overflow:hidden;
+		background-image: none !important;
+		}
+	#prelude a:active, #prelude a:focus {
+		position:static;
+		width:auto;
+		height:auto;
+		}
+	#top {
+		padding-top: 24px;
+		}
+	h1 {
+		font-size: 2em;
+		padding-right: 240px;
+		padding-bottom: 4px;
+		margin-left: 32px;
+		}
+	#sn-bottom {
+		display: none;
+		}
+	.supranav {
+		margin: 36px 0 0;
+		border-bottom: 1px solid #ccc;
+		}
+	.supranav li {
+		display: inline;
+		padding: 8px 0;
+		}
+	.supranav li a {
+		display: inline-block;
+		padding: 8px 32px 8px 28px;
+		border-right: 1px solid #ccc;
+	 	}
+	.supranav li a span {
+		display: block;
+		}
+	.post-title {
+		font-size: 2.5em;
+		font-weight: normal;
+		}
+	.post-title a {
+		font-style: italic;
+		font-weight: normal;
+		}
+	#stickers {
+		position: absolute;
+		top: 0;
+		right: 0;
+		padding-right: 3%;
+		font-size: .75em;
+		}
+	#stickers li {
+		display: block;
+		float: right;
+		text-align: center;
+		width: 60px;
+		padding: 0;
+		}
+	#stickers li span {
+		display: block;
+		text-align: center;
+		}
+	#stickers li a:hover,
+	#stickers li a:active,
+	#stickers li a:focus {
+		background-color: #fff;
+		}
+	#stickers a:hover, #stickers a:focus {
+		color: #666;
+		background: #fff;
+		}
+}
+
+/* ------------------------------------------------------ special redimensionnement paysage */
+@media screen and (max-width:640px) and (orientation: landscape) { 
+  body { 
+   -webkit-text-size-adjust: 70%; 
+  } 
+}
+
+/* ------------------------------------------------------ règles communes > 640px */
+@media only screen and (max-width:639px) {
+	body {
+		-webkit-text-size-adjust: none;
+		}
+	#wrapper {
+		padding: 0 2%;
+		}
+	img {
+		max-width: 100%;
+		height: auto;
+		width: auto\9; /* pour ie8 */
+		}
+}
+
+/* ------------------------------------------------------ spécifique 640px à 1024px */
+@media only screen and (min-width: 640px) and (max-width: 1023px) {
+	#wrapper {
+		padding: 0 10%;
+		}
+	#blognav, #blogextra { 
+		width: 48%; float:left;
+		}
+	#blognav {
+		margin-right: 4%;
+		}
+	#stickers {
+		padding-right: 10%;
+		}
+}
+
+/* ------------------------------------------------------ spécifique 840px à 1024px */
+@media only screen and (min-width: 840px) and (max-width: 1023px) {
+	#wrapper {
+		padding: 0 13%;
+		}
+	#stickers {
+		padding-right: 13%;
+		}	
+}
+
+/* ------------------------------------------------------ 
+	au-delà de 1024px on passe à deux colonnes
+------------------------------------------------------ */
+@media only screen and (min-width: 1024px) {
+	#wrapper {
+		padding: 0 7%;
+		}
+	#main {
+		width : 100%;
+		margin : 0 -17em 0 0;
+		float : left;
+		display: inline;
+		}
+	#content {
+		margin : 0 20em 0 0;
+		padding : 0 0 2em 0;
+		}
+	#sidebar {
+		width : 17em;
+		float : right;
+		}
+	#blognav, #blogextra {
+		margin : 0;
+		}
+	#stickers {
+		padding-right: 7%;
+		}
+	#sidebar #blognav div:first-child {
+		margin-top: 4.66em;
+		}
+	#sidebar div#search:first-child { 
+		background: none;
+		margin-top: 0;
+		margin-bottom: 2em;
+		padding-bottom: 2px;
+		font-size: 1em;
+		border: 1px solid #ddd;
+		border-top: none 0;
+		}
+	#sidebar div#search:first-child h2 {
+		font-size: 1em;
+		text-transform: uppercase;
+		text-shadow: 0 1px 1px rgba(0,0,0,.2);
+		vertical-align: top;
+		color: #666;
+		}
+	#sidebar div#search:first-child p {
+		margin: .33em 0;
+		}
+	.dc-archive #content {
+		margin: 0 17em 0 0;
+		}
+}
+
+/* ------------------------------------------------------ 
+	au-delà de 1280px on décale le post-info à gauche
+------------------------------------------------------- */
+@media only screen and (min-width: 1280px) {
+	#content {
+		margin : 0 20em 0 220px;
+		}
+	.post-attr { 
+		margin-left: -220px; 
+		float: left; 
+		width: 180px; 
+		text-align: right;
+		}
+	.post-attr a, .post-info, .post-tags {
+		padding-right: 0 !important;
+		}
+	.dc-archive-month .post-attr {
+		margin-left: 0;
+		float:none;
+		width: auto;
+		text-align: left;
+		}
+}
+
+/* ------------------------------------------------------ au-delà de 1600px */
+@media only screen and (min-width: 1600px) {
+	#wrapper {
+		padding: 0 10%;
+		}
+	#stickers {
+		padding-right: 10%;
+		}
+}
Index: themes/ductile/rebase.css
===================================================================
--- themes/ductile/rebase.css	(revision 308)
+++ themes/ductile/rebase.css	(revision 308)
@@ -0,0 +1,99 @@
+@charset "UTF-8";
+
+html, 
+body {
+	margin: 0;
+	padding: 0;
+	font-size: 100.1%;
+	line-height: 1.5;
+	}
+div, form, fieldset {
+	margin: 0;
+	padding: 0;
+	border: none;
+	}
+h2, h3, h4, h5, h6 {
+	line-height: 1.2;
+	font-weight: bold;
+	margin: 1em 0 .5em 0;
+	}
+h1 {
+	margin: 0;
+	font-weight: normal;
+	}
+h2 {
+	font-size: 1.6em;
+	}
+h3 {
+	font-size: 1.33em;
+	}
+h4 {
+	font-size: 1.2em;
+	}
+h5 {
+	font-size: 1.1em;
+	}
+h6 {
+	font-size: 1.5em;
+	}
+p {
+	margin: 1em 0 .5em 0;
+	}
+img a {
+	border: none;
+	}
+sup, sub {
+	font-size: .7em;
+	line-height: .7em;
+	}
+abbr, acronym {
+	border-bottom: 1px dotted;
+	cursor: help;
+	}
+strong {
+	font-size: .94em;
+	}
+blockquote, q {
+	font-style: italic;
+	}
+blockquote em, q em {
+	font-style: normal;
+	}
+cite {
+	font-size: .9em;
+	}
+ul, ol, dd {
+	margin: 1em 0 .5em 1.5em;
+	}
+ul ul, ol ol {
+	margin-top: .5em;
+	}
+code, pre {
+	font-family: "Andale mono","Courier New", Courier, mono;
+	font-size: .875em;
+	}
+code {
+	padding: 0 2px;
+	}
+pre {
+	margin: 1em;
+	overflow: auto;
+	padding: 1px .5em;
+	line-height: 1.2;
+	}
+hr {
+	height: 1px;
+	border: 0;
+	border-top: 1px solid #aaa;
+	width: 60%;
+	height: 1px;
+	}
+input, button, select {
+	vertical-align: middle;
+	}
+em, i {
+	font-style: italic;
+	}
+strong, b {
+	font-weight: bold;
+	}
Index: themes/ductile/style.css
===================================================================
--- themes/ductile/style.css	(revision 502)
+++ themes/ductile/style.css	(revision 502)
@@ -0,0 +1,836 @@
+@charset "UTF-8";
+
+/* Ductile
+	Dotclear theme by Dotclear Team
+	Version de chantier
+*/
+
+/* Infos
+Plan de cette feuille :
+1. Structure, imports
+2. Liens, html
+3. Page
+4. Haut de page
+5. Wrapper, main, content
+6. Billets
+7. Commentaires et rétroliens
+8. Sidebar
+9. Footer
+10. Classes communes
+11. Pages spécifiques
+12. Clearers
+
+Couleurs :
+Typo: #222 courant, #4c4c85 commentaires
+Titres non cliquables: #14709e
+Liens: #666 courant, #ad3f4c titre billet et Lire la suite
+Fond formulaire comm: #eef
+Fond sidebar: #ededed
+
+Thanks to:
+Colorzilla wysiwyg gradient editor http://www.colorzilla.com/gradient-editor/
+*/
+
+/* -----------------------------------------------------------------
+	1. STRUCTURE - IMPORTS
+------------------------------------------------------------------ */
+
+@import url(rebase.css);
+@import url(mediaqueries.css);
+
+/* ------------------------------------------------------- body */
+body {
+	background: #fff;
+	font-family: "Century Schoolbook", "Century Schoolbook L", Georgia, serif;
+	color: #222;
+	}
+
+/* ------------------------------------------------------------
+	2. LIENS & Complément balises HTML
+------------------------------------------------------------- */
+del {
+	color: #800000;
+	}
+blockquote {
+	border: 2px solid #eef;
+	padding: 1px 1em .5em;
+	}
+code, pre {
+	background: #efefef;
+	border-right: 1px solid #aaa;
+	border-bottom: 1px solid #aaa;
+	font-size: .81em;
+	}
+
+a {
+	color: #666;
+	}
+a:hover, a:focus {
+	background-color: #ebebee;
+	text-decoration: none;
+	}
+
+/* ------------------------------------------------------------
+	3. PAGE
+------------------------------------------------------------- */
+
+#page {
+	position: relative;
+	}
+
+/* ------------------------------------------------------------
+	4. HAUT DE PAGE
+------------------------------------------------------------- */
+#header {
+	text-shadow: 0 1px 1px rgba(0,0,0,.2);
+	line-height: 1;
+	}
+h1 {
+	font-variant: small-caps;
+	}
+h1 a {
+	text-decoration: none;
+	color: #333;
+	}
+#blogdesc {
+	margin: 0 0 0 32px;
+	font-family: "Franklin gothic medium","arial narrow","DejaVu Sans Condensed","helvetica neue",helvetica,sans-serif;
+	font-style: italic;
+	color: #888;
+	text-shadow: none;
+	}
+.supranav, #prelude {
+	font-family: "Franklin gothic medium","arial narrow","DejaVu Sans Condensed","helvetica neue",helvetica,sans-serif;
+	padding: 0 0 0 4px;
+	list-style-type: none;
+	line-height: 1.25;
+	font-size: .875em;
+	}
+.supranav li, #prelude li {
+	text-transform: uppercase;
+	vertical-align: top;
+	}
+.supranav li a {
+	text-decoration: none;
+	white-space: nowrap;
+	margin-bottom: 4px;
+	-webkit-border-bottom-left-radius: 7px;
+	-moz-border-radius-bottomleft: 7px;
+	border-bottom-left-radius: 7px;	
+	background: transparent url(img/menu.png) no-repeat right top;
+ }
+.supranav li a:hover, 
+.supranav li a:active, 
+.supranav li a:focus {
+	background-color: #ebebee;
+	background-position: right -150px;
+	}
+.supranav li.active a {
+	background-position: right -150px;
+	}
+.supranav li a span {
+	display: block;
+	text-transform: none;
+	text-shadow: none;
+	font-family: georgia;
+	font-style:italic;
+	}
+
+/* ------------------------------------------------------------
+	5. WRAPPER MAIN CONTENT
+------------------------------------------------------------- */
+
+#wrapper { clear:both; }
+#main { }
+#content { 
+	padding-bottom: 2em; 
+	}
+
+/* ------------------------------------------------------- content-info */
+#content-info {
+	margin-top: 4em;
+	font-size: .875em;
+	font-family: "Franklin gothic medium","arial narrow","DejaVu Sans Condensed","helvetica neue",helvetica,sans-serif;
+	}
+#content-info h2 { 
+	font-size: 1.2em;
+	color: #14709e;
+	}
+#subcategories {
+	font-size: .875em;
+	font-family: "Franklin gothic medium","arial narrow","DejaVu Sans Condensed","helvetica neue",helvetica,sans-serif;
+	}
+#subcategories h3 { 
+	font-size: 1.1em;
+	font-variant: small-caps;
+	}
+#content-info p, 
+#content-info ul, 
+#subcategories ul { 
+	margin: .5em 0;
+	}
+
+/* ------------------------------------------------------- pagination, navlinks */
+#navlinks,
+.navlinks, 
+.pagination {
+	margin: 2em 0 1em 0;
+	padding: 4px 8px;
+	text-align: center;
+	font-size: .875em;
+	color: #000;
+	background: rgb(244,244,245);
+	background: -moz-linear-gradient(top, rgba(244,244,245,1) 0%, rgba(215,215,220,1) 100%);
+	background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,rgba(244,244,245,1)), color-stop(100%,rgba(215,215,220,1)));
+	background: -webkit-linear-gradient(top, rgba(244,244,245,1) 0%,rgba(215,215,220,1) 100%);
+	background: -o-linear-gradient(top, rgba(244,244,245,1) 0%,rgba(215,215,220,1) 100%);
+	background: -ms-linear-gradient(top, rgba(244,244,245,1) 0%,rgba(215,215,220,1) 100%);
+	filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#f4f4f5', endColorstr='#d7d7dc',GradientType=0 );
+	background: linear-gradient(top, rgba(244,244,245,1) 0%,rgba(215,215,220,1) 100%);
+	-moz-border-radius: 4px;
+	-webkit-border-radius: 4px;
+	border-radius: 4px;
+	border-right: 1px solid #aaa;
+	border-bottom: 1px solid #ccc;
+	}
+#navlinks,
+.navlinks {
+	margin-top: 4em;
+	}
+#navlinks a,
+.navlinks a, 
+.pagination a {
+	padding: 0 1em;
+	white-space: nowrap;
+	}
+
+/* ------------------------------------------------------------
+	6. BILLETS
+------------------------------------------------------------- */
+
+.post {
+	background: transparent url(img/filet.png) repeat-x left bottom;
+	}
+.day-date {
+	display: none;
+	}
+.post-title {
+	margin-bottom: .33em;
+	color: #14709e;
+	line-height: 1.17;
+	}
+.post-title a {
+	text-decoration: none;
+	color: #ad3f4c;
+	}
+.post h3, 
+.post h4, 
+.post h5,
+.post h6 {
+	font-variant: small-caps;
+	font-weight: normal;
+	color: #14709e;
+	}
+.post-info, 
+.post-tags, 
+.post-info-co, 
+.read-it, 
+.page-info {
+	line-height: 1.2;	
+	margin: .33em 0;
+	}
+.post-info, 
+.post-tags {
+	font-size: .875em;
+	margin: 0;
+	background: #fff;
+	display: inline;
+	padding: 0 .66em 0 0;
+	}
+.post-info span + span {
+	padding-left: .5em;
+	}
+.post-cat a {
+	padding-left: 24px;
+	background: #fff no-repeat left center url(img/category.png);
+	}
+.post-info a, 
+.post-tags a, 
+.post-info-co a {
+	white-space: nowrap;
+	}
+.post-tags a {
+	padding-right: 1em;
+	padding-left: 14px;
+	background: #fff no-repeat left center url(img/tag.png);
+	}
+.post-tags li {
+	display: inline;
+	}
+.post-content {
+	padding-bottom: 9px;
+	}
+.post ul {
+	list-style-type: square;
+	}
+.footnotes {
+	font-size: .875em;
+	}
+.footnotes h4 {
+	font-variant: normal;
+	font-weight: bold;
+}
+.read-it {
+	text-align: right;
+	margin: 0 0 .25em 0;
+	}
+.read-it a {
+	color: #ad3f4c;
+	}
+.post-info-co, 
+.page-info {
+	margin: 0;
+	background: #fff;
+	display: inline;
+	font-size: 0.875em;
+	font-style: italic;
+	padding-right: .5em;
+	}
+.post-info-co a {
+	text-decoration: none;
+	padding-right: 1em;
+	padding-left: 28px;
+	background-color: #fff;
+	background-repeat: no-repeat;
+	background-position: left center;
+	}
+.post-info-co a.comment_count {
+	background-image: url(img/comment.png);
+	}
+.post-info-co a.ping_count {
+	background-image: url(img/ping.png);
+	}
+.post-info-co a.attach_count {
+	background-image: url(img/attach.png);	
+	}
+#attachments {
+	font-size: .875em;
+	border-bottom: 1px solid #999;
+	margin: 0 0 2em;
+	}
+#attachments h3 {
+	font-variant: small-caps;
+	font-weight: normal;
+	color: #666;
+	}
+#attachments ul {
+	list-style-type: none;
+	margin: 0 0 1em;
+	padding: 0;
+	}
+#attachments ul li {
+	padding-left: 24px;
+	background: #fff url(img/download.png) no-repeat;
+	}
+
+/* ------------------------------------------------------------
+	7. COMMENTAIRES, PINGS
+------------------------------------------------------------- */
+
+/* ------------------------------------------------------- commentaires et rétroliens */
+#comments, 
+#pings, 
+#comment-form,
+#comments-feed { 
+	color: #4c4c85;
+	font-family: "Franklin gothic medium","arial narrow","DejaVu Sans Condensed","helvetica neue",helvetica,sans-serif;
+	font-size: .875em;
+	}
+#comment-form {
+	padding: 1em;
+	background: #eef;
+	margin-top: 1em;
+	color: #333;
+	border: 1px solid #ddf;
+	}
+#pr {
+	padding: 1em;
+	border: 1px dashed #4c4c85;
+	margin-bottom: 1em;
+	}
+#comments h3, 
+#pings h3, 
+#pr h3, 
+#comment-form h3 { 
+	margin-top: 2em;
+	color: #666;
+	}
+#comment-form h3 {
+	margin-top: 0;
+	}
+#comments dl { }
+#comments dt { 
+	padding-bottom: .2em;
+	border-bottom: 1px solid #ccc;
+	margin-top: 1.5em;
+	line-height: 1.1;
+	}
+#comments dd { }
+#comments .first { }
+#comments .odd { }
+#comments .me { 
+	font-family: "Century Schoolbook", "Century Schoolbook L", Georgia, serif;
+	color: #333;
+	font-size: 1.14em;
+	}
+.comment-number {
+	font-size: 2em;
+	font-weight: normal;
+	font-style: italic;
+	text-decoration: none;
+	font-family: "Century Schoolbook", "Century Schoolbook L", Georgia, serif;
+	color: #909090;
+	}
+
+#pings dl { }
+#pings dt { 
+	border-bottom: 1px solid #ccc;
+	margin-top: 1.5em;
+	line-height: 1.1;
+	padding-bottom: .2em;
+	}
+#pings dd { }
+#pings .first { }
+#pings .odd { }
+
+#pr dl { }
+#pr dd { }
+
+/* ------------------------------------------------------- formulaire des commentaires */
+#comment-form fieldset { }
+.field { 
+	margin-bottom: 1em;
+	}
+.field label { 
+	display: block;
+	font-size: .875em;
+	color: #666;
+	text-indent: 6px;
+	}
+.field input, 
+.field textarea {
+	display: block;
+	font-size: 100%;
+	border: 1px solid #ccc;
+	text-indent: 4px;
+	background: #fff;
+	-webkit-border-radius: 3px; 
+	-moz-border-radius: 3px;
+	border-radius: 3px;
+	}
+.field textarea { 
+	font-family: sans-serif;
+	padding: .5em 1em;	
+	}
+.field input:focus, 
+.field textarea:focus {
+	background: #fff;
+	}
+#comment-form input[type=submit], 
+#comment-form input[type=reset] {
+	font-size: .875em;
+	display: inline-block;
+	text-transform: capitalize;
+	font-weight: bold;
+	text-align: center;
+	padding: .33em .66em;
+	text-shadow: 0 1px 1px rgba(0,0,0,.3);
+	-webkit-border-radius: 5px; 
+	-moz-border-radius: 5px;
+	border-radius: 5px;
+	border: solid 1px #777;
+	-webkit-box-shadow: 0 1px 2px rgba(0,0,0,.2);
+	-moz-box-shadow: 0 1px 2px rgba(0,0,0,.2);
+	box-shadow: 0 1px 2px rgba(0,0,0,.2);
+	background: rgb(119,119,119);
+	background: -moz-linear-gradient(top, rgba(119,119,119,1) 0%, rgba(85,85,85,1) 100%);
+	background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,rgba(119,119,119,1)), color-stop(100%,rgba(85,85,85,1)));
+	background: -webkit-linear-gradient(top, rgba(119,119,119,1) 0%,rgba(85,85,85,1) 100%);
+	background: -o-linear-gradient(top, rgba(119,119,119,1) 0%,rgba(85,85,85,1) 100%);
+	background: -ms-linear-gradient(top, rgba(119,119,119,1) 0%,rgba(85,85,85,1) 100%);
+	filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#777777', endColorstr='#555555',GradientType=0 );
+	color: #eee;
+	}
+#comment-form input[type=submit]:hover, #comment-form input[type=submit]:focus,
+#comment-form input[type=reset]:hover, #comment-form input[type=reset]:focus {
+	background: linear-gradient(top, rgba(119,119,119,1) 0%,rgba(85,85,85,1) 100%);
+	background: rgb(85,85,85);
+	background: -moz-linear-gradient(top, rgba(85,85,85,1) 0%, rgba(119,119,119,1) 100%);
+	background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,rgba(85,85,85,1)), color-stop(100%,rgba(119,119,119,1)));
+	background: -webkit-linear-gradient(top, rgba(85,85,85,1) 0%,rgba(119,119,119,1) 100%);
+	background: -o-linear-gradient(top, rgba(85,85,85,1) 0%,rgba(119,119,119,1) 100%);
+	background: -ms-linear-gradient(top, rgba(85,85,85,1) 0%,rgba(119,119,119,1) 100%);
+	filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#555555', endColorstr='#777777',GradientType=0 );
+	background: linear-gradient(top, rgba(85,85,85,1) 0%,rgba(119,119,119,1) 100%);
+	text-decoration: none;
+	}
+#c_content {
+	width: 95%;
+	padding: 4px;
+	}
+
+.form-help { 
+	margin-top: 0;
+	font-size: .875em;
+	font-style: italic;
+	}
+
+#ping-url { 
+	background: #efefef;
+	border-right: 1px solid #aaa;
+	border-bottom: 1px solid #aaa;
+	font-size: .81em;
+	padding-left: .5em;
+	}
+#comments-feed { 
+	margin-top: 2em; 
+	}
+
+/* ------------------------------------------------------------
+	8. SIDEBAR
+------------------------------------------------------------- */
+
+#sidebar {
+	font-size: 0.875em;
+	}
+#sidebar h2 {
+	font-size: 1.1em;
+	margin: 0;
+	font-weight: normal;
+	font-family: "Franklin gothic medium","arial narrow","DejaVu Sans Condensed","helvetica neue",helvetica,sans-serif;
+	color: #333;
+	}
+#sidebar h3 {
+	font-size: 1em;
+	margin-bottom: 0;
+	font-weight: normal;
+	font-family: "Franklin gothic medium","arial narrow","DejaVu Sans Condensed","helvetica neue",helvetica,sans-serif;
+	color: #333;
+	}
+#sidebar ul {
+	margin: .75em 0 .5em 4px;
+	list-style-type: none;
+	padding: 0;
+	}
+#sidebar ul li ul {
+	margin-top: .5em;
+	}
+#sidebar ul li {
+	padding-left: 16px;
+	background: transparent url(img/square.png) no-repeat 0 .5em;
+	}
+#sidebar ul li ul li {
+	background-image: url(img/square2.png);
+	}
+#sidebar ul li ul li ul li {
+	background-image: url(img/square3.png);
+	}
+#sidebar .syndicate ul li {
+	background-image: none;
+	padding-left: 0;
+}
+#blognav > div, 
+#blogextra > div {
+	background: #ededed;
+	margin-bottom: 1em;
+	padding: 4px 8px;
+	-webkit-box-shadow: 2px 2px 4px rgba(0,0,0,.2);
+	-moz-box-shadow: 2px 2px 4px rgba(0,0,0,.2);
+	-o-box-shadow: 2px 2px 4px rgba(0,0,0,.2);
+	box-shadow: 2px 2px 4px rgba(0,0,0,.2);
+	}
+	
+/* ------------------------------------------------------- recherche */
+#search p {
+	background: #fff; 
+	text-align: right;
+	border: 1px solid #ddd;
+	vertical-align: middle;
+	padding: 0;
+	}
+#search input { 
+	margin: 0;
+	border: none;
+	background: transparent;
+	height: auto;
+	line-height: 2em;
+	}
+#q {
+	float: left;
+	width: 78%;
+	font-size: 100%;
+	padding-left: 2px;
+	}
+#q:focus {
+	background: #fcfcf9;
+	}
+#search .submit {
+	background: #706F6F;
+	color: #fff;
+	vertical-align: top;
+	width: 20%;
+	font-variant: small-caps;
+	height: 2em;
+	}
+#search .submit:hover, 
+#search .submit:focus {
+	background: #333;
+	}
+	
+/* ------------------------------------------------------------
+	9. FOOTER
+------------------------------------------------------------- */
+
+#footer {
+	clear: both;
+	background: #686867;
+	color: #fff;
+	}
+#footer p {
+	padding: .66em 2em;
+	margin: 0;
+	text-align: right;
+	font-size: .875em;
+	font-family: "Franklin gothic medium","arial narrow","DejaVu Sans Condensed","helvetica neue",helvetica,sans-serif;
+	}
+#footer a {
+	color: #fff;
+	}
+#footer a:hover, 
+#footer a:focus {
+	background: #686867;
+	}
+#stickers {
+	list-style-type: none;
+	margin: 0;
+	}
+	
+/* ------------------------------------------------------------
+	10. CLASSES COMMUNES
+------------------------------------------------------------- */
+
+/* ------------------------------------------------------- RSS */
+.feed { 
+	padding-left: 20px;
+	background : transparent url(img/feed.png) no-repeat left center;
+	}
+
+/* ------------------------------------------------------- tags */	
+.dc-tags .content-inner, 
+.dc-tags .content-inner ul {
+	font-size: 1.25em;
+	margin: 0;
+	padding: 0;
+	}
+.dc-tags #content ul li, 
+.dc-tags #content ul li a, 
+#sidebar .tags ul li, 
+#sidebar .tags ul li a {
+	display : inline;
+	width : auto;
+	padding-left : 0;
+	padding-right : .5em;
+	background-color : transparent;
+	background-image: none;
+	text-decoration: none;
+	line-height : 1.5em;
+	}
+.tags ul li a:hover {
+	background-image :none;
+	}
+.dc-tags .tag0, .tags .tag0 { font-size: 85%; }
+.dc-tags .tag10, .tags .tag10 { font-size: 90%; }
+.dc-tags .tag20, .tags .tag20 { font-size: 95%; }
+.dc-tags .tag30, .tags .tag30 { font-size: 100%; }
+.dc-tags .tag40, .tags .tag40 { font-size: 105%; }
+.dc-tags .tag50, .tags .tag50 { font-size: 110%; }
+.dc-tags .tag60, .tags .tag60 { font-size: 115%; }
+.dc-tags .tag70, .tags .tag70 { font-size: 120%; }
+.dc-tags .tag80, .tags .tag80 { font-size: 125%; }
+.dc-tags .tag90, .tags .tag90 { font-size: 130%; }
+.dc-tags .tag100, .tags .tag100 { font-size: 135%; }
+
+/* ------------------------------------------------------- messages d'erreur */
+.error {
+	border : 1px solid #c44;
+	background : #df0;
+	padding : 0.5em;
+	}
+.error ul {
+	padding-left : 20px;
+	}
+.error li {
+	list-style : square;
+	}
+
+/* ------------------------------------------------------- class à dispo pour billets */
+.left { float: left; margin-right : 1em; }
+.right { float: right; margin-left : 1em; }
+.center { margin-left : auto; margin-right : auto; }
+.left-text { text-align : left; }
+.right-text { text-align : right; }
+.center-text { text-align : center; }
+.little-text { font-size : .875em;}
+.little-upper-text { font-size : .875em; text-transform : uppercase; }
+hr.hidden {background: #fff; color: #fff; border-color: #fff; }
+
+
+/* ------------------------------------------------------------
+	11. PAGES SPECIFIQUES
+------------------------------------------------------------- */
+
+.dc-home { }
+.dc-post { }
+.dc-category { }
+
+/* ---------------------------------------------------------------- archives */
+.dc-archive {}
+#time-criteria {}
+#other-criteria {}
+#more-arch {}
+.arch-block {
+	display: inline-block;
+	margin: 0 0 2em 4em;
+	vertical-align: top;
+	}
+.arch-block:first-child {
+	margin-left: 0;
+	}
+.arch-block h3 {
+	margin-bottom: 1em;
+	font-size: 1.2em;
+	font-style: italic;
+	font-weight: normal;
+	text-transform: lowercase;
+	color: #14709e;
+	}
+.arch-block h4 {
+	font-family: "Franklin gothic medium","arial narrow","DejaVu Sans Condensed","helvetica neue",helvetica,sans-serif;
+	font-weight: normal;
+	font-size: 1.1em;
+	margin-bottom: 0;
+	margin-top: 0;
+	}
+.arch-block ul {
+	list-style-type: none;
+	margin: 0;
+	padding: 0;
+	}
+.arch-block ul ul {
+	margin-left: 20px;
+	}
+
+#by-date {
+	margin-right: 0;
+	margin-bottom: 1em;
+	}
+#by-date h3 {
+	margin-bottom: 0;
+	}
+.fromto {
+	margin-top: 0;
+	margin-bottom: 1.5em;
+	font-size: .875em;
+	font-style: italic;
+	}
+#by-date div {
+	display: inline-block;
+	vertical-align: top;
+	margin: 0;
+	width: 10em;
+	}
+#by-date ul {
+	margin-bottom: 1.5em;
+	}
+#by-date span {
+	font-size: .875em;
+	}
+
+#by-cat ul {
+	background: transparent url(img/vline.png) repeat-y;
+	}
+#by-cat ul ul {
+	margin: .5em 0 0 .5em;
+	}
+#by-cat ul li {
+	padding: .2em .2em .2em 20px;
+	background: transparent url(img/hline.png) no-repeat left .82em;
+	}
+#by-cat ul li:last-child {
+	background-image: url(img/last-hline.png);
+	}
+#by-tag {
+	width: 18em;
+	}	
+#by-tag ul li {
+	display: inline;
+	padding-right: 1em;
+}
+#by-tag .tag0 { color: #909090; font-size: 90%; }
+#by-tag .tag10 { color: #828282; font-size: 92%; }
+#by-tag .tag20 { color: #737373; font-size: 94%; }
+#by-tag .tag30 { color: #656565; font-size: 96%; }
+#by-tag .tag40 { color: #484848; font-size: 98%; }
+#by-tag .tag50 { color: #3A3A3A; font-size: 100%; }
+#by-tag .tag60 { color: #2B2B2B; font-size: 102%; }
+#by-tag .tag70 { color: #1D1D1D; font-size: 104%; }
+#by-tag .tag80 { color: #0E0E0E; font-size: 106%; }
+#by-tag .tag90 { color: #030303; font-size: 108%; }
+#by-tag .tag100 { color: #000; font-size: 110%;}
+
+
+.dc-archive #search {
+	padding: 4px;
+	}
+.dc-archive #blogextra div {
+	background-color: transparent;
+	margin-bottom: 1em;
+	padding: 4px;
+	border: 1px solid #ccc;
+	-webkit-box-shadow: none;
+	-moz-box-shadow: none;
+	-o-box-shadow: none;
+	box-shadow: none;
+	}
+.dc-archive #blogextra h2 {
+	margin-bottom: .33em;
+	}	
+	
+.dc-archive-month h2.post-title {
+	font-size: 1.3em;
+	}
+
+.dc-tags { }
+.dc-tag { }
+.dc-404 { }
+.dc-search { }
+
+
+/* ---------------------------------------------------
+  12. ET POUR FINIR NE PAS OUBLIER LES CLEARERS
+--------------------------------------------------- */
+.post, 
+.footnotes, 
+#attachments,
+.read-it, 
+.post-info-co, 
+#comments, #footer {
+	clear:both;
+	}
+
+/* ================================================ 
+	personnalisations blog chantier
+================================================ */
+.post-content img, .post-excerpt img {
+	border: 1px solid #ccc;
+	}
Index: themes/ductile/tpl/_entry-full.html
===================================================================
--- themes/ductile/tpl/_entry-full.html	(revision 440)
+++ themes/ductile/tpl/_entry-full.html	(revision 440)
@@ -0,0 +1,50 @@
+    <div id="p{{tpl:EntryID}}" class="post {{tpl:EntryIfOdd}} {{tpl:EntryIfFirst}} full" lang="{{tpl:EntryLang}}" xml:lang="{{tpl:EntryLang}}">
+    <!-- # New day date -->
+    <tpl:DateHeader><p class="day-date">{{tpl:EntryDate}}</p></tpl:DateHeader>
+    
+    <h2 class="post-title"><a
+    href="{{tpl:EntryURL}}">{{tpl:EntryTitle encode_html="1"}}</a></h2>
+    
+		<div class="post-attr">
+	    <p class="post-info">
+	    	<span class="post-author">{{tpl:lang By}} {{tpl:EntryAuthorLink}}, </span>
+	    	<span class="post-date">{{tpl:lang on}} {{tpl:EntryDate}}, {{tpl:EntryTime}}. </span>
+	    	<tpl:EntryIf has_category="1">
+	    		<span class="post-cat"><a href="{{tpl:EntryCategoryURL}}">{{tpl:EntryCategory encode_html="1"}}</a></span>
+	    	</tpl:EntryIf>
+	    </p>
+	    
+	    <tpl:EntryTags>
+	    <tpl:TagsHeader><p class="post-tags"></tpl:TagsHeader>
+	    <a href="{{tpl:TagURL}}">{{tpl:TagID}} </a>
+	    <tpl:TagsFooter></p></tpl:TagsFooter>
+	    </tpl:EntryTags>
+		</div>    
+
+    <!-- # --BEHAVIOR-- publicEntryBeforeContent -->
+    {{tpl:SysBehavior behavior="publicEntryBeforeContent"}}
+    
+    	<tpl:EntryIf extended="1">
+      	<div class="post-excerpt">{{tpl:EntryExcerpt}}</div>
+      </tpl:EntryIf>
+      <div class="post-content">{{tpl:EntryContent}}</div>
+
+    
+    <!-- # --BEHAVIOR-- publicEntryAfterContent -->
+    {{tpl:SysBehavior behavior="publicEntryAfterContent"}}
+    
+    <!-- # Number of comments, trackbacks and attachments -->
+    <tpl:EntryIf operator="or" show_comments="1" show_pings="1" has_attachment="1">
+      <p class="post-info-co">
+    </tpl:EntryIf>
+    <tpl:EntryIf show_comments="1">
+      <a href="{{tpl:EntryURL}}#comments" class="comment_count">{{tpl:EntryCommentCount}}</a>
+    </tpl:EntryIf>
+    <tpl:EntryIf show_pings="1">
+      <a href="{{tpl:EntryURL}}#pings" class="ping_count">{{tpl:EntryPingCount}}</a></tpl:EntryIf>
+    <tpl:EntryIf has_attachment="1">
+      <a href="{{tpl:EntryURL}}#attachments" class="attach_count">{{tpl:EntryAttachmentCount}}</a></tpl:EntryIf>
+    <tpl:EntryIf operator="or" show_comments="1" show_pings="1" has_attachment="1">
+      </p>
+    </tpl:EntryIf>
+    </div>
Index: themes/ductile/tpl/_entry-short.html
===================================================================
--- themes/ductile/tpl/_entry-short.html	(revision 441)
+++ themes/ductile/tpl/_entry-short.html	(revision 441)
@@ -0,0 +1,60 @@
+    <div id="p{{tpl:EntryID}}" class="post {{tpl:EntryIfOdd}} {{tpl:EntryIfFirst}} short" lang="{{tpl:EntryLang}}" xml:lang="{{tpl:EntryLang}}">
+    <!-- # New day date -->
+    <tpl:DateHeader><p class="day-date">{{tpl:EntryDate}}</p></tpl:DateHeader>
+    
+    <h2 class="post-title"><a
+    href="{{tpl:EntryURL}}">{{tpl:EntryTitle encode_html="1"}}</a></h2>
+    
+		<div class="post-attr">
+	    <p class="post-info">
+	    	<span class="post-author">{{tpl:lang By}} {{tpl:EntryAuthorLink}}, </span>
+	    	<span class="post-date">{{tpl:lang on}} {{tpl:EntryDate}}. </span>
+	    	<tpl:EntryIf has_category="1">
+	    		<span class="post-cat"><a href="{{tpl:EntryCategoryURL}}">{{tpl:EntryCategory encode_html="1"}}</a></span>
+	    	</tpl:EntryIf>
+	    </p>
+	    
+	    <tpl:EntryTags>
+	    <tpl:TagsHeader><p class="post-tags"></tpl:TagsHeader>
+	    <a href="{{tpl:TagURL}}">{{tpl:TagID}}</a>
+	    <tpl:TagsFooter></p></tpl:TagsFooter>
+	    </tpl:EntryTags>
+		</div>    
+    
+    <!-- # --BEHAVIOR-- publicEntryBeforeContent -->
+    {{tpl:SysBehavior behavior="publicEntryBeforeContent"}}
+    
+    <!-- # Entry with an excerpt -->
+    <tpl:EntryIf extended="1">
+      <div class="post-content">{{tpl:EntryExcerpt}}</div>
+      <p class="read-it"><a href="{{tpl:EntryURL}}"
+      title="{{tpl:lang Continue reading}} {{tpl:EntryTitle encode_html="1"}}">{{tpl:lang Continue
+      reading}}</a></p>
+    </tpl:EntryIf>
+    
+    <!-- # Entry without excerpt -->
+    <tpl:EntryIf extended="0">
+      <div class="post-content">{{tpl:EntryContent encode_html="1" remove_html="1" cut_string="300"}}</div>
+      <p class="read-it"><a href="{{tpl:EntryURL}}"
+      title="{{tpl:lang Continue reading}} {{tpl:EntryTitle encode_html="1"}}">{{tpl:lang Continue
+      reading}}</a></p>
+    </tpl:EntryIf>
+    
+    <!-- # --BEHAVIOR-- publicEntryAfterContent -->
+    {{tpl:SysBehavior behavior="publicEntryAfterContent"}}
+    
+    <!-- # Number of comments, trackbacks and attachments -->
+    <tpl:EntryIf operator="or" show_comments="1" show_pings="1" has_attachment="1">
+      <p class="post-info-co">
+    </tpl:EntryIf>
+    <tpl:EntryIf show_comments="1">
+      <a href="{{tpl:EntryURL}}#comments" class="comment_count">{{tpl:EntryCommentCount}}</a>
+    </tpl:EntryIf>
+    <tpl:EntryIf show_pings="1">
+      <a href="{{tpl:EntryURL}}#pings" class="ping_count">{{tpl:EntryPingCount}}</a></tpl:EntryIf>
+    <tpl:EntryIf has_attachment="1">
+      <a href="{{tpl:EntryURL}}#attachments" class="attach_count">{{tpl:EntryAttachmentCount}}</a></tpl:EntryIf>
+    <tpl:EntryIf operator="or" show_comments="1" show_pings="1" has_attachment="1">
+      </p>
+    </tpl:EntryIf>
+    </div>
Index: themes/ductile/tpl/_entry-title.html
===================================================================
--- themes/ductile/tpl/_entry-title.html	(revision 440)
+++ themes/ductile/tpl/_entry-title.html	(revision 440)
@@ -0,0 +1,38 @@
+    <div id="p{{tpl:EntryID}}" class="post {{tpl:EntryIfOdd}} {{tpl:EntryIfFirst}} title" lang="{{tpl:EntryLang}}" xml:lang="{{tpl:EntryLang}}">
+    <!-- # New day date -->
+    <tpl:DateHeader><p class="day-date">{{tpl:EntryDate}}</p></tpl:DateHeader>
+    
+    <h2 class="post-title"><a
+    href="{{tpl:EntryURL}}">{{tpl:EntryTitle encode_html="1"}}</a></h2>
+    
+		<div class="post-attr">
+	    <p class="post-info">
+	    	<span class="post-author">{{tpl:lang By}} {{tpl:EntryAuthorLink}}, </span>
+	    	<span class="post-date">{{tpl:lang on}} {{tpl:EntryDate}}. </span>
+	    	<tpl:EntryIf has_category="1">
+	    		<span class="post-cat"><a href="{{tpl:EntryCategoryURL}}">{{tpl:EntryCategory encode_html="1"}}</a></span>
+	    	</tpl:EntryIf>
+	    </p>
+		</div>    
+    
+    <!-- # --BEHAVIOR-- publicEntryBeforeContent -->
+    {{tpl:SysBehavior behavior="publicEntryBeforeContent"}}
+    
+    <!-- # --BEHAVIOR-- publicEntryAfterContent -->
+    {{tpl:SysBehavior behavior="publicEntryAfterContent"}}
+    
+    <!-- # Number of comments, trackbacks and attachments -->
+    <tpl:EntryIf operator="or" show_comments="1" show_pings="1" has_attachment="1">
+      <p class="post-info-co">
+    </tpl:EntryIf>
+    <tpl:EntryIf show_comments="1">
+      <a href="{{tpl:EntryURL}}#comments" class="comment_count">{{tpl:EntryCommentCount}}</a>
+    </tpl:EntryIf>
+    <tpl:EntryIf show_pings="1">
+      <a href="{{tpl:EntryURL}}#pings" class="ping_count">{{tpl:EntryPingCount}}</a></tpl:EntryIf>
+    <tpl:EntryIf has_attachment="1">
+      <a href="{{tpl:EntryURL}}#attachments" class="attach_count">{{tpl:EntryAttachmentCount}}</a></tpl:EntryIf>
+    <tpl:EntryIf operator="or" show_comments="1" show_pings="1" has_attachment="1">
+      </p>
+    </tpl:EntryIf>
+    </div>
Index: themes/ductile/tpl/_footer.html
===================================================================
--- themes/ductile/tpl/_footer.html	(revision 497)
+++ themes/ductile/tpl/_footer.html	(revision 497)
@@ -0,0 +1,18 @@
+<ul id="gotop" class="supranav nobig"><li><a href="#top">Haut de page</a></li></ul>
+
+<ul id="sn-bottom" class="supranav nobig">
+	<li class="li1" class="active"><a href="{{tpl:BlogURL}}">Accueil<span> articles récents</span></a></li>
+	<li class="li2"><a href="#">Construire un thème<span> tutoriels</span></a></li>
+	<li class="li3"><a href="#">Maquettes<span> projets graphiques</span></a></li>
+	<li class="li4"><a href="{{tpl:BlogURL}}archive">Archives<span> 2005-2011</span></a></li>
+</ul>
+
+<div id="footer">
+
+	{{tpl:SysBehavior behavior="publicInsideFooter"}}
+
+
+	<p>{{tpl:SysPoweredBy}}</p>
+</div>
+
+{{tpl:SysBehavior behavior="publicFooterContent"}}
Index: themes/ductile/tpl/_head.html
===================================================================
--- themes/ductile/tpl/_head.html	(revision 497)
+++ themes/ductile/tpl/_head.html	(revision 497)
@@ -0,0 +1,20 @@
+<!-- media queries -->
+	<meta name="viewport" content="width=device-width" />
+	<!-- compat media queries -->
+	<!--[if lt IE 9]>
+		<script src="http://css3-mediaqueries-js.googlecode.com/svn/trunk/css3-mediaqueries.js"></script>
+	<![endif]-->
+
+
+<style type="text/css" media="screen">
+@import url({{tpl:BlogThemeURL}}/style.css);
+</style>
+<style type="text/css" media="print">
+@import url({{tpl:BlogThemeURL}}/../default/print.css);
+</style>
+
+<script type="text/javascript" src="{{tpl:BlogThemeURL}}/../default/js/jquery.js"></script>
+<script type="text/javascript" src="{{tpl:BlogThemeURL}}/../default/js/jquery.cookie.js"></script>
+
+{{tpl:include src="user_head.html"}}
+{{tpl:SysBehavior behavior="publicHeadContent"}}
Index: themes/ductile/tpl/_pagination.html
===================================================================
--- themes/ductile/tpl/_pagination.html	(revision 459)
+++ themes/ductile/tpl/_pagination.html	(revision 459)
@@ -0,0 +1,14 @@
+<tpl:Pagination>
+	<p class="pagination">
+		<tpl:PaginationIf end="0">
+			<a href="{{tpl:PaginationURL offset="+1"}}" class="prev">&#171;
+			{{tpl:lang previous entries}}</a> - 
+		</tpl:PaginationIf>
+
+		{{tpl:lang page}} {{tpl:PaginationCurrent}} {{tpl:lang of}} {{tpl:PaginationCounter}}
+
+		<tpl:PaginationIf start="0"> - <a href="{{tpl:PaginationURL offset="-1"}}" class="next">
+			{{tpl:lang next entries}} &#187;</a>
+		</tpl:PaginationIf>
+	</p>
+</tpl:Pagination>
Index: themes/ductile/tpl/_sidebar.html
===================================================================
--- themes/ductile/tpl/_sidebar.html	(revision 436)
+++ themes/ductile/tpl/_sidebar.html	(revision 436)
@@ -0,0 +1,10 @@
+<div id="sidebar">
+
+  <div id="blognav">
+    {{tpl:Widgets type="nav"}}
+  </div> <!-- End #blognav -->
+  
+  <div id="blogextra">
+    {{tpl:Widgets type="extra"}}
+  </div> <!-- End #blogextra -->
+</div>
Index: themes/ductile/tpl/_top.html
===================================================================
--- themes/ductile/tpl/_top.html	(revision 497)
+++ themes/ductile/tpl/_top.html	(revision 497)
@@ -0,0 +1,27 @@
+<div id="header">
+
+	<div id="top">
+  	<h1><span><a href="{{tpl:BlogURL}}">{{tpl:BlogName encode_html="1"}}</a></span></h1>
+		<p id="blogdesc" class="nosmall">{{tpl:BlogDescription}}</p>
+	</div>
+
+	<ul id="prelude">
+		<li class="nosmall"><a href="#main">{{tpl:lang To content}}</a></li>
+		<li><a href="#blognav">{{tpl:lang To menu}}</a></li>
+		<li><a href="#search">{{tpl:lang To search}}</a></li>
+	</ul>
+
+	<!-- # --BEHAVIOR-- publicTopAfterContent -->
+	{{tpl:SysBehavior behavior="publicTopAfterContent"}}
+
+	<!-- Pour Franck: 
+	Ajouter un id incrémental
+	Par défaut : accueil, archives (rien dans le span)
+	-->
+	<ul id="sn-top" class="supranav nosmall">
+		<li class="li1" class="active"><a href="{{tpl:BlogURL}}">Accueil<span> articles récents</span></a></li>
+		<li class="li2"><a href="#">Construire un thème<span> tutoriels</span></a></li>
+		<li class="li3"><a href="#">Maquettes<span> projets graphiques</span></a></li>
+		<li class="li4"><a href="{{tpl:BlogURL}}archive">Archives<span> 2005-2011</span></a></li>
+	</ul>
+</div>
Index: themes/ductile/tpl/archive.html
===================================================================
--- themes/ductile/tpl/archive.html	(revision 502)
+++ themes/ductile/tpl/archive.html	(revision 502)
@@ -0,0 +1,143 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="{{tpl:BlogLanguage}}" lang="{{tpl:BlogLanguage}}">
+<head>
+  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+  <meta name="ROBOTS" content="{{tpl:BlogMetaRobots}}" />
+  
+  <title>{{tpl:lang Archives}} - {{tpl:BlogName encode_html="1"}}</title>
+  <meta name="copyright" content="{{tpl:BlogCopyrightNotice encode_html="1"}}" />
+  <meta name="author" content="{{tpl:BlogEditor encode_html="1"}}" />
+  <meta name="date" scheme="W3CDTF" content="{{tpl:BlogUpdateDate iso8601="1"}}" />
+  
+  <link rel="schema.dc" href="http://purl.org/dc/elements/1.1/" />
+  <meta name="dc.title" lang="{{tpl:BlogLanguage}}" content="{{tpl:lang Archives}} - {{tpl:BlogName encode_html="1"}}" />
+  <meta name="dc.language" content="{{tpl:BlogLanguage}}" />
+  <meta name="dc.publisher" content="{{tpl:BlogEditor encode_html="1"}}" />
+  <meta name="dc.rights" content="{{tpl:BlogCopyrightNotice encode_html="1"}}" />
+  <meta name="dc.date" scheme="W3CDTF" content="{{tpl:BlogUpdateDate iso8601="1"}}" />
+  <meta name="dc.type" content="text" />
+  <meta name="dc.format" content="text/html" />
+  
+  <link rel="top" href="{{tpl:BlogURL}}" title="{{tpl:lang Home}}" />
+  
+  <tpl:Archives>
+    <link rel="chapter" href="{{tpl:ArchiveURL}}" title="{{tpl:ArchiveDate encode_html="1"}}" />
+  </tpl:Archives>
+  
+  <link rel="contents" title="{{tpl:lang Archives}}" href="{{tpl:BlogArchiveURL}}" />
+  <tpl:Categories>
+  <link rel="section" href="{{tpl:CategoryURL}}" title="{{tpl:CategoryTitle encode_html="1"}}" />
+  </tpl:Categories>
+  <link rel="alternate" type="application/atom+xml" title="Atom 1.0" href="{{tpl:BlogFeedURL type="atom"}}" />
+  
+  {{tpl:include src="_head.html"}}
+</head>
+
+<body class="dc-archive">
+<div id="page">
+{{tpl:include src="_top.html"}}
+
+<div id="wrapper">
+
+<div id="main">
+  <div id="content">
+  
+  <div id="content-info">
+    <h2>{{tpl:lang Archives}}</h2>
+  </div>
+  
+  <div class="content-inner">
+
+	<div id="time-criteria"><!-- entries sorted by date -->
+		<div id="by-date" class="arch-block">
+			<h3>{{tpl:lang By date}}</h3>
+			<p class="fromto">{{tpl:lang From}} <tpl:Entries no_content="1" order="asc" lastn="1"><a href="{{tpl:EntryURL}}">{{tpl:EntryDate format="%d %B %Y"}}</a></tpl:Entries> {{tpl:lang to}} <tpl:Entries no_content="1" order="desc" lastn="1"><a href="{{tpl:EntryURL}}">{{tpl:EntryDate format="%d %B %Y"}}</a></tpl:Entries></p>
+	  	<tpl:Archives order="asc">
+		    <tpl:ArchivesYearHeader>
+		    	<div>
+		      <h4>{{tpl:ArchiveDate format="%Y"}}</h4>
+		      <ul>
+			    </tpl:ArchivesYearHeader>
+			      <li><a href="{{tpl:ArchiveURL}}" title="{{tpl:ArchiveDate encode_html="1"}}">{{tpl:ArchiveDate encode_html="1" format="%B"}}</a>
+			      <span>({{tpl:ArchiveEntriesCount}})</span></li>
+			    <tpl:ArchivesYearFooter>
+		      </ul>
+		      </div>
+		    </tpl:ArchivesYearFooter>
+	  	</tpl:Archives>
+	  </div>
+	</div>
+
+	<div id="other-criteria"><!-- entries sorted by others criterias -->	
+		<tpl:Categories level="1">
+			<tpl:CategoriesHeader>
+				<div id="by-cat" class="arch-block">
+				<h3>{{tpl:lang By category}}</h3>
+				<ul>
+			</tpl:CategoriesHeader>
+				<li><a href="{{tpl:CategoryURL}}">{{tpl:CategoryTitle encode_html="1"}}</a>
+				<tpl:CategoryFirstChildren>
+					<tpl:CategoriesHeader>
+					<ul>
+					</tpl:CategoriesHeader>
+						<li><a href="{{tpl:CategoryURL}}">{{tpl:CategoryTitle encode_html="1"}}</a></li>				
+					<tpl:CategoriesFooter>
+					</ul>
+					</tpl:CategoriesFooter>
+				</tpl:CategoryFirstChildren>			
+				</li>
+			<tpl:CategoriesFooter>
+			</ul>
+			</div>
+			</tpl:CategoriesFooter>
+		</tpl:Categories>
+	
+		<tpl:Tags sortby="count" order="desc">
+			<tpl:TagsHeader>
+			<div id="by-tag" class="arch-block">
+				<h3>{{tpl:lang By tag}}</h3>
+				<ul>
+			</tpl:TagsHeader>
+					<li><a href="{{tpl:TagURL}}" class="tag{{tpl:TagRoundPercent}}">{{tpl:TagID}}</a></li>
+			<tpl:TagsFooter>
+				</ul>	
+			</div>
+			</tpl:TagsFooter>
+		</tpl:Tags>
+	</div>
+
+	<div id="more-arch"><!-- others things -->		
+		<div class="arch-block">
+			<tpl:Entries type="page" no_content="1">
+				<tpl:EntriesHeader><h3>{{tpl:lang Pages}}</h3>
+					<ul></tpl:EntriesHeader>
+					<li><a href="{{tpl:EntryURL}}">{{tpl:EntryTitle encode_html="1"}}</a></li>
+				<tpl:EntriesFooter></ul></tpl:EntriesFooter>
+			</tpl:Entries>
+		</div>
+	</div>
+  </div> <!-- End .content-inner -->
+  
+  </div> <!-- End #main -->
+</div> <!-- End #main -->
+
+<div id="sidebar">
+  <div id="blognav">
+		<tpl:Widget id="search">
+		</tpl:Widget>
+  </div> <!-- End #blognav -->
+
+  <div id="blogextra">
+		{{tpl:Widgets type="extra"}}
+	</div>
+
+  </div> <!-- End #blogextra -->
+</div>
+
+</div> <!-- End #wrapper -->
+
+{{tpl:include src="_footer.html"}}
+</div> <!-- End #page -->
+</body>
+</html>
Index: themes/ductile/tpl/archive_month.html
===================================================================
--- themes/ductile/tpl/archive_month.html	(revision 470)
+++ themes/ductile/tpl/archive_month.html	(revision 470)
@@ -0,0 +1,80 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="{{tpl:BlogLanguage}}" lang="{{tpl:BlogLanguage}}">
+<head>
+  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+  <meta name="ROBOTS" content="{{tpl:BlogMetaRobots robots="NOINDEX"}}" />
+  
+  <title>{{tpl:lang Archives}} - {{tpl:ArchiveDate}} - {{tpl:BlogName encode_html="1"}}</title>
+  <meta name="copyright" content="{{tpl:BlogCopyrightNotice encode_html="1"}}" />
+  <meta name="author" content="{{tpl:BlogEditor encode_html="1"}}" />
+  <meta name="date" scheme="W3CDTF" content="{{tpl:BlogUpdateDate iso8601="1"}}" />
+  
+  <link rel="schema.dc" href="http://purl.org/dc/elements/1.1/" />
+  <meta name="dc.title" lang="{{tpl:BlogLanguage}}" content="{{tpl:lang Archives}} - {{tpl:ArchiveDate}} - {{tpl:BlogName encode_html="1"}}" />
+  <meta name="dc.language" content="{{tpl:BlogLanguage}}" />
+  <meta name="dc.publisher" content="{{tpl:BlogEditor encode_html="1"}}" />
+  <meta name="dc.rights" content="{{tpl:BlogCopyrightNotice encode_html="1"}}" />
+  <meta name="dc.date" scheme="W3CDTF" content="{{tpl:BlogUpdateDate iso8601="1"}}" />
+  <meta name="dc.type" content="text" />
+  <meta name="dc.format" content="text/html" />
+  
+  <link rel="top" href="{{tpl:BlogURL}}" title="{{tpl:lang Home}}" />
+  <link rel="up" href="{{tpl:BlogArchiveURL}}" title="{{tpl:lang Archives}}" />
+  <link rel="contents" href="{{tpl:BlogArchiveURL}}" title="{{tpl:lang Archives}}" />
+  
+  
+  <tpl:ArchiveNext><link rel="next" href="{{tpl:ArchiveURL}}"
+  title="{{tpl:ArchiveDate encode_html="1"}}" /></tpl:ArchiveNext>
+  <tpl:ArchivePrevious><link rel="prev" href="{{tpl:ArchiveURL}}"
+  title="{{tpl:ArchiveDate encode_html="1"}}" /></tpl:ArchivePrevious>
+  
+  <tpl:Entries no_content="1">
+  <link rel="chapter" href="{{tpl:EntryURL}}" title="{{tpl:EntryTitle encode_html="1"}}" />
+  </tpl:Entries>
+  
+  {{tpl:include src="_head.html"}}
+</head>
+
+<body class="dc-archive-month">
+<div id="page">
+{{tpl:include src="_top.html"}}
+
+<div id="wrapper">
+
+<div id="main">
+  <div id="content">
+  
+	  <p class="navlinks">
+		  <tpl:ArchivePrevious><a href="{{tpl:ArchiveURL}}" class="prev">&#171; {{tpl:ArchiveDate encode_html="1"}}</a> - </tpl:ArchivePrevious>
+		  {{tpl:ArchiveDate}}
+		  <tpl:ArchiveNext> - <a href="{{tpl:ArchiveURL}}" class="next">{{tpl:ArchiveDate encode_html="1"}} &#187;</a></tpl:ArchiveNext>
+	  </p>
+  
+	  <div id="content-info">
+	    <h2>{{tpl:ArchiveDate}} <span>({{tpl:ArchiveEntriesCount}})</span></h2>
+	  </div>
+  
+	  <div class="content-inner">
+	  	<tpl:Entries no_content="1">
+				{{tpl:include src="_entry-title.html"}}
+		  </tpl:Entries>
+	  </div>
+
+	  <p class="navlinks">
+		  <tpl:ArchivePrevious><a href="{{tpl:ArchiveURL}}" class="prev">&#171; {{tpl:ArchiveDate encode_html="1"}}</a> - </tpl:ArchivePrevious>
+		  {{tpl:ArchiveDate}}
+		  <tpl:ArchiveNext> - <a href="{{tpl:ArchiveURL}}" class="next">{{tpl:ArchiveDate encode_html="1"}} &#187;</a></tpl:ArchiveNext>
+	  </p>
+  
+  </div>
+</div> <!-- End #main -->
+
+{{tpl:include src="_sidebar.html"}}
+
+</div> <!-- End #wrapper -->
+
+{{tpl:include src="_footer.html"}}
+</div> <!-- End #page -->
+</body>
+</html>
Index: themes/ductile/tpl/home.html
===================================================================
--- themes/ductile/tpl/home.html	(revision 470)
+++ themes/ductile/tpl/home.html	(revision 470)
@@ -0,0 +1,96 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="{{tpl:BlogLanguage}}" lang="{{tpl:BlogLanguage}}">
+<head>
+  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
+  <meta name="ROBOTS" content="{{tpl:BlogMetaRobots}}" />
+  
+  <title>{{tpl:BlogName encode_html="1"}}<tpl:PaginationIf start="0"> - {{tpl:lang page}} {{tpl:PaginationCurrent}}</tpl:PaginationIf></title>
+  <meta name="description" lang="{{tpl:BlogLanguage}}" content="{{tpl:BlogDescription cut_string="180" encode_html="1"}}<tpl:PaginationIf start="0"> - {{tpl:lang page}} {{tpl:PaginationCurrent}}</tpl:PaginationIf>" />
+  <meta name="copyright" content="{{tpl:BlogCopyrightNotice encode_html="1"}}" />
+  <meta name="author" content="{{tpl:BlogEditor encode_html="1"}}" />
+  <meta name="date" scheme="W3CDTF" content="{{tpl:BlogUpdateDate iso8601="1"}}" />
+  
+  <link rel="schema.dc" href="http://purl.org/dc/elements/1.1/" />
+  <meta name="dc.title" lang="{{tpl:BlogLanguage}}" content="{{tpl:BlogName encode_html="1"}}<tpl:PaginationIf start="0"> - {{tpl:lang page}} {{tpl:PaginationCurrent}}</tpl:PaginationIf>" />
+  <meta name="dc.description" lang="{{tpl:BlogLanguage}}" content="{{tpl:BlogDescription encode_html="1"}}" />
+  <meta name="dc.language" content="{{tpl:BlogLanguage}}" />
+  <meta name="dc.publisher" content="{{tpl:BlogEditor encode_html="1"}}" />
+  <meta name="dc.rights" content="{{tpl:BlogCopyrightNotice encode_html="1"}}" />
+  <meta name="dc.date" scheme="W3CDTF" content="{{tpl:BlogUpdateDate iso8601="1"}}" />
+  <meta name="dc.type" content="text" />
+  <meta name="dc.format" content="text/html" />
+  
+  <link rel="contents" title="{{tpl:lang Archives}}" href="{{tpl:BlogArchiveURL}}" />
+  <tpl:Categories>
+  <link rel="section" href="{{tpl:CategoryURL}}" title="{{tpl:CategoryTitle encode_html="1"}}" />
+  </tpl:Categories>
+  
+  <tpl:Entries no_content="1">
+    <tpl:EntriesHeader>
+      <tpl:Pagination>
+        <tpl:PaginationIf end="0">
+        <link rel="prev" title="{{tpl:lang previous entries}}" href="{{tpl:PaginationURL offset="1"}}" />
+        </tpl:PaginationIf>
+        
+        <tpl:PaginationIf start="0">
+        <link rel="next" title="{{tpl:lang next entries}}" href="{{tpl:PaginationURL offset="-1"}}" />
+        </tpl:PaginationIf>
+      </tpl:Pagination>
+    </tpl:EntriesHeader>
+    
+    <link rel="chapter" href="{{tpl:EntryURL}}" title="{{tpl:EntryTitle encode_html="1"}}" />
+  </tpl:Entries>
+  
+  <link rel="alternate" type="application/atom+xml" title="Atom 1.0" href="{{tpl:BlogFeedURL type="atom"}}" />
+  <link rel="EditURI" type="application/rsd+xml" title="RSD" href="{{tpl:BlogRSDURL}}" />
+  <link rel="meta" type="application/xbel+xml" title="Blogroll" href="{{tpl:BlogrollXbelLink}}" />
+  
+  {{tpl:include src="_head.html"}}
+</head>
+
+<body class="dc-home">
+<div id="page">
+{{tpl:include src="_top.html"}}
+
+<div id="wrapper">
+
+<div id="main">
+  <div id="content">
+
+  <tpl:Entries>
+
+		<!-- First page -->
+		<tpl:SysIf current_mode="default">
+			<tpl:LoopPosition start="1" length="1">
+	  		{{tpl:include src="_entry-full.html"}}
+	  	</tpl:LoopPosition>
+	
+			<tpl:LoopPosition start="2">
+	  		{{tpl:include src="_entry-short.html"}}
+	  	</tpl:LoopPosition>
+  	</tpl:SysIf>
+  	
+		<!-- Next pages -->
+		<tpl:SysIf current_mode="!default">
+  		{{tpl:include src="_entry-short.html"}}
+  	</tpl:SysIf>  	
+    
+		<!-- Pagination -->
+    <tpl:EntriesFooter>
+			{{tpl:include src="_pagination.html"}}
+    </tpl:EntriesFooter>
+
+  </tpl:Entries>
+
+  </div> <!-- End #content -->
+</div> <!-- End #main -->
+
+{{tpl:include src="_sidebar.html"}}
+
+</div> <!-- End #wrapper -->
+
+{{tpl:include src="_footer.html"}}
+</div> <!-- End #page -->
+</body>
+</html>
