Updated resources and renderers templates
authortflorac@dagon.home
Sun, 30 Dec 2018 18:11:35 +0100
changeset 319 29ffc22ece57
parent 318 088a31dbed81
child 320 d8e63b05150e
Updated resources and renderers templates
src/pyams_default_theme/component/association/interfaces.py
src/pyams_default_theme/component/association/interfaces/__init__.py
src/pyams_default_theme/component/gallery/__init__.py
src/pyams_default_theme/component/gallery/interfaces.py
src/pyams_default_theme/component/gallery/templates/renderer-default.pt
src/pyams_default_theme/component/illustration/interfaces.py
src/pyams_default_theme/component/illustration/interfaces/__init__.py
src/pyams_default_theme/component/illustration/templates/illustration-default.pt
src/pyams_default_theme/component/paragraph/templates/contact-default.pt
src/pyams_default_theme/component/paragraph/templates/frame-default.pt
src/pyams_default_theme/component/paragraph/templates/frame-left.pt
src/pyams_default_theme/component/paragraph/templates/frame-right.pt
src/pyams_default_theme/component/paragraph/templates/verbatim-default.pt
src/pyams_default_theme/component/paragraph/templates/verbatim-left.pt
src/pyams_default_theme/component/paragraph/templates/verbatim-right.pt
src/pyams_default_theme/locales/fr/LC_MESSAGES/pyams_default_theme.mo
src/pyams_default_theme/locales/fr/LC_MESSAGES/pyams_default_theme.po
src/pyams_default_theme/locales/pyams_default_theme.pot
src/pyams_default_theme/resources/css/pyams-default.css
src/pyams_default_theme/resources/css/pyams-default.css.map
src/pyams_default_theme/resources/css/pyams-default.min.css
src/pyams_default_theme/resources/js/pyams-default.js
src/pyams_default_theme/resources/js/pyams-default.min.js
src/pyams_default_theme/resources/less/pyams-default.less
src/pyams_default_theme/shared/resource/templates/specificities.pt
src/pyams_default_theme/shared/site/portlet/__init__.py
src/pyams_default_theme/shared/site/portlet/templates/site-panels-vertical.pt
src/pyams_default_theme/shared/site/portlet/templates/site-panels.pt
src/pyams_default_theme/shared/site/portlet/templates/site-summary.pt
src/pyams_default_theme/viewlet/banner/templates/banner.pt
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/pyams_default_theme/component/association/interfaces.py	Sun Dec 30 18:11:35 2018 +0100
@@ -0,0 +1,58 @@
+#
+# Copyright (c) 2008-2018 Thierry Florac <tflorac AT ulthar.net>
+# All Rights Reserved.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.1 (ZPL).  A copy of the ZPL should accompany this distribution.
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE.
+#
+
+__docformat__ = 'restructuredtext'
+
+from zope.interface import Interface
+from zope.schema import Bool, Set, Choice, Int
+
+from pyams_content.component.paragraph.interfaces import PARAGRAPH_FACTORIES_VOCABULARY
+
+from pyams_default_theme import _
+
+
+class IBaseAssociationParagraphRemoteContentRendererSettings(Interface):
+    """Associations paragraph remote content renderer settings interface"""
+
+    display_title = Bool(title=_("Display title?"),
+                         description=_("Choose 'yes' to display remote content's title"),
+                         required=True,
+                         default=False)
+
+    display_header = Bool(title=_("Display header?"),
+                          description=_("Choose 'yes' to display remote content's header"),
+                          required=True,
+                          default=False)
+
+
+class IAssociationParagraphSlicedRemoteContentRendererSettings(IBaseAssociationParagraphRemoteContentRendererSettings):
+    """Associations paragraph renderer settings interface"""
+
+    paragraphs_count = Int(title=_("Paragraphs count"),
+                           description=_("Number of paragraphs used for each remote content (default=1)"),
+                           required=False,
+                           default=1)
+
+
+class IAssociationParagraphRemoteContentRendererSettings(IBaseAssociationParagraphRemoteContentRendererSettings):
+    """Associations paragraph remote content renderer settings interface"""
+
+    factories = Set(title=_("Paragraph types"),
+                    description=_("Select list of paragraph types you want to include; an empty "
+                                  "selection means that all paragraphs will be selected"),
+                    required=False,
+                    value_type=Choice(vocabulary=PARAGRAPH_FACTORIES_VOCABULARY))
+
+    anchors_only = Bool(title=_("Anchors only?"),
+                        description=_("If 'yes', only paragraphs set as 'anchors' will be selected"),
+                        required=True,
+                        default=False)
--- a/src/pyams_default_theme/component/association/interfaces/__init__.py	Fri Dec 28 11:05:40 2018 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,58 +0,0 @@
-#
-# Copyright (c) 2008-2018 Thierry Florac <tflorac AT ulthar.net>
-# All Rights Reserved.
-#
-# This software is subject to the provisions of the Zope Public License,
-# Version 2.1 (ZPL).  A copy of the ZPL should accompany this distribution.
-# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
-# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
-# FOR A PARTICULAR PURPOSE.
-#
-
-__docformat__ = 'restructuredtext'
-
-from zope.interface import Interface
-from zope.schema import Bool, Set, Choice, Int
-
-from pyams_content.component.paragraph.interfaces import PARAGRAPH_FACTORIES_VOCABULARY
-
-from pyams_default_theme import _
-
-
-class IBaseAssociationParagraphRemoteContentRendererSettings(Interface):
-    """Associations paragraph remote content renderer settings interface"""
-
-    display_title = Bool(title=_("Display title?"),
-                         description=_("Choose 'yes' to display remote content's title"),
-                         required=True,
-                         default=False)
-
-    display_header = Bool(title=_("Display header?"),
-                          description=_("Choose 'yes' to display remote content's header"),
-                          required=True,
-                          default=False)
-
-
-class IAssociationParagraphSlicedRemoteContentRendererSettings(IBaseAssociationParagraphRemoteContentRendererSettings):
-    """Associations paragraph renderer settings interface"""
-
-    paragraphs_count = Int(title=_("Paragraphs count"),
-                           description=_("Number of paragraphs used for each remote content (default=1)"),
-                           required=False,
-                           default=1)
-
-
-class IAssociationParagraphRemoteContentRendererSettings(IBaseAssociationParagraphRemoteContentRendererSettings):
-    """Associations paragraph remote content renderer settings interface"""
-
-    factories = Set(title=_("Paragraph types"),
-                    description=_("Select list of paragraph types you want to include; an empty "
-                                  "selection means that all paragraphs will be selected"),
-                    required=False,
-                    value_type=Choice(vocabulary=PARAGRAPH_FACTORIES_VOCABULARY))
-
-    anchors_only = Bool(title=_("Anchors only?"),
-                        description=_("If 'yes', only paragraphs set as 'anchors' will be selected"),
-                        required=True,
-                        default=False)
--- a/src/pyams_default_theme/component/gallery/__init__.py	Fri Dec 28 11:05:40 2018 +0100
+++ b/src/pyams_default_theme/component/gallery/__init__.py	Sun Dec 30 18:11:35 2018 +0100
@@ -12,16 +12,47 @@
 
 __docformat__ = 'restructuredtext'
 
+from persistent import Persistent
+from zope.container.contained import Contained
+from zope.interface import implementer
+from zope.schema.fieldproperty import FieldProperty
+
 from pyams_content.component.gallery.interfaces import IBaseGallery
 from pyams_content.features.renderer.interfaces import IContentRenderer
+from pyams_default_theme.component.gallery.interfaces import IGalleryDefaultRendererSettings
 from pyams_default_theme.features.renderer import BaseContentRenderer
 from pyams_skin.layer import IPyAMSLayer
 from pyams_template.template import template_config
-from pyams_utils.adapter import adapter_config
+from pyams_utils.adapter import adapter_config, get_annotation_adapter
 
 from pyams_default_theme import _, lightbox
 
 
+#
+# Gallery default renderer settings
+#
+
+DEFAULT_GALLERY_RENDERER_SETTINGS_KEY = 'pyams_content.gallery.renderer:default'
+
+
+@implementer(IGalleryDefaultRendererSettings)
+class GalleryDefaultRendererSettings(Persistent, Contained):
+    """Gallery default renderer settings"""
+
+    thumbnails_selection = FieldProperty(IGalleryDefaultRendererSettings['thumbnails_selection'])
+
+
+@adapter_config(context=IBaseGallery, provides=IGalleryDefaultRendererSettings)
+def default_gallery_renderer_settings_factory(context):
+    """Gallery default renderer settings factory"""
+    return get_annotation_adapter(context, DEFAULT_GALLERY_RENDERER_SETTINGS_KEY,
+                                  GalleryDefaultRendererSettings)
+
+
+#
+# Gallery default renderer
+#
+
 class BaseGalleryRenderer(BaseContentRenderer):
     """Base gallery renderer"""
 
@@ -37,6 +68,12 @@
     i18n_context_attrs = ('title',)
     resources = (lightbox,)
 
+    settings_interface = IGalleryDefaultRendererSettings
+
+
+#
+# Gallery carousel renderer
+#
 
 @adapter_config(name='carousel-sm', context=(IBaseGallery, IPyAMSLayer), provides=IContentRenderer)
 @template_config(template='templates/renderer-carousel.pt', layer=IPyAMSLayer)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/pyams_default_theme/component/gallery/interfaces.py	Sun Dec 30 18:11:35 2018 +0100
@@ -0,0 +1,40 @@
+#
+# Copyright (c) 2008-2018 Thierry Florac <tflorac AT ulthar.net>
+# All Rights Reserved.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.1 (ZPL).  A copy of the ZPL should accompany this distribution.
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE.
+#
+
+__docformat__ = 'restructuredtext'
+
+from zope.interface import Interface
+from zope.schema import Choice
+from zope.schema.vocabulary import SimpleVocabulary, SimpleTerm
+
+from pyams_default_theme import _
+
+
+GALLERY_THUMBNAILS = (
+    {'id': '', 'title': _("Device selection")},
+    {'id': 'pano', 'title': _("Panoramic selection")},
+    {'id': 'portrait', 'title': _("Portrait selection")},
+    {'id': 'square', 'title': _("Square selection")}
+)
+
+GALLERY_THUMBNAILS_VOCABULARY = SimpleVocabulary([SimpleTerm(item['id'], title=item['title'])
+                                                  for item in GALLERY_THUMBNAILS])
+
+
+class IGalleryDefaultRendererSettings(Interface):
+    """Gallery default renderer settings"""
+
+    thumbnails_selection = Choice(title=_("Thumbnails selection"),
+                                  description=_("Selection used to display images thumbnails"),
+                                  vocabulary=GALLERY_THUMBNAILS_VOCABULARY,
+                                  required=False,
+                                  default='')
--- a/src/pyams_default_theme/component/gallery/templates/renderer-default.pt	Fri Dec 28 11:05:40 2018 +0100
+++ b/src/pyams_default_theme/component/gallery/templates/renderer-default.pt	Sun Dec 30 18:11:35 2018 +0100
@@ -1,5 +1,11 @@
 <h3>${view.title}</h3>
-<div tal:define="cache_key tales:cache_key(context)"
+<div tal:define="cache_key tales:cache_key(context);
+				 settings view.settings;
+				 thumb_name settings.thumbnails_selection;
+				 lg_thumb thumb_name or 'lg';
+				 md_thumb thumb_name or 'md';
+				 sm_thumb thumb_name or 'sm';
+				 xs_thumb thumb_name or 'xs';"
 	 i18n:domain="pyams_default_theme"
 	 id="gallery-${cache_key}"
 	 class="gallery gallery-grid"
