Index: themes/ductile/_config.php
===================================================================
--- themes/ductile/_config.php	(revision 378)
+++ themes/ductile/_config.php	(revision 387)
@@ -28,4 +28,16 @@
 );
 
+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)
 {
@@ -52,9 +64,21 @@
 
 $ductile_base = array(
-	'body_link_w' => null,
-	'body_link_v_c' => null,
-	'body_link_f_c' => null,
 	'body_font' => null,
-	'alternate_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
 );
 
@@ -71,11 +95,26 @@
 	try
 	{
-		$ductile_user['body_link_w'] = (integer) !empty($_POST['body_link_w']);
-
-		$ductile_user['body_link_v_c'] = adjustColor($_POST['body_link_v_c']);
-		$ductile_user['body_link_f_c'] = adjustColor($_POST['body_link_f_c']);
-		
 		$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['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');
@@ -94,4 +133,6 @@
 }
 
+echo '<h3>'.__('General settings').'</h3>';
+
 echo '<fieldset><legend>'.__('Fonts').'</legend>'.
 '<p class="field"><label for="body_font">'.__('Main font:').' '.
@@ -102,14 +143,78 @@
 '</fieldset>';
 
+echo '<div class="two-cols">';
+echo '<div class="col">';
+
+echo '<fieldset><legend>'.__('Blog title').'</legend>'.
+'<p class="field"><label for="blog_title_w">'.__('Blog title in bold:').' '.
+form::checkbox('blog_title_w',1,$ductile_user['blog_title_w']).'</label>'.'</p>'.
+
+'<p class="field"><label for="blog_title_s">'.__('Blog title font size:').'</label> '.
+form::field('blog_title_s',7,7,$ductile_user['blog_title_s']).' '.__('(in em by default)').'</p>'.
+
+'<p class="field"><label for="blog_title_c">'.__('Blog title 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">'.__('Post title in bold:').' '.
+form::checkbox('post_title_w',1,$ductile_user['post_title_w']).'</label>'.'</p>'.
+
+'<p class="field"><label for="post_title_s">'.__('Post title font size:').'</label> '.
+form::field('post_title_s',7,7,$ductile_user['post_title_s']).' '.__('(in em by default)').'</p>'.
+
+'<p class="field"><label for="post_title_c">'.__('Post title color:').'</label> '.
+form::field('post_title_c',7,7,$ductile_user['post_title_c'],'colorpicker').'</p>'.
+'</fieldset>';
+
+echo '</div>';
+echo '</div>';
+
 echo '<fieldset><legend>'.__('Inside posts links').'</legend>'.
-'<p class="field"><label for="body_link_w">'.__('Links in bold:').' '.
-form::checkbox('body_link_w',1,$ductile_user['body_link_w']).'</label>'.'</p>'.
-
-'<p class="field"><label for="body_link_v_c">'.__('Normal and visited links color:').'</label> '.
-form::field('body_link_v_c',7,7,$ductile_user['body_link_v_c'],'colorpicker').'</p>'.
+'<p class="field"><label for="post_link_w">'.__('Links in bold:').' '.
+form::checkbox('post_link_w',1,$ductile_user['post_link_w']).'</label>'.'</p>'.
+
+'<p class="field"><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"><label for="body_link_f_c">'.__('Active, hover and focus links color:').'</label> '.
-form::field('body_link_f_c',7,7,$ductile_user['body_link_f_c'],'colorpicker').'</p>'.
-'</fieldset>';
+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">'.__('Blog title 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">'.__('Blog title font size:').'</label> '.
+form::field('blog_title_s_m',7,7,$ductile_user['blog_title_s_m']).' '.__('(in em by default)').'</p>'.
+
+'<p class="field"><label for="blog_title_c_m">'.__('Blog title 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">'.__('Post title 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">'.__('Post title font size:').'</label> '.
+form::field('post_title_s_m',7,7,$ductile_user['post_title_s_m']).' '.__('(in em by default)').'</p>'.
+
+'<p class="field"><label for="post_title_c_m">'.__('Post title color:').'</label> '.
+form::field('post_title_c_m',7,7,$ductile_user['post_title_c_m'],'colorpicker').'</p>'.
+'</fieldset>';
+
+echo '</div>';
+echo '</div>';
 
 ?>
Index: themes/ductile/_public.php
===================================================================
--- themes/ductile/_public.php	(revision 378)
+++ themes/ductile/_public.php	(revision 387)
@@ -44,22 +44,22 @@
 
 		# Main font
-		$main_font_selectors = 'body, #supranav li a span, #comments.me, a.comment-number';
-		if (isset($s['body_font'])) self::prop($css,$main_font_selectors,'font-family',self::fontDef($s['body_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
-		$alternate_font_selectors = '#blogdesc, #supranav, #content-info, #subcategories, #comments-feed, #sidebar h2, #sidebar h3, #footer p';
-		if (isset($s['alternate_font'])) self::prop($css,$alternate_font_selectors,'font-family',self::fontDef($s['alternate_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
-		$links = '.post-excerpt a, .post-content a';
-		if (isset($s['body_link_w'])) self::prop($css,$links,'font-weight',($s['body_link_w'] ? 'bold' : 'normal'));
+		$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)
-		$links_selectors = '.post-excerpt a:link, .post-excerpt a:visited, .post-content a:link, .post-content a:visited';
-		if (isset($s['body_link_v_c'])) self::prop($css,$links_selectors,'color',$s['body_link_v_c']);
+		$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)
-		$links_alternate_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['body_link_f_c'])) self::prop($css,$links_alternate_selectors,'color',$s['body_link_f_c']);
+		$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
@@ -73,4 +73,84 @@
 		}
 
+		# 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']);
+
+		# 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;
 	}
Index: themes/ductile/locales/fr/main.po
===================================================================
--- themes/ductile/locales/fr/main.po	(revision 378)
+++ themes/ductile/locales/fr/main.po	(revision 387)
@@ -1,4 +1,37 @@
 msgid "Style sheet upgraded."
 msgstr "Feuille de style mise à jour."
+
+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 "Blog title in bold:"
+msgstr "Titre du blog en gras :"
+
+msgid "Blog title font size:"
+msgstr "Taille de police du titre du blog :"
+
+msgid "(in em by default)"
+msgstr "(en em par défaut)"
+
+msgid "Blog title color:"
+msgstr "Couleur du titre du blog :"
+
+msgid "Post title"
+msgstr "Titre des billets"
+
+msgid "Post title in bold:"
+msgstr "Titre des billets en gras :"
+
+msgid "Post title font size:"
+msgstr "Taille de police du titre des billets :"
+
+msgid "Post title color:"
+msgstr "Couleur du titre des billets :"
 
 msgid "Links in bold:"