@@ -15,8 +21,9 @@
 		   tal:define="image_data i18n:image.data;
 					   alt i18n:image.title;"
 		   href="${tales:absolute_url(image_data)}">
-			${structure:tales:media(image_data, lg_width=3, md_width=4, sm_width=4,
-									xs_width=6, css_class='img_responsive', alt=alt)}
+			${structure:tales:media(image_data, lg_thumb=lg_thumb, lg_width=3, md_thumb=md_thumb, md_width=4,
+									sm_thumb=sm_thumb, sm_width=4, xs_thumb=xs_thumb, xs_width=6,
+									css_class='img_responsive', alt=alt)}
 		</a>
 		<div class="author">${i18n:image.author}</div>
 	</div>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/pyams_default_theme/component/illustration/interfaces.py	Sun Dec 30 18:11:35 2018 +0100
@@ -0,0 +1,44 @@
+#
+# Copyright (c) 2008-2017 Thierry Florac <tflorac AT ulthar.net>
+# All Rights Reserved.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.1 (ZPL).  A copy of the ZPL should accompany this distribution.
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE.
+#
+
+__docformat__ = 'restructuredtext'
+
+
+# import standard library
+
+# import interfaces
+
+# import packages
+from zope.interface import Interface, Attribute
+from zope.schema import Bool, Choice
+
+from pyams_default_theme import _
+
+
+ILLUSTRATION_BEFORE_TITLE = 'before-title'
+ILLUSTRATION_BEFORE_BODY = 'before-body'
+ILLUSTRATION_AFTER_BODY = 'after-body'
+
+
+class IIllustrationRenderer(Interface):
+    """Illustration renderer interface"""
+
+    position = Attribute("Illustration position related to it's attached content")
+
+
+class IIllustrationWithZoomSettings(Interface):
+    """Illustration with zoom interface"""
+
+    zoom_on_click = Bool(title=_("Zoom on click?"),
+                         description=_("If 'yes', a click on illustration thumbnail is required to zoom"),
+                         required=True,
+                         default=True)
--- a/src/pyams_default_theme/component/illustration/interfaces/__init__.py	Fri Dec 28 11:05:40 2018 +0100
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,44 +0,0 @@
-#
-# Copyright (c) 2008-2017 Thierry Florac <tflorac AT ulthar.net>
-# All Rights Reserved.
-#
-# This software is subject to the provisions of the Zope Public License,
-# Version 2.1 (ZPL).  A copy of the ZPL should accompany this distribution.
-# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
-# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
-# FOR A PARTICULAR PURPOSE.
-#
-
-__docformat__ = 'restructuredtext'
-
-
-# import standard library
-
-# import interfaces
-
-# import packages
-from zope.interface import Interface, Attribute
-from zope.schema import Bool, Choice
-
-from pyams_default_theme import _
-
-
-ILLUSTRATION_BEFORE_TITLE = 'before-title'
-ILLUSTRATION_BEFORE_BODY = 'before-body'
-ILLUSTRATION_AFTER_BODY = 'after-body'
-
-
-class IIllustrationRenderer(Interface):
-    """Illustration renderer interface"""
-
-    position = Attribute("Illustration position related to it's attached content")
-
-
-class IIllustrationWithZoomSettings(Interface):
-    """Illustration with zoom interface"""
-
-    zoom_on_click = Bool(title=_("Zoom on click?"),
-                         description=_("If 'yes', a click on illustration thumbnail is required to zoom"),
-                         required=True,
-                         default=True)
--- a/src/pyams_default_theme/component/illustration/templates/illustration-default.pt	Fri Dec 28 11:05:40 2018 +0100
+++ b/src/pyams_default_theme/component/illustration/templates/illustration-default.pt	Sun Dec 30 18:11:35 2018 +0100
@@ -1,8 +1,11 @@
-<div class="illustration margin-y-5">
-	<h2>${view.title}</h2>
+<div class="illustration">
+	<h2 tal:define="title view.title"
+		tal:condition="title">${title}</h2>
 	<tal:var define="image view.data"
 			 condition="image">
 		${structure:tales:picture(image, alt=view.alt_title)}
 	</tal:var>
-	<div class="author">${view.author}</div>
+	<div tal:define="author view.author"
+		 tal:condition="author"
+		 class="author">${author}</div>
 </div>
--- a/src/pyams_default_theme/component/paragraph/templates/contact-default.pt	Fri Dec 28 11:05:40 2018 +0100
+++ b/src/pyams_default_theme/component/paragraph/templates/contact-default.pt	Sun Dec 30 18:11:35 2018 +0100
@@ -1,4 +1,5 @@
 <div class="contact-card"
+	 i18n:domain="pyams_default_theme"
 	 tal:define="settings view.settings">
 	<h3 tal:content="view.title">Contact title</h3>
 	<div tal:condition="settings.can_display_photo"
--- a/src/pyams_default_theme/component/paragraph/templates/frame-default.pt	Fri Dec 28 11:05:40 2018 +0100
+++ b/src/pyams_default_theme/component/paragraph/templates/frame-default.pt	Sun Dec 30 18:11:35 2018 +0100
@@ -1,8 +1,15 @@
 <blockquote tal:define="settings view.settings;
 						renderer view.illustration_renderer;
-						position getattr(renderer, 'position', None) if renderer is not None else None;"
+						position getattr(renderer, 'position', None) if renderer is not None else None;
+						pictogram settings.pictogram;"
 			tal:switch="position">
 	<tal:var case="'before-title'">${structure:renderer.render()}</tal:var>
+	<tal:if condition="pictogram">
+		<div class="pull-left pictogram hidden-sm hidden-xs"
+			 tal:define="image i18n:pictogram.image">
+			${structure:tales:thumbnail(image, width=48, height=48)}
+		</div>
+	</tal:if>
 	<h3 tal:condition="view.title and (position != 'before-title')">${view.title}</h3>
 	<tal:var case="'before-body'">${structure:renderer.render()}</tal:var>
 	<p tal:replace="structure view.body">body</p>
--- a/src/pyams_default_theme/component/paragraph/templates/frame-left.pt	Fri Dec 28 11:05:40 2018 +0100
+++ b/src/pyams_default_theme/component/paragraph/templates/frame-left.pt	Sun Dec 30 18:11:35 2018 +0100
@@ -1,9 +1,16 @@
 <blockquote tal:define="settings view.settings;
 						renderer view.illustration_renderer;
-						position getattr(renderer, 'position', None) if renderer is not None else None;"
+						position getattr(renderer, 'position', None) if renderer is not None else None;
+						pictogram settings.pictogram;"
 			class="pull-left col-md-${settings.relative_width}"
 			tal:switch="position">
 	<tal:var case="'before-title'">${structure:renderer.render()}</tal:var>
+	<tal:if condition="pictogram">
+		<div class="pull-left pictogram hidden-sm hidden-xs"
+			 tal:define="image i18n:pictogram.image">
+			${structure:tales:thumbnail(image, width=48, height=48)}
+		</div>
+	</tal:if>
 	<h3 tal:condition="view.title and (position != 'before-title')">${view.title}</h3>
 	<tal:var case="'before-body'">${structure:renderer.render()}</tal:var>
 	<p tal:replace="structure view.body">body</p>
--- a/src/pyams_default_theme/component/paragraph/templates/frame-right.pt	Fri Dec 28 11:05:40 2018 +0100
+++ b/src/pyams_default_theme/component/paragraph/templates/frame-right.pt	Sun Dec 30 18:11:35 2018 +0100
@@ -1,9 +1,16 @@
 <blockquote tal:define="settings view.settings;
 						renderer view.illustration_renderer;
-						position getattr(renderer, 'position', None) if renderer is not None else None;"
+						position getattr(renderer, 'position', None) if renderer is not None else None;
+						pictogram settings.pictogram;"
 			class="pull-right col-md-${settings.relative_width}"
 			tal:switch="position">
 	<tal:var case="'before-title'">${structure:renderer.render()}</tal:var>
+	<tal:if condition="pictogram">
+		<div class="pull-left pictogram hidden-sm hidden-xs"
+			 tal:define="image i18n:pictogram.image">
+			${structure:tales:thumbnail(image, width=48, height=48)}
+		</div>
+	</tal:if>
 	<h3 tal:condition="view.title and (position != 'before-title')">${view.title}</h3>
 	<tal:var case="'before-body'">${structure:renderer.render()}</tal:var>
 	<p tal:replace="structure view.body">body</p>
--- a/src/pyams_default_theme/component/paragraph/templates/verbatim-default.pt	Fri Dec 28 11:05:40 2018 +0100
+++ b/src/pyams_default_theme/component/paragraph/templates/verbatim-default.pt	Sun Dec 30 18:11:35 2018 +0100
@@ -21,8 +21,8 @@
 				<div class="quote"
 					 tal:content="structure tales:html(view.quote)">Quote</div>
 				<div class="author">
-					<strong>${view.author}</strong>
-					<tal:if condition="view.author and view.charge">, </tal:if>
+					<strong>${view.author}</strong><tal:if
+						condition="view.author and view.charge">, </tal:if>
 					${view.charge}
 				</div>
 			</div>
--- a/src/pyams_default_theme/component/paragraph/templates/verbatim-left.pt	Fri Dec 28 11:05:40 2018 +0100
+++ b/src/pyams_default_theme/component/paragraph/templates/verbatim-left.pt	Sun Dec 30 18:11:35 2018 +0100
@@ -23,8 +23,8 @@
 		<div class="quote"
 			 tal:content="structure tales:html(view.quote)">Quote</div>
 		<div class="author">
-			${view.author}
-			<tal:if condition="view.author and view.charge">, </tal:if>
+			${view.author}<tal:if
+				condition="view.author and view.charge">, </tal:if>
 			${view.charge}
 		</div>
 	</tal:if>
--- a/src/pyams_default_theme/component/paragraph/templates/verbatim-right.pt	Fri Dec 28 11:05:40 2018 +0100
+++ b/src/pyams_default_theme/component/paragraph/templates/verbatim-right.pt	Sun Dec 30 18:11:35 2018 +0100
@@ -23,8 +23,8 @@
 		<div class="quote"
 			 tal:content="structure tales:html(view.quote)">Quote</div>
 		<div class="author">
-			${view.author}
-			<tal:if condition="view.author and view.charge">, </tal:if>
+			${view.author}<tal:if
+				condition="view.author and view.charge">, </tal:if>
 			${view.charge}
 		</div>
 	</tal:if>
Binary file src/pyams_default_theme/locales/fr/LC_MESSAGES/pyams_default_theme.mo has changed
--- a/src/pyams_default_theme/locales/fr/LC_MESSAGES/pyams_default_theme.po	Fri Dec 28 11:05:40 2018 +0100
+++ b/src/pyams_default_theme/locales/fr/LC_MESSAGES/pyams_default_theme.po	Sun Dec 30 18:11:35 2018 +0100
@@ -5,7 +5,7 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE 1.0\n"
-"POT-Creation-Date: 2018-12-27 23:09+0100\n"
+"POT-Creation-Date: 2018-12-30 13:35+0100\n"
 "PO-Revision-Date: 2017-06-07 12:41+0200\n"
 "Last-Translator: Thierry Florac <tflorac@ulthar.net>\n"
 "Language-Team: French\n"
@@ -53,7 +53,6 @@
 msgstr "Carousel horizontal avec illustrations en pleine largeur"
 
 #: src/pyams_default_theme/features/menu/portlet/navigation/__init__.py:86
-#: src/pyams_default_theme/shared/site/portlet/__init__.py:58
 msgid "Vertical panels with panoramic illustrations"
 msgstr "Panneaux verticaux avec illustrations panoramiques"
 
@@ -272,11 +271,35 @@
 msgid "Refine search"
 msgstr "Affiner la recherche"
 
-#: src/pyams_default_theme/component/gallery/__init__.py:34
+#: src/pyams_default_theme/component/gallery/interfaces.py:23
+msgid "Device selection"
+msgstr "Sélection associée au périphérique"
+
+#: src/pyams_default_theme/component/gallery/interfaces.py:24
+msgid "Panoramic selection"
+msgstr "Sélection panoramique"
+
+#: src/pyams_default_theme/component/gallery/interfaces.py:25
+msgid "Portrait selection"
+msgstr "Sélection en mode portrait"
+
+#: src/pyams_default_theme/component/gallery/interfaces.py:26
+msgid "Square selection"
+msgstr "Sélection carrée"
+
+#: src/pyams_default_theme/component/gallery/interfaces.py:36
+msgid "Thumbnails selection"
+msgstr "Vignettes sélectionnées"
+
+#: src/pyams_default_theme/component/gallery/interfaces.py:37
+msgid "Selection used to display images thumbnails"
+msgstr "Sélection utilisée pour l'affichage des vignettes"
+
+#: src/pyams_default_theme/component/gallery/__init__.py:65
 msgid "Default grid gallery renderer"
 msgstr "Par défaut"
 
-#: src/pyams_default_theme/component/gallery/__init__.py:46
+#: src/pyams_default_theme/component/gallery/__init__.py:83
 msgid "Carousel gallery renderer"
 msgstr "Carousel horizontal"
 
@@ -460,6 +483,14 @@
 msgid "Your browser can not play audio files"
 msgstr "Votre navigateur ne prend pas en charge la lecture des fichiers sons"
 
+#: src/pyams_default_theme/component/paragraph/templates/contact-default.pt:26
+msgid "Contact email:"
+msgstr "Contact :"
+
+#: src/pyams_default_theme/component/paragraph/templates/contact-default.pt:33
+msgid "Phone number:"
+msgstr "Téléphone :"
+
 #: src/pyams_default_theme/component/paragraph/zmi/map.py:62
 msgid "Don't use default map configuration"
 msgstr "Ne pas utiliser la configuration de carte par défaut"
@@ -476,6 +507,16 @@
 msgid "Previous and next topics"
 msgstr "Contenus précédent et suivant"
 
+#: src/pyams_default_theme/component/illustration/interfaces.py:41
+msgid "Zoom on click?"
+msgstr "Zoom sur clic ?"
+
+#: src/pyams_default_theme/component/illustration/interfaces.py:42
+msgid "If 'yes', a click on illustration thumbnail is required to zoom"
+msgstr ""
+"Si 'oui', un clic sur la vignette de l'illustration est nécessaire pour "
+"zoomer sur l'image"
+
 #: src/pyams_default_theme/component/illustration/__init__.py:162
 msgid "Centered illustration before text"
 msgstr "Illustration centrée avant le texte"
@@ -492,15 +533,51 @@
 msgid "Centered illustration after text"
 msgstr "Illustration centrée après le texte"
 
-#: src/pyams_default_theme/component/illustration/interfaces/__init__.py:41
-msgid "Zoom on click?"
-msgstr "Zoom sur clic ?"
+#: src/pyams_default_theme/component/association/interfaces.py:26
+msgid "Display title?"
+msgstr "Afficher le titre ?"
+
+#: src/pyams_default_theme/component/association/interfaces.py:27
+msgid "Choose 'yes' to display remote content's title"
+msgstr "Choisissez 'oui' pour afficher le titre des contenus liés"
+
+#: src/pyams_default_theme/component/association/interfaces.py:31
+msgid "Display header?"
+msgstr "Afficher le chapô ?"
+
+#: src/pyams_default_theme/component/association/interfaces.py:32
+msgid "Choose 'yes' to display remote content's header"
+msgstr "Choisissez 'oui' pour afficher le chapô des contenus liés"
+
+#: src/pyams_default_theme/component/association/interfaces.py:40
+msgid "Paragraphs count"
+msgstr "Nombre de blocs"
 
-#: src/pyams_default_theme/component/illustration/interfaces/__init__.py:42
-msgid "If 'yes', a click on illustration thumbnail is required to zoom"
+#: src/pyams_default_theme/component/association/interfaces.py:41
+msgid "Number of paragraphs used for each remote content (default=1)"
+msgstr "Nombre de blocs extraits de chaque contenu lié (1 par défaut)"
+
+#: src/pyams_default_theme/component/association/interfaces.py:49
+msgid "Paragraph types"
+msgstr "Types de blocs"
+
+#: src/pyams_default_theme/component/association/interfaces.py:50
+msgid ""
+"Select list of paragraph types you want to include; an empty selection means "
+"that all paragraphs will be selected"
 msgstr ""
-"Si 'oui', un clic sur la vignette de l'illustration est nécessaire pour "
-"zoomer sur l'image"
+"Sélectionnez le type des blocs de contenu que vous souhaitez intégrer ; si "
+"vous laissez la sélection vide, tous les types de blocs seront pris en compte"
+
+#: src/pyams_default_theme/component/association/interfaces.py:55
+msgid "Anchors only?"
+msgstr "Ancres seulement ?"
+
+#: src/pyams_default_theme/component/association/interfaces.py:56
+msgid "If 'yes', only paragraphs set as 'anchors' will be selected"
+msgstr ""
+"Si 'oui', seuls les blocs de contenu désignés comme ancres seront "
+"sélectionnés"
 
 #: src/pyams_default_theme/component/association/__init__.py:47
 msgid "Default associations renderer"
@@ -514,52 +591,6 @@
 msgid "Include remote content paragraphs"
 msgstr "Afficher une sélection de blocs des contenus liés"
 
-#: src/pyams_default_theme/component/association/interfaces/__init__.py:26
-msgid "Display title?"
-msgstr "Afficher le titre ?"
-
-#: src/pyams_default_theme/component/association/interfaces/__init__.py:27
-msgid "Choose 'yes' to display remote content's title"
-msgstr "Choisissez 'oui' pour afficher le titre des contenus liés"
-
-#: src/pyams_default_theme/component/association/interfaces/__init__.py:31
-msgid "Display header?"
-msgstr "Afficher le chapô ?"
-
-#: src/pyams_default_theme/component/association/interfaces/__init__.py:32
-msgid "Choose 'yes' to display remote content's header"
-msgstr "Choisissez 'oui' pour afficher le chapô des contenus liés"
-
-#: src/pyams_default_theme/component/association/interfaces/__init__.py:40
-msgid "Paragraphs count"
-msgstr "Nombre de blocs"
-
-#: src/pyams_default_theme/component/association/interfaces/__init__.py:41
-msgid "Number of paragraphs used for each remote content (default=1)"
-msgstr "Nombre de blocs extraits de chaque contenu lié (1 par défaut)"
-
-#: src/pyams_default_theme/component/association/interfaces/__init__.py:49
-msgid "Paragraph types"
-msgstr "Types de blocs"
-
-#: src/pyams_default_theme/component/association/interfaces/__init__.py:50
-msgid ""
-"Select list of paragraph types you want to include; an empty selection means "
-"that all paragraphs will be selected"
-msgstr ""
-"Sélectionnez le type des blocs de contenu que vous souhaitez intégrer ; si "
-"vous laissez la sélection vide, tous les types de blocs seront pris en compte"
-
-#: src/pyams_default_theme/component/association/interfaces/__init__.py:55
-msgid "Anchors only?"
-msgstr "Ancres seulement ?"
-
-#: src/pyams_default_theme/component/association/interfaces/__init__.py:56
-msgid "If 'yes', only paragraphs set as 'anchors' will be selected"
-msgstr ""
-"Si 'oui', seuls les blocs de contenu désignés comme ancres seront "
-"sélectionnés"
-
 #: src/pyams_default_theme/component/keynumber/__init__.py:48
 msgid "Default key numbers renderer"
 msgstr "Par défaut"
@@ -619,99 +650,111 @@
 msgid "Simple vertical view"
 msgstr "Liste verticale simple"
 
-#: src/pyams_default_theme/shared/resource/templates/specificities.pt:47
+#: src/pyams_default_theme/shared/resource/templates/specificities.pt:50
 msgid "Original country:"
 msgstr "Pays d'origine :"
 
-#: src/pyams_default_theme/shared/resource/templates/specificities.pt:51
+#: src/pyams_default_theme/shared/resource/templates/specificities.pt:54
+msgid "Original title:"
+msgstr "Titre original :"
+
+#: src/pyams_default_theme/shared/resource/templates/specificities.pt:58
 msgid "Author:"
 msgstr "Auteur :"
 
-#: src/pyams_default_theme/shared/resource/templates/specificities.pt:55
+#: src/pyams_default_theme/shared/resource/templates/specificities.pt:62
+msgid "Translator:"
+msgstr "Traducteur :"
+
+#: src/pyams_default_theme/shared/resource/templates/specificities.pt:66
+msgid "Illustrator:"
+msgstr "Illustrateur :"
+
+#: src/pyams_default_theme/shared/resource/templates/specificities.pt:70
 msgid "Drawer:"
 msgstr "Dessinateur :"
 
-#: src/pyams_default_theme/shared/resource/templates/specificities.pt:59
+#: src/pyams_default_theme/shared/resource/templates/specificities.pt:74
 msgid "Colourist:"
 msgstr "Coloriste :"
 
-#: src/pyams_default_theme/shared/resource/templates/specificities.pt:63
+#: src/pyams_default_theme/shared/resource/templates/specificities.pt:78
 msgid "Lettering:"
 msgstr "Lettrage :"
 
-#: src/pyams_default_theme/shared/resource/templates/specificities.pt:67
+#: src/pyams_default_theme/shared/resource/templates/specificities.pt:82
 msgid "Producer:"
 msgstr "Producteur :"
 
-#: src/pyams_default_theme/shared/resource/templates/specificities.pt:71
+#: src/pyams_default_theme/shared/resource/templates/specificities.pt:86
 msgid "Director:"
 msgstr "Réalisateur :"
 
-#: src/pyams_default_theme/shared/resource/templates/specificities.pt:75
+#: src/pyams_default_theme/shared/resource/templates/specificities.pt:90
 msgid "Actors:"
 msgstr "Acteurs :"
 
-#: src/pyams_default_theme/shared/resource/templates/specificities.pt:79
+#: src/pyams_default_theme/shared/resource/templates/specificities.pt:94
 msgid "Editor:"
 msgstr "Éditeur :"
 
-#: src/pyams_default_theme/shared/resource/templates/specificities.pt:83
+#: src/pyams_default_theme/shared/resource/templates/specificities.pt:98
 msgid "Collection:"
 msgstr "Collection :"
 
-#: src/pyams_default_theme/shared/resource/templates/specificities.pt:87
+#: src/pyams_default_theme/shared/resource/templates/specificities.pt:102
 msgid "Series:"
 msgstr "Série :"
 
-#: src/pyams_default_theme/shared/resource/templates/specificities.pt:91
+#: src/pyams_default_theme/shared/resource/templates/specificities.pt:106
 msgid "Volume:"
 msgstr "Volume :"
 
-#: src/pyams_default_theme/shared/resource/templates/specificities.pt:95
+#: src/pyams_default_theme/shared/resource/templates/specificities.pt:110
 msgid "Format:"
 msgstr "Format :"
 
-#: src/pyams_default_theme/shared/resource/templates/specificities.pt:99
+#: src/pyams_default_theme/shared/resource/templates/specificities.pt:114
 msgid "Release year:"
 msgstr "Année de parution :"
 
-#: src/pyams_default_theme/shared/resource/templates/specificities.pt:103
+#: src/pyams_default_theme/shared/resource/templates/specificities.pt:118
 msgid "Awards:"
 msgstr "Récompenses :"
 
-#: src/pyams_default_theme/shared/resource/templates/specificities.pt:111
+#: src/pyams_default_theme/shared/resource/templates/specificities.pt:126
 msgid "Number of pages:"
 msgstr "Nombre de pages : "
 
-#: src/pyams_default_theme/shared/resource/templates/specificities.pt:115
+#: src/pyams_default_theme/shared/resource/templates/specificities.pt:130
 msgid "Editor reference:"
 msgstr "Référence chez l'éditeur :"
 
-#: src/pyams_default_theme/shared/resource/templates/specificities.pt:119
+#: src/pyams_default_theme/shared/resource/templates/specificities.pt:134
 msgid "ISBN number:"
 msgstr "Numéro ISBN :"
 
-#: src/pyams_default_theme/shared/resource/templates/specificities.pt:123
+#: src/pyams_default_theme/shared/resource/templates/specificities.pt:138
 msgid "Price:"
 msgstr "Prix :"
 
-#: src/pyams_default_theme/shared/resource/templates/specificities.pt:124
+#: src/pyams_default_theme/shared/resource/templates/specificities.pt:139
 msgid "€ ${price}"
 msgstr "${price} €"
 
-#: src/pyams_default_theme/shared/resource/templates/specificities.pt:132
+#: src/pyams_default_theme/shared/resource/templates/specificities.pt:147
 msgid "Summary"
 msgstr "Résumé"
 
-#: src/pyams_default_theme/shared/resource/templates/specificities.pt:137
+#: src/pyams_default_theme/shared/resource/templates/specificities.pt:152
 msgid "Synopsis"
 msgstr "Synopsis"
 
-#: src/pyams_default_theme/shared/resource/templates/specificities.pt:142
+#: src/pyams_default_theme/shared/resource/templates/specificities.pt:157
 msgid "Publisher's words"
 msgstr "Nos commentaires"
 
-#: src/pyams_default_theme/shared/resource/templates/specificities.pt:147
+#: src/pyams_default_theme/shared/resource/templates/specificities.pt:162
 msgid "More resource info:"
 msgstr "Plus d'informations :"
 
@@ -745,6 +788,14 @@
 msgid "Site container summary"
 msgstr "Par défaut"
 
+#: src/pyams_default_theme/shared/site/portlet/__init__.py:59
+msgid "Three vertical panels with panoramic illustrations"
+msgstr "Trois panneaux verticaux avec illustrations panoramiques"
+
+#: src/pyams_default_theme/shared/site/portlet/__init__.py:70
+msgid "Four vertical panels with portrait illustrations"
+msgstr "Quatre panneaux verticaux avec illustrations en portrait"
+
 #~ msgid "Top tabs"
 #~ msgstr "Onglets de navigation"
 
--- a/src/pyams_default_theme/locales/pyams_default_theme.pot	Fri Dec 28 11:05:40 2018 +0100
+++ b/src/pyams_default_theme/locales/pyams_default_theme.pot	Sun Dec 30 18:11:35 2018 +0100
@@ -6,7 +6,7 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE 1.0\n"
-"POT-Creation-Date: 2018-12-27 23:09+0100\n"
+"POT-Creation-Date: 2018-12-30 13:35+0100\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -53,7 +53,6 @@
 msgstr ""
 
 #: ./src/pyams_default_theme/features/menu/portlet/navigation/__init__.py:86
-#: ./src/pyams_default_theme/shared/site/portlet/__init__.py:58
 msgid "Vertical panels with panoramic illustrations"
 msgstr ""
 
@@ -270,11 +269,35 @@
 msgid "Refine search"
 msgstr ""
 
-#: ./src/pyams_default_theme/component/gallery/__init__.py:34
+#: ./src/pyams_default_theme/component/gallery/interfaces.py:23
+msgid "Device selection"
+msgstr ""
+
+#: ./src/pyams_default_theme/component/gallery/interfaces.py:24
+msgid "Panoramic selection"
+msgstr ""
+
+#: ./src/pyams_default_theme/component/gallery/interfaces.py:25
+msgid "Portrait selection"
+msgstr ""
+
+#: ./src/pyams_default_theme/component/gallery/interfaces.py:26
+msgid "Square selection"
+msgstr ""
+
+#: ./src/pyams_default_theme/component/gallery/interfaces.py:36
+msgid "Thumbnails selection"
+msgstr ""
+
+#: ./src/pyams_default_theme/component/gallery/interfaces.py:37
+msgid "Selection used to display images thumbnails"
+msgstr ""
+
+#: ./src/pyams_default_theme/component/gallery/__init__.py:65
 msgid "Default grid gallery renderer"
 msgstr ""
 
-#: ./src/pyams_default_theme/component/gallery/__init__.py:46
+#: ./src/pyams_default_theme/component/gallery/__init__.py:83
 msgid "Carousel gallery renderer"
 msgstr ""
 
@@ -444,6 +467,14 @@
 msgid "Your browser can not play audio files"
 msgstr ""
 
+#: ./src/pyams_default_theme/component/paragraph/templates/contact-default.pt:26
+msgid "Contact email:"
+msgstr ""
+
+#: ./src/pyams_default_theme/component/paragraph/templates/contact-default.pt:33
+msgid "Phone number:"
+msgstr ""
+
 #: ./src/pyams_default_theme/component/paragraph/zmi/map.py:62
 msgid "Don't use default map configuration"
 msgstr ""
@@ -460,6 +491,14 @@
 msgid "Previous and next topics"
 msgstr ""
 
+#: ./src/pyams_default_theme/component/illustration/interfaces.py:41
+msgid "Zoom on click?"
+msgstr ""
+
+#: ./src/pyams_default_theme/component/illustration/interfaces.py:42
+msgid "If 'yes', a click on illustration thumbnail is required to zoom"
+msgstr ""
+
 #: ./src/pyams_default_theme/component/illustration/__init__.py:162
 msgid "Centered illustration before text"
 msgstr ""
@@ -476,12 +515,46 @@
 msgid "Centered illustration after text"
 msgstr ""
 
-#: ./src/pyams_default_theme/component/illustration/interfaces/__init__.py:41
-msgid "Zoom on click?"
+#: ./src/pyams_default_theme/component/association/interfaces.py:26
+msgid "Display title?"
+msgstr ""
+
+#: ./src/pyams_default_theme/component/association/interfaces.py:27
+msgid "Choose 'yes' to display remote content's title"
+msgstr ""
+
+#: ./src/pyams_default_theme/component/association/interfaces.py:31
+msgid "Display header?"
+msgstr ""
+
+#: ./src/pyams_default_theme/component/association/interfaces.py:32
+msgid "Choose 'yes' to display remote content's header"
+msgstr ""
+
+#: ./src/pyams_default_theme/component/association/interfaces.py:40
+msgid "Paragraphs count"
 msgstr ""
 
-#: ./src/pyams_default_theme/component/illustration/interfaces/__init__.py:42
-msgid "If 'yes', a click on illustration thumbnail is required to zoom"
+#: ./src/pyams_default_theme/component/association/interfaces.py:41
+msgid "Number of paragraphs used for each remote content (default=1)"
+msgstr ""
+
+#: ./src/pyams_default_theme/component/association/interfaces.py:49
+msgid "Paragraph types"
+msgstr ""
+
+#: ./src/pyams_default_theme/component/association/interfaces.py:50
+msgid ""
+"Select list of paragraph types you want to include; an empty selection means "
+"that all paragraphs will be selected"
+msgstr ""
+
+#: ./src/pyams_default_theme/component/association/interfaces.py:55
+msgid "Anchors only?"
+msgstr ""
+
+#: ./src/pyams_default_theme/component/association/interfaces.py:56
+msgid "If 'yes', only paragraphs set as 'anchors' will be selected"
 msgstr ""
 
 #: ./src/pyams_default_theme/component/association/__init__.py:47
@@ -496,48 +569,6 @@
 msgid "Include remote content paragraphs"
 msgstr ""
 
-#: ./src/pyams_default_theme/component/association/interfaces/__init__.py:26
-msgid "Display title?"
-msgstr ""
-
-#: ./src/pyams_default_theme/component/association/interfaces/__init__.py:27
-msgid "Choose 'yes' to display remote content's title"
-msgstr ""
-
-#: ./src/pyams_default_theme/component/association/interfaces/__init__.py:31
-msgid "Display header?"
-msgstr ""
-
-#: ./src/pyams_default_theme/component/association/interfaces/__init__.py:32
-msgid "Choose 'yes' to display remote content's header"
-msgstr ""
-
-#: ./src/pyams_default_theme/component/association/interfaces/__init__.py:40
-msgid "Paragraphs count"
-msgstr ""
-
-#: ./src/pyams_default_theme/component/association/interfaces/__init__.py:41
-msgid "Number of paragraphs used for each remote content (default=1)"
-msgstr ""
-
-#: ./src/pyams_default_theme/component/association/interfaces/__init__.py:49
-msgid "Paragraph types"
-msgstr ""
-
-#: ./src/pyams_default_theme/component/association/interfaces/__init__.py:50
-msgid ""
-"Select list of paragraph types you want to include; an empty selection means "
-"that all paragraphs will be selected"
-msgstr ""
-
-#: ./src/pyams_default_theme/component/association/interfaces/__init__.py:55
-msgid "Anchors only?"
-msgstr ""
-
-#: ./src/pyams_default_theme/component/association/interfaces/__init__.py:56
-msgid "If 'yes', only paragraphs set as 'anchors' will be selected"
-msgstr ""
-
 #: ./src/pyams_default_theme/component/keynumber/__init__.py:48
 msgid "Default key numbers renderer"
 msgstr ""
@@ -594,99 +625,111 @@
 msgid "Simple vertical view"
 msgstr ""
 
-#: ./src/pyams_default_theme/shared/resource/templates/specificities.pt:47
+#: ./src/pyams_default_theme/shared/resource/templates/specificities.pt:50
 msgid "Original country:"
 msgstr ""
 
-#: ./src/pyams_default_theme/shared/resource/templates/specificities.pt:51
+#: ./src/pyams_default_theme/shared/resource/templates/specificities.pt:54
+msgid "Original title:"
+msgstr ""
+
+#: ./src/pyams_default_theme/shared/resource/templates/specificities.pt:58
 msgid "Author:"
 msgstr ""
 
-#: ./src/pyams_default_theme/shared/resource/templates/specificities.pt:55
+#: ./src/pyams_default_theme/shared/resource/templates/specificities.pt:62
+msgid "Translator:"
+msgstr ""
+
+#: ./src/pyams_default_theme/shared/resource/templates/specificities.pt:66
+msgid "Illustrator:"
+msgstr ""
+
+#: ./src/pyams_default_theme/shared/resource/templates/specificities.pt:70
 msgid "Drawer:"
 msgstr ""
 
-#: ./src/pyams_default_theme/shared/resource/templates/specificities.pt:59
+#: ./src/pyams_default_theme/shared/resource/templates/specificities.pt:74
 msgid "Colourist:"
 msgstr ""
 
-#: ./src/pyams_default_theme/shared/resource/templates/specificities.pt:63
+#: ./src/pyams_default_theme/shared/resource/templates/specificities.pt:78
 msgid "Lettering:"
 msgstr ""
 
-#: ./src/pyams_default_theme/shared/resource/templates/specificities.pt:67
+#: ./src/pyams_default_theme/shared/resource/templates/specificities.pt:82
 msgid "Producer:"
 msgstr ""
 
-#: ./src/pyams_default_theme/shared/resource/templates/specificities.pt:71
+#: ./src/pyams_default_theme/shared/resource/templates/specificities.pt:86
 msgid "Director:"
 msgstr ""
 
-#: ./src/pyams_default_theme/shared/resource/templates/specificities.pt:75
+#: ./src/pyams_default_theme/shared/resource/templates/specificities.pt:90
 msgid "Actors:"
 msgstr ""
 
-#: ./src/pyams_default_theme/shared/resource/templates/specificities.pt:79
+#: ./src/pyams_default_theme/shared/resource/templates/specificities.pt:94
 msgid "Editor:"
 msgstr ""
 
-#: ./src/pyams_default_theme/shared/resource/templates/specificities.pt:83
+#: ./src/pyams_default_theme/shared/resource/templates/specificities.pt:98
 msgid "Collection:"
 msgstr ""
 
-#: ./src/pyams_default_theme/shared/resource/templates/specificities.pt:87
+#: ./src/pyams_default_theme/shared/resource/templates/specificities.pt:102
 msgid "Series:"
 msgstr ""
 
-#: ./src/pyams_default_theme/shared/resource/templates/specificities.pt:91
+#: ./src/pyams_default_theme/shared/resource/templates/specificities.pt:106
 msgid "Volume:"
 msgstr ""
 
-#: ./src/pyams_default_theme/shared/resource/templates/specificities.pt:95
+#: ./src/pyams_default_theme/shared/resource/templates/specificities.pt:110
 msgid "Format:"
 msgstr ""
 
-#: ./src/pyams_default_theme/shared/resource/templates/specificities.pt:99
+#: ./src/pyams_default_theme/shared/resource/templates/specificities.pt:114
 msgid "Release year:"
 msgstr ""
 
-#: ./src/pyams_default_theme/shared/resource/templates/specificities.pt:103
+#: ./src/pyams_default_theme/shared/resource/templates/specificities.pt:118
 msgid "Awards:"
 msgstr ""
 
-#: ./src/pyams_default_theme/shared/resource/templates/specificities.pt:111
+#: ./src/pyams_default_theme/shared/resource/templates/specificities.pt:126
 msgid "Number of pages:"
 msgstr ""
 
-#: ./src/pyams_default_theme/shared/resource/templates/specificities.pt:115
+#: ./src/pyams_default_theme/shared/resource/templates/specificities.pt:130
 msgid "Editor reference:"
 msgstr ""
 
-#: ./src/pyams_default_theme/shared/resource/templates/specificities.pt:119
+#: ./src/pyams_default_theme/shared/resource/templates/specificities.pt:134
 msgid "ISBN number:"
 msgstr ""
 
-#: ./src/pyams_default_theme/shared/resource/templates/specificities.pt:123
+#: ./src/pyams_default_theme/shared/resource/templates/specificities.pt:138
 msgid "Price:"
 msgstr ""
 
-#: ./src/pyams_default_theme/shared/resource/templates/specificities.pt:124
+#: ./src/pyams_default_theme/shared/resource/templates/specificities.pt:139
 msgid "€ ${price}"
 msgstr ""
 
-#: ./src/pyams_default_theme/shared/resource/templates/specificities.pt:132
+#: ./src/pyams_default_theme/shared/resource/templates/specificities.pt:147
 msgid "Summary"
 msgstr ""
 
-#: ./src/pyams_default_theme/shared/resource/templates/specificities.pt:137
+#: ./src/pyams_default_theme/shared/resource/templates/specificities.pt:152
 msgid "Synopsis"
 msgstr ""
 
-#: ./src/pyams_default_theme/shared/resource/templates/specificities.pt:142
+#: ./src/pyams_default_theme/shared/resource/templates/specificities.pt:157
 msgid "Publisher's words"
 msgstr ""
 
-#: ./src/pyams_default_theme/shared/resource/templates/specificities.pt:147
+#: ./src/pyams_default_theme/shared/resource/templates/specificities.pt:162
 msgid "More resource info:"
 msgstr ""
 
@@ -719,3 +762,11 @@
 #: ./src/pyams_default_theme/shared/site/portlet/__init__.py:48
 msgid "Site container summary"
 msgstr ""
+
+#: ./src/pyams_default_theme/shared/site/portlet/__init__.py:59
+msgid "Three vertical panels with panoramic illustrations"
+msgstr ""
+
+#: ./src/pyams_default_theme/shared/site/portlet/__init__.py:70
+msgid "Four vertical panels with portrait illustrations"
+msgstr ""
--- a/src/pyams_default_theme/resources/css/pyams-default.css	Fri Dec 28 11:05:40 2018 +0100
+++ b/src/pyams_default_theme/resources/css/pyams-default.css	Sun Dec 30 18:11:35 2018 +0100
@@ -57,15 +57,15 @@
 /**
  * Header styles
  */
-.header-simple .regularbanner {
+.header-simple .banner {
   position: relative;
 }
-.header-simple .regularbanner picture.regularbanner__media,
-.header-simple .regularbanner img.regularbanner__media {
+.header-simple .banner picture.banner_img,
+.header-simple .banner img.banner_img {
   width: 100%;
 }
-.header-simple .regularbanner picture.logo,
-.header-simple .regularbanner img.logo {
+.header-simple .banner picture.logo,
+.header-simple .banner img.logo {
   position: absolute;
   top: 10px;
   left: 10px;
@@ -127,6 +127,7 @@
   background-color: #39413b;
   color: white;
   flex-direction: row;
+  flex-wrap: wrap;
   justify-content: space-evenly;
   align-items: flex-start;
   padding-top: 1em;
@@ -229,6 +230,22 @@
   border: 1px solid #ddd;
   border-left: 5px solid #ddd;
 }
+blockquote h3 {
+  margin-top: 0.5em;
+}
+blockquote .pictogram {
+  position: relative;
+  margin-right: 10px;
+}
+blockquote .pictogram > .svg-container,
+blockquote .pictogram > img {
+  position: relative;
+  margin-top: calc(100% - 24px);
+  margin-bottom: calc(100% - 24px);
+}
+blockquote .pictogram svg {
+  display: block;
+}
 blockquote.pull-right {
   padding: 0 15px;
   text-align: left;
@@ -238,6 +255,9 @@
 /**
  * Panels
  */
+.panel {
+  margin-top: 1rem;
+}
 .panels {
   margin-top: 2rem;
 }
@@ -272,9 +292,6 @@
 /**
  * Images gallery
  */
-.illustration {
-  margin-bottom: 1rem;
-}
 .illustration .author {
   padding-top: 0.2em;
   font-size: 0.9em;
@@ -357,6 +374,9 @@
   top: 0;
   font-size: 4em;
 }
+.verbatim .panel-body .quote {
+  font-style: italic;
+}
 .verbatim .panel-body .author {
   margin-top: 0.5em;
 }
--- a/src/pyams_default_theme/resources/css/pyams-default.css.map	Fri Dec 28 11:05:40 2018 +0100
+++ b/src/pyams_default_theme/resources/css/pyams-default.css.map	Sun Dec 30 18:11:35 2018 +0100
@@ -1,1 +1,1 @@
-{"version":3,"sources":["../less/pyams-default.less"],"names":[],"mappings":"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","file":"pyams-default.css"}
\ No newline at end of file
+{"version":3,"sources":["../less/pyams-default.less"],"names":[],"mappings":"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","file":"pyams-default.css"}
\ No newline at end of file
--- a/src/pyams_default_theme/resources/css/pyams-default.min.css	Fri Dec 28 11:05:40 2018 +0100
+++ b/src/pyams_default_theme/resources/css/pyams-default.min.css	Sun Dec 30 18:11:35 2018 +0100
@@ -1,1 +1,1 @@
-.margin-bottom-10{margin-bottom:10px}.margin-bottom-20{margin-bottom:20px}body{font-family:Lato,Helvetica,Arial,sans-serif;margin:0 auto;overflow-x:hidden}h1,h2,h3,h4,h5,h6{font-family:Oswald,Helvetica,Arial,Sans-Serif}svg{width:100%;height:100%}dd ul{position:relative;list-style-position:outside;list-style-type:none;padding-left:1em}dd ul li::before{position:absolute;left:0;content:'-'}.no-padding{padding:0!important}.spacer{padding:1em 0}.spacer.double{padding:2em 0}.spacer hr{margin:0;padding:0}.header-simple .regularbanner{position:relative}.header-simple .regularbanner img.regularbanner__media,.header-simple .regularbanner picture.regularbanner__media{width:100%}.header-simple .regularbanner img.logo,.header-simple .regularbanner picture.logo{position:absolute;top:10px;left:10px;max-height:calc(100% - 20px)}.affix{top:0;width:100%;z-index:9999!important;opacity:.95;transition:all .5s ease-in-out}.affix~.container-fluid{position:relative;top:50px}.navbar{margin-bottom:20px;background-color:#fff;border:1px solid #39413b;font-family:Oswald,Helvetica,Arial,Sans-Serif;transition:all .5s ease-in-out}.navbar a,.navbar a:active,.navbar a:visited{color:#39413b}.navbar .icon-bar,.navbar li.active{background-color:#a5bcaa}.navbar.affix{background-color:#39413b}.navbar.affix a{color:#fff}.navbar.affix .dropdown-menu a{color:#39413b}.navbar.affix:hover a:hover{color:#39413b}.navbar.affix .icon-bar{background-color:#fff}.breadcrumb{margin-bottom:1rem}.page-header{margin-top:2rem}.footer-simple{display:flex;margin-top:2em;border-top:1px solid #ddd;border-bottom:0;background-color:#39413b;color:#fff;flex-direction:row;justify-content:space-evenly;align-items:flex-start;padding-top:1em;padding-bottom:1em}.footer-simple .title{font-weight:700;margin-bottom:.5em}.footer-simple ul{padding-top:3px;padding-left:1em}.footer-simple li{list-style-type:square;list-style-position:outside;padding-left:0}.footer-simple a,.footer-simple a:hover{color:#eee;cursor:default;text-decoration:none}.footer-simple a[href]:hover{cursor:pointer;text-decoration:underline}@media only screen and (min-width:1200px){.portal-page .slot.col-lg-0{display:none}}@media only screen and (min-width:992px) and (max-width:1199px){.portal-page .slot.col-md-0{display:none}}@media only screen and (min-width:768px) and (max-width:991px){.portal-page .slot.col-sm-0{display:none}}@media only screen and (max-width:767px){.portal-page .slot.col-xs-0{display:none}}.toolbox{display:flex;flex-direction:column}.toolbox button{text-align:left;display:flex!important;align-items:center}.toolbox button i.fa{display:inline-block;margin-right:1rem}@media only screen and (min-width:1340px){.col-lg-12 .portlet>section.wrapper{margin-left:calc(-50vw + 50%);margin-right:calc(-50vw + 50%)}}@media only screen and (min-width:1052px){.col-md-12 .portlet>section.wrapper{margin-left:calc(-50vw + 50%);margin-right:calc(-50vw + 50%)}}@media only screen and (max-width:1051px){.col-sm-12 .portlet>section.wrapper{margin-left:calc(-50vw + 50%);margin-right:calc(-50vw + 50%)}}@media only screen and (max-width:767px){.navbar.affix .dropdown-menu{background-color:#39413b}.navbar.affix .dropdown-menu a{color:#fff}.col-xs-12 .portlet>section.wrapper{margin-left:calc(-50vw + 50%);margin-right:calc(-50vw + 50%)}}.summary .thumbnail.pull-left{margin-right:15px}blockquote{margin-top:2rem;border:1px solid #ddd;border-left:5px solid #ddd}blockquote.pull-right{padding:0 15px;text-align:left;border:1px solid #ddd;border-left:5px solid #ddd}.panels{margin-top:2rem}.search-results header,.search-results header>div{display:flex;align-items:center;justify-content:space-between;flex-flow:row nowrap;white-space:nowrap}.search-results .breadcrumb:empty{margin:0;padding:0}.search-results .thumbnail.pull-left{margin-right:3rem}.search-results .tags span{margin:0 .2rem}.search-results li .current{font-weight:700}.search-results li .current:hover,.search-results li .disabled:hover{background-color:transparent}.illustration{margin-bottom:1rem}.illustration .author{padding-top:.2em;font-size:.9em;font-style:italic}.gallery{display:flex;flex-wrap:wrap}.gallery .legend{margin-bottom:.2em}.gallery img{box-shadow:0 2px 6px 2px rgba(0,0,0,.75);margin-bottom:5px;filter:grayscale();transition:all ease-in-out .5s}.gallery img:hover{filter:none}.gallery .author{margin-bottom:15px;text-align:right;font-style:italic;font-size:.8em}.ekko-lightbox{position:fixed;top:0!important;height:100vh}.ekko-lightbox .modal-footer{padding-top:0;text-align:right!important;font-style:italic;font-size:.8em}.video-wrapper iframe{width:100%}.milestones{display:flex;justify-content:space-around}.milestones .arrow{font-weight:700;font-size:1.5em}.contact-card .photo.pull-left{margin-right:1em}.contact-card .photo.pull-right{margin-left:1em}.contact-card .address{margin-top:.5em;margin-bottom:.5em}.verbatim .panel-body{position:relative;margin-left:50px}.verbatim .panel-body::before{content:'«';position:absolute;left:-30px;top:0;font-size:4em}.verbatim .panel-body .author{margin-top:.5em}.source pre{font-family:'Source Code Pro',monospace}.thesaurus-term{color:#337ab7;text-decoration:none;font-weight:700;cursor:pointer}.modal{z-index:10050}.modal fieldset legend{padding-top:10px}.modal footer{margin:15px 40px;display:flex;flex-direction:row-reverse}.modal-backdrop,.modal-backdrop.fade.in{position:fixed;width:100%;height:100%;z-index:990}.modal-dialog.modal-max{width:98%;max-width:98%}@media only screen and (min-width:768px){.modal-dialog.modal-xlarge{width:95%;max-width:1000px}}@media only screen and (min-width:768px){.modal-dialog.modal-large{width:80%;max-width:900px}}@media only screen and (min-width:768px){.modal-dialog.modal-medium{width:60%;max-width:650px}}@media only screen and (min-width:768px){.modal-dialog.modal-small{width:40%;max-width:450px}}.modal-dialog .modal-body .modal-viewport{min-height:140px}.modal-dialog .close:hover{background-color:#fff}.modal-dialog .suffix .alert{margin-bottom:0}.modal-dialog .suffix .alert:last-child{border-radius:0 0 5px 5px}.modal-header{position:relative;cursor:move}.modal-header .toolbar{position:absolute;right:25px;bottom:-19px;z-index:1}.modal-title{min-height:1.1em}.modal-title img{margin:0 15px 0 0}.modal-overflow{position:relative}.modal-overflow .modal-body{overflow:hidden}.modal-overflow .scrollmarker{position:absolute;width:100%;height:20px}@media only screen and (max-width:991px){.modal-overflow .scrollmarker{display:none!important}}.modal-overflow .scrollmarker.top{background:-moz-linear-gradient(top,#3276b1 0,rgba(50,118,177,.83) 17%,rgba(50,118,177,0) 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0,#3276b1),color-stop(17%,rgba(50,118,177,.83)),color-stop(100%,rgba(50,118,177,0)));background:-webkit-linear-gradient(top,#3276b1 0,rgba(50,118,177,.83) 17%,rgba(50,118,177,0) 100%);background:-o-linear-gradient(top,#3276b1 0,rgba(50,118,177,.83) 17%,rgba(50,118,177,0) 100%);background:-ms-linear-gradient(top,#3276b1 0,rgba(50,118,177,.83) 17%,rgba(50,118,177,0) 100%);background:linear-gradient(to bottom,#3276b1 0,rgba(50,118,177,.83) 17%,rgba(50,118,177,0) 100%)}.modal-overflow .scrollmarker.bottom{background:-moz-linear-gradient(bottom,#3276b1 0,rgba(50,118,177,.83) 17%,rgba(50,118,177,0) 100%);background:-webkit-gradient(linear,left bottom,left top,color-stop(0,#3276b1),color-stop(17%,rgba(50,118,177,.83)),color-stop(100%,rgba(50,118,177,0)));background:-webkit-linear-gradient(bottom,#3276b1 0,rgba(50,118,177,.83) 17%,rgba(50,118,177,0) 100%);background:-o-linear-gradient(bottom,#3276b1 0,rgba(50,118,177,.83) 17%,rgba(50,118,177,0) 100%);background:-ms-linear-gradient(bottom,#3276b1 0,rgba(50,118,177,.83) 17%,rgba(50,118,177,0) 100%);background:linear-gradient(to top,#3276b1 0,rgba(50,118,177,.83) 17%,rgba(50,118,177,0) 100%)}.modal-viewport{overflow-x:hidden;overflow-y:auto}.modal-viewport fieldset .alert{margin:0 -5px 5px!important}.search-form .form-group{display:flex}.search-form input{flex-grow:5}.ams-form fieldset{display:block;position:relative;padding:10px 15px 5px;border:0;background:rgba(255,255,255,.9)}.ams-form:after,.ams-form:before{margin:0}
+.margin-bottom-10{margin-bottom:10px}.margin-bottom-20{margin-bottom:20px}body{font-family:Lato,Helvetica,Arial,sans-serif;margin:0 auto;overflow-x:hidden}h1,h2,h3,h4,h5,h6{font-family:Oswald,Helvetica,Arial,Sans-Serif}svg{width:100%;height:100%}dd ul{position:relative;list-style-position:outside;list-style-type:none;padding-left:1em}dd ul li::before{position:absolute;left:0;content:'-'}.no-padding{padding:0!important}.spacer{padding:1em 0}.spacer.double{padding:2em 0}.spacer hr{margin:0;padding:0}.header-simple .banner{position:relative}.header-simple .banner img.banner_img,.header-simple .banner picture.banner_img{width:100%}.header-simple .banner img.logo,.header-simple .banner picture.logo{position:absolute;top:10px;left:10px;max-height:calc(100% - 20px)}.affix{top:0;width:100%;z-index:9999!important;opacity:.95;transition:all .5s ease-in-out}.affix~.container-fluid{position:relative;top:50px}.navbar{margin-bottom:20px;background-color:#fff;border:1px solid #39413b;font-family:Oswald,Helvetica,Arial,Sans-Serif;transition:all .5s ease-in-out}.navbar a,.navbar a:active,.navbar a:visited{color:#39413b}.navbar .icon-bar,.navbar li.active{background-color:#a5bcaa}.navbar.affix{background-color:#39413b}.navbar.affix a{color:#fff}.navbar.affix .dropdown-menu a{color:#39413b}.navbar.affix:hover a:hover{color:#39413b}.navbar.affix .icon-bar{background-color:#fff}.breadcrumb{margin-bottom:1rem}.page-header{margin-top:2rem}.footer-simple{display:flex;margin-top:2em;border-top:1px solid #ddd;border-bottom:0;background-color:#39413b;color:#fff;flex-direction:row;flex-wrap:wrap;justify-content:space-evenly;align-items:flex-start;padding-top:1em;padding-bottom:1em}.footer-simple .title{font-weight:700;margin-bottom:.5em}.footer-simple ul{padding-top:3px;padding-left:1em}.footer-simple li{list-style-type:square;list-style-position:outside;padding-left:0}.footer-simple a,.footer-simple a:hover{color:#eee;cursor:default;text-decoration:none}.footer-simple a[href]:hover{cursor:pointer;text-decoration:underline}@media only screen and (min-width:1200px){.portal-page .slot.col-lg-0{display:none}}@media only screen and (min-width:992px) and (max-width:1199px){.portal-page .slot.col-md-0{display:none}}@media only screen and (min-width:768px) and (max-width:991px){.portal-page .slot.col-sm-0{display:none}}@media only screen and (max-width:767px){.portal-page .slot.col-xs-0{display:none}}.toolbox{display:flex;flex-direction:column}.toolbox button{text-align:left;display:flex!important;align-items:center}.toolbox button i.fa{display:inline-block;margin-right:1rem}@media only screen and (min-width:1340px){.col-lg-12 .portlet>section.wrapper{margin-left:calc(-50vw + 50%);margin-right:calc(-50vw + 50%)}}@media only screen and (min-width:1052px){.col-md-12 .portlet>section.wrapper{margin-left:calc(-50vw + 50%);margin-right:calc(-50vw + 50%)}}@media only screen and (max-width:1051px){.col-sm-12 .portlet>section.wrapper{margin-left:calc(-50vw + 50%);margin-right:calc(-50vw + 50%)}}@media only screen and (max-width:767px){.navbar.affix .dropdown-menu{background-color:#39413b}.navbar.affix .dropdown-menu a{color:#fff}.col-xs-12 .portlet>section.wrapper{margin-left:calc(-50vw + 50%);margin-right:calc(-50vw + 50%)}}.summary .thumbnail.pull-left{margin-right:15px}blockquote{margin-top:2rem;border:1px solid #ddd;border-left:5px solid #ddd}blockquote h3{margin-top:.5em}blockquote .pictogram{position:relative;margin-right:10px}blockquote .pictogram>.svg-container,blockquote .pictogram>img{position:relative;margin-top:calc(100% - 24px);margin-bottom:calc(100% - 24px)}blockquote .pictogram svg{display:block}blockquote.pull-right{padding:0 15px;text-align:left;border:1px solid #ddd;border-left:5px solid #ddd}.panel{margin-top:1rem}.panels{margin-top:2rem}.search-results header,.search-results header>div{display:flex;align-items:center;justify-content:space-between;flex-flow:row nowrap;white-space:nowrap}.search-results .breadcrumb:empty{margin:0;padding:0}.search-results .thumbnail.pull-left{margin-right:3rem}.search-results .tags span{margin:0 .2rem}.search-results li .current{font-weight:700}.search-results li .current:hover,.search-results li .disabled:hover{background-color:transparent}.illustration .author{padding-top:.2em;font-size:.9em;font-style:italic}.gallery{display:flex;flex-wrap:wrap}.gallery .legend{margin-bottom:.2em}.gallery img{box-shadow:0 2px 6px 2px rgba(0,0,0,.75);margin-bottom:5px;filter:grayscale();transition:all ease-in-out .5s}.gallery img:hover{filter:none}.gallery .author{margin-bottom:15px;text-align:right;font-style:italic;font-size:.8em}.ekko-lightbox{position:fixed;top:0!important;height:100vh}.ekko-lightbox .modal-footer{padding-top:0;text-align:right!important;font-style:italic;font-size:.8em}.video-wrapper iframe{width:100%}.milestones{display:flex;justify-content:space-around}.milestones .arrow{font-weight:700;font-size:1.5em}.contact-card .photo.pull-left{margin-right:1em}.contact-card .photo.pull-right{margin-left:1em}.contact-card .address{margin-top:.5em;margin-bottom:.5em}.verbatim .panel-body{position:relative;margin-left:50px}.verbatim .panel-body::before{content:'«';position:absolute;left:-30px;top:0;font-size:4em}.verbatim .panel-body .quote{font-style:italic}.verbatim .panel-body .author{margin-top:.5em}.source pre{font-family:'Source Code Pro',monospace}.thesaurus-term{color:#337ab7;text-decoration:none;font-weight:700;cursor:pointer}.modal{z-index:10050}.modal fieldset legend{padding-top:10px}.modal footer{margin:15px 40px;display:flex;flex-direction:row-reverse}.modal-backdrop,.modal-backdrop.fade.in{position:fixed;width:100%;height:100%;z-index:990}.modal-dialog.modal-max{width:98%;max-width:98%}@media only screen and (min-width:768px){.modal-dialog.modal-xlarge{width:95%;max-width:1000px}}@media only screen and (min-width:768px){.modal-dialog.modal-large{width:80%;max-width:900px}}@media only screen and (min-width:768px){.modal-dialog.modal-medium{width:60%;max-width:650px}}@media only screen and (min-width:768px){.modal-dialog.modal-small{width:40%;max-width:450px}}.modal-dialog .modal-body .modal-viewport{min-height:140px}.modal-dialog .close:hover{background-color:#fff}.modal-dialog .suffix .alert{margin-bottom:0}.modal-dialog .suffix .alert:last-child{border-radius:0 0 5px 5px}.modal-header{position:relative;cursor:move}.modal-header .toolbar{position:absolute;right:25px;bottom:-19px;z-index:1}.modal-title{min-height:1.1em}.modal-title img{margin:0 15px 0 0}.modal-overflow{position:relative}.modal-overflow .modal-body{overflow:hidden}.modal-overflow .scrollmarker{position:absolute;width:100%;height:20px}@media only screen and (max-width:991px){.modal-overflow .scrollmarker{display:none!important}}.modal-overflow .scrollmarker.top{background:-moz-linear-gradient(top,#3276b1 0,rgba(50,118,177,.83) 17%,rgba(50,118,177,0) 100%);background:-webkit-gradient(linear,left top,left bottom,color-stop(0,#3276b1),color-stop(17%,rgba(50,118,177,.83)),color-stop(100%,rgba(50,118,177,0)));background:-webkit-linear-gradient(top,#3276b1 0,rgba(50,118,177,.83) 17%,rgba(50,118,177,0) 100%);background:-o-linear-gradient(top,#3276b1 0,rgba(50,118,177,.83) 17%,rgba(50,118,177,0) 100%);background:-ms-linear-gradient(top,#3276b1 0,rgba(50,118,177,.83) 17%,rgba(50,118,177,0) 100%);background:linear-gradient(to bottom,#3276b1 0,rgba(50,118,177,.83) 17%,rgba(50,118,177,0) 100%)}.modal-overflow .scrollmarker.bottom{background:-moz-linear-gradient(bottom,#3276b1 0,rgba(50,118,177,.83) 17%,rgba(50,118,177,0) 100%);background:-webkit-gradient(linear,left bottom,left top,color-stop(0,#3276b1),color-stop(17%,rgba(50,118,177,.83)),color-stop(100%,rgba(50,118,177,0)));background:-webkit-linear-gradient(bottom,#3276b1 0,rgba(50,118,177,.83) 17%,rgba(50,118,177,0) 100%);background:-o-linear-gradient(bottom,#3276b1 0,rgba(50,118,177,.83) 17%,rgba(50,118,177,0) 100%);background:-ms-linear-gradient(bottom,#3276b1 0,rgba(50,118,177,.83) 17%,rgba(50,118,177,0) 100%);background:linear-gradient(to top,#3276b1 0,rgba(50,118,177,.83) 17%,rgba(50,118,177,0) 100%)}.modal-viewport{overflow-x:hidden;overflow-y:auto}.modal-viewport fieldset .alert{margin:0 -5px 5px!important}.search-form .form-group{display:flex}.search-form input{flex-grow:5}.ams-form fieldset{display:block;position:relative;padding:10px 15px 5px;border:0;background:rgba(255,255,255,.9)}.ams-form:after,.ams-form:before{margin:0}
--- a/src/pyams_default_theme/resources/js/pyams-default.js	Fri Dec 28 11:05:40 2018 +0100
+++ b/src/pyams_default_theme/resources/js/pyams-default.js	Sun Dec 30 18:11:35 2018 +0100
@@ -69,7 +69,9 @@
 		});
 	});
 
-	// Initialize custom click handlers
+	/**
+	 * Initialize MyAMS custom click handlers
+	 */
 	$(document).on('click', '[data-ams-click-handler]', function(event) {
 		var source = $(this);
 		var handlers = source.data('ams-disabled-handlers');
@@ -94,7 +96,9 @@
 		}
 	});
 
-	// Initialize custom change handlers
+	/**
+	 * Initialize MyAMS custom change handlers
+ 	 */
 	$(document).on('change', '[data-ams-change-handler]', function(event) {
 		var source = $(this);
 		// Disable change handlers for readonly inputs
@@ -125,7 +129,7 @@
 	});
 
 	/**
-	 * Glossary access
+	 * Glossary terms access
 	 */
 	var clickTerm = function() {
 		var modal = $('.modal >div');
--- a/src/pyams_default_theme/resources/js/pyams-default.min.js	Fri Dec 28 11:05:40 2018 +0100
+++ b/src/pyams_default_theme/resources/js/pyams-default.min.js	Sun Dec 30 18:11:35 2018 +0100
@@ -1,1 +1,1 @@
-!function(a,t){"use strict";var e=t.MyAMS;t.PyAMS_default={search:{updateSort:function(){var t=a('form[id="search-results"]');if(t.exists()){var e=a(this).val();a('input[name="order_by"]',t).val(e),t.submit()}},updatePageLength:function(){var t=a('form[id="search-results"]');if(t.exists()){var e=a(this).val();a('input[name="start"]',t).val(0),a('input[name="length"]',t).val(e),t.submit()}},previousPage:function(){var t=a('form[id="search-results"]');if(t.exists()){var e=a(this).parents("ol.pagination").data("ams-current-page"),n=a('input[name="length"]',t).val();a('input[name="start"]',t).val(n*(e-2)),t.submit()}},nextPage:function(){var t=a('form[id="search-results"]');if(t.exists()){var e=a(this).parents("ol.pagination").data("ams-current-page"),n=a('input[name="length"]',t).val();a('input[name="start"]',t).val(n*e),t.submit()}},gotoPage:function(){var t=a('form[id="search-results"]');if(t.exists()){var e=parseInt(a(this).text()),n=a('input[name="length"]',t).val();a('input[name="start"]',t).val(n*(e-1)),t.submit()}}}},a(document).on("click",'[data-toggle="lightbox"]',function(t){t.preventDefault(),a(this).ekkoLightbox({wrapping:!1,alwaysShowClose:!0})}),a(document).on("click","[data-ams-click-handler]",function(t){var n=a(this),i=n.data("ams-disabled-handlers");if(!0!==i&&"click"!==i&&"all"!==i){var s=n.data();if(s.amsClickHandler){!0!==s.amsStopPropagation&&!0!==s.amsClickStopPropagation||t.stopPropagation(),!0!==s.amsClickKeepDefault&&t.preventDefault();for(var r=s.amsClickHandler.split(/\s+/),o=0;o<r.length;o++){var l=e.getFunctionByName(r[o]);void 0!==l&&l.call(n,t,s.amsClickHandlerOptions)}}}}),a(document).on("change","[data-ams-change-handler]",function(t){var n=a(this);if(!n.prop("readonly")){var i=n.data("ams-disabled-handlers");if(!0!==i&&"change"!==i&&"all"!==i){var s=n.data();if(s.amsChangeHandler){!0!==s.amsStopPropagation&&!0!==s.amsChangeStopPropagation||t.stopPropagation(),!0!==s.amsChangeKeepDefault&&t.preventDefault();for(var r=s.amsChangeHandler.split(/\s+/),o=0;o<r.length;o++){var l=e.getFunctionByName(r[o]);void 0!==l&&l.call(n,t,s.amsChangeHandlerOptions)}}}}});var n=function(){var t=a(".modal >div");t.exists()&&e.dialog.close(t),e.dialog.open("/get-glossary-term.html?term="+a(this).text(),{},{shown:function(){a(".thesaurus-term").off("click").on("click",n)}})};e.require(["error","ajax","dialog"],function(){a(".thesaurus-term").off("click").on("click",n)})}(jQuery,this);
+!function(o,a){"use strict";var l=a.MyAMS;a.PyAMS_default={search:{updateSort:function(){var a=o('form[id="search-results"]');if(a.exists()){var t=o(this).val();o('input[name="order_by"]',a).val(t),a.submit()}},updatePageLength:function(){var a=o('form[id="search-results"]');if(a.exists()){var t=o(this).val();o('input[name="start"]',a).val(0),o('input[name="length"]',a).val(t),a.submit()}},previousPage:function(){var a=o('form[id="search-results"]');if(a.exists()){var t=o(this).parents("ol.pagination").data("ams-current-page"),e=o('input[name="length"]',a).val();o('input[name="start"]',a).val(e*(t-2)),a.submit()}},nextPage:function(){var a=o('form[id="search-results"]');if(a.exists()){var t=o(this).parents("ol.pagination").data("ams-current-page"),e=o('input[name="length"]',a).val();o('input[name="start"]',a).val(e*t),a.submit()}},gotoPage:function(){var a=o('form[id="search-results"]');if(a.exists()){var t=parseInt(o(this).text()),e=o('input[name="length"]',a).val();o('input[name="start"]',a).val(e*(t-1)),a.submit()}}}},o(document).on("click",'[data-toggle="lightbox"]',function(a){a.preventDefault(),o(this).ekkoLightbox({wrapping:!1,alwaysShowClose:!0})}),o(document).on("click","[data-ams-click-handler]",function(a){var t=o(this),e=t.data("ams-disabled-handlers");if(!0!==e&&"click"!==e&&"all"!==e){var n=t.data();if(n.amsClickHandler){!0!==n.amsStopPropagation&&!0!==n.amsClickStopPropagation||a.stopPropagation(),!0!==n.amsClickKeepDefault&&a.preventDefault();for(var i=n.amsClickHandler.split(/\s+/),s=0;s<i.length;s++){var r=l.getFunctionByName(i[s]);void 0!==r&&r.call(t,a,n.amsClickHandlerOptions)}}}}),o(document).on("change","[data-ams-change-handler]",function(a){var t=o(this);if(!t.prop("readonly")){var e=t.data("ams-disabled-handlers");if(!0!==e&&"change"!==e&&"all"!==e){var n=t.data();if(n.amsChangeHandler){!0!==n.amsStopPropagation&&!0!==n.amsChangeStopPropagation||a.stopPropagation(),!0!==n.amsChangeKeepDefault&&a.preventDefault();for(var i=n.amsChangeHandler.split(/\s+/),s=0;s<i.length;s++){var r=l.getFunctionByName(i[s]);void 0!==r&&r.call(t,a,n.amsChangeHandlerOptions)}}}}});var t=function(){var a=o(".modal >div");a.exists()&&l.dialog.close(a),l.dialog.open("/get-glossary-term.html?term="+o(this).text(),{},{shown:function(){o(".thesaurus-term").off("click").on("click",t)}})};l.require(["error","ajax","dialog"],function(){o(".thesaurus-term").off("click").on("click",t)})}(jQuery,this);
--- a/src/pyams_default_theme/resources/less/pyams-default.less	Fri Dec 28 11:05:40 2018 +0100
+++ b/src/pyams_default_theme/resources/less/pyams-default.less	Sun Dec 30 18:11:35 2018 +0100
@@ -77,12 +77,12 @@
  * Header styles
  */
 .header-simple {
-	.regularbanner {
+	.banner {
 		position: relative;
 
 		picture,
 		img {
-			&.regularbanner__media {
+			&.banner_img {
 				width: 100%;
 			}
 
@@ -168,6 +168,7 @@
 	background-color: #39413b;
 	color: white;
 	flex-direction: row;
+	flex-wrap: wrap;
 	justify-content: space-evenly;
 	align-items: flex-start;
 	padding-top: 1em;
@@ -298,6 +299,24 @@
 	border: 1px solid #ddd;
 	border-left: 5px solid #ddd;
 
+	h3 {
+		margin-top: 0.5em;
+	}
+	.pictogram {
+		position: relative;
+		margin-right: 10px;
+
+		>.svg-container,
+		>img {
+			position: relative;
+			margin-top: ~"calc(100% - 24px)";
+			margin-bottom: ~"calc(100% - 24px)";
+		}
+
+		svg {
+			display: block;
+		}
+	}
 	&.pull-right {
 		padding: 0 15px;
 		text-align: left;
@@ -310,6 +329,9 @@
 /**
  * Panels
  */
+.panel {
+	margin-top: 1rem;
+}
 .panels {
 	margin-top: 2rem;
 }
@@ -362,8 +384,6 @@
  */
 
 .illustration {
-	margin-bottom: 1rem;
-
 	.author {
 		padding-top: 0.2em;
 		font-size: 0.9em;
@@ -475,7 +495,9 @@
 			top: 0;
 			font-size: 4em;
 		}
-
+		.quote {
+			font-style: italic;
+		}
 		.author {
 			margin-top: 0.5em;
 		}
--- a/src/pyams_default_theme/shared/resource/templates/specificities.pt	Fri Dec 28 11:05:40 2018 +0100
+++ b/src/pyams_default_theme/shared/resource/templates/specificities.pt	Sun Dec 30 18:11:35 2018 +0100
@@ -1,7 +1,10 @@
 <div i18n:domain="pyams_default_theme"
 	 tal:define="resource_info view.resource_info;
 				 country resource_info.original_country;
+				 title resource_info.original_title;
 				 author resource_info.author;
+				 translator resource_info.translator;
+				 illustrator resource_info.illustrator;
 				 drawer resource_info.drawer;
 				 colourist resource_info.colourist;
 				 lettering resource_info.lettering;
@@ -47,10 +50,22 @@
 					<dt i18n:translate="">Original country:</dt>
 					<dd>${country}</dd>
 				</tal:if>
+				<tal:if case="'original_title'" condition="title">
+					<dt i18n:translate="">Original title:</dt>
+					<dd>${title}</dd>
+				</tal:if>
 				<tal:if case="'author'" condition="author">
 					<dt i18n:translate="">Author:</dt>
 					<dd>${author}</dd>
 				</tal:if>
+				<tal:if case="'translator'" condition="translator">
+					<dt i18n:translate="">Translator:</dt>
+					<dd>${translator}</dd>
+				</tal:if>
+				<tal:if case="'illustrator'" condition="illustrator">
+					<dt i18n:translate="">Illustrator:</dt>
+					<dd>${illustrator}</dd>
+				</tal:if>
 				<tal:if case="'drawer'" condition="drawer">
 					<dt i18n:translate="">Drawer:</dt>
 					<dd>${drawer}</dd>
@@ -147,4 +162,4 @@
 		<dt i18n:translate="">More resource info:</dt>
 		<dd><a href="${source_url}" target="_blank">${source_url}</a></dd>
 	</dl>
-</div>
\ No newline at end of file
+</div>
--- a/src/pyams_default_theme/shared/site/portlet/__init__.py	Fri Dec 28 11:05:40 2018 +0100
+++ b/src/pyams_default_theme/shared/site/portlet/__init__.py	Sun Dec 30 18:11:35 2018 +0100
@@ -46,6 +46,7 @@
     """Site container summary portlet default renderer"""
 
     label = _("Site container summary")
+    weight = 1
 
 
 @adapter_config(name='summary-panels',
@@ -55,4 +56,16 @@
 class SiteContainerSummaryPortletPanelsRenderer(BaseSiteSummaryPortletRenderer):
     """Site container summary portlet panels renderer"""
 
-    label = _("Vertical panels with panoramic illustrations")
+    label = _("Three vertical panels with panoramic illustrations")
+    weight = 2
+
+
+@adapter_config(name='summary-panels-vertical',
+                context=(IPortalContext, IPyAMSLayer, Interface, ISiteContainerSummaryPortletSettings),
+                provides=IPortletRenderer)
+@template_config(template='templates/site-panels-vertical.pt', layer=IPyAMSLayer)
+class SiteContainerSummaryPortletVerticalPanelsRenderer(BaseSiteSummaryPortletRenderer):
+    """Site container summary portlet with vertical illustrations renderer"""
+
+    label = _("Four vertical panels with portrait illustrations")
+    weight = 3
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/pyams_default_theme/shared/site/portlet/templates/site-panels-vertical.pt	Sun Dec 30 18:11:35 2018 +0100
@@ -0,0 +1,36 @@
+<div class="panels" i18n:domain="pyams_default_theme"
+	 tal:define="settings view.settings;
+				 button_title i18n:settings.button_title;">
+	<h2 tal:condition="settings.title">${i18n:settings.title}</h2>
+	<div tal:repeat="item view.visible_items"
+		 class="col-md-3 col-sm-4">
+		<tal:var define="target tales:relative_url(item.context)">
+			<div tal:define="illustration tales:pyams_illustration(item.context)"
+				 tal:condition="illustration"
+				 class="thumbnail pull-left hidden-xs">
+				<a href="${target}">
+					<tal:if define="image i18n:illustration.data;
+									alt i18n:illustration.alt_title;"
+							condition="image">
+						${structure:tales:picture(image, lg_thumb='portrait', lg_width=3, md_thumb='portrait', md_width=3,
+												  sm_thumb='pano', sm_width=12, xs_thumb='pano', xs_width=12, alt=alt)}
+					</tal:if>
+				</a>
+			</div>
+			<div>
+				<a href="${target}">
+					<h3>${item.title}</h3>
+				</a>
+				<div class="header">${structure:tales:html(item.header)}</div>
+				<div class="action">
+					<a tal:condition="button_title"
+					   class="btn btn-default"
+					   href="${target}">
+						<span i18n:translate="">${button_title}</span>
+					</a>
+				</div>
+			</div>
+		</tal:var>
+	</div>
+	<div class="clearfix"></div>
+</div>
--- a/src/pyams_default_theme/shared/site/portlet/templates/site-panels.pt	Fri Dec 28 11:05:40 2018 +0100
+++ b/src/pyams_default_theme/shared/site/portlet/templates/site-panels.pt	Sun Dec 30 18:11:35 2018 +0100
@@ -5,10 +5,10 @@
 	<div tal:repeat="item view.visible_items"
 		 class="col-sm-4">
 		<tal:var define="target tales:relative_url(item.context)">
-			<div class="thumbnail pull-left hidden-xs">
-				<a tal:define="illustration tales:pyams_illustration(item.context)"
-				   tal:condition="illustration"
-				   href="${target}">
+			<div tal:define="illustration tales:pyams_illustration(item.context)"
+				 tal:condition="illustration"
+			     class="thumbnail pull-left hidden-xs">
+				<a href="${target}">
 					<tal:if define="image i18n:illustration.data;
 									alt i18n:illustration.alt_title;"
 							condition="image">
@@ -24,6 +24,7 @@
 				<div class="header">${structure:tales:html(item.header)}</div>
 				<div class="action">
 					<a tal:condition="button_title"
+					   class="btn btn-default"
 					   href="${target}">
 						<span i18n:translate="">${button_title}</span>
 					</a>
--- a/src/pyams_default_theme/shared/site/portlet/templates/site-summary.pt	Fri Dec 28 11:05:40 2018 +0100
+++ b/src/pyams_default_theme/shared/site/portlet/templates/site-summary.pt	Sun Dec 30 18:11:35 2018 +0100
@@ -5,10 +5,10 @@
 	<div class="summary">
 		<div tal:repeat="item view.visible_items">
 			<tal:var define="target tales:relative_url(item.context)">
-				<div class="thumbnail pull-left hidden-xs">
-					<a tal:define="illustration tales:pyams_illustration(item.context)"
-					   tal:condition="illustration"
-					   href="${target}">
+				<div tal:define="illustration tales:pyams_illustration(item.context)"
+					 tal:condition="illustration"
+					 class="thumbnail pull-left hidden-xs">
+					<a href="${target}">
 						<tal:if define="image i18n:illustration.data;
 										alt i18n:illustration.alt_title;"
 								condition="image">
@@ -23,8 +23,10 @@
 					</a>
 					<div class="header">${structure:tales:html(item.header)}</div>
 					<div class="action">
-						<a href="${target}">
-							<span i18n:translate="">${button_title or item.button_title}</span>
+						<a tal:condition="button_title"
+						   class="btn btn-default"
+						   href="${target}">
+							<span i18n:translate="">${button_title}</span>
 						</a>
 					</div>
 				</div>
--- a/src/pyams_default_theme/viewlet/banner/templates/banner.pt	Fri Dec 28 11:05:40 2018 +0100
+++ b/src/pyams_default_theme/viewlet/banner/templates/banner.pt	Sun Dec 30 18:11:35 2018 +0100
@@ -1,14 +1,14 @@
-<section class="wrapper-regularbanner" i18n:domain="pyams_default_theme">
-	<div class="regularbanner">
-		<div class="regularbanner__bg"
-			tal:define="banner view.banner"
-			tal:condition="banner">
+<section class="wrapper-banner" i18n:domain="pyams_default_theme">
+	<div class="banner">
+		<div class="banner_bg"
+			 tal:define="banner view.banner"
+			 tal:condition="banner">
 			${structure:tales:picture(banner, lg_thumb='banner', md_thumb='banner',
-									  sm_thumb='banner', xs_thumb='banner', css_class='regularbanner__media')}
-			<!-- /.regularbanner__bg -->
+									  sm_thumb='banner', xs_thumb='banner', css_class='banner_img')}
+			<!-- /.banner_bg -->
 		</div>
 		<tal:var content="structure provider:pyams.logo" />
-		<!-- /.regularbanner -->
+		<!-- /.banner -->
 	</div>
-	<!-- /.wrapper-regularbanner -->
+	<!-- /.wrapper-banner -->
 </section>