Index: /extensions/modus/admin/admin.inc.php
===================================================================
--- /extensions/modus/admin/admin.inc.php	(revision 25794)
+++ /extensions/modus/admin/admin.inc.php	(revision 25794)
@@ -0,0 +1,69 @@
+<?php
+if (!defined('PHPWG_ROOT_PATH')) die('Hacking attempt!');
+
+global $template;
+
+include_once( dirname(dirname(__FILE__)).'/functions.inc.php');
+$default_conf = modus_get_default_config();
+
+$my_conf = @$conf['modus_theme'];
+if (!isset($my_conf))
+  $my_conf = $default_conf;
+elseif (!is_array($my_conf))
+{
+  $my_conf = unserialize($my_conf);
+	$my_conf = array_merge($default_conf, $my_conf);
+}
+
+$text_values = array('skin', 'album_thumb_size', 'index_photo_deriv','index_photo_deriv_hdpi', 'resize_threshold', 'resize_factor');
+$bool_values = array();
+
+// *************** POST management ********************
+if (isset($_POST[$text_values[0]]))
+{
+	foreach ($text_values as $k )
+		$my_conf[$k] = stripslashes($_POST[$k]);
+	foreach ($bool_values as $k )
+		$my_conf[$k] = isset($_POST[$k]) ? true:false;
+	// int/double
+	$my_conf['album_thumb_size'] = max(0, $my_conf['album_thumb_size']);
+  $my_conf['resize_threshold'] = max(1, $my_conf['resize_threshold']);
+  $my_conf['resize_factor'] = max(0, min(1, $my_conf['resize_factor']) );
+  $my_conf = array_intersect_key($my_conf, $default_conf);
+  conf_update_param('modus_theme', addslashes(serialize($my_conf)) );
+
+	global $page;
+	$page['infos'][] = 'options saved !';
+}
+
+
+// *************** template init ********************
+
+
+foreach ($text_values as $k )
+  $template->assign( strtoupper($k), $my_conf[$k] );
+foreach ($bool_values as $k )
+  $template->assign( strtoupper($k), $my_conf[$k] );
+
+$available_derivatives = array( ''=> 'Default');
+foreach(array_keys(ImageStdParams::get_defined_type_map()) as $type)
+	$available_derivatives[$type] = l10n($type);
+
+$available_skins=array();
+$skin_dir = dirname(dirname(__FILE__)).'/skins/';
+$skin_suffix = '.inc.php';
+foreach( glob($skin_dir.'*'.$skin_suffix) as $file)
+{
+	$skin = substr($file, strlen($skin_dir), -strlen($skin_suffix));
+	$available_skins[$skin] = ucwords( str_replace('_', ' ',$skin));
+}
+
+$template->assign( array(
+	'available_derivatives' => $available_derivatives,
+	'available_skins' => $available_skins,
+  'THEMECONF_SRC' => highlight_file( dirname(dirname(__FILE__)).'/themeconf.inc.php', true )
+	) );
+
+$template->set_filename( 'modus_content', dirname(__FILE__).'/modus_admin.tpl' );
+$template->assign_var_from_handle( 'ADMIN_CONTENT', 'modus_content');
+?>
Index: /extensions/modus/admin/maintain.inc.php
===================================================================
--- /extensions/modus/admin/maintain.inc.php	(revision 25794)
+++ /extensions/modus/admin/maintain.inc.php	(revision 25794)
@@ -0,0 +1,26 @@
+<?php
+
+function theme_activate($id, $version, &$errors)
+{
+  global $conf;
+
+  include_once( dirname(dirname(__FILE__)).'/functions.inc.php');
+  $default_conf = modus_get_default_config();
+
+  $my_conf = @$conf['modus_theme'];
+  $my_conf = @unserialize($my_conf);
+  if (empty($my_conf))
+    $my_conf = $default_conf;
+
+  $my_conf = array_merge($default_conf, $my_conf);
+  $my_conf = array_intersect_key($my_conf, $default_conf);
+  conf_update_param('modus_theme', addslashes(serialize($my_conf)) );
+}
+
+function theme_delete()
+{
+  $query = 'DELETE FROM ' . CONFIG_TABLE . ' WHERE param="modus_theme"';
+  pwg_query($query);
+}
+
+?>
Index: /extensions/modus/admin/modus_admin.tpl
===================================================================
--- /extensions/modus/admin/modus_admin.tpl	(revision 25794)
+++ /extensions/modus/admin/modus_admin.tpl	(revision 25794)
@@ -0,0 +1,48 @@
+<h2>Modus theme config</h2>
+
+<form method="post" action="">
+
+
+<fieldset><legend>Skin</legend>
+<select name="skin">
+		{html_options options=$available_skins selected=$SKIN}
+</select>
+</fieldset>
+
+<fieldset><legend>Album thumbs size</legend>
+Use square thumbs of <input type="text" size="4" name="album_thumb_size" value="{$ALBUM_THUMB_SIZE}"> pixels. (Leave 0 for default theme presentation)
+</fieldset>
+
+<fieldset><legend>Default photo sizes</legend>
+
+<label>Index Photos : 
+	<select name="index_photo_deriv">
+		{html_options options=$available_derivatives selected=$INDEX_PHOTO_DERIV}
+	</select>
+</label>
+<br>
+<label>Index Photos large high density screens : 
+	<select name="index_photo_deriv_hdpi">
+		{html_options options=$available_derivatives selected=$INDEX_PHOTO_DERIV_HDPI}
+	</select>
+</label>
+</fieldset>
+
+<fieldset><legend>Full row thumbnail layout</legend>
+Automatically applied for selected derivatives if max_width > max_height*1.5
+<br>
+
+<fieldset><legend>Horizontal crop or resize ?</legend>
+If row overflow is > <input name="resize_threshold" value="{$RESIZE_THRESHOLD}" type=number min=1 step=any size=2> (range [1;Inf]) then 
+use a factor of the overflow <input name="resize_factor" value="{$RESIZE_FACTOR}"type=number min=0 max=1 step=any size=2> (range [0;1]) for resizing.
+</fieldset>
+</fieldset>
+
+<p>
+<input type="submit" value="Submit" />
+</p>
+</form>
+
+<div style="text-align:left;line-height:1em">
+{$THEMECONF_SRC}
+</div>
Index: /extensions/modus/css/base.css.tpl
===================================================================
--- /extensions/modus/css/base.css.tpl	(revision 25794)
+++ /extensions/modus/css/base.css.tpl	(revision 25794)
@@ -0,0 +1,505 @@
+BODY {
+	margin: 0;
+	padding: 0;
+	font-size: 13px;
+	font-family: Arial,Helvetica,sans-serif;
+	min-width: 300px; /*responsive layout*/
+	background-color: {$skin.BODY.backgroundColor};
+	color: {$skin.BODY.color};
+}
+
+A {
+	text-decoration:none;
+	color: {$skin.A.color};
+}
+
+A:hover {
+	text-decoration:underline;
+	color: {$skin['A:hover'].color};
+}
+
+A .pwg-icon {
+	opacity: 0.9;
+}
+A:hover .pwg-icon {
+	opacity: 1;
+}
+
+IMG {
+	border: 0; /*IE <= 9 adds border for linked images*/
+}
+
+H2 {
+	margin: 0;
+	padding: 2px 5px 3px 0;
+	text-align: left;
+	font-size: 20px;
+	font-weight: normal;
+}
+
+BLOCKQUOTE {
+	margin: 8px 10px; /*reduce default user agent margin too large for mobiles*/
+}
+
+INPUT, SELECT {
+	margin: 0;
+	font-size: 1em;	/* <= some browsers don't set it correctly */
+}
+
+TABLE {	/* horizontaly centered */
+	margin-left: auto;
+	margin-right: auto;
+}
+
+
+FORM { padding: 0; margin: 0; }
+
+
+{if !empty($skin.controls)}
+INPUT[type="text"], INPUT[type="password"], SELECT, TEXTAREA
+{if empty($skin.buttons)}
+,INPUT[type="button"], INPUT[type="submit"], INPUT[type="reset"]
+{/if}
+{
+{if !empty($skin.controls.backgroundColor)}
+	background-color: {$skin.controls.backgroundColor};
+{/if}
+{if !empty($skin.controls.gradient)}
+	{$skin.controls.gradient|cssGradient};
+{/if}
+{if !empty($skin.controls.color)}
+	color: {$skin.controls.color};
+{/if}
+{if !empty($skin.controls.border)}
+	border: {$skin.controls.border};
+{/if}
+}
+{/if}
+
+{if !empty($skin['controls:focus'])}
+INPUT:focus, TEXTAREA:focus {
+{if !empty($skin['controls:focus'].backgroundColor)}
+	background-color: {$skin['controls:focus'].backgroundColor};
+{/if}
+{if !empty($skin['controls:focus'].color)}
+	color: {$skin['controls:focus'].color};
+{/if}
+{if !empty($skin['controls:focus'].boxShadow)}
+	box-shadow: {$skin['controls:focus'].boxShadow};
+{/if}
+}
+{/if}
+
+
+{if !empty($skin.buttons)}
+INPUT[type="button"], INPUT[type="submit"], INPUT[type="reset"] {
+{if !empty($skin.buttons.backgroundColor)}
+	background-color: {$skin.buttons.backgroundColor};
+{/if}
+{if !empty($skin.buttons.gradient)}
+	{$skin.buttons.gradient|cssGradient};
+{/if}
+{if !empty($skin.buttons.color)}
+	color: {$skin.buttons.color};
+{/if}
+{if !empty($skin.buttons.border)}
+	border: {$skin.buttons.border};
+{/if}
+}
+{/if}
+
+{if !empty($skin.buttonsHover)}
+INPUT[type="button"]:hover, INPUT[type="submit"]:hover, INPUT[type="reset"]:hover {
+{if !empty($skin.buttonsHover.backgroundColor)}
+	background-color: {$skin.buttonsHover.backgroundColor};
+{/if}
+{if !empty($skin.buttonsHover.gradient)}
+	{$skin.buttonsHover.gradient|cssGradient};
+{/if}
+{if !empty($skin.buttonsHover.color)}
+	color: {$skin.buttonsHover.color};
+{/if}
+{if !empty($skin.buttonsHover.boxShadow)}
+	box-shadow: {$skin.buttonsHover.boxShadow};
+{/if}
+{if !empty($skin.buttonsHover.border)}
+	border: {$skin.buttonsHover.border};
+{/if}
+}
+{/if}
+
+FIELDSET {
+	padding: 1em;
+	margin: 1em 0.5em;
+	overflow: hidden; /* <- makes Opera happy */
+	border: 1px solid gray;
+}
+
+LEGEND {
+	font-style: italic;
+	color: inherit; /*for IE*/
+}
+
+
+/**
+ * Content
+ */
+
+.titrePage {
+	padding: 3px 10px;
+	line-height: 24px;
+{if !empty($skin.pageTitle.backgroundColor)}
+	background-color: {$skin.pageTitle.backgroundColor};
+{/if}
+{if !empty($skin.pageTitle.gradient)}
+	{$skin.pageTitle.gradient|cssGradient}
+{/if}
+{if !empty($skin.pageTitle.color)}
+	color: {$skin.pageTitle.color};
+{/if}
+}
+
+{if !empty($skin.pageTitle.link.color)}
+.titrePage A {
+	color: {$skin.pageTitle.link.color};
+}
+{/if}
+
+{if !empty($skin.pageTitle.linkHover.color)}
+.titrePage A:hover {
+	color: {$skin.pageTitle.linkHover.color};
+}
+{/if}
+
+/* now revert text colors to dropdowns*/
+{if !empty($skin.pageTitle.color)}
+.titrePage .switchBox {
+	color: {$skin.BODY.color};
+}
+{/if}
+{if !empty($skin.pageTitle.link.color)}
+.titrePage .switchBox A {
+	color: {$skin.A.color};
+}
+{/if}
+
+{if !empty($skin.pageTitle.linkHover.color)}
+.titrePage .switchBox A:hover {
+	color: {$skin['A:hover'].color|default:$skin.A.color};
+}
+{/if}
+
+{if !empty($skin.pageTitle.textShadowColor)}
+.titrePage H2 A, #imageHeaderBar H2{
+	text-shadow: 1px 1px 3px {$skin.pageTitle.textShadowColor};
+}
+{/if}
+
+.content .navigationBar, .content .additional_info, .content .calendarBar {
+	margin: 8px 4px;
+	text-align: center;
+}
+
+.content .pageNumberSelected {
+	font-style: italic;
+	font-weight: bold;
+}
+
+.content .additional_info {
+	font-size: 110%;
+}
+
+.content .notification {
+  padding:0 25px;
+}
+
+/* category and tag results paragraphs on a quick search */
+.category_search_results, .tag_search_results {
+  font-size: 16px;
+  margin: 10px 16px;
+}
+
+/* actions */
+.categoryActions {
+	margin: 0 2px;
+	width: auto;
+	padding: 0;
+	text-indent: 0;
+	list-style: none;
+	text-align: center;
+	float: right;
+}
+
+.categoryActions LI {
+	display: inline;
+}
+
+.switchBox {
+	display: none;
+	position: absolute;
+	left: 0; top: 0; /*left, right set through js*/
+	padding: 0.5em;
+	z-index: 100;
+	text-align:left;
+	box-shadow: 2px 2px 5px gray;
+	background-color: {$skin.dropdowns.backgroundColor};
+}
+
+.switchBoxTitle {
+  border-bottom:1px solid gray;
+  padding-bottom:5px;
+  margin-bottom:5px;
+}
+
+#copyright {
+	clear: both;
+	font-size: 83%;
+	text-align: center;
+	margin: 0 0 10px 0;
+}
+
+A.wiki { cursor:help; }
+
+/* Loader gif new in 2.5 */
+.loader {
+  display: none;
+  position: fixed;
+  right: 0;
+  bottom: 0;
+}
+
+/* User comments */
+#comments {
+	padding-left: 5px;
+	padding-right: 5px;
+	clear: both; /*the main image and info table might float on picture page for large screens*/
+}
+
+.commentsList {
+	margin: 5px;
+	padding: 0;
+	list-style: none;
+}
+
+.commentElement {
+	border-radius: 5px;
+	margin: 5px 0;
+	padding: 2px 0 0 2px;
+	width: 100%;
+{if !empty($skin.comment.backgroundColor)}
+	background-color: {$skin.comment.backgroundColor};
+{/if}
+}
+
+.commentElement .description {
+	overflow: auto;
+	/*width: inherit;*/
+}
+
+#comments input[type="text"],
+#comments TEXTAREA {
+	max-width: 100%;
+	width: 100%;
+	-moz-box-sizing: border-box;
+	box-sizing: border-box;
+}
+
+.commentAuthor {
+	font-weight: bold;
+}
+
+.commentDate {
+	font-style: italic
+}
+
+#comments FORM P	 {
+	margin: 5px 0;
+}
+
+
+/**
+ * Filter forms are displayed label by label with the input (or select...)
+ * below the label. Use an UL to make a group (radiobox for instance).
+ * Use a SPAN to group objects in line
+ */
+
+.filter UL,
+.filter FIELDSET>LABEL {
+	display: block;
+	float: left;
+	margin-right: 1em;
+	padding: 0;
+}
+
+.filter LI {
+	list-style: none;
+	margin-bottom: 0.5em;
+}
+
+/*IE6 needs override because of > selector*/
+.filter FIELDSET>LABEL>INPUT,
+.filter FIELDSET>LABEL>SELECT {
+	display: block;
+	margin: 0.5em 0;
+}
+
+
+.properties UL {
+	list-style: none;
+	margin: 0;
+	padding: 0;
+}
+
+.properties LI {
+	margin-bottom: 0.5em;
+	padding: 0;
+	line-height: 1.8em;
+	clear: left;
+}
+
+.properties SPAN.property {
+	font-weight: bold;
+	float: left;
+	width: 50%;
+	text-align: right;
+	margin: 0;
+	padding: 0 0.5em 0 0;
+}
+
+.properties P, .filter P {
+	text-align: center;
+	margin-top: 2em;
+	margin-bottom: 2em;
+}
+
+.tagSelection {
+	margin: 1em 0 !important;
+}
+
+.tagSelection LI {
+	display: inline-block;
+	width: 150px;
+	max-width: 49%;
+	overflow: hidden;
+	white-space: nowrap;
+}
+
+
+
+
+/* jQuery datepicker */
+/*IMG.ui-datepicker-trigger {
+	cursor : pointer;
+}*/
+
+
+/**
+ * Default colors
+ */
+
+ /* So that non-links are slightly greyed out */
+.content .navigationBar, SPAN.calItem, TD.calDayCellEmpty {
+	color: gray;
+}
+
+
+.errors { /* Errors display */
+	color: red;
+	font-weight: bold;
+	margin: 5px;
+	border: 1px solid red;
+	background: #ffe1e1 url(../../default/icon/errors.png) no-repeat center right;
+	padding: 10px 50px 10px 10px;
+}
+
+/* Informations box */
+.infos {
+	color: #002000;
+	background: #98fb98 url(../../default/icon/infos.png) no-repeat center right;
+	margin: 5px;
+	padding: 10px 50px 10px 10px;
+}
+
+/* Header message like upgrade*/
+.header_msgs {
+	text-align:center;
+	font-weight: bold;
+	color:#696969;	/* dimgray */
+	background-color: #d3d3d3;
+	margin: 1px;
+	padding: 1px;
+}
+
+.message {
+  color:white;
+  background-color:#666;
+  margin-bottom:1em;
+  padding: 12px;
+  border-radius: 3px;
+}
+
+/* image comments rules */
+
+#commentAdd {
+	float: left;
+	padding: 0 1%;
+	width: 48%;
+}
+
+#pictureCommentList { 
+	float: right;
+	width: 50%;
+}
+
+/*#pictureCommentList .commentsOrder	{ float: left; margin-bottom: 5px;}
+#pictureCommentList .navigationBar	{ float: right; margin-bottom: 5px;}*/
+#pictureComments h4					{ margin: 0;}
+
+
+
+@media screen and (max-width:480px) {
+	SELECT,INPUT { /*controls in fieldset should not trigger "scroll"*/
+		max-width: 270px;
+	}
+}
+
+
+#albumActionsSwitcher {
+	display: none;
+}
+
+@media screen and (max-width:640px) {
+	#albumActionsSwitcher {
+		display: block;
+		width: 42px;
+		padding-top: 2px;
+		text-align: right;
+		float: right;
+	}
+
+	#albumActionsSwitcher + .categoryActions {
+		display: none;
+		position: absolute;
+		z-index: 1;
+		background-color: {$skin.dropdowns.backgroundColor};
+		padding: 10px 5px 5px;
+		box-shadow: 2px 2px 5px gray;
+		opacity: 0.95;
+		text-align: left;
+		min-width: 180px;
+	}
+	
+	#albumActionsSwitcher + .categoryActions LI{
+		display: block;
+	}
+	
+	#albumActionsSwitcher + .categoryActions .pwg-button{
+		display: block;
+	}
+	
+	#albumActionsSwitcher + .categoryActions .pwg-button-text{
+		display: inline;
+		margin-left: 5px;
+		text-transform: capitalize;
+	}
+}
Index: /extensions/modus/css/fontello/LICENSE.txt
===================================================================
--- /extensions/modus/css/fontello/LICENSE.txt	(revision 25794)
+++ /extensions/modus/css/fontello/LICENSE.txt	(revision 25794)
@@ -0,0 +1,39 @@
+Font license info
+
+
+## Font Awesome
+
+   Copyright (C) 2012 by Dave Gandy
+
+   Author:    Dave Gandy
+   License:   SIL ()
+   Homepage:  http://fortawesome.github.com/Font-Awesome/
+
+
+## Iconic
+
+   Copyright (C) 2012 by P.J. Onori
+
+   Author:    P.J. Onori
+   License:   SIL (http://scripts.sil.org/OFL)
+   Homepage:  http://somerandomdude.com/work/iconic/
+
+
+## Entypo
+
+   Copyright (C) 2012 by Daniel Bruce
+
+   Author:    Daniel Bruce
+   License:   CC BY-SA (http://creativecommons.org/licenses/by-sa/2.0/)
+   Homepage:  http://www.entypo.com
+
+
+## Typicons
+
+   (c) Stephen Hutchings 2012
+
+   Author:    Stephen Hutchings
+   License:   CC BY-SA 3.0 (http://creativecommons.org/licenses/by-sa/3.0/)
+   Homepage:  http://typicons.com/
+
+
Index: /extensions/modus/css/fontello/README.txt
===================================================================
--- /extensions/modus/css/fontello/README.txt	(revision 25794)
+++ /extensions/modus/css/fontello/README.txt	(revision 25794)
@@ -0,0 +1,75 @@
+This webfont is generated by http://fontello.com open source project.
+
+
+================================================================================
+Please, note, that you should obey original font licences, used to make this
+webfont pack. Details available in LICENSE.txt file.
+
+- Usually, it's enough to publish content of LICENSE.txt file somewhere on your
+  site in "About" section.
+
+- If your project is open-source, usually, it will be ok to make LICENSE.txt
+  file publically available in your repository.
+
+- Fonts, used in Fontello, don't require to make clickable links on your site.
+  But any kind of additional authors crediting is welcome.
+================================================================================
+
+
+Comments on archive content
+---------------------------
+
+- /font/* - fonts in different formats
+
+- /css/*  - different kinds of css, for all situations. Should be ok with 
+  twitter bootstrap. Also, you can skip <i> style and assign icon classes
+  directly to text elements, if you don't mind about IE7.
+
+- demo.html - demo file, to show your webfont content
+
+- LICENSE.txt - license info about source fonts, used to build your one.
+
+- config.json - keeps your settings. You can import it back to fontello anytime,
+  to continue your work
+
+
+Why so many CSS files ?
+-----------------------
+
+Because we like to fit all your needs :)
+
+- basic file, <your_font_name>.css - is usually enougth, in contains @font-face
+  and character codes definition
+
+- *-ie7.css - if you need IE7 support, but still don't wish to put char codes
+  directly into html
+
+- *-codes.css and *-ie7-codes.css - if you like to use your own @font-face
+  rules, but still wish to benefit of css generation. That can be very
+  convenient for automated assets build systems. When you need to update font -
+  no needs to manually edit files, just override old version with archive
+  content. See fontello source codes for example.
+
+- *-embedded.css - basic css file, but with embedded WOFF font, to avoid
+  CORS issues in Firefox and IE9+, when fonts are hosted on the separate domain.
+  We strongly recommend to resolve this issue by `Access-Control-Allow-Origin`
+  server headers. But if you ok with dirty hack - this file is for you. Note,
+  that data url moved to separate @font-face to avoid problems with <IE9, when
+  string is too long.
+
+- animate.css - use it to get ideas about spinner rotation animation.
+
+
+Attention for server setup
+--------------------------
+
+You MUST setup server to reply with proper `mime-types` for font files. In other
+case, some browsers will fail to show fonts.
+
+Usually, `apache` already has necessary settings, but `nginx` and other
+webservers should be tuned. Here is list of mime types for our file extentions:
+
+- `application/vnd.ms-fontobject` - eot
+- `application/x-font-woff` - woff
+- `application/x-font-ttf` - ttf
+- `image/svg+xml` - svg
Index: /extensions/modus/css/fontello/config.json
===================================================================
--- /extensions/modus/css/fontello/config.json	(revision 25794)
+++ /extensions/modus/css/fontello/config.json	(revision 25794)
@@ -0,0 +1,166 @@
+{
+  "name": "modus",
+  "css_prefix_text": "pwg-icon-",
+  "css_use_suffix": false,
+  "hinting": true,
+  "units_per_em": 1000,
+  "ascent": 850,
+  "glyphs": [
+    {
+      "uid": "f3dc2d6d8fe9cf9ebff84dc260888cdf",
+      "css": "favorite-add",
+      "code": 9825,
+      "src": "fontawesome"
+    },
+    {
+      "uid": "9d3d9d6ce1ec63eaa26281e6162853c9",
+      "css": "camera-info",
+      "code": 59151,
+      "src": "fontawesome"
+    },
+    {
+      "uid": "b1887b423d2fd15c345e090320c91ca0",
+      "css": "category-view-flat",
+      "code": 9871,
+      "src": "fontawesome"
+    },
+    {
+      "uid": "5bb103cd29de77e0e06a52638527b575",
+      "css": "category-edit",
+      "code": 128295,
+      "src": "fontawesome"
+    },
+    {
+      "uid": "ead4c82d04d7758db0f076584893a8c1",
+      "css": "camera-calendar",
+      "code": 61747,
+      "src": "fontawesome"
+    },
+    {
+      "uid": "555ef8c86832e686fef85f7af2eb7cde",
+      "css": "arrow-w",
+      "code": 8592,
+      "src": "fontawesome"
+    },
+    {
+      "uid": "ad6b3fbb5324abe71a9c0b6609cbb9f1",
+      "css": "arrow-e",
+      "code": 8594,
+      "src": "fontawesome"
+    },
+    {
+      "uid": "95376bf082bfec6ce06ea1cda7bd7ead",
+      "css": "arrow-n",
+      "code": 8593,
+      "src": "fontawesome"
+    },
+    {
+      "uid": "ce06b5805120d0c2f8d60cd3f1a4fdb5",
+      "css": "play",
+      "code": 9654,
+      "src": "fontawesome"
+    },
+    {
+      "uid": "0b28050bac9d3facf2f0226db643ece0",
+      "css": "pause",
+      "code": 59392,
+      "src": "fontawesome"
+    },
+    {
+      "uid": "ab656e280958018a7859eba9a1eabbc7",
+      "css": "representative",
+      "code": 127945,
+      "src": "fontawesome"
+    },
+    {
+      "uid": "197375a3cea8cb90b02d06e4ddf1433d",
+      "css": "map",
+      "code": 127758,
+      "src": "fontawesome"
+    },
+    {
+      "uid": "107ce08c7231097c7447d8f4d059b55f",
+      "css": "ellipsis",
+      "code": 8230,
+      "src": "fontawesome"
+    },
+    {
+      "uid": "f4445feb55521283572ee88bc304f928",
+      "css": "save",
+      "code": 128190,
+      "src": "fontawesome"
+    },
+    {
+      "uid": "3ed68ae14e9cde775121954242a412b2",
+      "css": "sort",
+      "code": 61789,
+      "src": "fontawesome"
+    },
+    {
+      "uid": "6fe95ffc3c807e62647d4f814a96e0d7",
+      "css": "category-view-normal",
+      "code": 61672,
+      "src": "fontawesome"
+    },
+    {
+      "uid": "1256e3054823e304d7e452a589cf8bb8",
+      "css": "minus",
+      "code": 59393,
+      "src": "entypo"
+    },
+    {
+      "uid": "3a230e539a4f3b904debd04c6c155034",
+      "css": "help",
+      "code": 10067,
+      "src": "entypo"
+    },
+    {
+      "uid": "1e77a2yvsq3owssduo2lcgsiven57iv5",
+      "css": "edit",
+      "code": 9998,
+      "src": "typicons"
+    },
+    {
+      "uid": "jh3jpcb1t1bcm80gidkadilh080aq79h",
+      "css": "menu",
+      "code": 57598,
+      "src": "typicons"
+    },
+    {
+      "uid": "e0d15ef5945000f5f264acc35494002f",
+      "css": "caddie-add",
+      "code": 57554,
+      "src": "typicons"
+    },
+    {
+      "uid": "cdfalpadi7huwv9ah4fef2gpfpb4c6qm",
+      "css": "sizes",
+      "code": 57362,
+      "src": "typicons"
+    },
+    {
+      "uid": "63ec74ce71635a8fc128c2eef73b96ae",
+      "css": "globe",
+      "code": 57465,
+      "src": "typicons"
+    },
+    {
+      "uid": "f9efb0f1944c550cf8d38cdf4aba07c4",
+      "css": "cloud",
+      "code": 57631,
+      "src": "typicons"
+    },
+    {
+      "uid": "67f793f91864e379458a92ccc61d9ccf",
+      "css": "letters",
+      "code": 57579,
+      "src": "typicons"
+    },
+    {
+      "uid": "d6944e1d9af302093d43b299bbecbbbe02",
+      "css": "home",
+      "code": 8962,
+      "src": "iconic"
+    }
+  ]
+}
Index: /extensions/modus/css/fontello/css/animation.css
===================================================================
--- /extensions/modus/css/fontello/css/animation.css	(revision 25794)
+++ /extensions/modus/css/fontello/css/animation.css	(revision 25794)
@@ -0,0 +1,85 @@
+/*
+   Animation example, for spinners
+*/
+.animate-spin {
+  -moz-animation: spin 2s infinite linear;
+  -o-animation: spin 2s infinite linear;
+  -webkit-animation: spin 2s infinite linear;
+  animation: spin 2s infinite linear;
+  display: inline-block;
+}
+@-moz-keyframes spin {
+  0% {
+    -moz-transform: rotate(0deg);
+    -o-transform: rotate(0deg);
+    -webkit-transform: rotate(0deg);
+    transform: rotate(0deg);
+  }
+
+  100% {
+    -moz-transform: rotate(359deg);
+    -o-transform: rotate(359deg);
+    -webkit-transform: rotate(359deg);
+    transform: rotate(359deg);
+  }
+}
+@-webkit-keyframes spin {
+  0% {
+    -moz-transform: rotate(0deg);
+    -o-transform: rotate(0deg);
+    -webkit-transform: rotate(0deg);
+    transform: rotate(0deg);
+  }
+
+  100% {
+    -moz-transform: rotate(359deg);
+    -o-transform: rotate(359deg);
+    -webkit-transform: rotate(359deg);
+    transform: rotate(359deg);
+  }
+}
+@-o-keyframes spin {
+  0% {
+    -moz-transform: rotate(0deg);
+    -o-transform: rotate(0deg);
+    -webkit-transform: rotate(0deg);
+    transform: rotate(0deg);
+  }
+
+  100% {
+    -moz-transform: rotate(359deg);
+    -o-transform: rotate(359deg);
+    -webkit-transform: rotate(359deg);
+    transform: rotate(359deg);
+  }
+}
+@-ms-keyframes spin {
+  0% {
+    -moz-transform: rotate(0deg);
+    -o-transform: rotate(0deg);
+    -webkit-transform: rotate(0deg);
+    transform: rotate(0deg);
+  }
+
+  100% {
+    -moz-transform: rotate(359deg);
+    -o-transform: rotate(359deg);
+    -webkit-transform: rotate(359deg);
+    transform: rotate(359deg);
+  }
+}
+@keyframes spin {
+  0% {
+    -moz-transform: rotate(0deg);
+    -o-transform: rotate(0deg);
+    -webkit-transform: rotate(0deg);
+    transform: rotate(0deg);
+  }
+
+  100% {
+    -moz-transform: rotate(359deg);
+    -o-transform: rotate(359deg);
+    -webkit-transform: rotate(359deg);
+    transform: rotate(359deg);
+  }
+}
Index: /extensions/modus/css/fontello/css/modus-codes.css
===================================================================
--- /extensions/modus/css/fontello/css/modus-codes.css	(revision 25794)
+++ /extensions/modus/css/fontello/css/modus-codes.css	(revision 25794)
@@ -0,0 +1,29 @@
+@charset "UTF-8";
+
+ 
+.pwg-icon-favorite-add:before { content: '\2661'; } /* '♡' */
+.pwg-icon-home:before { content: '\2302'; } /* '⌂' */
+.pwg-icon-category-view-flat:before { content: '\268f'; } /* '⚏' */
+.pwg-icon-category-edit:before { content: '🔧'; } /* '\1f527' */
+.pwg-icon-camera-calendar:before { content: '\f133'; } /* '' */
+.pwg-icon-arrow-w:before { content: '\2190'; } /* '←' */
+.pwg-icon-arrow-e:before { content: '\2192'; } /* '→' */
+.pwg-icon-arrow-n:before { content: '\2191'; } /* '↑' */
+.pwg-icon-play:before { content: '\25b6'; } /* '▶' */
+.pwg-icon-pause:before { content: '\e800'; } /* '' */
+.pwg-icon-representative:before { content: '🏉'; } /* '\1f3c9' */
+.pwg-icon-map:before { content: '🌎'; } /* '\1f30e' */
+.pwg-icon-ellipsis:before { content: '\2026'; } /* '…' */
+.pwg-icon-camera-info:before { content: '\e70f'; } /* '' */
+.pwg-icon-sort:before { content: '\f15d'; } /* '' */
+.pwg-icon-category-view-normal:before { content: '\f0e8'; } /* '' */
+.pwg-icon-minus:before { content: '\e801'; } /* '' */
+.pwg-icon-help:before { content: '\2753'; } /* '❓' */
+.pwg-icon-edit:before { content: '\270e'; } /* '✎' */
+.pwg-icon-menu:before { content: '\e0fe'; } /* '' */
+.pwg-icon-caddie-add:before { content: '\e0d2'; } /* '' */
+.pwg-icon-sizes:before { content: '\e012'; } /* '' */
+.pwg-icon-globe:before { content: '\e079'; } /* '' */
+.pwg-icon-cloud:before { content: '\e11f'; } /* '' */
+.pwg-icon-letters:before { content: '\e0eb'; } /* '' */
+.pwg-icon-save:before { content: '💾'; } /* '\1f4be' */
Index: /extensions/modus/css/fontello/css/modus-embedded.css
===================================================================
--- /extensions/modus/css/fontello/css/modus-embedded.css	(revision 25794)
+++ /extensions/modus/css/fontello/css/modus-embedded.css	(revision 25794)
@@ -0,0 +1,82 @@
+@charset "UTF-8";
+
+ @font-face {
+  font-family: 'modus';
+  src: url('../font/modus.eot?9544571');
+  src: url('../font/modus.eot?9544571#iefix') format('embedded-opentype'),
+       url('../font/modus.svg?9544571#modus') format('svg');
+  font-weight: normal;
+  font-style: normal;
+}
+@font-face {
+  font-family: 'modus';
+  src: url('data:application/octet-stream;base64,d09GRgABAAAAACNEAA4AAAAAPWAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABPUy8yAAABRAAAAEQAAABWdmNhKGNtYXAAAAGIAAABLAAAAxKkyyuAY3Z0IAAAArQAAAAUAAAAHAcB/txmcGdtAAACyAAABPkAAAmRigp4O2dhc3AAAAfEAAAACAAAAAgAAAAQZ2x5ZgAAB8wAABfgAAAp5uSy0jVoZWFkAAAfrAAAADQAAAA2ARFYfGhoZWEAAB/gAAAAIAAAACQINgP1aG10eAAAIAAAAAA6AAAAbF8BAABsb2NhAAAgPAAAADgAAAA4WfJgWW1heHAAACB0AAAAIAAAACADSA6abmFtZQAAIJQAAAF+AAACqewQhQtwb3N0AAAiFAAAANgAAAFB5iltZXByZXAAACLsAAAAVgAAAFaSoZr/eJxjYGRuZZzAwMrAwVTFtIeBgaEHQjM+YDBkZGJgYGJgZWbACgLSXFMYHBTU/v9nDvqfxRDFnM6wGijMCJIDAPT4DFh4nN3Su07DMBQG4N8J90tCIy4tA04V6kiIAakjL4HUuUNfgS1P0aq8A49QYGFn7dQCBbdLI3VpBAwIqeXYJxJiQbBi6cvvk5xYlmUACwBccggBMx6pErZ2sQaIEXVcU32EkGb0JlTlduRUOqqhmrEX13SgE93VEz0byrGfimmaVbP6fG4Wo97WD7346n1+eDofuPdn/ct+0vvoXcl3eSFPZSQLB1nJKQb+sTfybvI9/nKIpb90/9OxYR7iJK+K3z+GiplzLbdIm+YOEOWwCFQ6DHSaqsGwTNlkWAFij2GVssbMXdEBwzplwsyOdJdhk3LCQP/rGYMPDCXDFjD2GQpASpGae0DrTlOGbSCrMuxQ1hl2IV48C9ijvLPMOYjXWwsoQbzFFrD/CZkEb9p4nGNgQANGDEbM6f9DQRgAEiQD4XicnVXZdtNWFJU8ZHASOmSgoA7X3DhQ68qEKRgwaSrFdiEdHAitBB2kDHTkncc+62uOQrtWH/m07n09JLR0rbYsls++R1tn2DrnRhwjKn0aiGvUoZKXA6msPZZK90lc13Uvj5UMBnFdthJPSZuonSRKat3sUC7xWOsqWSdYJ+PlIFZPVZ5noAziFB5lSUQbRBuplyZJ4onjJ4kWZxAfJUkgJaMQp9LIUEI1GsRS1aFM6dCr1xNx00DKRqMedVhU90PFJ8c1p9SsA0YqVznCFevVRr4bpwMve5DEOsGzrYcxHnisfpQqkIqR6cg/dkpOlIaBVHHUoVbi6DCTX/eRTCrNQKaMYkWl7oG43f102xYxPXQ6vi5KlUaqurnOKJrt0fGogygP2cbppNzQ2fbw5RlTVKtdcbPtQGYNXErJbHSfRAAdJlLj6QFONZwCqRn1R8XZ588BEslclKo8VTKHegOZMzt7cTHtbiersnCknwcyb3Z2452HQ6dXh3/R+hdM4cxHj+Jifj5C+lBqfiJOJKVGWMzyp4YfcVcgQrkxiAsXyuBThDl0RdrZZl3jtTH2hs/5SqlhPQna6KP4fgr9TiQrHGdRo/VInM1j13Wt3GdQS7W7Fzsyr0OVIu7vCwuuM+eEYZ4WC1VfnvneBTT/Bohn/EDeNIVL+5YpSrRvm6JMu2iKCu0SVKVdNsUU7YoppmnPmmKG9h1TzNKeMzLj/8vc55H7HN7xkJv2XeSmfQ+5ad9HbtoPkJtWITdtHblpLyA3rUZu2lWjOnYEGgZpF1IVQdA0svph3Fab9UDWjDR8aWDyLmLI+upER521tcofxX914gsHcmmip7siF5viLq/bFj483e6rj5pG3bDV+MaR8jAeRnocmtBZ+c3hv+1N3S6a7jKqMugBFUwKwABl7UAC0zrbCaT1mqf48gdgXIZ4zkpDtVSfO4am7+V5X/exOfG+x+3GLrdcd3kJWdYNcmP28N9SZKrrH+UtrVQnR6wrJ49VaxhDKrwour6SlHu0tRu/KKmy8l6U1srnk5CbPYMbQlu27mGwI0xpyiUeXlOlKD3UUo6yQyxvKco84JSLC1qGxLgOdQ9qa8TpoXoYGwshhqG0vRBwSCldFd+0ynfxHqtr2Oj4xRXh6XpyEhGf4ir7UfBU10b96A7avGbdMoMpVaqn+4xPsa/b9lFZaaSOsxe3VAfXNOsaORXTT+Rr4HRvOGjdAz1UfDRBI1U1x+jGKGM0ljXl3wR0MVZ+w2jVYvs93E+dpFWsuUuY7JsT9+C0u/0q+7WcW0bW/dcGvW3kip8jMb8tCvw7B2K3ZA3UO5OBGAvIWdAYxhYmdxiug23EbfY/Jqf/34aFRXJXOxq7eerD1ZNRJXfZ8rjLTXZZ16M2R9VOGvsIjS0PN+bY4XIstsRgQbb+wf8x7gF3aVEC4NDIZZiI2nShnurh6h6rsW04VxIBds2x43QAegAuQd8cu9bzCYD13CPnLsB9cgh2yCH4lByCz8i5BfA5OQRfkEMwIIdgl5w7AA/IIXhIDsEeOQSPyNkE+JIcgq/IIYjJIUjIuQ3wmByCJ+QQfE0OwTdGrk5k/pYH2QD6zqKbQKmdGhzaOGRGrk3Y+zxY9oFFZB9aROqRkesT6lMeLPV7i0j9wSJSfzRyY0L9iQdL/dkiUn+xiNRnxpeZIymvDp7zjg7+BJfqrV4AAAAAAQAB//8AD3ic7VoLcFzVef7/c+5779593XtXr71a7Wp3pV1JNvu05bW8lhVLwQ8Zy7jIAtcFssiWQyg4hDGQGpu2PJqYEGiAiASDyTBxILZJCHmUQIehtIQE0sTJJJNp2jQTJhmY6QyZJIy17n92ZWwzQJo+ptM0svfec+79z7n///2P8//nXuBAfzyMr0IAumEJ9NQ8mTMEwElxRpiSGAOE8ZL4KyhOLuLYSiaZSGdKxXKlkHflxX7lLf2V2Oqf8KJzUQ/j7pwbx1jr1LrU3ey0rnzpzOWzSc5pC1aJs1O38Gn2KsQgWYsD42wXXcQ5IEn4JHAOW6gBE+mom5QiOSRukj1R1w6gkshguljBcr4bRb8n7/Lp3ljjQ4cdJ+uscBp32TbudobdrOMcxltjvbh93Msetqt2bvEGzgnKYfdwX5OPY/wA+xl40F9LB1UGHEcJOI4ccJY4wCY3OEUNHI86JVtw02RjCYZsRSWISiFV9FpMRdHlB5qMHO7rXnwwcYJzdpUODha7mow1PkSMpbvw1kWuBU+Nu90z2JQIG6+JDWd8l7g6B6RINgmM4RZAhhNuKt3iRsXW81dhT0th0Z6M6LW4Kdk08bCTdd2HxFN7Y3jrQ66bbQJh47BnC8SyTtV5KOsRw3jYaXLcuNsGYMTLp/lBHgOFLKtcKxi6BhLUCCEJdoHEpV2KzDgi3yDOHDcLnNaqqhpQAyEnFAqpdk7HZKgnlMRQRg0VSgUHX8KvX7Vw2VXsUz/+p0eu4rHGaKOGTzeO4cfuv7/xgUceWcTgszzEI+AD5XGVYR/NohDSJBtpnUsLnf5w2M9+6scNjctVI8DLlqlRa5HnY/wVbkIXLIdi7bw82X8HscVGaV6hUdIr3ymjBCBN0kmCqaY8433ZbsdxyDmwOMQtTlrN0FlS7aiO5UoT5gzSJeEieY9FR3iUjO9QW7qcr9aqvUEjYVh9y8aWlfNZm+3EMRzbOb6v8bDhGY3DASOb6PjojYmJkaGIPVBbm7zxo0weGsu2mVLb0njY7w+ksx5TvN7zc5fsbDyPy3Zecv2+xjHDwE0Bozi8PnP9bdiWTTh2b18H/pWwE53k/A3J6Vv0+VUwCX8MH4A/g4OwsbYu5Gdq0GQKiTET0Bm3NDIczmZ8cisuiDPFBUNqxoWP3v4XBz58/bXXXDlXv2z7zNapjetKi3+FcFsu5bQsXQSLKAWD0FuCB77lvujnsNVfga3+29E3bfVd6E8Hn8jifdFv3vfi7vFmXDkuIs+bTXzfm52o15h/pztYPzPwLKpzb5w1+X27Xeo6u0UMQ+WsUNZ48aw7rPd0GIw3vvG7EqH25nWhW5l0+2H+NB+BINgQh17og2W1Ul8mnepNJnq6u6J2JBwKkAZHRSjYRcZNhj9JJwZTwgXGXceJu3E3LYVy5DAqWphDgX4zKEQxg/lKZgiXoBLDaAUzOlYyKv+s6y48565P/iLhsOFoLbpwbDV+vtY4YkU6Q6NRVy/ei0dXNSaZs+bhNewSd5SoncTPkxuJmkbeXsNjqxYOaB3BMdd1fBuLfXi01rgA71rz8Ci0/HKejfE4yXIe1GorfUgRbZR+JALMkjOSE9aFg1JAmVFQkmVpkk6SPAWyJI9n+4cG+8/LnpeMDFVVCnuuY6sKBWJVoRiDiVK5MoIU8yrlUjGTTiZUxUlSp5DnedfCIRxBfG1r1lw/1KcpLLgvKLUFa21trtnV0VUb6+j6jLJ77Y79Nw8MS9WL6Mf+dWRvrWpXvURHsMsyL+1wi0ErGB7o6Ev3DmTzD67NLkxUt5XZ8MVloS8KJaee4qPsFGmrH5bBOHykdpuGht6Ppl/EHYMZyGaBaQbT6gHUfIbmqwfRJxk+kllSDUmtg+o3VH/dIvfkOvAZ8nADdWMG/GDKfvNikBVFngRZVraAIisTw8tzWYSx0VUrl48Pj5cKS4eyy3LL0qlEPNYZdUMBnyFLYKMdCuSwJ2RbSIs7xTSxMpBvFctkCh4GkPxLLK4UWvNuDCuUAoR6xKXmokstJ9QjqFcI82ErUY5n43gkMOAFjmx2Pa/xamCgiwWPbHbicadxMp71ik4cUXY8z5mP4y8dr3FS3JqPs1ONk67HEvbmIwFvIHDEG/AaXc0WDUJJEG1+Le6gRN15J+65jZNEQi2R2hC+F/Il/ArQIATDUK9dVhhgwJajqhO8GkV3jc+ayHxNY5oRgV7HJoSqpKszYBjGGsXPWsYk++SxSNjQEZYM9WVSvfFur6vdDQ9Hhi2/HjJCBJuGmkWwJRQP8yOYzuTdoCINYRmFMalNQKKFUoKWWfInN14OLsEK4Uf22DRL1cFtW/eya49ex27YetOTTzYaT7Cv4JNOnHVFF34tRP3WM7cJ2Xfh0u/sSs0RnMxK1m/9k/3sE3sfu+66x/bOtsY0vnbybwgFFKAXbhOo7/oOLt3VOycGJ/c9/MxtO2I1WgtOnTp1G3+VF2glSEIGcuRhJVr9RmAN3Fy7KUKBnzxNJjuVpRkXwdSYooIy7deZGooGuOFTjemgxXwgIJwhX+VhxmdsDEci4Uk6hSNTDkbCkfF8HmHN6OrayMrqiuXLSOZSvlQsnLdkcCCX7T8dn+JdHS6ZnU/XFOjG7jZCMu+q3MJMT7SHjE7JEIIZnkwQoiK+d6OcdAoZ+jn048koWZtK+MqFShKLeTuREgf+RDTOSsyLLBzXWbBpSgvP2h5eOtFs74l4zMc+/vyXX72f/l56Iszl+fnQ7Sgdto43dszP43fn59kLvW2Nj4c7sBTvS7COEFvrkfW22dWdV1xxRWkWpZ2sNEt/jfDG+Y0b50E6dZKc+wC7jKzOhiyUYbK23kZdxlGF7EzWmUw25iPj07UZEbpUjttABVAnQVVbq6sK44O5qFNYmisPljOpRHdXh5ONZsNt4YQZyaVcJUnJW1IVMaoSIWvihYzI4yoRctIRrPQI5ArC7FLJltkJ52SS2eX1WKnfpPRsxjJe9o+Z1x6c4KONv/O8yBsvNw0Nl7/ZbkzsFA65kxz24fZ8bN0624r0OXios7Px04ONB8oerhdOuKyr8ThZ28seWRsB0/K7W/lnya5MaKNViPSuUd4kM0meUQkATpk7hWqgTIJCNaUVUyKLH+9ot/wI8Vh7b0fSDvnbrKgmg4k+PZBLUUAR4aYpCgpRMs12BVthqGkSfDQ7Uh1YSA9UR7LsBwPVVrs6INoj2YV0rorVgW3VwezIyFaK67tHtoxgdWsV8f0jF9KlKoqYzMgn/k0KsRcgAgOwoXa+RUtKQmVMooghyUyW2CzJwClvrRPXsoTyzJnyY0oRueK4YzPIpOJeZ5s94AyYBkRYRAvkZKEgYppCIqkjWnajtkLBwnbJvMvFtJoIUJ6IakKJ2t3I/QvPbr0BLxp78qbLH0hc8yDeszDVV60Osurqiy9eHW5bpltXbyAC2R/Y+0cTV4W0/U/s2a7fd/XcfTgshLl433bUgsvXXY57Lwx0jQjZ1MUc10f5QTvVUGmyzaVQgxe/6KMaAUfXHU1uuqg2CaahG+YOsaIykfYGwDADxjRFRb9P909Tcq1KPoqOtHwxCZpur5FCKcgqsqZsA9my5A0UL60psGRrvLO2qTWjPvvfNeV0rX1VtVJcumRoMYBEIqFwxO61E8E2SsNpHVcc282XBdj5MqEsbIUSwJ5ST6qYtphHIblQSqrUV3tSoZZliTKhQH7DFENLFY2gRrmcZty45dot9H/hWb7t5GfYgRu+sFfa/7mbF545cWKCb2vkexv38EPZ2MnPxLLZGN8Wy+J+zSj3aoahUYJmrF4hBm9p/Pn4b6Y/zPY+cZ1yM3514vGD4+MLZS9Lqfs/0HGx9ti2mJOnaom2oKiXKE2jGklk3XTCZrnRqsULon5b5DqzyLX8lj6ftoONnwRspBAQC7gN3zld9rOTr1mua/GwOJ7VhpYTjOEdZC3dtS7W8lJ2xkvJ5ik6ocJFeLbpkcUCS3vewq89D++4/PLTtWjLzi6EdbUJMP3oM0zfjIUGxT/KaqYDuipzuSnbYpPk01pFxZbNkxvWn/+e0ZUrhpeVCqWeUEr8CsFWQXE6oac43+MILzqrCDh9LYbnXBOVbSl5pk6INusER4RIQc1fWczZS42flN7M6VvdM1l9iQJd7JzbGIsNIF2573FBRQecm/Oi79Ah0nP6WW/Oa+Z/u/ghPkUxI0Ir8Dg8su6oQS7Y76MVlgpjdYcsdhSAlgeJknRtykBNM9YQxMoUKIpPGetcd7SNBmRbA5jKZ3/riNrgGWK6S2SqxmbeHEaUCmxYHADK+PR0LbR2bPXIiuFCSlR2xVDQbMtFe0I9FMfSItkhuF3CtZx6S79ylmM188BoUzeFxVZUgD/Owydf+56hNT2GDvg5Q0uKNh2+N9B18jXhVxPFVG+qeKLcm0wVcTyWnWTVuUOC6NzDwEJJULMXYtlybxmLqfLiKbuYa+/in+abwYAEZTgbcaIWLKJqZFFXly9Lc+bjFAAjBOZGoMWKyopZ0FWu6kIHpsrNuoOmz2dup8kCFgS2uXY4KFkh9BsWRTBDo6TSUGciVHoQ3j4f20K2TqnFaRVtOnfWpqLenFY1ffXfed7a1t82JQ1CJk2++8zgo+kmT8/sYxOk8dyqVcnkqo2rNm5Yv+78906Mr33PmEjfkiPJkZUrCvnzlva4kWSht90ORingFpZgupQURdXpPa40KTzU8jYn1NwX7ClFyquwlBQFQpLclFPS61SEXUSoT1mcWhDnSCHC7r20T2GMqlSp8QPluGypxzXNP2doc5pB//Hbja98U5UVTTH2r8GV35Q0RZN9t3/wULbjlo7sA5l9225iV+7t0JnPMJSFtYp6XJYf1x0OwkwWwDh/fx4zhiIjq+3LN74vGSqtfaP4y2p106ZqFf+0cRD4qQWKX9MUv0z8Kv7KLDS9cvVT8CX4JNwHN5MxBWgJfRqegC+Q6/opzfsqHIcjcCfdiUAYniNXMij1e57OPmo9AnvIuTktdz5yLZEiKLAbihT4RXK9gq5o1PouvATvg4tgM5W6vbQQaBSCNXwSfgjbabm2iSIH7fhF+BGNY5DD4zSukwrhI/gwPgivwM+Ioh+y+Em8F35Bz+iDfvxrvJtoM9CHHyHqGGTwVvwzvAGvxw/hB/EavBrfj7uRCkZ4neRIQwxvwb/E99HoLkjjpfAGjfagCy/ATbgW1xC3cUjhj/H7+F1cRr0hSOIP8AX8e8xRbxCG8Bf4Cv4Uf4gv4bfwm1jCpTjUdLlB/FviYAAS+Dp+DViz3QGj8Ay1AvAUHf0gKCKwCsS+2iV0bEeB4CChtZq8yPc76MC/qAPzDzr4T+jAfAcd/MEF/jddYHp63VGdVpJTEAiGgoEdFvpD4aB/B4RF9lsHw/bZhm8WfLrt0+ugK7au1EHhtkKlCpdsLvaMZFuS6yBrtqzVQVNtTewgtdtqex3ac3Z7rg45ZudYHVinzTrr0Nlhd3bUoSNrd2TrkO23s/116O+z+/vq0Jex+zJ1yMTsTKwOsbQdS9ch3RVPb4cuz+7y6uB12153HbpTdneqDqm4nYrXoTfeE+/tmYWeZLwnWYfkUDy5HYYG40ODdRhMxAcTdUgMxBPbYQDjA1hfQmlikIxthmwsYoYiMzUqUs021+G2YdozEO/F+CTE4+L9RhwnOlsp1DuA5DrMNo2gvQMMn2nQouvTzRZYZgssswWW2QLLbIFltsAyW2CZLbDMFlhmCyyzBZbZAstsgWW2wDJbYJktsMwWWObZYJktsMwWWGYLLPO/AlYtDiF/JDTZhhFCy46YbweU7yygwhbzhyICKUrVzZYd/X5CswiM69gSYVNzTOPt0Qn9H/A1O91V/590tlps5rc4W9//I5QG6m8PU82LvDtMv5cIDdX/4xDVukPvDtG0+Ft9udg7wH/Eb+OL+A18Gr+OX8In8DF8FD+F9+M9+Am8Cz+OO7GOW3AKz8f34giuxALmMY0ppAodIxjGAFqooQK/hl/BT+Bf6N8/w/fhe/AifAO+Al+GY3AUPg+PwaPwOXgYDsND8CB8Gj4F98I9cDfcBR+DO+BWuAVugn1wI9wA18Ne+ABcCbtgJ1wMM7CG1uxhWA5lKMF5sJQEDFKeolCZZTaTp6Ug9kY8tC1MDLERJHbU/AiWRrBSjqZH2CrxUtpWi2mlNCRRsZSw0EknBLVazqTVcjFTGGKZIVTsbnQVD5svrNyoaysJaqQz9E8Vv3xaHcEklVXljFsRp7xbcIuZfJNAiQpimj1Ds6aTNLHoe5iPumpCSSiuOoQZdwnV64lMulKMZhQ1T1OUytFKlEarrkoc0FhF9ZhdcVUaRyMzacUtiIm6iaOK0s09FlXEhCWiIiYyQ6xUyNNNjxWI8bwndXNXzEuDK4luUpHjYbRcolnoID4/SJej+TKJS3LZ4uWb+AKBrqsJ1eJpYkH0M0I4saWQXoJumWYijt2KxwiecsWNemQF6VKmJDaBi0048kSRIG5GsOA2TxW3nB7BaKWcFP1yOlPOlwgSXq6kqVwV84r/ASTRHEKM2opAPV1OC+zLikMqGsIK8e4SIkrUVlx8dM9zV1/93CvPX6ns/RpZncap1uYhJ2KgSYskaY0qdlmRhClS8S4xSUGFabosyTJHzUS5S6UqVyPrYFS8SxJKjEYZTJL9ErOtCFW2yJDJOsOITqNlxeCapMqcKTrNJeuSzDmTJbRUX0AKcppU0gQbGj2Nc3pgWOamiURktndyrskRmfskv48epEiapEsX5CWZKcRNm0E8yBIxIdEjqSA2VDUsqbpED2QW9ZnFJMYCGpc44zJKhoE0g2yqjGtcV11FkTUtKNk0D03OLS6hIWshg4lCXmbUY9zkTENG/HGm+pq7Uzanep4JuWUmznRNauO62O7kfmYJPCS6pRATTEilarJqEpKMkfhNTlQ6hmkCJptMZ8zQCC2iNnS/vvPqC9BEP83goNiuF4yYJIBMuT49gdg3SEeM8CYy8WRfAJlO93x7nv35s3uah8aPUGMKqU/jsg9NIjLRIJkJW2SKKSvcQNIwCim52NqmZyuMsJclRZUUzVAlWZFNYRl009QJF5mE4CHGLVWh61xnqsEVtCSDZpRJMENSVRV1WVM1sUUn4CSLMDi3mEwPkiWVoaEFCERGwltEwFVOpoY4OEm2RjpUAgbpl8zMokWFodLBMEr8cNnmPEhAS5qsSeiLWrIQSDI1S7LQ8NmqhjLBTooIc0OSdJkkMQTIJgvqERJKIk4M1WrqkyAPygGZkTX6CHFJaM7SLVlHMk3xbQ/hTo4is4Ah9EoIkP1FJaaRBgLMMGS6IPl0WRgIKYEohdGSYdFwkpD6ZEJIWmYNv3Mh6ZceHhBvKcg8OSM4xKRMUbmlMEHVtCzCRO7SQrqlm0wKqs3P206dOnWMH+I+is9+qkCrteU+EF+1jeqoIgJTYRqEo/HWJigxMUknLk2J75TG144VMm6qlO5wwkZbTmxzOTb1kzZF3opjW4yigYW2WxCbya3tTrE7XRDvcygMD/FKaXHzU7ySi4nX5gjZg7vYIwf7J2ffu3T9tSujnhNMpLKjpNXGUs0Y7U8ngm6sbdXVG5di3H2g3IurU8VD4mOUmT2lge23lfbMBLdfM963aTQredFIdkU2n2ltn2by2eGBcNTjA7XNmXE3XkoVsdxbip/+1qC1p8Whh1at94id+WyCVIej5CO4GgyVLMOQxEsXrmh8hgBDUHCaVAS6DhvEGfQpquD18drKZaVSuRCKrAiFgj6xHVzqkQuhIgXRITwNRKaUDInN3kLzZeTi5nDUaW0Ov/V9hVgaTuCjjSl8fcKU7yc1etHGU66HExNxB18m8U8Y2pxK7tc8Xu5FF8LNfXgmR8uB+aCrnjiBr2sd6rxi4itin/2VhXLzjN5xgY44GAtviCvsNTfeZt0fKC9+I3Atf4Bw0cCmWn68NpYme8o4Yc7JmMXbWSrFR0EER5nPwulv/CS6IxFI5Po4STRsCsg2x7uSg3YkrDi5SjFtkUj5cgpPf+bnYcomY8k0X1zm3eZ3iU60tW6fsD2XhRNB3NU44Ay7KxwHb3C34D1m5/7J2TvvnI2vbdf1h3az7LqegBGziDZu2280Dtj2SnuFizdUtvzITa3bjne+dAezg0pY3X5jlbUP2gb8O+/5HmB4nGNgZGBgAOJe+2zneH6brwzczC+AIgzndi7rhdB5fv///A9laWZOB3I5GJhAogBlzg1ZeJxjYGRgYA76n8UQxVLNwPD/C0s7A1AEBUgDAH7RBTN4nGN+wcDALAjEkUC8AIkGib2A4gMMDEwuQNoJiPWB+DUDA0s1kF4FpGHqIqFqXkD1L8A0EwAJCA5TAAAAAAAAAFgAnADmASwBaAGGAfoC6ANSA8AEcAUABawGLAaKBvgHxAgKCCwIwAl2CowTchP2FIIU8wABAAAAGwH4AAkAAAAAAAIAYABtAG4AAAJVDDMAAAAAeJx1kr1OwzAUhY/7h2gFA0gsLF5ArZDSP7F0KqpoBwakDl2Y0iRNUqVx5TiV+gK8Aw/Aa/EsnLoWhYFYdr577vH1tWQAV/iCwPF75DyyQJ3RkSs4w8hxlfqT4xp56riOFl4cNxgtHDfxgDfHLVzjnRVE7ZzRGh+OBZqi6riCS3HhuEr91nGNfOe4jhvRddyg/uy4iYV4ddzCvficqO1ep3FiZHvSkYNefyiXe6kopbmfSb80idKFHMuVyk2UZcoL1GajwrKYR3GZ+dqyXRaRLlKVy77Xs/EsyiPtmyg8VCx28cCYlVxptZFTV0tutVpHgfESY7ajbvf3GZhAYYs9NFLESGAg0aba4X+AHvoYkpZ0SDqPrhQ5fGRUfJTckdhMwXjMuWKUU43oyMgeAq4bDoWQ/gJz5mJSxv36l36iBR2HiqmtJdmFx15O+RnzufX49qTwp8cCO9YeUDXs5NCNtqdLPpC/fUne+5BbUwmoe/b2huoIXY5/7vENvut5PwAAeJxtjlluwzAQQ8VEqlNnbZquOYMPNbXHiQBtGMkO0tN3MwoU6PvhD/lANVM/1Op/jkphhjk0DG5QYYFb1FhihTU22GKHO+xxjwMe8IgnPOMFrzgu2Dmbss0VicRLc5kyTMn6HD3r5Oi66mmMYgs31HX7lgqfolyb0fKl6R0VzZ0t+swumWzfOZuTi29ct59t+72pHJfCkrXnMJjWxaFbtuRZqLGhjybRkNl4G4Z8+KsPUTy57VRuyXHoSHSOUuae0kY4CWcOhYodWWcaef1r+Lql1AfunlWiS7gAyFJYsQEBjlm5CAAIAGMgsAEjRLADI3CyBCgJRVJEsgoCByqxBgFEsSQBiFFYsECIWLEGA0SxJgGIUVi4BACIWLEGAURZWVlZuAH/hbAEjbEFAEQAAA==') format('woff'),
+       url('data:application/octet-stream;base64,AAEAAAAOAIAAAwBgT1MvMnZjYSgAAADsAAAAVmNtYXCkyyuAAAABRAAAAxJjdnQgBwH+3AAAM1gAAAAcZnBnbYoKeDsAADN0AAAJkWdhc3AAAAAQAAAzUAAAAAhnbHlm5LLSNQAABFgAACnmaGVhZAERWHwAAC5AAAAANmhoZWEINgP1AAAueAAAACRobXR4XwEAAAAALpwAAABsbG9jYVnyYFkAAC8IAAAAOG1heHADSA6aAAAvQAAAACBuYW1l7BCFCwAAL2AAAAKpcG9zdOYpbWUAADIMAAABQXByZXCSoZr/AAA9CAAAAFYAAQOFAZAABQAIAnoCvAAAAIwCegK8AAAB4AAxAQIAAAIABQMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUGZFZABAICb//wNS/2oAWgNnAKsAAAABAAAAAAAAAAAABAAAAAMAAAAkAAEAAAAAANwAAwABAAAAJAADAAoAAAHiAAQAuAAAACoAIAAEAAoAACAmIZIjAiW2JmEmjycOJ1PgEuB54NLg6+D+4R/nD+gB8OjxM/Fd//8AAAAAICYhkCMCJbYmYSaPJw4nU+AS4Hng0uDr4P7hH+cP6ADw6PEz8V3//wAA39vect0D2lDZptl52PvYtx/5H5MfOx8jHxEe8RkCGBIPLA7iDrkAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAABMAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAgJgAAICYAAAABAAAhkAAAIZIAAAACAAAjAgAAIwIAAAAFAAAltgAAJbYAAAAGAAAmYQAAJmEAAAAHAAAmjwAAJo8AAAAIAAAnDgAAJw4AAAAJAAAnUwAAJ1MAAAAKAADgEgAA4BIAAAALAADgeQAA4HkAAAAMAADg0gAA4NIAAAANAADg6wAA4OsAAAAOAADg/gAA4P4AAAAPAADhHwAA4R8AAAAQAADnDwAA5w8AAAARAADoAAAA6AEAAAASAADw6AAA8OgAAAAUAADxMwAA8TMAAAAVAADxXQAA8V0AAAAWAAHzDgAB8w4AAAAXAAHzyQAB88kAAAAYAAH0vgAB9L4AAAAZAAH1JwAB9ScAAAAaAAAAAwAAAAADEgHtAA8AHwAvACFAHgUDAgEAAAFPBQMCAQEAUwQCAgABAEc1NTU1NTMGFSsTFRQGJyMiJic1NDY3MzIWBRUUBicjIiY3NTQ2NzMyFgUVFAYnIyImPQE0NjczMhbWHhdrFx4BIBZrFiABHSAWaxYgAR4XaxceAR8gFmsWICAWaxYgAbdrFiABHhdrFx4BIBZrFiABHhdrFx4BIBZrFiABHhdrFx4BIAAAAAABAAD/iANZAu0AHQAjQCAAAgMCagABAAFrAAMAAANPAAMDAFQAAAMASCYXFiMEEysBFRQGIyEXFhQPAQYiJwEmNDcBNjIfARYUDwEhMhYDWSQd/nekFRUqFTsV/pQUFAFsFToWKhUVpAGJHSQBXkceKqQUPBQrFBQBbBU6FgFrFRUqFToWpCgAAQAA/7EDgwLnAB4AKUAmEAcCAAMBQgIBAAMBAwABaAADAAEDTwADAwFTAAEDAUcXFTUUBBMrARQPAQYiLwERFAYHIyImNREHBiIvASY0NwE2MhcBFgODFSoVOxWkKB9HHiqkFDwUKhUVAWsUPBUBaxUBNBwWKhUVpP53HSQBJhwBiaQVFSoVOxUBaxUV/pUWAAAAAAEAAP+IAzUC7QAeACNAIAADAgNqAAABAGsAAgEBAk8AAgIBVAABAgFIFiUmFAQTKwEUBwEGIi8BJjQ/ASEiJj0BNDYXIScmND8BNjIXARYDNRT+lRY6FSoWFqP+dx0kJB0BiaMWFioVOhYBaxQBOh4U/pQUFCoVPBWjKh5HHioBpBU8FCoVFf6VFAAAAgAA/58DjwMdAAYADwA2QDMKCQgABABAAgEABABqAAQDBGoGBQIDAQEDTQYFAgMDAVIAAQMBRgcHBw8HDxEVERERBxQrCQEjESERIwERJwcRMzUzFQHQAb9w/WNwAp7g36hwAx3+Qv5AAcD+sQGRnZ3+b6ioAAAAAQAA/6oDEQMTAAsABrMHAgEoKwkBBiY1ETQ2FwEWFAME/RsNEhINAuUNAU3+ZAcKDwM2DgwI/mQHFAAAAgAA/7ED6AMMABwAOQA0QDEyAQEAGgEDAQJCAAEAAwABA2gAAwNpBQEEAAAETwUBBAQAUwIBAAQARygqHxUVFQYVKwE0LgMOAwcGIicuAw4EBxQXCQE2NxQHAQYiJwEnLgM1NDY3Mh4CFz4DFzIWA6EYJjYyPEA8JBAKIgoOKDhEODYyKhQCaQFEAURpR4D+pQoeCv6kDwoqIhqOfSJIPi4TFCxARiN9jgIFLkQqGAwEGDAgEg0NDyYqHgIGHiRKK11p/sgBOGlde4D+sQoKAVAPCjQ6TCd7igEYKiIVFCQoGgGMAAAAAAkAAP/5A+gDCwAPAB8ALwA/AE8AXwBvAH8AjwBOQEsRDQIHEAwCBgMHBlsPCQIDDggCAgEDAlsLBQIBAAABTwsFAgEBAFMKBAIAAQBHjouGg357dnNua2ZjXltWU05LNTU1NTU1NTUzEhgrJRUUBgcjIiYnNTQ2FzMyFhEVFAYnIyImJzU0NjczMhYBFRQGByMiJic1NDYXMzIWARUUBisBIiYnNTQ2OwEyFgEVFAYnIyImJzU0NjczMhYBFRQGByMiJj0BNDYXMzIWARUUBisBIiYnNTQ2OwEyFgEVFAYnIyImPQE0NjczMhYTFRQGKwEiJj0BNDY7ATIWAR4gFrIXHgEgFrIWICAWshceASAWshYgAWUgFrIXHgEgFrIXHv6cIBayFx4BIBayFiABZSAWshceASAWshceAWYgFrIWICAWshce/pwgFrIXHgEgFrIXHgFmIBayFiAgFrIXHgEgFrIWICAWshcemmwWHgEgFWwWIAEeAQZrFiABHhdrFx4BIP7NbBYeASAVbBYgAR4CJGsWICAWaxYgIP7MaxYgAR4XaxceASD+zWwWHgEgFWwWIAEeAiRrFiAgFmsWICD+zGsWIAEeF2sXHgEgAQhrFiAgFmsWICAAAAAABQAA/34DwAM+ABAAFAAgACQAKAA4QDUoJyYlJCMiIR8cFxQTEhEPAgEBQgABAgFqAwECAAACTwMBAgIAUwAAAgBHFhUVIBYgFiYEESsBFhQHAQ4BKwE1NDY3ATYyFwEXAScBMjcnLgEvAQYdARc3AScJATcnBwOqFhb9xhZMI+siFQI6F0AX/bFBAa9A/qsOExsRQhcWCTSZAbA//k8CFUOlQwJdFkIW/cYVIuojThUCOhYW/YtAAbE//YMIGhBEFhYVC040KAGwQP5RAZRDpUIAAAACAAD/nAJEAyAAKAAxAEBAPQsBAAIBQgACAQABAgBoAAAEAQAEZgADAAECAwFbBgEEBQUETwYBBAQFUwAFBAVHKikuLSkxKjEjEy48BxMrARYVFAcGDwEGBwYHFCsBIjU2Nz4BPwE2NzY1NCcmIyIHBhUjNjc2MzIDMhYOAS4BPgEB7lYqDEwuKAgGAhCAEAQYEEAYGBYMHBocQEQaHKYGbEZggoQsOgQ8WDoEPALkPnpAPBQ8HiIaEBwODGIaFjQQDhASLBooJiQsKjKiRir9SDxaNgI6XDYAAAAABAAA/74DQgL/ABQAKQA4AEcAjUCKCAEKCSkBDA0CQgABCgIKAQJoAAIICgIIZg8BCAsKCAtmEAELBAoLBGYABAcKBAdmAAcNCgcNZg4BAAADCQADWwAJAAoBCQpbAA0ADAUNDFwABQYGBU8ABQUGVAAGBQZIOjkrKgEAREI/PTlHOkc1MzAuKjgrOCYlIiAdGxcWEQ8LCgUEABQBFBEPKwEhERQOASY3NQcGIiY0PwEjIiY0NgE2Mh4BDwEzMhYUBiMhETQ2MhYdATciJjcRITIWFAYrARUUBiEyFhURISImNDY7ATU0NgI9AQUgKiABqw8sHg+rUhYeHv7tDywcAhCrUhUgIBX+/CAqHjQVIAEBBRUeHhWcIAH1FR7+/BUgIBWcIAL//vwWHgIiFFKrDx4sD6seLB7+HA8eLA+rICoeAQQVICAVUu4gFQEEICoenBUgHhb+/B4sHpwVIAAAAAMAAP9VAy8DZwAIABEAOgBmQGMzLAIAAjkBBwkCQgAIAQMBCANoDAECCwEAAQIAWwABAAMJAQNbAAkABwQJB1sACgoKQwYNAgQEBVMABQULBUQTEgoJAQAvLignJSQgHx4cGRYSOhM6Dg0JEQoRBQQACAEIDg8rASIGHgEyPgEmJzIWEAYELgE2ATIWDgEHISImNDYXMzUiJyY0NjIXFiA2EC8BNzYyFgYPARYVFAcGBxUBWlZ6AnaweAJ8VoG4uP7+tgK6AbgVIAIcF/34FSAgFc/Big8eLA9qATDUaiVrDyweAg4jZolhggKXeq54eK56aLj+/rYCuv68/L0eLB4BICogATOKDyweD2rUATBqJGsPHiwPI4ClwYpgHUAAAAn///+KA+0DMwAfACMAJwArADEANQA5AD4AQwCEQIETAQMCAUIABQAEAAUEWxYBAAwIAgYHAAZZDQkCBxEXDwMKCwcKWRAOAgsAAQILAVsAAgADEgIDWxQBEhMTEk8UARISE1MVARMSE0cyMgEAQ0JBQD49PDs5ODc2MjUyNTQzMS8tLCsqKSgnJiUkIyIhIBwaFhQRDwsJCAYAHwEfGA8rATIWBwMOASchFyEyHgEGJyEiJicDIyIuATY3MzIWHwEFIxUzJyMVMxUjFTMDIxc2OwEHFzM1BTM3IwE0MhQiJTQyFCIDthcgAjUCHhP9sgkCEBYeAiIU/cQUHgFiSBYeAiIUdBMeAgsCk8i57Z2dnZ3QthIDBZycEYsBBKQOsv5gnJwB1ZycAsskGP6TEhoBNSAoIgIaEQJGHiwcAhgUPGlnZ2c1aAEEaQI1aGhoaP4STpxOTpwABP/8AAAEgwJjABEAFAAqADYAT0BMFAEJBQFCBgECAAUJAgVbAAkLAQgDCQhbAAMAAQcDAVoABwAAB08ABwcAUwoEAgAHAEctKxcVMzArNi02JyUiHxwaFSoXKhIYEiIMEyslFgYjIi8BIwcOAS4BNxM2MhcDMycBISImNxMjIiY+ATchMhYHAzMyFg4BJSMiJjQ2FzMyFhQGAgQMHB4hDiX5JQkqJw4K0Q1EDHaPSANC/sceHhP60RUgAhwXATkeHhP60RUgAhz+SGkVHh4VaRYeHqUZMh1LSxQOEygVAaEbG/7lj/6gNh4BTCAqHgE4HP6zHiwe0R4qIAEeLBwAAAMAAP+JA6oDMwAMABgAJABBQD4IAQQABQIEBVsHAQIAAwACA1sGAQABAQBPBgEAAAFTAAEAAUcaGQ4NAQAgHRkkGiMUEQ0YDhcIBQAMAQsJDyslMhYVFAYjISImNDYXATIWFAYnISImNDY3ATIWFAYjISIuATY3A0IqPjws/SYsPD4qAtosPDws/SYsPDwsAtosPD4q/SYrPAE8LFo8LSo+PlY+AQFsPlQ+ATxWPAEBbT5VPj5WPAEAAAAAAv////EEEQLLABMALABNQEoOAQQFIgcCAgQCQgAEBQIFBAJoBwECAwUCA2YAAQAFBAEFWwADAAADTwADAwBTBgEAAwBHFRQCACclIB4bGBQsFSwMCgATAhMIDysFISImNzQ2NzU0NjMyFhc2FhcUBgEiBhQWFyEyNjQmByIPAScuAQciBhcUHwEDDf3EVnwBWES4gWSgInOiAZj9Uyg8PC0CPEFcXEESGDgJDnJNVnwBBQ0PeldIcBEIgrZ0XgmacmuaATo+VjwBXIBeAQgQOUtkAXpVDxw+AAAAAAcAAP+xA+gDCwAQABkAHQAmACoAMABAAM21CwEBAgFCS7AjUFhATwAMCgkKDGAAAQIDAgEDaAAPAAoMDwpZAAkADQsJDVkACwAHBAsHWwAEAAACBABbAAIAAwgCA1sACAAGBQgGWgAFDg4FTQAFBQ5TAA4FDkcbQFAADAoJCgwJaAABAgMCAQNoAA8ACgwPClkACQANCwkNWQALAAcECwdbAAQAAAIEAFsAAgADCAIDWwAIAAYFCAZaAAUODgVNAAUFDlMADgUOR1lAGT88NzQwLy4tLCsqKSgnExMREhMUJBQiEBgrATQmIyIGFRQWMjY3NDY3MjYXFAYiJjQ2MhYBITUhJTQmDgIeATYBMzUjByE1IQchJREUBiMhIiY1ETQ2MyEyFgIGCgglNAoQCAEgFggKfVR2VFR2VP3EA1r8pgKDfLR6BIKshP3B1tZIA1r+MiT+mAOhKh38ph0qKh0DWh0qAYIICjYkCAoKCBceAQpBO1RUdlRU/oVH+Vl+Anq2eAaEAbtIs49HR/02HioqHgLKHioqAAIAAP+xA1oDCwAPAB8AJUAiGBAIAAQAAQFCAwEBAAABTwMBAQEAUwIBAAEARzU1NTMEEysBERQGIyEiJicRNDYzITIWBREUBiMhIiYnETQ2MyEyFgNZFBD+4w8UARYOAR0PFv4LFBD+4w8UARYOAR0PFgLn/O4OFhYOAxIOFhYO/O4OFhYOAxIOFhYAAQAAAAACRAGQAAcAH0AcAgEAAQEATwIBAAABUwABAAFHAQAFAgAHAQYDDysBMhQjISI0MwImHh79+B4eAZBkZAAAAAABAAD/sQPoAwsAVQBLQEgADA0BCwoMC1sOAQoGAQIBCgJZDwkHBQMFAQAAAU8PCQcFAwUBAQBTCAQCAAEAR1RST01MSkVCPTs6ODUzNSERJTUhESUzEBgrJRUUBisBIiY9ATQ2FzM1IRUzMhYXFRQGKwEiJic1NDYXMzUhFTMyFh0BFAYrASImJzU0NhczNTQ2FyE1IyImJzU0NjsBMhYXFRQGJyMVITIWBxUzMhYD6CAWshYgIBY1/uM1Fx4BIBayFx4BIBY1/uM1FiAgFrIXHgEgFjUqHgEdNRceASAWshceASAWNQEdHSwBNRcemrMWICAWsxYgAWtrHhezFiAgFrMWIAFrax4XsxYgIBazFiABax0sAWseF7MWICAWsxYgAWsqHmseAAQAAP9qA6EDUwADABMAIwBHAKhLsApQWEApCwkCBwIDAwdgBQEDAAEAAwFaBAECAghTCgEICApDAAAABlMABgYLBkQbS7AYUFhAKgsJAgcCAwIHA2gFAQMAAQADAVoEAQICCFMKAQgICkMAAAAGUwAGBgsGRBtALQsJAgcCAwIHA2gKAQgEAQIHCAJbBQEDAAEAAwFaAAAGBgBNAAAABlMABgAGR1lZQBFGREE+OzozJTU1NTU0ERAMGCsXIREhNzU0JisBIgYdARQWOwEyNiU1NCYrASIGHQEUFjsBMjY3ERQGIyEiJjURNDY7ATU0NhczMhYdATM1NDYXMzIWFxUzMhZHAxL87tcKCCQICgoIJAgKAawKCCMICgoIIwgK1ywc/O4dKiodSDQlJCU01jYkIyU0AUcdKk8CPGuhCAoKCKEICgoIoQgKCgihCAoKLP01HSoqHQLLHSo2JDYBNCU2NiQ2ATQlNioAAAAEAAD/agOfA1IACgAiAD4ATgFIQBA0AQcKKgEJBzk4JgMCCwNCS7ATUFhATgABBAAEAQBoAAkHAwcJYAUBAwwHAwxmFQEMCwsMXgAAAA8OAA9aFhQSEAQOEQENCg4NWQAKCAEHCQoHWxMBBAQKQwALCwJUBgECAgsCRBtLsBhQWEBQAAEEAAQBAGgACQcDBwkDaAUBAwwHAwxmFQEMCwcMC2YAAAAPDgAPWhYUEhAEDhEBDQoODVkACggBBwkKB1sTAQQECkMACwsCVAYBAgILAkQbQFYAAQQABAEAaAAJBwMHCQNoBQEDDAcDDGYVAQwLBwwLZhMBBAECBE8AAAAPDgAPWhYUEhAEDhEBDQoODVkACggBBwkKB1sACwICC08ACwsCVAYBAgsCSFlZQCs/PyMjP04/Tk1MS0pJSEdGRURDQkFAIz4jPj07MzIxMCEWEyMzJBkUEBcYKwEzLwEmNSMPAQYHARQPAQYiLwEmNjsBETQ2OwEyFhURMzIWBRUhNRM2PwE1IwYrARUjNSEVAwYPARU3NjsBNRMVIzUzJyMHMxUjNTMTMxMCmWIoBgICAgEBBP7aBrIFDgeyCAgNawoIawgKawgKAdL+us4HBQYIBgqCQwE9zgQIBggFC4t1oSoaiBoqoCeAWoECbnoaCQILCgoG/UYGB7IFBbMJFQMACAoKCP0ACkqCMgEnCgYFAQJAgDL+2AQKBwEBAkIB9Tw8UFA8PAFx/o8AA//9/7EDWQMLAAwBuwH3DDNLsApQWEG+ALcAmwCaAIQABAAPABAAwAC2ALQAAwANABEAuwCyAKsAkgAEABMAEgDGAAEACgAUAMgAAQALAAoAqAB0AEcAAwAJAAsATQABAAMABgBsADQAAgAFAAQAOwABAAgABQDVANAAZQBYAFIAKAAkAB8ACAAHAAgBuADbAF4AGQAUAAUAKwAZAbUA3QACAAIAKwGyAAEAGwACAasBpQGiAOgA5wAFACkAKgGbAZkA6wADACgAKQGWAZUAAgAnACgBjQABAB0AJwGJAX8BfAF7AXcBdQFzAXIBbQFsAQoBCQD0AA0AJgAdAYgBhwFlAAMAHAAmAWIA+gACAB4AHAFRAVABRgFDAAQAIAAlAeAB2AHVATgABAAuACMB2gHLAckBKwAEAC0ALgHrAegB5QHbAdABzwHOATUBMAEuAAoAIgAtAcIAAQAsACIB9AG8AAIAAQAsABoAQgDBAAEADwC+AAEADQDCAAEAEwA/AAEABABdAAEAGQHIAAEALQAGAEEbS7ALUFhBvgC3AJsAmgCEAAQADwAQAMAAtgC0AAMADQARALsAsgCrAJIABAATAA0AxgABAAoADADIAAEACwAKAKgAdABHAAMACQALAE0AAQADAAYAbAA0AAIABQAEADsAAQAIAAUA1QDQAGUAWABSACgAJAAfAAgABwAIAbgA2wBeABkAFAAFACsAGQG1AN0AAgACACsBsgABABsAAgGrAaUBogDoAOcABQApACoBmwGZAOsAAwAoACkBlgGVAAIAJwAoAY0AAQAdACcBiQF/AXwBewF3AXUBcwFyAW0BbAEKAQkA9AANACYAHQGIAYcBZQADABwAJgFiAPoAAgAeABwBUQFQAUYBQwAEACAAJQHgAdgB1QE4AAQALgAjAdoBywHJASsABAAtAC4B6wHoAeUB2wHQAc8BzgE1ATABLgAKACIALQHCAAEALAAiAfQBvAACAAEALAAaAEIAwQABAA8AvgABAA0AwgABAAwAPwABAAQAXQABABkByAABAC0ABgBBG0G+ALcAmwCaAIQABAAPABAAwAC2ALQAAwANABEAuwCyAKsAkgAEABMAEgDGAAEACgAUAMgAAQALAAoAqAB0AEcAAwAJAAsATQABAAMABgBsADQAAgAFAAQAOwABAAgABQDVANAAZQBYAFIAKAAkAB8ACAAHAAgBuADbAF4AGQAUAAUAKwAZAbUA3QACAAIAKwGyAAEAGwACAasBpQGiAOgA5wAFACkAKgGbAZkA6wADACgAKQGWAZUAAgAnACgBjQABAB0AJwGJAX8BfAF7AXcBdQFzAXIBbQFsAQoBCQD0AA0AJgAdAYgBhwFlAAMAHAAmAWIA+gACAB4AHAFRAVABRgFDAAQAIAAlAeAB2AHVATgABAAuACMB2gHLAckBKwAEAC0ALgHrAegB5QHbAdABzwHOATUBMAEuAAoAIgAtAcIAAQAsACIB9AG8AAIAAQAsABoAQgDBAAEADwC+AAEADQDCAAEAEwA/AAEABABdAAEAGQHIAAEALQAGAEFZWUuwCVBYQP8ADxAREA9gDgENERIQDWAAEhMREhNmAAoUCxQKC2gACwkUCwlmAAkGFAkGZgAGAxQGA2YAAwQUAwRmAAQFFAQFZgAFCBQFCGYACAcUCAdmAAcZFAcZZgAZKxQZK2YAKwIUKwJmAAIbFAIbZgAbGhQbGmYAGioUGipmACopFCopZgApKBQpKGYAKCcUKCdmACcdFCcdZgAdJhQdJmYAJhwgJl4AHB4UHB5mAB4fFB4fZgAfJRQfJWYAJSAUJSBmACQgISAkIWgAISMgISNmACMuICNeAC4tIC4tZgAtIiAtImYAIiwgIl4ALAEgLAFmLwEAABAPABBbABEAEwwRE1tAHBcBDBgWFQMUCgwUWwAgJAEgTwAgIAFUAAEgAUgbS7AKUFhA/wAPEBEQD2AOAQ0REhANYAASExESE2YWFQIUDAoQFGAACgsMCgtmAAsJDAsJZgAJBgwJBmYABgMMBgNmAAMEDAMEZgAEBQwEBWYABQgMBQhmAAgHDAgHZgAHGQwHGWYAGSsMGStmACsCDCsCZgACGwwCG2YAGxoMGxpmABoqDBoqZgAqKQwqKWYAKSgMKShmACgnDCgnZgAnHQwnHWYAHSYMHSZmACYcICZeABweDBweZgAeHwweH2YAHyUMHyVmACUgDCUgZgAkICEgJCFoACEjICEjZgAjLiAjXgAuLSAuLWYALSIgLSJmACIsICJeACwBICwBZi8BAAAQDwAQW0AgABENExFPGAETFwEMFBMMWwAgJAEgTwAgIAFUAAEgAUgbS7ALUFhA/wAPEBEQD2ASDgINERMQDWAACgwLDAoLaAALCQwLCWYACQYMCQZmAAYDDAYDZgADBAwDBGYABAUMBAVmAAUIDAUIZgAIBwwIB2YABxkMBxlmABkrDBkrZgArAgwrAmYAAhsMAhtmABsaDBsaZgAaKgwaKmYAKikMKilmACkoDCkoZgAoJwwoJ2YAJx0MJx1mAB0mDB0mZgAmHCAmXgAcHgwcHmYAHh8MHh9mAB8lDB8lZgAlIAwlIGYAJCAhICQhaAAhIyAhI2YAIy4gI14ALi0gLi1mAC0iIC0iZgAiLCAiXgAsASAsAWYvAQAAEA8AEFsAEQ0TEU8YFhUUBBMXAUAVDAoTDFsAICQBIE8AICABVAABIAFIG0uwEVBYQP8ADxAREA9gDgENERIQDWAAEhMREhNmAAoUCxQKC2gACwkUCwlmAAkGFAkGZgAGAxQGA2YAAwQUAwRmAAQFFAQFZgAFCBQFCGYACAcUCAdmAAcZFAcZZgAZKxQZK2YAKwIUKwJmAAIbFAIbZgAbGhQbGmYAGioUGipmACopFCopZgApKBQpKGYAKCcUKCdmACcdFCcdZgAdJhQdJmYAJhwUJhxmABweFBweZgAeHxQeH2YAHyUUHyVmACUgFCUgZgAkICEgJCFoACEjICEjZgAjLiAjXgAuLSAuLWYALSIgLSJmACIsICJeACwBICwBZi8BAAAQDwAQWwARABMMERNAHVsXAQwYFhUDFAoMFFsAICQBIE8AICABVAABIAFIG0uwKFBYQP8ADxAREA9gDgENERIQDWAAEhMREhNmAAoUCxQKC2gACwkUCwlmAAkGFAkGZgAGAxQGA2YAAwQUAwRmAAQFFAQFZgAFCBQFCGYACAcUCAdmAAcZFAcZZgAZKxQZK2YAKwIUKwJmAAIbFAIbZgAbGhQbGmYAGioUGipmACopFCopZgApKBQpKGYAKCcUKCdmACcdFCcdZgAdJhQdJmYAJhwUJhxmABweFBweZgAeHxQeH2YAHyUUHyVmACUgFCUgZgAkICEgJCFoACEjICEjZgAjLiAjXgAuLSAuLWYALSIgLSJmACIsICIsZgAsASAsAWYvAQAAEA8AEFsAEQATDBFAHhNbFwEMGBYVAxQKDBRbACAkASBPACAgAVQAASABSBtA/wAPEBEQD2AOAQ0REhANYAASExESE2YAChQLFAoLaAALCRQLCWYACQYUCQZmAAYDFAYDZgADBBQDBGYABAUUBAVmAAUIFAUIZgAIBxQIB2YABxkUBxlmABkrFBkrZgArAhQrAmYAAhsUAhtmABsaFBsaZgAaKhQaKmYAKikUKilmACkoFCkoZgAoJxQoJ2YAJx0UJx1mAB0mFB0mZgAmHBQmHGYAHB4UHB5mAB4fFB4fZgAfJRQfJWYAJSAUJSBmACQgISAkIWgAISMgISNmACMuICMuZgAuLSAuLWYALSIgLSJmACIsICIsZgAsASAsAWYvAQAAEA8AEFsAEQATDEAfERNbFwEMGBYVAxQKDBRbACAkASBPACAgAVQAASABSFlZWVlZQWQAAQAAAdMB0gHNAcwBwAG/AbcBtgGuAa0BngGdAZgBlwGUAZMBaQFmAVQBUwFKAUkBPgE9ATMBMgEmASUBHgEdARMBEgEPAQ4BCAEGAPgA9wDjAOIA4gDhANgA1wDNAMwAugC5ALEAsACvAK4ArQCsAKUApACjAKIAnwCeAJkAmACVAJQAkQCQAIkAiACBAIAAfQB8AHsAegBvAG4AagBpAFwAWwBDAEIAOgA5ADYANQAxADAAEQAQAAcABgAAAAwAAQAMADAADysBMh4BFA4BIi4CPgEBDgEHMj4BNT4BNzYXJj4CPwEGJjUUBzQmBjUuBC8BJiIOARUmIhQOASIHNicmBzY0JzMuAicuAQYUHwEWBh4BBwYPAQYWFxYUBiIPAQYmJyYnJgcmJyYHMiYHPgEjNj8BNicWNzY/ATYyFjMWNCcyJyYnJgcGFyIPAQYvASYnIgc2JiM2JyYiDwEGHgEyFxYHIgYiBhYHLgEnFi8BIgYiJyY3NBcnBgcyPwE2NTYXNxcmBwYHFgcnLgEnIgcGBx4CFDcWBzIXFhcWBycmBhYzIg8BBh8BBhY3Bh8DHgIXBhYHIgY1HgIUFjc2Jy4CNTMyHwEGHgIzHgEHMh4EHwMWMj8BNhYXFjciHwEeARUeARc2NQYWMzY1Bi8BJjQmNhcyNi4CJwYmJxQGFSM2ND8BNi8BJgciBw4DJicuATQ/ATYnNj8BNjsBMjYmLwEWNhcWNycmNxY3HgIfARY2NxYXHgE+ASY1JzUuATY3NDY/ATYnMjcnJiI3Nic+ATMWNzYnPgE3FjYmPgEXNzYjFjc2JzYmJzYyNTYnJgM2NyYiLwE2Ji8BJi8BJg8BIg8BFSYnIi8BJgYHBg8BJjYmBg8BBjYGFQ4BFS4BNx4BFxYHBgcGFxQGFgGtdMZycsboyG4GerwBEgEIAwECBAMRFRMKAQwEDAMBBwYEBAoFBgQBCAEGAQQEBAIEBgEGAggJBQQFBQMBCAwBBRwHAgIBCAEOAQIHCQMEBAEEAgMBBwoCBAUNBAIUDhMECAYBAgECBQkCARMJAgQGBQYKAwgEBwUDAgYJBAYBBQkEBQMDAgUEAQ4HCw8EEAMDAQgECAEIAwEIBAQEAwMEAgQSBQMMDAEDAwIMGRsDAwgFEwUDCwQNCwEEAgYECAQJBFEyBAUCBgUDARgKAQIHBQQDBAQEAQIBAQECCgcHEgQHCQQDCAQCDgEBAgIOAgQCAg8IAwQDAgMFAQQKCgEECAQFDAcCAwgDCQcWBgYFCAgQBBQKAQIEAgYDDgMEAQoFCBEKAgICAgEFAgQBCgIDDAMCCAECCAMBAwIHCwQBAgIIFAMICgECAQQCAwUCAQIBBAECAgQYAwkDAQEBAw0CDgQCAwEEAwUCBggEAgIBCAQEBwgFBwwEBAICAgYBBQQDAgMFBwQDAhIBBAICBQwCCQICCggFCQIIBAIKCQ0JaXJRAQwBDQEEAxUBAwUCAwICAQUMCAMEBQEKAQMBAQQIBAoBBwYCCgIEAQwBAQICBAsPAQIJCgEDC3TE6sR0dMTqxHT+3QEIAgYGAQQIAwULAQwCAgQMAQoHAgMEAgQBAgYMBQYDCgEGBAEBAgICAQMDAgEDCAQCBgIDAwQFBAYHBAYICgcEBQYFDAMBAgQCAQMMCQ4DBAUHCAUDEQIDDgcGDAMBAwkCBwoDBgEOBAoEAQIFAgIGCgQHBwcBCQUIBwgDAgcDAgQCBgIEBQoDAw4CBQEBAgUEBwIBCggPAQMCAgcEAw4DAgQDBwMGBAQBAS1PBAEIBAMEBg8KAgYEBQQFDgkUCwIBBhoCARcFBAYDBRQDAxAFAgEECAUIBAELFw4FDAICBAQMCA4EDgEKCxQHCAEFAw0CAQIBEgMKBAQJBQYCAwoDAgMFDAIQCRMDAwQEBgIECgcOAQUCBAEEAgIQBQ8FAgUDAgsCCAQEAgIEGA4JDgUJAQQGAQIDAQEBBAMGBwYFAg8KAQQBAgMBAgMIBRcEAggIAwQPAgoKBQECAwQLCQUCAgICBgIKBwYFBAQEAwEECgQGAQcCAQcGBQMEAQEBBQQC/g0VVQICBQQGAg8BAQIBAgEBAwIKAwMEAQIDAgYHAw4GAgEFBAIIAQIIAwMCAgUcCBEJDgkMAgQQBwAAAAAD////sQOhAwsABgANAEcAPEA5CwACAgABQgkBBwEBAAIHAFkACAYBAgMIAlsFAQMEBANPBQEDAwRTAAQDBEdGRDMnFiU1JhoVEgoYKwEmNSMVFBYlNSMUBz4BNxUUDgIHBgcOARQWMzIWBxUUBiMhIiY9ATQ2MzI2NCYnJicuAzc1NDY7ATU0NjchMhYdATMyFgEAKo9qAqiPKU9oSTBMdj0XHhUQIiUqQgEKCP4wCApCKSYiEBYdGD9yTjABIBagNiQBQSU0oRYgAWVbdDUsXoo1dFsQXnNHKFBCKgQeFxMqOyoyJyQICgoIJCcyKjosEhceAyxAUidHFiA1JTQBNiQ1IAAAAAAEAAD/sQNZAwsAAwAhADEARQBLQEgqIgIIBAFCDQEEAUEACgcBBAgKBFsACAADBggDWwAGAAEABgFZBQICAAkJAE0FAgIAAAlTAAkACUdAPTg1NTYzERM7EREQCxgrFyE1IQUzETQmLwEuAQcVFAYjISImJzUjETM1NDYzITIWBwM1NCYrASIGFxUUFjsBMjYFERQGIyEiJicRNDYzITIWHwEeAdYBrf5TAfRIDAWdBRwIHhf+vhYeAUhIIBUB0RYgAdYKCGsHDAEKCGsHDAFkHhf9EhceASAWAgUXNg+cEBYH1tYB9AgaB5wGDAHoFiAgFuj9NugWICAWAR6yCAoKCLIICgoK/foWICAWAu4WIBgOnQ82AAAAAwAA/3YDoAMLAAgAFAAuAEdARCYBBQQnFRIDAwUJAQADAAEBAARCAAUEAwQFA2gAAAMBAwABaAAEAAMABANbAAECAgFPAAEBAlMAAgECRxwjLRQTEgYVKzc0Jg4BHgEyNiUBBiIvASY0NwEeASUUBw4BJyImNDY3MhYXFhQPARUXNj8BNjIW1hQeFgISIhABav6DFToWOxUVAXwWVAGYDBuCT2iSkmggRhkJCaNsAipLIQ8KHQ4WAhIgFBT6/oMUFD0UOxYBfDdU3RYlS14BktCQAhQQBhIHXn08AhktFAoAAAAAAQAAAAEAAI0/a0NfDzz1AAsD6AAAAADOuaaNAAAAAM65bk7//P9VBIMDZwAAAAgAAgAAAAAAAAABAAADUv9qAFoEewAA//QEhwABAAAAAAAAAAAAAAAAAAAAGwPoAAADEQAAA1kAAAOgAAADWQAAA6AAAAMRAAAD6AAAA+gAAAPAAAACRAAAA0IAAAMvAAAD6wAABHsAAAOqAAAEEQAAA+gAAANZAAACRAAAA+gAAAOgAAADoAAAA1kAAAOgAAADWQAAA6AAAAAAAAAAWACcAOYBLAFoAYYB+gLoA1IDwARwBQAFrAYsBooG+AfECAoILAjACXYKjBNyE/YUghTzAAEAAAAbAfgACQAAAAAAAgBgAG0AbgAAAlUMMwAAAAAAAAASAN4AAQAAAAAAAAA1AAAAAQAAAAAAAQAFADUAAQAAAAAAAgAHADoAAQAAAAAAAwAFAEEAAQAAAAAABAAFAEYAAQAAAAAABQALAEsAAQAAAAAABgAFAFYAAQAAAAAACgArAFsAAQAAAAAACwATAIYAAwABBAkAAABqAJkAAwABBAkAAQAKAQMAAwABBAkAAgAOAQ0AAwABBAkAAwAKARsAAwABBAkABAAKASUAAwABBAkABQAWAS8AAwABBAkABgAKAUUAAwABBAkACgBWAU8AAwABBAkACwAmAaVDb3B5cmlnaHQgKEMpIDIwMTMgYnkgb3JpZ2luYWwgYXV0aG9ycyBAIGZvbnRlbGxvLmNvbW1vZHVzUmVndWxhcm1vZHVzbW9kdXNWZXJzaW9uIDEuMG1vZHVzR2VuZXJhdGVkIGJ5IHN2ZzJ0dGYgZnJvbSBGb250ZWxsbyBwcm9qZWN0Lmh0dHA6Ly9mb250ZWxsby5jb20AQwBvAHAAeQByAGkAZwBoAHQAIAAoAEMAKQAgADIAMAAxADMAIABiAHkAIABvAHIAaQBnAGkAbgBhAGwAIABhAHUAdABoAG8AcgBzACAAQAAgAGYAbwBuAHQAZQBsAGwAbwAuAGMAbwBtAG0AbwBkAHUAcwBSAGUAZwB1AGwAYQByAG0AbwBkAHUAcwBtAG8AZAB1AHMAVgBlAHIAcwBpAG8AbgAgADEALgAwAG0AbwBkAHUAcwBHAGUAbgBlAHIAYQB0AGUAZAAgAGIAeQAgAHMAdgBnADIAdAB0AGYAIABmAHIAbwBtACAARgBvAG4AdABlAGwAbABvACAAcAByAG8AagBlAGMAdAAuAGgAdAB0AHAAOgAvAC8AZgBvAG4AdABlAGwAbABvAC4AYwBvAG0AAAAAAgAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbAAABAgEDAQQBBQEGAQcBCAEJAQoBCwEMAQ0BDgEPARABEQESARMBFAEVARYBFwEYARkBGgEbCGVsbGlwc2lzB2Fycm93LXcHYXJyb3ctbgdhcnJvdy1lBGhvbWUEcGxheQxmYXZvcml0ZS1hZGQSY2F0ZWdvcnktdmlldy1mbGF0BGVkaXQEaGVscAVzaXplcwVnbG9iZQpjYWRkaWUtYWRkB2xldHRlcnMEbWVudQVjbG91ZAtjYW1lcmEtaW5mbwVwYXVzZQVtaW51cxRjYXRlZ29yeS12aWV3LW5vcm1hbA9jYW1lcmEtY2FsZW5kYXIEc29ydANtYXAOcmVwcmVzZW50YXRpdmUEc2F2ZQ1jYXRlZ29yeS1lZGl0AAAAAAAAAQAB//8ADwAAAAAAAAAAAAAAAAAAAAAAMgAyA2f/VQNn/1WwACywIGBmLbABLCBkILDAULAEJlqwBEVbWCEjIRuKWCCwUFBYIbBAWRsgsDhQWCGwOFlZILAKRWFksChQWCGwCkUgsDBQWCGwMFkbILDAUFggZiCKimEgsApQWGAbILAgUFghsApgGyCwNlBYIbA2YBtgWVlZG7AAK1lZI7AAUFhlWVktsAIsIEUgsAQlYWQgsAVDUFiwBSNCsAYjQhshIVmwAWAtsAMsIyEjISBksQViQiCwBiNCsgoAAiohILAGQyCKIIqwACuxMAUlilFYYFAbYVJZWCNZISCwQFNYsAArGyGwQFkjsABQWGVZLbAELLAHQyuyAAIAQ2BCLbAFLLAHI0IjILAAI0JhsIBisAFgsAQqLbAGLCAgRSCwAkVjsAFFYmBEsAFgLbAHLCAgRSCwACsjsQIEJWAgRYojYSBkILAgUFghsAAbsDBQWLAgG7BAWVkjsABQWGVZsAMlI2FERLABYC2wCCyxBQVFsAFhRC2wCSywAWAgILAJQ0qwAFBYILAJI0JZsApDSrAAUlggsAojQlktsAosILgEAGIguAQAY4ojYbALQ2AgimAgsAsjQiMtsAssS1RYsQcBRFkksA1lI3gtsAwsS1FYS1NYsQcBRFkbIVkksBNlI3gtsA0ssQAMQ1VYsQwMQ7ABYUKwCitZsABDsAIlQrEJAiVCsQoCJUKwARYjILADJVBYsQEAQ2CwBCVCioogiiNhsAkqISOwAWEgiiNhsAkqIRuxAQBDYLACJUKwAiVhsAkqIVmwCUNHsApDR2CwgGIgsAJFY7ABRWJgsQAAEyNEsAFDsAA+sgEBAUNgQi2wDiyxAAVFVFgAsAwjQiBgsAFhtQ0NAQALAEJCimCxDQUrsG0rGyJZLbAPLLEADistsBAssQEOKy2wESyxAg4rLbASLLEDDistsBMssQQOKy2wFCyxBQ4rLbAVLLEGDistsBYssQcOKy2wFyyxCA4rLbAYLLEJDistsBkssAgrsQAFRVRYALAMI0IgYLABYbUNDQEACwBCQopgsQ0FK7BtKxsiWS2wGiyxABkrLbAbLLEBGSstsBwssQIZKy2wHSyxAxkrLbAeLLEEGSstsB8ssQUZKy2wICyxBhkrLbAhLLEHGSstsCIssQgZKy2wIyyxCRkrLbAkLCA8sAFgLbAlLCBgsA1gIEMjsAFgQ7ACJWGwAWCwJCohLbAmLLAlK7AlKi2wJywgIEcgILACRWOwAUViYCNhOCMgilVYIEcgILACRWOwAUViYCNhOBshWS2wKCyxAAVFVFgAsAEWsCcqsAEVMBsiWS2wKSywCCuxAAVFVFgAsAEWsCcqsAEVMBsiWS2wKiwgNbABYC2wKywAsANFY7ABRWKwACuwAkVjsAFFYrAAK7AAFrQAAAAAAEQ+IzixKgEVKi2wLCwgPCBHILACRWOwAUViYLAAQ2E4LbAtLC4XPC2wLiwgPCBHILACRWOwAUViYLAAQ2GwAUNjOC2wLyyxAgAWJSAuIEewACNCsAIlSYqKRyNHI2EgWGIbIVmwASNCsi4BARUUKi2wMCywABawBCWwBCVHI0cjYbAGRStlii4jICA8ijgtsDEssAAWsAQlsAQlIC5HI0cjYSCwBCNCsAZFKyCwYFBYILBAUVizAiADIBuzAiYDGllCQiMgsAhDIIojRyNHI2EjRmCwBEOwgGJgILAAKyCKimEgsAJDYGQjsANDYWRQWLACQ2EbsANDYFmwAyWwgGJhIyAgsAQmI0ZhOBsjsAhDRrACJbAIQ0cjRyNhYCCwBEOwgGJgIyCwACsjsARDYLAAK7AFJWGwBSWwgGKwBCZhILAEJWBkI7ADJWBkUFghGyMhWSMgILAEJiNGYThZLbAyLLAAFiAgILAFJiAuRyNHI2EjPDgtsDMssAAWILAII0IgICBGI0ewACsjYTgtsDQssAAWsAMlsAIlRyNHI2GwAFRYLiA8IyEbsAIlsAIlRyNHI2EgsAUlsAQlRyNHI2GwBiWwBSVJsAIlYbABRWMjIFhiGyFZY7ABRWJgIy4jICA8ijgjIVktsDUssAAWILAIQyAuRyNHI2EgYLAgYGawgGIjICA8ijgtsDYsIyAuRrACJUZSWCA8WS6xJgEUKy2wNywjIC5GsAIlRlBYIDxZLrEmARQrLbA4LCMgLkawAiVGUlggPFkjIC5GsAIlRlBYIDxZLrEmARQrLbA5LLAwKyMgLkawAiVGUlggPFkusSYBFCstsDossDEriiAgPLAEI0KKOCMgLkawAiVGUlggPFkusSYBFCuwBEMusCYrLbA7LLAAFrAEJbAEJiAuRyNHI2GwBkUrIyA8IC4jOLEmARQrLbA8LLEIBCVCsAAWsAQlsAQlIC5HI0cjYSCwBCNCsAZFKyCwYFBYILBAUVizAiADIBuzAiYDGllCQiMgR7AEQ7CAYmAgsAArIIqKYSCwAkNgZCOwA0NhZFBYsAJDYRuwA0NgWbADJbCAYmGwAiVGYTgjIDwjOBshICBGI0ewACsjYTghWbEmARQrLbA9LLAwKy6xJgEUKy2wPiywMSshIyAgPLAEI0IjOLEmARQrsARDLrAmKy2wPyywABUgR7AAI0KyAAEBFRQTLrAsKi2wQCywABUgR7AAI0KyAAEBFRQTLrAsKi2wQSyxAAEUE7AtKi2wQiywLyotsEMssAAWRSMgLiBGiiNhOLEmARQrLbBELLAII0KwQystsEUssgAAPCstsEYssgABPCstsEcssgEAPCstsEgssgEBPCstsEkssgAAPSstsEossgABPSstsEsssgEAPSstsEwssgEBPSstsE0ssgAAOSstsE4ssgABOSstsE8ssgEAOSstsFAssgEBOSstsFEssgAAOystsFIssgABOystsFMssgEAOystsFQssgEBOystsFUssgAAPistsFYssgABPistsFcssgEAPistsFgssgEBPistsFkssgAAOistsFossgABOistsFsssgEAOistsFwssgEBOistsF0ssDIrLrEmARQrLbBeLLAyK7A2Ky2wXyywMiuwNystsGAssAAWsDIrsDgrLbBhLLAzKy6xJgEUKy2wYiywMyuwNistsGMssDMrsDcrLbBkLLAzK7A4Ky2wZSywNCsusSYBFCstsGYssDQrsDYrLbBnLLA0K7A3Ky2waCywNCuwOCstsGkssDUrLrEmARQrLbBqLLA1K7A2Ky2wayywNSuwNystsGwssDUrsDgrLbBtLCuwCGWwAyRQeLABFTAtAAAAS7gAyFJYsQEBjlm5CAAIAGMgsAEjRLADI3CyBCgJRVJEsgoCByqxBgFEsSQBiFFYsECIWLEGA0SxJgGIUVi4BACIWLEGAURZWVlZuAH/hbAEjbEFAEQAAA==') format('truetype');
+}
+/* Chrome hack: SVG is rendered more smooth in Windozze. 100% magic, uncomment if you need it. */
+/* Note, that will break hinting! In other OS-es font will be not as sharp as it could be */
+/*
+@media screen and (-webkit-min-device-pixel-ratio:0) {
+  @font-face {
+    font-family: 'modus';
+    src: url('../font/modus.svg?9544571#modus') format('svg');
+  }
+}
+*/
+ 
+ [class^="pwg-icon-"]:before, [class*=" pwg-icon-"]:before {
+  font-family: "modus";
+  font-style: normal;
+  font-weight: normal;
+  speak: none;
+ 
+  display: inline-block;
+  text-decoration: inherit;
+  width: 1em;
+  margin-right: .2em;
+  text-align: center;
+  /* opacity: .8; */
+ 
+  /* For safety - reset parent styles, that can break glyph codes*/
+  font-variant: normal;
+  text-transform: none;
+     
+  /* fix buttons height, for twitter bootstrap */
+  line-height: 1em;
+ 
+  /* Animation center compensation - margins should be symmetric */
+  /* remove if not needed */
+  margin-left: .2em;
+ 
+  /* you can be more comfortable with increased icons size */
+  /* font-size: 120%; */
+ 
+  /* Uncomment for 3D effect */
+  /* text-shadow: 1px 1px 1px rgba(127, 127, 127, 0.3); */
+}
+.pwg-icon-favorite-add:before { content: '\2661'; } /* '♡' */
+.pwg-icon-home:before { content: '\2302'; } /* '⌂' */
+.pwg-icon-category-view-flat:before { content: '\268f'; } /* '⚏' */
+.pwg-icon-category-edit:before { content: '🔧'; } /* '\1f527' */
+.pwg-icon-camera-calendar:before { content: '\f133'; } /* '' */
+.pwg-icon-arrow-w:before { content: '\2190'; } /* '←' */
+.pwg-icon-arrow-e:before { content: '\2192'; } /* '→' */
+.pwg-icon-arrow-n:before { content: '\2191'; } /* '↑' */
+.pwg-icon-play:before { content: '\25b6'; } /* '▶' */
+.pwg-icon-pause:before { content: '\e800'; } /* '' */
+.pwg-icon-representative:before { content: '🏉'; } /* '\1f3c9' */
+.pwg-icon-map:before { content: '🌎'; } /* '\1f30e' */
+.pwg-icon-ellipsis:before { content: '\2026'; } /* '…' */
+.pwg-icon-camera-info:before { content: '\e70f'; } /* '' */
+.pwg-icon-sort:before { content: '\f15d'; } /* '' */
+.pwg-icon-category-view-normal:before { content: '\f0e8'; } /* '' */
+.pwg-icon-minus:before { content: '\e801'; } /* '' */
+.pwg-icon-help:before { content: '\2753'; } /* '❓' */
+.pwg-icon-edit:before { content: '\270e'; } /* '✎' */
+.pwg-icon-menu:before { content: '\e0fe'; } /* '' */
+.pwg-icon-caddie-add:before { content: '\e0d2'; } /* '' */
+.pwg-icon-sizes:before { content: '\e012'; } /* '' */
+.pwg-icon-globe:before { content: '\e079'; } /* '' */
+.pwg-icon-cloud:before { content: '\e11f'; } /* '' */
+.pwg-icon-letters:before { content: '\e0eb'; } /* '' */
+.pwg-icon-save:before { content: '💾'; } /* '\1f4be' */
Index: /extensions/modus/css/fontello/css/modus-ie7-codes.css
===================================================================
--- /extensions/modus/css/fontello/css/modus-ie7-codes.css	(revision 25794)
+++ /extensions/modus/css/fontello/css/modus-ie7-codes.css	(revision 25794)
@@ -0,0 +1,27 @@
+
+.pwg-icon-favorite-add { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#x2661;&nbsp;'); }
+.pwg-icon-home { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#x2302;&nbsp;'); }
+.pwg-icon-category-view-flat { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#x268f;&nbsp;'); }
+.pwg-icon-category-edit { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#x1f527;&nbsp;'); }
+.pwg-icon-camera-calendar { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf133;&nbsp;'); }
+.pwg-icon-arrow-w { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#x2190;&nbsp;'); }
+.pwg-icon-arrow-e { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#x2192;&nbsp;'); }
+.pwg-icon-arrow-n { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#x2191;&nbsp;'); }
+.pwg-icon-play { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#x25b6;&nbsp;'); }
+.pwg-icon-pause { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe800;&nbsp;'); }
+.pwg-icon-representative { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#x1f3c9;&nbsp;'); }
+.pwg-icon-map { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#x1f30e;&nbsp;'); }
+.pwg-icon-ellipsis { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#x2026;&nbsp;'); }
+.pwg-icon-camera-info { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe70f;&nbsp;'); }
+.pwg-icon-sort { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf15d;&nbsp;'); }
+.pwg-icon-category-view-normal { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0e8;&nbsp;'); }
+.pwg-icon-minus { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe801;&nbsp;'); }
+.pwg-icon-help { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#x2753;&nbsp;'); }
+.pwg-icon-edit { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#x270e;&nbsp;'); }
+.pwg-icon-menu { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe0fe;&nbsp;'); }
+.pwg-icon-caddie-add { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe0d2;&nbsp;'); }
+.pwg-icon-sizes { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe012;&nbsp;'); }
+.pwg-icon-globe { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe079;&nbsp;'); }
+.pwg-icon-cloud { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe11f;&nbsp;'); }
+.pwg-icon-letters { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe0eb;&nbsp;'); }
+.pwg-icon-save { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#x1f4be;&nbsp;'); }
Index: /extensions/modus/css/fontello/css/modus-ie7.css
===================================================================
--- /extensions/modus/css/fontello/css/modus-ie7.css	(revision 25794)
+++ /extensions/modus/css/fontello/css/modus-ie7.css	(revision 25794)
@@ -0,0 +1,38 @@
+[class^="pwg-icon-"], [class*=" pwg-icon-"] {
+  font-family: 'modus';
+  font-style: normal;
+  font-weight: normal;
+ 
+  /* fix buttons height */
+  line-height: 1em;
+ 
+  /* you can be more comfortable with increased icons size */
+  /* font-size: 120%; */
+}
+ 
+.pwg-icon-favorite-add { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#x2661;&nbsp;'); }
+.pwg-icon-home { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#x2302;&nbsp;'); }
+.pwg-icon-category-view-flat { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#x268f;&nbsp;'); }
+.pwg-icon-category-edit { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#x1f527;&nbsp;'); }
+.pwg-icon-camera-calendar { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf133;&nbsp;'); }
+.pwg-icon-arrow-w { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#x2190;&nbsp;'); }
+.pwg-icon-arrow-e { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#x2192;&nbsp;'); }
+.pwg-icon-arrow-n { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#x2191;&nbsp;'); }
+.pwg-icon-play { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#x25b6;&nbsp;'); }
+.pwg-icon-pause { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe800;&nbsp;'); }
+.pwg-icon-representative { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#x1f3c9;&nbsp;'); }
+.pwg-icon-map { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#x1f30e;&nbsp;'); }
+.pwg-icon-ellipsis { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#x2026;&nbsp;'); }
+.pwg-icon-camera-info { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe70f;&nbsp;'); }
+.pwg-icon-sort { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf15d;&nbsp;'); }
+.pwg-icon-category-view-normal { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xf0e8;&nbsp;'); }
+.pwg-icon-minus { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe801;&nbsp;'); }
+.pwg-icon-help { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#x2753;&nbsp;'); }
+.pwg-icon-edit { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#x270e;&nbsp;'); }
+.pwg-icon-menu { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe0fe;&nbsp;'); }
+.pwg-icon-caddie-add { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe0d2;&nbsp;'); }
+.pwg-icon-sizes { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe012;&nbsp;'); }
+.pwg-icon-globe { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe079;&nbsp;'); }
+.pwg-icon-cloud { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe11f;&nbsp;'); }
+.pwg-icon-letters { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe0eb;&nbsp;'); }
+.pwg-icon-save { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#x1f4be;&nbsp;'); }
Index: /extensions/modus/css/fontello/css/modus.css
===================================================================
--- /extensions/modus/css/fontello/css/modus.css	(revision 25794)
+++ /extensions/modus/css/fontello/css/modus.css	(revision 25794)
@@ -0,0 +1,80 @@
+@charset "UTF-8";
+
+ @font-face {
+  font-family: 'modus';
+  src: url('../font/modus.eot?98696955');
+  src: url('../font/modus.eot?98696955#iefix') format('embedded-opentype'),
+       url('../font/modus.woff?98696955') format('woff'),
+       url('../font/modus.ttf?98696955') format('truetype'),
+       url('../font/modus.svg?98696955#modus') format('svg');
+  font-weight: normal;
+  font-style: normal;
+}
+/* Chrome hack: SVG is rendered more smooth in Windozze. 100% magic, uncomment if you need it. */
+/* Note, that will break hinting! In other OS-es font will be not as sharp as it could be */
+/*
+@media screen and (-webkit-min-device-pixel-ratio:0) {
+  @font-face {
+    font-family: 'modus';
+    src: url('../font/modus.svg?98696955#modus') format('svg');
+  }
+}
+*/
+ 
+ [class^="pwg-icon-"]:before, [class*=" pwg-icon-"]:before {
+  font-family: "modus";
+  font-style: normal;
+  font-weight: normal;
+  speak: none;
+ 
+  display: inline-block;
+  text-decoration: inherit;
+  width: 1em;
+  margin-right: .2em;
+  text-align: center;
+  /* opacity: .8; */
+ 
+  /* For safety - reset parent styles, that can break glyph codes*/
+  font-variant: normal;
+  text-transform: none;
+     
+  /* fix buttons height, for twitter bootstrap */
+  line-height: 1em;
+ 
+  /* Animation center compensation - margins should be symmetric */
+  /* remove if not needed */
+  margin-left: .2em;
+ 
+  /* you can be more comfortable with increased icons size */
+  /* font-size: 120%; */
+ 
+  /* Uncomment for 3D effect */
+  /* text-shadow: 1px 1px 1px rgba(127, 127, 127, 0.3); */
+}
+ 
+.pwg-icon-favorite-add:before { content: '\2661'; } /* '♡' */
+.pwg-icon-home:before { content: '\2302'; } /* '⌂' */
+.pwg-icon-category-view-flat:before { content: '\268f'; } /* '⚏' */
+.pwg-icon-category-edit:before { content: '🔧'; } /* '\1f527' */
+.pwg-icon-camera-calendar:before { content: '\f133'; } /* '' */
+.pwg-icon-arrow-w:before { content: '\2190'; } /* '←' */
+.pwg-icon-arrow-e:before { content: '\2192'; } /* '→' */
+.pwg-icon-arrow-n:before { content: '\2191'; } /* '↑' */
+.pwg-icon-play:before { content: '\25b6'; } /* '▶' */
+.pwg-icon-pause:before { content: '\e800'; } /* '' */
+.pwg-icon-representative:before { content: '🏉'; } /* '\1f3c9' */
+.pwg-icon-map:before { content: '🌎'; } /* '\1f30e' */
+.pwg-icon-ellipsis:before { content: '\2026'; } /* '…' */
+.pwg-icon-camera-info:before { content: '\e70f'; } /* '' */
+.pwg-icon-sort:before { content: '\f15d'; } /* '' */
+.pwg-icon-category-view-normal:before { content: '\f0e8'; } /* '' */
+.pwg-icon-minus:before { content: '\e801'; } /* '' */
+.pwg-icon-help:before { content: '\2753'; } /* '❓' */
+.pwg-icon-edit:before { content: '\270e'; } /* '✎' */
+.pwg-icon-menu:before { content: '\e0fe'; } /* '' */
+.pwg-icon-caddie-add:before { content: '\e0d2'; } /* '' */
+.pwg-icon-sizes:before { content: '\e012'; } /* '' */
+.pwg-icon-globe:before { content: '\e079'; } /* '' */
+.pwg-icon-cloud:before { content: '\e11f'; } /* '' */
+.pwg-icon-letters:before { content: '\e0eb'; } /* '' */
+.pwg-icon-save:before { content: '💾'; } /* '\1f4be' */
Index: /extensions/modus/css/fontello/demo.html
===================================================================
--- /extensions/modus/css/fontello/demo.html	(revision 25794)
+++ /extensions/modus/css/fontello/demo.html	(revision 25794)
@@ -0,0 +1,306 @@
+<!DOCTYPE html>
+<html>
+  <head>
+    <!--[if lt IE 9]>
+    <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
+    <![endif]-->
+    <meta charset="UTF-8"><style type="text/css">/*
+ * Bootstrap v2.2.1
+ *
+ * Copyright 2012 Twitter, Inc
+ * Licensed under the Apache License v2.0
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Designed and built with all the love in the world @twitter by @mdo and @fat.
+ */
+.clearfix {
+  *zoom: 1;
+}
+.clearfix:before,
+.clearfix:after {
+  display: table;
+  content: "";
+  line-height: 0;
+}
+.clearfix:after {
+  clear: both;
+}
+html {
+  font-size: 100%;
+  -webkit-text-size-adjust: 100%;
+  -ms-text-size-adjust: 100%;
+}
+a:focus {
+  outline: thin dotted #333;
+  outline: 5px auto -webkit-focus-ring-color;
+  outline-offset: -2px;
+}
+a:hover,
+a:active {
+  outline: 0;
+}
+button,
+input,
+select,
+textarea {
+  margin: 0;
+  font-size: 100%;
+  vertical-align: middle;
+}
+button,
+input {
+  *overflow: visible;
+  line-height: normal;
+}
+button::-moz-focus-inner,
+input::-moz-focus-inner {
+  padding: 0;
+  border: 0;
+}
+body {
+  margin: 0;
+  font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
+  font-size: 14px;
+  line-height: 20px;
+  color: #333;
+  background-color: #fff;
+}
+a {
+  color: #08c;
+  text-decoration: none;
+}
+a:hover {
+  color: #005580;
+  text-decoration: underline;
+}
+.row {
+  margin-left: -20px;
+  *zoom: 1;
+}
+.row:before,
+.row:after {
+  display: table;
+  content: "";
+  line-height: 0;
+}
+.row:after {
+  clear: both;
+}
+[class*="span"] {
+  float: left;
+  min-height: 1px;
+  margin-left: 20px;
+}
+.container,
+.navbar-static-top .container,
+.navbar-fixed-top .container,
+.navbar-fixed-bottom .container {
+  width: 940px;
+}
+.span12 {
+  width: 940px;
+}
+.span11 {
+  width: 860px;
+}
+.span10 {
+  width: 780px;
+}
+.span9 {
+  width: 700px;
+}
+.span8 {
+  width: 620px;
+}
+.span7 {
+  width: 540px;
+}
+.span6 {
+  width: 460px;
+}
+.span5 {
+  width: 380px;
+}
+.span4 {
+  width: 300px;
+}
+.span3 {
+  width: 220px;
+}
+.span2 {
+  width: 140px;
+}
+.span1 {
+  width: 60px;
+}
+[class*="span"].pull-right,
+.row-fluid [class*="span"].pull-right {
+  float: right;
+}
+.container {
+  margin-right: auto;
+  margin-left: auto;
+  *zoom: 1;
+}
+.container:before,
+.container:after {
+  display: table;
+  content: "";
+  line-height: 0;
+}
+.container:after {
+  clear: both;
+}
+p {
+  margin: 0 0 10px;
+}
+.lead {
+  margin-bottom: 20px;
+  font-size: 21px;
+  font-weight: 200;
+  line-height: 30px;
+}
+small {
+  font-size: 85%;
+}
+h1 {
+  margin: 10px 0;
+  font-family: inherit;
+  font-weight: bold;
+  line-height: 20px;
+  color: inherit;
+  text-rendering: optimizelegibility;
+}
+h1 small {
+  font-weight: normal;
+  line-height: 1;
+  color: #999;
+}
+h1 {
+  line-height: 40px;
+}
+h1 {
+  font-size: 38.5px;
+}
+h1 small {
+  font-size: 24.5px;
+}
+body {
+  margin-top: 90px;
+}
+.header {
+  position: fixed;
+  top: 0;
+  left: 50%;
+  margin-left: -480px;
+  background-color: #fff;
+  border-bottom: 1px solid #ddd;
+  padding-top: 10px;
+  z-index: 10;
+}
+.footer {
+  color: #ddd;
+  font-size: 12px;
+  text-align: center;
+  margin-top: 20px;
+}
+.footer a {
+  color: #ccc;
+  text-decoration: underline;
+}
+.the-icons {
+  font-size: 14px;
+  line-height: 24px;
+}
+.switch {
+  position: absolute;
+  right: 0;
+  bottom: 10px;
+  color: #666;
+}
+.switch input {
+  margin-right: 0.3em;
+}
+.codesOn .i-name {
+  display: none;
+}
+.codesOn .i-code {
+  display: inline;
+}
+.i-code {
+  display: none;
+}
+</style>
+    <link rel="stylesheet" href="css/modus.css">
+    <link rel="stylesheet" href="css/animation.css">
+    <!--[if IE 7]>
+    <link rel="stylesheet" href="css/modus-ie7.css">
+    <![endif]-->
+    <script>
+      function toggleCodes(on) {
+        var obj = document.getElementById('icons');
+        
+        if (on) {
+          obj.className += ' codesOn';
+        } else {
+          obj.className = obj.className.replace(' codesOn', '');
+        }
+      }
+      
+    </script>
+  </head>
+  <body>
+    <div class="container header">
+      <h1>
+        modus
+         <small>font demo</small>
+      </h1>
+      <label class="switch">
+        <input type="checkbox" onclick="toggleCodes(this.checked)">show codes
+      </label>
+    </div>
+    <div id="icons" class="container">
+      <div class="row">
+        <div title="Code: 0x2661" class="the-icons span3"><i class="pwg-icon-favorite-add"></i> <span class="i-name">pwg-icon-favorite-add</span><span class="i-code">0x2661</span></div>
+        <div title="Code: 0x2302" class="the-icons span3"><i class="pwg-icon-home"></i> <span class="i-name">pwg-icon-home</span><span class="i-code">0x2302</span></div>
+        <div title="Code: 0x268f" class="the-icons span3"><i class="pwg-icon-category-view-flat"></i> <span class="i-name">pwg-icon-category-view-flat</span><span class="i-code">0x268f</span></div>
+        <div title="Code: 0x1f527" class="the-icons span3"><i class="pwg-icon-category-edit"></i> <span class="i-name">pwg-icon-category-edit</span><span class="i-code">0x1f527</span></div>
+      </div>
+      <div class="row">
+        <div title="Code: 0xf133" class="the-icons span3"><i class="pwg-icon-camera-calendar"></i> <span class="i-name">pwg-icon-camera-calendar</span><span class="i-code">0xf133</span></div>
+        <div title="Code: 0x2190" class="the-icons span3"><i class="pwg-icon-arrow-w"></i> <span class="i-name">pwg-icon-arrow-w</span><span class="i-code">0x2190</span></div>
+        <div title="Code: 0x2192" class="the-icons span3"><i class="pwg-icon-arrow-e"></i> <span class="i-name">pwg-icon-arrow-e</span><span class="i-code">0x2192</span></div>
+        <div title="Code: 0x2191" class="the-icons span3"><i class="pwg-icon-arrow-n"></i> <span class="i-name">pwg-icon-arrow-n</span><span class="i-code">0x2191</span></div>
+      </div>
+      <div class="row">
+        <div title="Code: 0x25b6" class="the-icons span3"><i class="pwg-icon-play"></i> <span class="i-name">pwg-icon-play</span><span class="i-code">0x25b6</span></div>
+        <div title="Code: 0xe800" class="the-icons span3"><i class="pwg-icon-pause"></i> <span class="i-name">pwg-icon-pause</span><span class="i-code">0xe800</span></div>
+        <div title="Code: 0x1f3c9" class="the-icons span3"><i class="pwg-icon-representative"></i> <span class="i-name">pwg-icon-representative</span><span class="i-code">0x1f3c9</span></div>
+        <div title="Code: 0x1f30e" class="the-icons span3"><i class="pwg-icon-map"></i> <span class="i-name">pwg-icon-map</span><span class="i-code">0x1f30e</span></div>
+      </div>
+      <div class="row">
+        <div title="Code: 0x2026" class="the-icons span3"><i class="pwg-icon-ellipsis"></i> <span class="i-name">pwg-icon-ellipsis</span><span class="i-code">0x2026</span></div>
+        <div title="Code: 0xe70f" class="the-icons span3"><i class="pwg-icon-camera-info"></i> <span class="i-name">pwg-icon-camera-info</span><span class="i-code">0xe70f</span></div>
+        <div title="Code: 0xf15d" class="the-icons span3"><i class="pwg-icon-sort"></i> <span class="i-name">pwg-icon-sort</span><span class="i-code">0xf15d</span></div>
+        <div title="Code: 0xf0e8" class="the-icons span3"><i class="pwg-icon-category-view-normal"></i> <span class="i-name">pwg-icon-category-view-normal</span><span class="i-code">0xf0e8</span></div>
+      </div>
+      <div class="row">
+        <div title="Code: 0xe801" class="the-icons span3"><i class="pwg-icon-minus"></i> <span class="i-name">pwg-icon-minus</span><span class="i-code">0xe801</span></div>
+        <div title="Code: 0x2753" class="the-icons span3"><i class="pwg-icon-help"></i> <span class="i-name">pwg-icon-help</span><span class="i-code">0x2753</span></div>
+        <div title="Code: 0x270e" class="the-icons span3"><i class="pwg-icon-edit"></i> <span class="i-name">pwg-icon-edit</span><span class="i-code">0x270e</span></div>
+        <div title="Code: 0xe0fe" class="the-icons span3"><i class="pwg-icon-menu"></i> <span class="i-name">pwg-icon-menu</span><span class="i-code">0xe0fe</span></div>
+      </div>
+      <div class="row">
+        <div title="Code: 0xe0d2" class="the-icons span3"><i class="pwg-icon-caddie-add"></i> <span class="i-name">pwg-icon-caddie-add</span><span class="i-code">0xe0d2</span></div>
+        <div title="Code: 0xe012" class="the-icons span3"><i class="pwg-icon-sizes"></i> <span class="i-name">pwg-icon-sizes</span><span class="i-code">0xe012</span></div>
+        <div title="Code: 0xe079" class="the-icons span3"><i class="pwg-icon-globe"></i> <span class="i-name">pwg-icon-globe</span><span class="i-code">0xe079</span></div>
+        <div title="Code: 0xe11f" class="the-icons span3"><i class="pwg-icon-cloud"></i> <span class="i-name">pwg-icon-cloud</span><span class="i-code">0xe11f</span></div>
+      </div>
+      <div class="row">
+        <div title="Code: 0xe0eb" class="the-icons span3"><i class="pwg-icon-letters"></i> <span class="i-name">pwg-icon-letters</span><span class="i-code">0xe0eb</span></div>
+        <div title="Code: 0x1f4be" class="the-icons span3"><i class="pwg-icon-save"></i> <span class="i-name">pwg-icon-save</span><span class="i-code">0x1f4be</span></div>
+      </div>
+    </div>
+    <div class="container footer">Generated by <a href="http://fontello.com">fontello.com</a></div>
+  </body>
+</html>
Index: /extensions/modus/css/fontello/font/modus.svg
===================================================================
--- /extensions/modus/css/fontello/font/modus.svg	(revision 25794)
+++ /extensions/modus/css/fontello/font/modus.svg	(revision 25794)
@@ -0,0 +1,37 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg xmlns="http://www.w3.org/2000/svg">
+<metadata>Copyright (C) 2013 by original authors @ fontello.com</metadata>
+<defs>
+<font id="modus" horiz-adv-x="1000" >
+<font-face font-family="modus" font-weight="400" font-stretch="normal" units-per-em="1000" ascent="850" descent="-150" />
+<missing-glyph horiz-adv-x="1000" />
+<glyph glyph-name="favorite-add" unicode="&#x2661;" d="m929 517q0 46-12 80t-31 55t-46 33t-52 18t-55 4t-62-14t-62-36t-48-40t-34-34q-10-13-27-13t-27 13q-14 15-34 34t-48 40t-62 36t-62 14t-55-4t-52-18t-46-33t-31-55t-12-80q0-93 105-198l324-312l324 312q105 105 105 198z m71 0q0-123-128-251l-347-335q-10-10-25-10t-25 10l-348 336q-5 5-15 15t-31 36t-38 55t-30 67t-13 77q0 123 71 192t196 70q34 0 70-12t67-33t54-38t42-38q20 20 42 38t54 38t67 33t70 12q125 0 196-70t71-192z" horiz-adv-x="1000" />
+<glyph glyph-name="home" unicode="&#x2302;" d="m464 797l447-446l-112 0l0-448l-669 0l0 448l-112 0z m224-781l0 401l-224 157l-223-157l0-401l168 0l0 168l112 0l0-168l167 0z" horiz-adv-x="928" />
+<glyph glyph-name="category-view-flat" unicode="&#x268f;" d="m286 154v-108q0-22-16-37t-38-16h-178q-23 0-38 16t-16 37v108q0 22 16 38t38 15h178q22 0 38-15t16-38z m0 285v-107q0-22-16-38t-38-15h-178q-23 0-38 15t-16 38v107q0 23 16 38t38 16h178q22 0 38-16t16-38z m357-285v-108q0-22-16-37t-38-16h-178q-23 0-38 16t-16 37v108q0 22 16 38t38 15h178q23 0 38-15t16-38z m-357 571v-107q0-22-16-38t-38-16h-178q-23 0-38 16t-16 38v107q0 22 16 38t38 16h178q22 0 38-16t16-38z m357-286v-107q0-22-16-38t-38-15h-178q-23 0-38 15t-16 38v107q0 23 16 38t38 16h178q23 0 38-16t16-38z m357-285v-108q0-22-16-37t-38-16h-178q-22 0-38 16t-16 37v108q0 22 16 38t38 15h178q23 0 38-15t16-38z m-357 571v-107q0-22-16-38t-38-16h-178q-23 0-38 16t-16 38v107q0 22 16 38t38 16h178q23 0 38-16t16-38z m357-286v-107q0-22-16-38t-38-15h-178q-22 0-38 15t-16 38v107q0 23 16 38t38 16h178q23 0 38-16t16-38z m0 286v-107q0-22-16-38t-38-16h-178q-22 0-38 16t-16 38v107q0 22 16 38t38 16h178q23 0 38-16t16-38z" horiz-adv-x="1000" />
+<glyph glyph-name="category-edit" unicode="&#x1f527;" d="m214 29q0 14-10 25t-25 10t-26-10t-10-25t10-26t26-10t25 10t10 26z m360 234l-381-381q-21-20-50-20q-29 0-51 20l-59 61q-21 20-21 50q0 29 21 51l380 380q22-55 64-97t97-64z m353 243q0-22-12-59q-27-75-92-122t-144-46q-104 0-177 73t-73 177t73 176t177 74q32 0 67-10t60-26q9-6 9-15t-9-16l-163-94v-125l108-60q2 2 44 27t75 45t40 20q8 0 13-5t4-14z" horiz-adv-x="928.6" />
+<glyph glyph-name="camera-calendar" unicode="&#xf133;" d="m71-79h786v572h-786v-572z m215 679v161q0 8-5 13t-13 5h-36q-8 0-13-5t-5-13v-161q0-8 5-13t13-5h36q8 0 13 5t5 13z m428 0v161q0 8-5 13t-13 5h-35q-8 0-13-5t-5-13v-161q0-8 5-13t13-5h35q8 0 13 5t5 13z m215 36v-715q0-29-22-50t-50-21h-786q-29 0-50 21t-21 50v715q0 29 21 50t50 21h72v54q0 36 26 63t63 26h36q37 0 63-26t26-63v-54h214v54q0 36 27 63t63 26h35q37 0 63-26t27-63v-54h71q29 0 50-21t22-50z" horiz-adv-x="928.6" />
+<glyph glyph-name="arrow-w" unicode="&#x2190;" d="m857 350v-71q0-30-18-51t-47-21h-393l164-164q21-20 21-50t-21-50l-42-43q-21-20-51-20q-29 0-50 20l-364 364q-20 21-20 50q0 29 20 51l364 363q21 21 50 21q29 0 51-21l42-42q21-21 21-50t-21-51l-164-164h393q29 0 47-20t18-51z" horiz-adv-x="857.1" />
+<glyph glyph-name="arrow-e" unicode="&#x2192;" d="m821 314q0-30-20-50l-363-364q-22-20-51-20q-29 0-50 20l-42 42q-22 21-22 51t22 51l163 163h-393q-29 0-47 21t-18 51v71q0 30 18 51t47 20h393l-163 164q-22 21-22 51t22 50l42 42q21 21 50 21q29 0 51-21l363-363q20-20 20-51z" horiz-adv-x="857.1" />
+<glyph glyph-name="arrow-n" unicode="&#x2191;" d="m899 308q0-28-21-50l-42-42q-21-21-50-21q-30 0-51 21l-164 164v-393q0-29-20-47t-51-19h-71q-30 0-51 19t-21 47v393l-164-164q-20-21-50-21t-50 21l-42 42q-21 21-21 50q0 30 21 51l363 363q20 21 50 21q30 0 51-21l363-363q21-22 21-51z" horiz-adv-x="928.6" />
+<glyph glyph-name="play" unicode="&#x25b6;" d="m772 333l-741-412q-13-7-22-2t-9 20v822q0 14 9 20t22-2l741-412q13-7 13-17t-13-17z" horiz-adv-x="785.7" />
+<glyph glyph-name="pause" unicode="&#xe800;" d="m857 743v-786q0-14-10-25t-26-11h-285q-15 0-25 11t-11 25v786q0 14 11 25t25 11h285q15 0 26-11t10-25z m-500 0v-786q0-14-10-25t-26-11h-285q-15 0-25 11t-11 25v786q0 14 11 25t25 11h285q15 0 26-11t10-25z" horiz-adv-x="857.1" />
+<glyph glyph-name="representative" unicode="&#x1f3c9;" d="m256 357q-42 91-42 207h-143v-53q0-44 53-91t132-63z m601 154v53h-143q0-116-41-207q79 16 131 63t53 91z m72 71v-71q0-40-24-80t-62-73t-97-54t-120-25q-23-30-53-53q-21-19-29-40t-8-50q0-30 17-51t54-21q42 0 75-25t32-64v-36q0-8-5-13t-13-5h-464q-8 0-13 5t-5 13v36q0 39 33 64t74 25q38 0 55 21t17 51q0 28-8 50t-30 40q-29 23-53 53q-63 3-120 25t-96 54t-63 73t-23 80v71q0 22 16 38t38 16h160v53q0 37 27 63t63 27h321q37 0 63-27t26-63v-53h161q22 0 38-16t16-38z" horiz-adv-x="928.6" />
+<glyph glyph-name="map" unicode="&#x1f30e;" d="m429 779q116 0 215-58t156-156t57-215t-57-215t-156-156t-215-58t-216 58t-155 156t-58 215t58 215t155 156t216 58z m152-291q-1-1-5-5t-7-6q1 0 2 3t3 6t2 4q3 4 12 8q8 4 29 7q19 5 29-6q-1 1 5 7t8 7q2 1 8 2t9 5l1 12q-7-1-10 4t-3 12q0-2-4-5q0 4-2 5t-7-1t-5-1q-5 2-8 5t-5 9t-2 8q-1 3-5 6t-5 6q-1 1-2 3t-2 4t-2 3t-3 1t-4-3t-4-5t-2-3q-2 1-4 1t-2-1t-3-2t-3-2q-1-1-4-1t-5-1q8 3-1 6q-5 2-9 1q5 3 5 7t-5 8h3q-1 2-5 5t-10 4t-7 4q-5 3-19 5t-18 0q-3-3-3-5t2-8t2-7q1-4-3-7t-3-7q0-4 7-9t6-12q-2-4-9-9t-9-6q-3-5-1-11t6-9q1-1 1-2t-2-3t-3-2t-4-2l-1-1q-7-3-12 3t-7 15q-4 14-9 17q-13 4-17-1q-2 7-22 15q-14 5-33 2q4 0 0 8q-4 9-10 7q1 3 2 10t0 7q2 7 7 13q1 1 4 5t5 7t1 4q19-3 28 6q2 2 6 9t6 10q5 3 8 3t8-3t8-3q8-1 8 6t-4 11q7 0 2 10q-3 4-5 5q-6 2-15-3q-4-2 2-4q-1 0-6-6t-9-10t-9 3q0 0-3 7t-5 8q-5 0-9-9q1 5-6 9t-14 4q11 7-4 15q-4 3-12 3t-11-2q-2-4-3-7t3-4t6-3t6-2t5-2q8-6 5-8q-1 0-5-2t-6-2t-4-3q-2-2 0-7t-1-8q-3 3-5 10t-4 9q4-5-14-4l-5 1q-3 0-9-1t-12-1t-7 5q-3 4 0 11q0 2 2 1q-2 2-6 5t-6 5q-25-8-52-23q3 0 6 1q3 1 8 3t5 4q19 7 24 3l3 3q7-9 11-14q-4 3-17 1q-11-4-12-7q4-7 2-10q-2 2-6 6t-8 6t-8 3q-9 0-13-1q-81-45-131-124q4-4 7-4q2-1 3-5t1-6t6 1q5-4 2-10q1 0 25-15q10-10 11-12q2-6-5-10q-1 1-5 5t-5 2q-2-3 0-10t6-7q-4 0-5-9t-2-20t0-13l1-1q-2-6 3-19t12-11q-7-1 11-24q3-4 4-5q2-1 7-4t9-6t5-5q2-3 6-13t8-13q-2-3 5-11t6-13q-1 0-2-1t-1 0q2-4 9-8t8-7q1-2 1-6t2-6t4-1q2 11-13 34q-8 14-9 17q-2 2-4 8t-2 8q1 0 3 0t5-2t4-3t1-1q-1-4 1-10t7-10t10-11t6-7q4-4 8-11t0-8q5 0 11-5t10-11q3-5 4-15t3-13q1-4 5-8t7-5l9-5t7-3q3-2 10-6t12-7q6-2 9-2t8 1t8 2q8 1 16-8t12-12q20-10 30-6q-1 0 1-4t4-9t5-8t3-5q3-3 10-8t10-8q4 2 4 5q-1-5 4-11t10-6q8 2 8 18q-17-9-27 10q0 0-2 3t-2 5t-1 4t0 5t2 1q5 0 6 2t-1 7t-2 8q-1 4-6 11t-7 8q-3-5-9-4t-9 5q0-1-1-3t-1-4q-7 0-8 0q1 2 1 10t2 13q1 2 3 6t5 9t2 7t-3 5t-9 1q-11 0-15-11q-1-2-2-6t-2-6t-5-4q-4-2-14-1t-13 3q-8 4-13 16t-5 20q0 6 1 15t2 14t-3 14q2 1 5 5t5 6q2 1 3 1t2 0t3 1t1 3q0 1-2 2q-2 1-2 1q4-1 16 1t15-1q9-6 12 1q0 1-1 6t0 7q3-15 16-5q2-1 9-3t9-2q2-1 4-3t3-3t3 0t5 4q5-8 7-13q6-23 10-25q4-2 6-1t3 5t0 8t-1 7l-1 4v11l0 4q-8 2-10 7t0 10t9 10q0 1 4 2t9 4t7 4q12 11 8 20q4 0 6 5q0 0-2 2t-5 2t-2 2q5 2 1 8q3 2 4 7t4 5q5-7 12-1q4 5 1 9q2 4 11 6t10 5q4-1 5 1t0 7t2 7q2 2 8 5t8 2l9 7q2 2 0 2q10-1 18 6q5 6-4 11q2 3-2 5t-8 3q2 1 7 1t5 1q9 5-4 9q-9 2-24-7z m-90-490q114 21 195 106q-1 2-7 2t-7 2q-10 4-13 5q1 4-1 7t-5 5t-7 5t-6 4q-1 1-4 3t-4 3t-4 2t-5 2t-5-1l-2-1q-2 0-3-1t-3-2t-2-1t0-2q-12 10-20 13q-3 0-7 3t-5 4t-6 0t-6-4q-3-2-4-8t-1-7q-4 3 0 10t1 10q-1 3-6 2t-6-2t-7-5t-5-3t-4-3t-5-5q-2-2-4-6t-2-7q-1 3-7 4t-5 3q1-5 2-19t3-22q4-17-7-26q-15-14-16-23q-2-12 7-14q0-4-5-12t-4-12q0-3 2-9z" horiz-adv-x="857.1" />
+<glyph glyph-name="ellipsis" unicode="&#x2026;" d="m214 439v-107q0-22-15-38t-38-15h-107q-23 0-38 15t-16 38v107q0 23 16 38t38 16h107q22 0 38-16t15-38z m286 0v-107q0-22-16-38t-38-15h-107q-22 0-38 15t-15 38v107q0 23 15 38t38 16h107q23 0 38-16t16-38z m286 0v-107q0-22-16-38t-38-15h-107q-22 0-38 15t-16 38v107q0 23 16 38t38 16h107q22 0 38-16t16-38z" horiz-adv-x="785.7" />
+<glyph glyph-name="camera-info" unicode="&#xe70f;" d="m518 386q0 8-5 13t-13 5q-37 0-63-27t-26-63q0-8 5-13t13-5t12 5t5 13q0 23 16 38t38 16q8 0 13 5t5 13z m125-73q0-59-42-101t-101-42t-101 42t-42 101t42 101t101 42t101-42t42-101z m-572-320h858v71h-858v-71z m643 320q0 89-62 152t-152 62t-151-62t-63-152t63-151t151-63t152 63t62 151z m-571 358h214v72h-214v-72z m-72-107h858v143h-462l-36-71h-360v-72z m929 143v-714q0-30-21-51t-50-21h-858q-29 0-50 21t-21 51v714q0 30 21 51t50 21h858q29 0 50-21t21-51z" horiz-adv-x="1000" />
+<glyph glyph-name="sort" unicode="&#xf15d;" d="m665 622h98l-40 122l-6 26q-2 9-2 11h-2l-2-11q0 0-1-10t-5-16z m-254-576q0-6-6-13l-178-178q-5-5-13-5q-6 0-13 5l-178 179q-8 9-4 19q4 11 17 11h107v768q0 8 5 13t13 5h107q8 0 13-5t5-13v-768h107q8 0 13-5t5-13z m466-66v-130h-326v50l206 295q7 10 12 16l6 5v1q-1 0-4 0t-4 0q-6-2-16-2h-130v-64h-67v128h317v-50l-206-296q-4-4-12-14l-6-7v-1l8 1q5 2 16 2h139v66h67z m50 501v-60h-161v60h42l-26 80h-136l-26-80h42v-60h-160v60h39l128 369h90l129-369h39z" horiz-adv-x="928.6" />
+<glyph glyph-name="category-view-normal" unicode="&#xf0e8;" d="m1000 154v-179q0-22-16-38t-38-16h-178q-22 0-38 16t-16 38v179q0 22 16 38t38 15h53v107h-285v-107h53q23 0 38-15t16-38v-179q0-22-16-38t-38-16h-178q-23 0-38 16t-16 38v179q0 22 16 38t38 15h53v107h-285v-107h53q22 0 38-15t16-38v-179q0-22-16-38t-38-16h-178q-23 0-38 16t-16 38v179q0 22 16 38t38 15h53v107q0 29 21 51t51 21h285v107h-53q-23 0-38 15t-16 38v179q0 22 16 38t38 16h178q23 0 38-16t16-38v-179q0-22-16-38t-38-15h-53v-107h285q29 0 51-21t21-51v-107h53q23 0 38-15t16-38z" horiz-adv-x="1000" />
+<glyph glyph-name="minus" unicode="&#xe801;" d="m550 400q30 0 30-50t-30-50l-520 0q-30 0-30 50t30 50l520 0z" horiz-adv-x="580" />
+<glyph glyph-name="help" unicode="&#x2753;" d="m494 740q86-62 86-184q0-64-42-124q-12-20-88-80l-46-30q-40-34-48-60q-6-16-8-44q0-14-16-14l-128 0q-16 0-16 12q4 98 28 124q16 22 48 48t56 42l24 14q22 16 34 34q28 44 28 70q0 40-26 78q-28 36-92 36q-68 0-94-44q-28-42-28-92l-166 0q6 162 114 232q70 42 166 42q130 0 214-60z m-216-636q44 0 73-30t27-74q-2-46-32-73t-74-25q-44 0-73 29t-27 75t32 73t74 25z" horiz-adv-x="580" />
+<glyph glyph-name="edit" unicode="&#x270e;" d="m938 605q22-22 22-55t-22-55l-570-570q-22-21-60-38t-73-17l-235 0l0 234q0 35 17 74t38 60l570 570q23 22 55 22t55-22z m-794-426l65-64l431 433l-64 63z m91-205q14 0 33 8q-10 10-27 26t-50 50t-56 56l-22 22q-9-21-9-32l0-78l52-52l79 0z m74 40l432 432l-63 64l-433-431z m469 469l67 67l-165 165l-67-66z" horiz-adv-x="960" />
+<glyph glyph-name="menu" unicode="&#xe0fe;" d="m834 90q42 0 73-30t31-75q0-42-30-73t-74-31l-730 0q-44 0-74 31t-30 73q0 44 31 75t73 30l730 0z m0 364q44 0 74-31t30-73t-30-73t-74-30l-730 0q-44 0-74 30t-30 73t30 73t74 31l730 0z m0 365q44 0 74-31t30-73q0-43-31-74t-73-31l-730 0q-43 0-73 31t-31 74q0 43 30 73t74 31l730 0z" horiz-adv-x="938" />
+<glyph glyph-name="caddie-add" unicode="&#xe0d2;" d="m950 715q23 0 39-18t14-42l-53-365q-2-18-17-31t-34-12l-590 0l9-53l528 0q22 0 37-16t16-36t-16-37t-37-15l-572 0q-20 0-35 13t-16 30l-98 582l-72 0q-22 0-37 15t-16 37t16 36t37 16l116 0q19 0 34-12t17-32l11-60l719 0z m-60-105l-200 0l0-103l185 0z m-252 0l-157 0l0-103l157 0l0 103z m0-156l-157 0l0-104l157 0l0 104z m-208 156l-182 0l18-105q3 2 8 2l156 0l0 103z m-156-156l17-104l139 0l0 104l-156 0z m416-104l164 0l14 104l-178 0l0-104z m-416-390q0 78 77 78q79 0 79-78q0-78-79-78q-77 0-77 78z m469 0q0 78 77 78q79 0 79-78q0-78-79-78q-77 0-77 78z" horiz-adv-x="1003" />
+<glyph glyph-name="sizes" unicode="&#xe012;" d="m573 767l261 0l0-260q0-22-16-37t-37-16t-37 16t-15 37l0 82l-171-171q-15-15-37-15q-22 0-37 15t-15 37t15 37l171 171l-82 0q-22 0-37 15t-15 37t15 37t37 15z m-297-484q15 15 37 15t36-15t15-37t-15-37l-171-171l82 0q21 0 37-16t16-37t-16-36t-37-15l-260 0l0 260q0 21 16 37t37 16t36-16t15-37l0-82z m-120 67q-21 0-37 16t-15 37l0 260l261 0q21 0 36-16t15-37t-15-36t-36-15l-156 0l0-156q0-21-16-37t-37-16z m522 0q21 0 36-15t15-37l0-260l-260 0q-21 0-37 15t-16 37t16 37t37 15l156 0l0 156q0 21 16 37t37 15z" horiz-adv-x="834" />
+<glyph glyph-name="globe" unicode="&#xe079;" d="m346 663q-86 0-147-61t-60-148t60-147t147-60t148 60t61 147t-61 148t-148 61z m0 104q129 0 221-92t92-221t-92-220t-221-92t-220 92t-92 220t92 221t220 92z m313-833q21 0 37-15t15-37t-15-37t-37-16l-520 0q-21 0-37 16t-16 37t16 37t37 15l207 0l0 51q-193 0-331 138q-15 15-15 37t15 37t37 15t37-15q106-106 257-106q153 0 259 106t106 257q0 153-106 259l-37 36l107 107q15 15 37 15t37-15t14-37t-15-37l-35-35q102-128 102-293q0-193-137-331q-97-96-227-125l0-64l208 0z" horiz-adv-x="815" />
+<glyph glyph-name="cloud" unicode="&#xe11f;" d="m781-15l-572 0q-86 0-148 61t-61 148q0 72 44 128t112 73l0 8q0 130 92 221t221 91q100 0 180-58t114-152q115 9 196-68t82-191q0-107-76-184t-184-77z m-577 314q-40 0-70-31t-30-74t30-73t75-31l572 0q65 0 111 46t46 110t-46 111t-111 46q-18 0-42-8l-56-16l-9 57q-14 75-71 125t-134 49q-86 0-148-61t-61-146q0-15 5-43l13-62z" horiz-adv-x="1041" />
+<glyph glyph-name="letters" unicode="&#xe0eb;" d="m516 165q12-25-2-50t-44-25q-33 0-47 29l-37 75l-249 0l-37-75q-9-20-30-27t-40 3q-20 9-27 29t3 41l209 417q13 27 47 27t46-27z m-326 134l143 0l-72 143z m905-209l-313 0q-30 0-45 27t4 57l250 332l-209 0q-21 0-37 16t-15 37t15 36t37 16l313 0q30 0 45-28t-4-56l-250-333l209 0q21 0 37-15t15-37t-15-37t-37-15z m-417 209l-105 0q-21 0-36 15t-15 36t15 37t36 15l105 0q22 0 37-15t15-37t-15-36t-37-15z" horiz-adv-x="1147" />
+<glyph glyph-name="save" unicode="&#x1f4be;" d="m214-7h429v214h-429v-214z m500 0h72v500q0 8-6 21t-11 20l-157 156q-5 6-19 12t-22 5v-232q0-22-15-38t-38-16h-322q-22 0-37 16t-16 38v232h-72v-714h72v232q0 22 16 38t37 16h465q22 0 38-16t15-38v-232z m-214 518v178q0 8-5 13t-13 5h-107q-7 0-13-5t-5-13v-178q0-8 5-13t13-5h107q7 0 13 5t5 13z m357-18v-518q0-22-15-38t-38-16h-750q-23 0-38 16t-16 38v750q0 22 16 38t38 16h517q23 0 50-12t42-26l156-157q16-15 27-42t11-49z" horiz-adv-x="857.1" />
+</font>
+</defs>
+</svg>
Index: /extensions/modus/css/iconfontello.css
===================================================================
--- /extensions/modus/css/iconfontello.css	(revision 25794)
+++ /extensions/modus/css/iconfontello.css	(revision 25794)
@@ -0,0 +1,35 @@
+@import "fontello/css/fontello.css";
+
+A:hover .pwg-icon:before{
+	text-decoration: none !important; /* IE 8,9*/
+}
+
+.pwg-icon {
+	font-size: 22px;
+}
+
+A .pwg-icon {
+	color: #aaa;
+}
+A:hover .pwg-icon {
+	color: #fff;
+}
+
+.pwg-button-text{
+	display:none;
+}
+
+.pwg-state-disabled .pwg-icon {
+	opacity: .5;
+	-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)";
+	filter: alpha(opacity=50);
+}
+
+.pwg-button {
+	display: inline-block;
+	vertical-align: top;
+  cursor:pointer;
+}
+
+.pwg-icon-slideshow:before { content: '\25b6';}
+.pwg-icon-favorite-del:before { content: '\2661\2d'; letter-spacing: -2px}
Index: /extensions/modus/css/iconfontello.css.tpl
===================================================================
--- /extensions/modus/css/iconfontello.css.tpl	(revision 25794)
+++ /extensions/modus/css/iconfontello.css.tpl	(revision 25794)
@@ -0,0 +1,29 @@
+@import "fontello/css/modus.css";
+
+A:hover .pwg-icon:before{
+	text-decoration: none !important; /* IE 8,9*/
+}
+
+.pwg-icon {
+	font-size: 24px;
+}
+
+
+.pwg-button-text{
+	display:none;
+}
+
+.pwg-state-disabled .pwg-icon {
+	opacity: .5;
+	-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)";
+	filter: alpha(opacity=50);
+}
+
+.pwg-button {
+	display: inline-block;
+	vertical-align: top;
+  cursor:pointer;
+}
+
+.pwg-icon-slideshow:before { content: '\25b6';}
+.pwg-icon-favorite-del:before { content: '\2661\2d'; letter-spacing: -2px}
Index: /extensions/modus/css/iconset.css
===================================================================
--- /extensions/modus/css/iconset.css	(revision 25794)
+++ /extensions/modus/css/iconset.css	(revision 25794)
@@ -0,0 +1,77 @@
+.pwg-icon {
+	display: inline-block; /*IE6 does not get this correctly*/
+	text-indent: -9999px; overflow: hidden; background-repeat: no-repeat;
+	width: 26px; height: 26px; background-image: url(../../default/s26/outline_ffffff.png);
+	vertical-align: bottom;
+}
+
+A:hover .pwg-icon, .pwg-state-active .pwg-icon {
+	background-image: url(../../default/s26/outline_ffff80.png);
+}
+
+.pwg-button-text { display:none; }
+
+.pwg-state-disabled .pwg-icon {
+	opacity: .5;
+	-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)";
+	filter: alpha(opacity=50);
+}
+
+.pwg-button {
+	display: inline-block;
+	vertical-align: top;
+  cursor:pointer;
+}
+
+.pwg-icon-home {background-position: -26px 0}
+.pwg-icon-camera {background-position: -52px 0}
+.pwg-icon-save {background-position: -78px 0}
+.pwg-icon-cloud {background-position: -104px 0}
+.pwg-icon-letters {background-position: -130px 0}
+.pwg-icon-calendar {background-position: -156px 0}
+.pwg-icon-camera-calendar {background-position: -182px 0}
+
+.pwg-icon-arrow-n {background-position: 0 -26px}
+.pwg-icon-arrow-e {background-position: -26px -26px}
+/*.pwg-icon-arrow-s {background-position: -52px -26px}*/
+.pwg-icon-arrow-w {background-position: -78px -26px}
+/*.pwg-icon-arrowstop-n {background-position: -104px -26px}*/
+.pwg-icon-arrowstop-e {background-position: -130px -26px}
+/*.pwg-icon-arrowstop-s {background-position: -156px -26px}*/
+.pwg-icon-arrowstop-w {background-position: -182px -26px}
+
+.pwg-icon-close {background-position: 0 -52px}
+.pwg-icon-category-edit {background-position: -26px -52px}
+.pwg-icon-sort {background-position: -52px -52px}
+.pwg-icon-sizes {background-position: -78px -52px}
+.pwg-icon-menu {background-position: -130px -52px}
+.pwg-icon-category-view-normal {background-position: -156px -52px}
+.pwg-icon-category-view-flat {background-position: -182px -52px}
+
+.pwg-icon-caddie {background-position: 0 -78px}
+.pwg-icon-caddie-add {background-position: -26px -78px}
+.pwg-icon-caddie-del {background-position: -52px -78px}
+.pwg-icon-favorite {background-position: -78px -78px}
+.pwg-icon-favorite-add {background-position: -104px -78px}
+.pwg-icon-favorite-del {background-position: -130px -78px}
+.pwg-icon-filter {background-position: -156px -78px}
+.pwg-icon-filter-del {background-position: -182px -78px}
+
+.pwg-icon-camera-info {background-position: 0 -104px}
+.pwg-icon-representative {background-position: -26px -104px}
+.pwg-icon-edit {background-position: -52px -104px}
+.pwg-icon-register {background-position: -78px -104px}
+.pwg-icon-lost-password {background-position: -104px -104px}
+
+.pwg-icon-slideshow {background-position: 0 -130px}
+.pwg-icon-play {background-position: -26px -130px}
+.pwg-icon-pause {background-position: -52px -130px}
+.pwg-icon-stop {background-position: -78px -130px}
+.pwg-icon-clock-plus {background-position: -104px -130px}
+.pwg-icon-clock-minus {background-position: -130px -130px}
+.pwg-icon-repeat-play {background-position: -156px -130px}
+.pwg-icon-repeat-stop {background-position: -182px -130px}
+
+.pwg-icon-map {background-position: 0 -156px}
+.pwg-icon-globe {background-position: -26px -156px}
+
Index: /extensions/modus/css/index.css.tpl
===================================================================
--- /extensions/modus/css/index.css.tpl	(revision 25794)
+++ /extensions/modus/css/index.css.tpl	(revision 25794)
@@ -0,0 +1,221 @@
+/* Thumbnail "elastic" layout */
+.thumbnails {
+	margin: 1em 0;
+	padding: 0;
+	list-style: none;
+	text-align: center;	/* to center the whole collection in .content */
+}
+.thumbnails LI { display: inline }
+
+.thumbnails .wrap1 {
+	margin: 0 7px 5px 7px;
+	display: table-cell; display: inline-table;
+	display: inline-block;/* Why 3 display option ??? */
+	vertical-align: top;	/* OK with Opera and IE6 not Geko */
+	text-align: center;		/* to center the thumbnail and legend in Geko/Opera */
+}
+.thumbnails .wrap2 {
+	margin: 0;			/* important reset the margins */
+	display: table-cell;/* block prevents vertical-align here */
+	vertical-align: middle;/* Ok with Opera and Geko not IE6 */
+	border-radius: 4px;	/* round corners with CSS3 compliant browsers */
+	border: 1px solid gray;
+}
+
+.thumbnails .wrap2 A {
+	display: block;
+}
+.thumbnails IMG {
+	vertical-align: middle;
+}
+
+.thumbnails .thumbLegend {
+	overflow: hidden;/* oversized legend is clipped */
+	height: 4em;    /* legend height (don't set auto to be Gecko friendly)*/
+}
+
+
+
+/* Category thumbnails on main page, CSS code inspired from MOD subcatify */
+.thumbnailCategories {
+	margin: 0;
+	padding: 0;
+	list-style: none;
+	overflow: hidden;
+	width: 100%;
+}
+
+.thumbnailCategories LI {
+	margin: 0;
+	padding: 0;
+	float: left;
+	width: 49.7%;    /* 49.7% for 2 per line, 33.2% for 3 per line*/
+}
+
+.thumbnailCategory {
+	display:block;
+	padding: 2px 0 0 2px;
+	margin: 5px;
+	border: 1px solid gray;
+}
+
+.thumbnailCategory .description {
+	font-size: 90%;
+	overflow: auto;
+	/*width: inherit;*/
+}
+
+.thumbnailCategory .description H3 {
+	text-align: left;
+	margin: 0;
+	padding: 0.1em;
+	font-size: 120%;
+}
+
+.illustration { /*also used by comment lists*/
+	text-align: left;
+	margin: 2px 0 0 2px;
+	float: left;
+}
+
+.thumbnails .wrap2:hover,
+.thumbnailCategory:hover {
+	border-color: {$skin.A.color};	/* thumbnails border color when mouse cursor is over it */
+}
+
+
+
+/*Album thumbnails*/
+.albThumbs {
+	list-style: none;
+	padding: 0;
+	text-align: center;
+}
+
+.albThumbs LI {
+	display: inline-block;
+	position: relative;
+	overflow: hidden;
+	margin: 5px 5px;
+	width: {$MODUS_ALBUM_THUMB_SIZE}px;
+	height: {$MODUS_ALBUM_THUMB_SIZE}px;
+}
+
+.albImg {
+	display: block;
+	position: relative
+}
+
+.albLegend {
+	height: 4em;
+	width: 100%;
+	text-align: left;
+	position: absolute;
+	left: 0; /* for IE7, all others use 0 by default*/
+	bottom: -1px; /* -1 for IE8 which has some rounding issues */
+	overflow: hidden;
+	text-shadow: 1px 1px 3px rgba(0,0,0,0.8);
+	line-height: 1.4;
+	text-indent: 5px;
+
+{if !empty($skin.albumLegend.color)}
+	color: {$skin.albumLegend.color};
+{/if}
+
+	filter: progid:DXImageTransform.Microsoft.gradient(startColorStr=#08000000,endColorStr=#90000000); /* IE to 9*/
+	background-image: -moz-linear-gradient(top,rgba(0,0,0,0.01),rgba(0,0,0,0.5)); /* FF 3.16 to 15 */
+	background-image: -webkit-linear-gradient(top,rgba(0,0,0,0.01),rgba(0,0,0,0.5)); /* Chrome, Safari */
+	background-image: -ms-linear-gradient(top,rgba(0,0,0,0.01),rgba(0,0,0,0.5)); /* IE ? to 9 */
+	background-image: -o-linear-gradient(top,rgba(0,0,0,0.01),rgba(0,0,0,0.5)); /* Opera 11 to 12 */
+	background-image: linear-gradient(to bottom,rgba(0,0,0,0.01),rgba(0,0,0,0.5)); /* Standard must be last */
+}
+
+.albLegend H4 {
+	margin: 1em 0 2px;
+	overflow: hidden;
+}
+
+.albLegendRight {
+	float: right;
+	margin-right: 2px !important;
+}
+
+@media {cssResolution min=1.3}{
+	.albThumbs LI {
+		width:{($MODUS_ALBUM_THUMB_SIZE/1.5)|intval}px;height:{($MODUS_ALBUM_THUMB_SIZE/1.5)|intval}px
+	}
+
+	.albImg {
+		max-height: 100%;
+	}
+
+	.albLegend {
+		text-indent: 2px;
+		letter-spacing: -0.5px;
+		word-spacing:-1px
+	}
+}
+
+.albSymbol { /* used also in other contexts*/
+	font-size: 16px;
+	line-height: 20px;
+	cursor: pointer;
+}
+
+
+
+/* begin chronology/calendar elements*/
+.calendarViews {
+	float: right;
+	margin: 5px 5px 0 0;
+}
+
+.calItem {
+	font-weight: bold;
+	margin: 0 1px;
+	padding: 0 1px;
+	border: 1px solid gray;
+	text-decoration: none !important;
+}
+
+.calendarCalBar {
+	margin: 10px;
+}
+
+.calCalHead {
+	font-weight: bold;
+	font-size: 110%;
+	margin: 0 2px;
+}
+
+.calCal { margin: 0 2px; }
+
+/* nice looking month calendar*/
+TABLE.calMonth {
+	border: 0;
+	border-collapse: collapse;
+	margin-bottom: 10px;	/*<-IE ignores this */
+}
+
+TD.calDayCellFull, TD.calDayCellEmpty {
+	vertical-align: top;
+	font-weight: bold;
+	font-size: 18px;
+	border: 1px solid gray;
+}
+
+.calBackDate {
+	padding-left: 3px;
+	padding-top: 0;
+	z-index: 2;
+	position: absolute;
+	color: #000;
+}
+
+.calForeDate {
+	padding-left: 4px;
+	padding-top: 1px;
+	z-index: 3;
+	position: absolute;
+	color: #fff;
+}
Index: /extensions/modus/css/menuh.css.tpl
===================================================================
--- /extensions/modus/css/menuh.css.tpl	(revision 25794)
+++ /extensions/modus/css/menuh.css.tpl	(revision 25794)
@@ -0,0 +1,223 @@
+#menubar UL {
+	list-style: none;
+	padding: 0 0 0 2px;
+	margin: 0; /*various default user agent css*/
+}
+
+#menubar LI.selected>A {
+	font-weight: bold;
+}
+
+#menubar .menuInfoCatByChild {
+	font-size: 80%;
+	font-style: italic;
+}
+
+#menubar INPUT {
+	text-indent: 2px;
+	-moz-box-sizing: border-box;
+	box-sizing: border-box;
+}
+
+#quickconnect FIELDSET {
+	margin: 0 5px 0 0;
+	padding: 0 5px;
+}
+
+
+#menuTagCloud {
+	text-align: center;
+}
+
+#menuTagCloud A {
+	white-space: nowrap;
+	margin-right: 5px;
+}
+
+
+
+
+
+/* Horizontal menu */
+#menubar {
+	margin: 0;
+	width: 100%;
+	padding: 5px 0 8px;
+	background-color: {$skin.menubar.backgroundColor};
+{if !empty($skin.menubar.gradient)}
+	{$skin.menubar.gradient|cssGradient}
+{/if}
+{if !empty($skin.menubar.color)}
+	color: {$skin.menubar.color};
+{/if}
+}
+
+{if !empty($skin.menubar.link.color)}
+#menubar DT A {
+	color: {$skin.menubar.link.color};
+}
+{/if}
+
+{if !empty($skin.menubar.linkHover.color)}
+#menubar DT A:hover {
+	color: {$skin.menubar.linkHover.color};
+}
+{/if}
+
+#menubar DL {
+	display: inline;
+	float: left;
+	margin: 0 0.25em;
+	padding: 0 0.25em;
+}
+
+#menubar DT {
+	display: inline;
+	cursor: pointer;
+	font-size: 120%;
+	font-weight: bold;
+	text-align: center;
+}
+
+#menubar DD {
+	display: none;
+	position: absolute;
+	margin: 0;
+	padding: 10px;
+	line-height: 150%;
+	max-width: 300px;
+	box-shadow: 2px 2px 5px gray;
+	background-color: {$skin.dropdowns.backgroundColor};
+{if !empty($skin.menubar.color)}
+	color: {$skin.BODY.color};
+{/if}
+}
+
+#menubar DD A {
+		font-size: 14px;
+}
+
+
+#menubar DL:hover > DD {
+	display: block;
+	z-index: 5;
+}
+
+#content {
+	clear: both;
+}
+
+#qsearchInput {
+	width: 13%;
+	max-width: 180px;
+}
+
+
+
+
+#menuSwitcher {
+	display: none;
+}
+
+@media screen and (max-width:980px) {
+	#mbProfile {
+		display: none !important;
+	}
+	#mbTags {
+		display: none !important;
+	}
+}
+
+@media screen and (max-width:840px) {
+	#mbMostVisited {
+		display: none !important;
+	}
+}
+
+@media screen and (max-width:640px) {
+	#mbBestRated {
+		display: none !important;
+	}
+
+	#menuSwitcher {
+		display: block;
+		position: absolute;
+		padding-top: 2px;
+{if !empty($skin.pageTitle.link.color)}
+		color: {$skin.pageTitle.link.color};/*switcher is outside page title so not inherited*/
+{/if}
+	}
+
+{if !empty($skin.pageTitle.linkHover.color)}
+	#menuSwitcher:hover {
+		color: {$skin.pageTitle.linkHover.color};/*switcher is outside page title so not inherited*/
+	}
+{/if}
+
+	.titrePage H2,
+	.browsePath {
+		text-indent: 25px; /*make space for menu switcher*/
+		letter-spacing: -0.5px;
+	}
+
+	.titrePage H2:first-line,
+	.browsePath:first-line {
+		line-height: 28px; /*long bread crumbs go on second line and would run into menu switcher*/
+	}
+
+	#menubar {
+		display: none;
+		position: absolute;
+		width: auto;
+		box-shadow: 2px 2px 5px gray;
+		opacity: 0.95;
+		z-index: 5;
+		min-width: 40%;
+{if $skin.menubar.backgroundColor != $skin.dropdowns.backgroundColor}
+		background-color: {$skin.dropdowns.backgroundColor};
+{/if}
+{if !empty($skin.menubar.gradient)}
+		background-image: none;
+{/if}
+{if !empty($skin.menubar.color)}
+		color: inherit;
+{/if}
+	}
+
+{if !empty($skin.menubar.link.color)}
+	#menubar DT A {
+			color: {$skin.A.color}; /*update link color because background is dropdowns; don't care about hover as this is mobile probably...*/
+	}
+{/if}
+
+	#menubar DL {
+		display: block;
+		float: none;
+		margin-top: 4px;
+		margin-bottom: 4px;
+	}
+
+	#menubar DT {
+		display: block;
+		text-align: left;
+		font-size: 20px;
+		font-weight: normal;
+	}
+
+	#menubar DL:hover > DD { /*reset large wifth hover effect*/
+		display: none;
+	}
+	
+	#menubar DD {
+		position: static;
+		box-shadow: none; /*reset std*/
+		padding-top: 5px; /*reduce from standard*/
+	}
+
+	#qsearchInput {
+		width: 100%;
+		max-width: none;
+		margin: 5px 0;
+	}
+
+}
Index: /extensions/modus/css/picture.css.tpl
===================================================================
--- /extensions/modus/css/picture.css.tpl	(revision 25794)
+++ /extensions/modus/css/picture.css.tpl	(revision 25794)
@@ -0,0 +1,260 @@
+
+#imageToolBar .imageNumber {
+	float: right;
+	margin:-28px 9px 0 0;
+}
+
+#imageHeaderBar H2 {
+	display: inline;
+	text-align: center;
+	padding: 0;
+}
+
+#imageToolBar {
+	text-align: center;
+	margin-bottom: 2px;
+	padding-top: 2px;
+	height: 28px;
+{if !empty($skin.pictureBar.backgroundColor)}
+	background-color: {$skin.pictureBar.backgroundColor};
+{/if}
+}
+
+#imageToolBar .actionButtons {
+	float: left;
+}
+
+#imageToolBar .navigationButtons   {
+	float: right;
+}
+
+#imageToolBar .pwg-button {
+	width:42px;
+}
+
+#theImage {
+	text-align: center;
+}
+
+#imageInfos {
+	position: relative; /*for IE7 positioning of "who can see this photo"*/
+	min-height: 166px;
+}
+
+#linkPrev {
+	float: left;
+	margin: 5px 10px 0 5px;
+}
+
+#linkNext {
+	float: right;
+	margin: 5px 5px 0 10px;
+  text-align: right;
+}
+
+DIV.thumbHover { /* first & last holders only*/
+	width: {$SQUARE_WIDTH}px;
+	height: {$SQUARE_WIDTH}px;
+	border: 1px solid #ccc;
+  padding: 0 5px;
+	-moz-box-sizing: border-box;
+	box-sizing: border-box;
+}
+
+.imageInfoTable UL { /*this is the album list*/
+	margin: 0;
+	padding: 0 0 0 1em;
+	list-style-type: square;
+}
+
+.rateButton, .rateButtonSelected, .rateButtonStarFull, .rateButtonStarEmpty  {
+	padding:0;
+	border: 0 !important;
+{if !empty($skin.controls.boxShadow) || !empty($skin.buttons.boxShadow) || !empty($skin.buttonsHover.boxShadow)}
+	box-shadow: none !important;
+{/if}
+}
+
+.rateButton, .rateButtonStarFull, .rateButtonStarEmpty {
+	cursor: pointer;
+}
+
+.rateButtonSelected {
+	font-weight: bold;
+	font-size: 120%;
+}
+
+.rateButtonStarFull {
+	background: transparent url('../../default/icon/rating-stars.gif') no-repeat -16px center !important;
+	width:16px;
+}
+
+.rateButtonStarEmpty {
+	background: transparent url('../../default/icon/rating-stars.gif') no-repeat 0 center !important;
+	width:16px;
+}
+
+.imageInfoTable {
+	display:table;
+	margin: auto;
+	font-family: Tahoma,Verdana,Helvetica,Arial,sans-serif;
+}
+
+.imageInfo {
+	display: table-row;
+	line-height: 20px;
+}
+
+.imageInfo DT {
+	display:table-cell;
+	text-align:right;
+	font-weight:bold;
+	padding-right:0.5em;
+}
+
+.imageInfo DD {
+	display:table-cell;
+	text-align:left;
+	font-weight:normal;
+}
+
+
+
+
+
+@media screen {
+/*picture page wide screen*/
+.wide #theImage {
+	display: inline;
+	float: left;
+	width: 76.1%; /*min default picture derivative width*/
+}
+
+.wide #imageInfos {
+	margin-left: 76.5%; /*default picture derivative width + ~ 5px; must have enough space for thumbs*/
+	border-radius: 8px 0 0 8px;
+{if !empty($skin.pictureWideInfoTable.backgroundColor)}
+	background-color: {$skin.pictureWideInfoTable.backgroundColor};
+{/if}
+}
+
+.wide .navThumbs {
+	min-width: {2*$SQUARE_WIDTH+2}px;
+	width: 90%;
+	max-width: {2*$SQUARE_WIDTH+40}px;
+	height: {$SQUARE_WIDTH+4}px;
+	margin: auto;
+	padding-top: 10px;
+}
+
+.wide .navThumb {
+	width: {$SQUARE_WIDTH}px;
+	height: {$SQUARE_WIDTH}px;
+	margin: 0 !important;
+	overflow: hidden;
+	text-align: left;
+}
+
+.wide .thumbHover {
+	width: {$SQUARE_WIDTH}px;
+	height: {$SQUARE_WIDTH}px;
+	position: absolute;
+}
+
+
+.wide .prevThumbHover:hover { background: transparent url(../images/img_prev.png) no-repeat center center;}
+.wide .nextThumbHover:hover { background: transparent url(../images/img_next.png) no-repeat center center;}
+
+.wide .imageInfoTable {
+	display: block;
+	padding: 0 5px 0 10px;
+	margin: 0; /*need this for ie7 override in fix-ie7*/
+}
+
+.wide .imageInfo DT {
+	display: block;
+	text-align: left;
+	padding: 0;
+}
+
+.wide .imageInfo DD {
+	display: block;
+	text-align: left;
+	margin: 0 0 5px 10px;
+}
+
+{if !empty($skin.widePictureBar)}
+	.wide #imageToolBar {
+{if !empty($skin.widePictureBar.backgroundColor)}
+		background-color: {$skin.widePictureBar.backgroundColor};
+{/if}
+	}
+{/if}
+}
+
+@media screen and (max-width:800px),
+	screen and (-webkit-min-device-pixel-ratio:1.3) {
+	.navThumb IMG {
+		max-width: {($SQUARE_WIDTH/2)|intval}px;
+		height: auto;
+	}
+
+	.wide .navThumbs {
+		height: {18+($SQUARE_WIDTH/2)|intval}px;
+		min-width: {$SQUARE_WIDTH+6}px;
+		max-width: {$SQUARE_WIDTH+40}px;
+	}
+
+	.navThumb, .thumbHover { /* applies to wide&non wide including first & last*/
+		width: {($SQUARE_WIDTH/2)|intval}px !important;
+		height: {($SQUARE_WIDTH/2)|intval}px !important;
+		line-height: 1; /*for first & last*/
+	}
+
+}
+
+
+
+
+#imageActionsSwitch {
+	display: none;
+}
+@media screen and (max-width:600px) {
+	#imageActionsSwitch {
+		display: block;
+		text-align: left;
+		float: left;
+	}
+
+	.actionButtonsWrapper {
+		position: relative;
+	}
+
+	.actionButtonsWrapper .actionButtons {
+		display: none;
+		position: absolute;
+		z-index: 1;
+		min-width: 200px;
+		background-color: {$skin.dropdowns.backgroundColor};
+		padding-top: 10px;
+		box-shadow: 2px 2px 5px gray;
+		opacity: 0.95;
+	}
+
+	#imageToolBar .actionButtons .pwg-button {
+		display: block;
+		width: auto;
+		text-align: left;
+		height: 32px;
+		padding-left: 5px;
+		padding-right: 5px;
+	}
+
+	#imageToolBar .actionButtons .pwg-button-text {
+		display: inline;
+		margin-left: 5px;
+		text-transform: capitalize;
+	}
+}
+
+
Index: /extensions/modus/css/print.css
===================================================================
--- /extensions/modus/css/print.css	(revision 25794)
+++ /extensions/modus/css/print.css	(revision 25794)
@@ -0,0 +1,13 @@
+@media print {
+#menubar, .content .navigationBar, .categoryActions, .content .calendarViews,
+#imageToolBar, .navThumb, #commentAdd {
+	display: none;
+}
+
+BODY {
+	margin: 0;
+	color: #000;
+	background: #fff;
+}
+
+}
Index: /extensions/modus/css/tags.css
===================================================================
--- /extensions/modus/css/tags.css	(revision 25794)
+++ /extensions/modus/css/tags.css	(revision 25794)
@@ -0,0 +1,61 @@
+#fullTagCloud {
+	font-size: 120%;
+	text-align: justify;
+	padding: 0;
+	margin: 1em 5px;
+}
+
+#fullTagCloud SPAN {
+	white-space: nowrap;
+	margin: 0 2px;
+}
+
+
+.tagLevel5 { font-size: 150% !important; }
+.tagLevel4 { font-size: 140% !important; }
+.tagLevel3 { font-size: 120% !important; }
+.tagLevel2 { font-size: 100% !important; }
+.tagLevel1 { font-size: 90%  !important; }
+
+TR.tagLine {
+	border-bottom: 1px solid #ddd;
+}
+TD.nbEntries {
+	text-align: right;
+	font-style: italic;
+	font-size: 90%;
+}
+
+FIELDSET.tagLetter {
+	border: 1px solid #d3d3d3;
+	width: 200px;
+	margin: 0.5em;
+	padding: 10px;
+}
+
+LEGEND.tagLetterLegend {
+	border: 1px solid #d3d3d3;
+	font-size:120%;
+	font-weight: bold;
+	padding: 0 5px;
+	font-style: normal;
+}
+
+TABLE.tagLetterContent {
+	width:100%;
+	font-size:80%;
+	border-collapse : collapse;
+}
+
+
+.tag-actevt {color: #f88 }
+.tag-ani-0, .tag-ani-1, .tag-ani-2 { color: skyblue;}
+.tag-built-0, .tag-built-1 {color: #ccc }
+.tag-concept-0, .tag-concept-1 {color: #f11 }
+.tag-flora-0, .tag-flora-1 {color: #6f6 }
+.tag-nature-0,.tag-nature-1 {color: palegreen;}
+.tag-natph {color: #f7f }
+.tag-people {color: #0ff }
+.tag-place-0, .tag-place-1 { color: yellow;}
+.tag-priv { color: orange;}
+.tag-style {color: #8bf }
Index: /extensions/modus/fix-ie7.css
===================================================================
--- /extensions/modus/fix-ie7.css	(revision 25794)
+++ /extensions/modus/fix-ie7.css	(revision 25794)
@@ -0,0 +1,7 @@
+.albThumbs LI {
+	display: inline;
+}
+
+.albLegend H4 {
+	font-size: 13px;
+}
Index: /extensions/modus/functions.inc.php
===================================================================
--- /extensions/modus/functions.inc.php	(revision 25794)
+++ /extensions/modus/functions.inc.php	(revision 25794)
@@ -0,0 +1,27 @@
+<?php
+function modus_css_gradient($gradient) {
+	if (!empty($gradient))
+	{
+		$std = implode(',',$gradient);
+		$gs=trim($gradient[0],'#'); $ge=trim($gradient[1],'#');
+		return "filter: progid:DXImageTransform.Microsoft.gradient(startColorStr=#FF$gs,endColorStr=#FF$ge); /* IE to 9*/
+	background-image: -moz-linear-gradient(top,$std); /* FF 3.16 to 15 */
+	background-image: -webkit-linear-gradient(top,$std); /* Chrome, Safari */
+	background-image: -ms-linear-gradient(top,$std); /* IE ? to 9 */
+	background-image: -o-linear-gradient(top,$std); /* Opera 11 to 12 */
+	background-image: linear-gradient(to bottom,$std); /* Standard must be last */";
+	}
+}
+
+function modus_get_default_config()
+{
+  return array(
+	'skin' => 'dark',
+	'album_thumb_size' => 0,
+  'index_photo_deriv'=>'',
+  'index_photo_deriv_hdpi'=>'',
+  'resize_threshold' => 1,
+  'resize_factor' => 0,
+);
+}
+?>
Index: /extensions/modus/html5shiv.js
===================================================================
--- /extensions/modus/html5shiv.js	(revision 25794)
+++ /extensions/modus/html5shiv.js	(revision 25794)
@@ -0,0 +1,8 @@
+/*
+ HTML5 Shiv v3.6.2pre | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed
+*/
+(function(l,f){function m(){var a=e.elements;return"string"==typeof a?a.split(" "):a}function i(a){var b=n[a[o]];b||(b={},h++,a[o]=h,n[h]=b);return b}function p(a,b,c){b||(b=f);if(g)return b.createElement(a);c||(c=i(b));b=c.cache[a]?c.cache[a].cloneNode():r.test(a)?(c.cache[a]=c.createElem(a)).cloneNode():c.createElem(a);return b.canHaveChildren&&!s.test(a)?c.frag.appendChild(b):b}function t(a,b){if(!b.cache)b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag();
+a.createElement=function(c){return!e.shivMethods?b.createElem(c):p(c,a,b)};a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+m().join().replace(/\w+/g,function(a){b.createElem(a);b.frag.createElement(a);return'c("'+a+'")'})+");return n}")(e,b.frag)}function q(a){a||(a=f);var b=i(a);if(e.shivCSS&&!j&&!b.hasCSS){var c,d=a;c=d.createElement("p");d=d.getElementsByTagName("head")[0]||d.documentElement;c.innerHTML="x<style>article,aside,figcaption,figure,footer,header,hgroup,nav,section{display:block}mark{background:#FF0;color:#000}</style>";
+c=d.insertBefore(c.lastChild,d.firstChild);b.hasCSS=!!c}g||t(a,b);return a}var k=l.html5||{},s=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,r=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,j,o="_html5shiv",h=0,n={},g;(function(){try{var a=f.createElement("a");a.innerHTML="<xyz></xyz>";j="hidden"in a;var b;if(!(b=1==a.childNodes.length)){f.createElement("a");var c=f.createDocumentFragment();b="undefined"==typeof c.cloneNode||
+"undefined"==typeof c.createDocumentFragment||"undefined"==typeof c.createElement}g=b}catch(d){g=j=!0}})();var e={elements:k.elements||"abbr article aside audio bdi canvas data datalist details figcaption figure footer header hgroup mark meter nav output progress section summary time video",version:"3.6.2pre",shivCSS:!1!==k.shivCSS,supportsUnknownElements:g,shivMethods:!1!==k.shivMethods,type:"default",shivDocument:q,createElement:p,createDocumentFragment:function(a,b){a||(a=f);if(g)return a.createDocumentFragment();
+for(var b=b||i(a),c=b.frag.cloneNode(),d=0,e=m(),h=e.length;d<h;d++)c.createElement(e[d]);return c}};l.html5=e;q(f)})(this,document);
Index: /extensions/modus/images/index.php
===================================================================
--- /extensions/modus/images/index.php	(revision 25794)
+++ /extensions/modus/images/index.php	(revision 25794)
@@ -0,0 +1,30 @@
+<?php
+// +-----------------------------------------------------------------------+
+// | Piwigo - a PHP based photo gallery                                    |
+// +-----------------------------------------------------------------------+
+// | Copyright(C) 2008-2012 Piwigo Team                  http://piwigo.org |
+// | Copyright(C) 2003-2008 PhpWebGallery Team    http://phpwebgallery.net |
+// | Copyright(C) 2002-2003 Pierrick LE GALL   http://le-gall.net/pierrick |
+// +-----------------------------------------------------------------------+
+// | This program is free software; you can redistribute it and/or modify  |
+// | it under the terms of the GNU General Public License as published by  |
+// | the Free Software Foundation                                          |
+// |                                                                       |
+// | This program is distributed in the hope that it will be useful, but   |
+// | WITHOUT ANY WARRANTY; without even the implied warranty of            |
+// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU      |
+// | General Public License for more details.                              |
+// |                                                                       |
+// | You should have received a copy of the GNU General Public License     |
+// | along with this program; if not, write to the Free Software           |
+// | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
+// | USA.                                                                  |
+// +-----------------------------------------------------------------------+
+
+// Recursive call
+$url = '../';
+header( 'Request-URI: '.$url );
+header( 'Content-Location: '.$url );
+header( 'Location: '.$url );
+exit();
+?>
Index: /extensions/modus/index.php
===================================================================
--- /extensions/modus/index.php	(revision 25794)
+++ /extensions/modus/index.php	(revision 25794)
@@ -0,0 +1,30 @@
+<?php
+// +-----------------------------------------------------------------------+
+// | Piwigo - a PHP based photo gallery                                    |
+// +-----------------------------------------------------------------------+
+// | Copyright(C) 2008-2012 Piwigo Team                  http://piwigo.org |
+// | Copyright(C) 2003-2008 PhpWebGallery Team    http://phpwebgallery.net |
+// | Copyright(C) 2002-2003 Pierrick LE GALL   http://le-gall.net/pierrick |
+// +-----------------------------------------------------------------------+
+// | This program is free software; you can redistribute it and/or modify  |
+// | it under the terms of the GNU General Public License as published by  |
+// | the Free Software Foundation                                          |
+// |                                                                       |
+// | This program is distributed in the hope that it will be useful, but   |
+// | WITHOUT ANY WARRANTY; without even the implied warranty of            |
+// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU      |
+// | General Public License for more details.                              |
+// |                                                                       |
+// | You should have received a copy of the GNU General Public License     |
+// | along with this program; if not, write to the Free Software           |
+// | Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, |
+// | USA.                                                                  |
+// +-----------------------------------------------------------------------+
+
+// Recursive call
+$url = '../';
+header( 'Request-URI: '.$url );
+header( 'Content-Location: '.$url );
+header( 'Location: '.$url );
+exit();
+?>
Index: /extensions/modus/js/menuh.js
===================================================================
--- /extensions/modus/js/menuh.js	(revision 25794)
+++ /extensions/modus/js/menuh.js	(revision 25794)
@@ -0,0 +1,24 @@
+$("#menuSwitcher").click( function() {
+	var mb = $("#menubar");
+	if (mb.is(":visible")) {
+		mb.css("display", ""); // remove inline css in case browser resizes larger
+	}
+	else {
+		$(".categoryActions,.actionButtons,.switchBox").css("display", "");
+		mb.css("top", $(this).position().top + $(this).outerHeight(true))
+			.css("display", "block");
+	}
+});
+
+$("#menubar DT").click( function() {
+	var $this = $(this);
+	if ($this.css("display") != "block")
+		return; // menu is horizontal
+	var dd = $this.siblings("DD");
+	if (dd.length) {
+		if (dd.is(":visible"))
+			dd.css("display", ""); // remove inline css in case browser resizes larger
+		else
+			dd.css("display", "block");
+	}
+});
Index: /extensions/modus/js/modus.async.js
===================================================================
--- /extensions/modus/js/modus.async.js	(revision 25794)
+++ /extensions/modus/js/modus.async.js	(revision 25794)
@@ -0,0 +1,38 @@
+$("#albumActionsSwitcher").click( function() {
+	var box = $(".categoryActions");
+	if (box.is(":visible")) {
+		box.css("display", ""); // remove inline css in case browser resizes larger
+	}
+	else {
+		$("#menubar,.switchBox").css("display", "");
+		box.css("left", Math.min( $(this).position().left, $(window).width() - box.outerWidth(true) - 5))
+			.css("top", $(this).position().top + $(this).outerHeight(true))
+			.css("display", "block");
+	}
+});
+
+if ( !("ontouchstart" in document) )
+	$(".categoryActions").on("mouseleave", function() {
+		if ($("#albumActionsSwitcher").is(":visible"))
+			$(this).css("display", ""); // remove inline css in case browser resizes larger
+	});
+
+
+$("#imageActionsSwitch").click( function() {
+	var box = $(".actionButtons");
+	if (box.is(":visible")) {
+		box.css("display", ""); // remove inline css in case browser resizes larger
+	}
+	else {
+		$("#menubar,.switchBox").css("display", "");
+		box.css("left", Math.min( $(this).position().left, $(window).width() - box.outerWidth(true) - 5))
+			.css("top", $(this).position().top + $(this).outerHeight(true))
+			.css("display", "block");
+	}
+});
+
+if ( !("ontouchstart" in document) )
+	$(".actionButtons").on("mouseleave", function() {
+		if ($("#imageActionsSwitch").is(":visible"))
+			$(this).css("display", ""); // remove inline css in case browser resizes larger
+	});
Index: /extensions/modus/js/photo.autosize.js
===================================================================
--- /extensions/modus/js/photo.autosize.js	(revision 25794)
+++ /extensions/modus/js/photo.autosize.js	(revision 25794)
@@ -0,0 +1,136 @@
+function rvas_get_scaled_size(d, available) {
+	var ratio_w = d.w / available.w
+		, ratio_h = d.h / available.h;
+	if (ratio_w>1 || ratio_h>1) {
+		if (ratio_w>ratio_h)
+			return {w: available.w / available.dpr, h: Math.floor(d.h / ratio_w / available.dpr)};
+		else
+			return {w: Math.floor(d.w / ratio_h / available.dpr), h: available.h / available.dpr};
+	}
+	return {w: Math.round(d.w / available.dpr), h: Math.round(d.h / available.dpr)};
+}
+
+function rvas_get_available_size(){
+		var width = $("#theImage").width(),
+			zoom = 1,
+			docHeight;
+
+		if ("innerHeight" in window) {
+			docHeight = window.innerHeight;
+			if (document.documentElement.clientWidth > window.innerWidth && window.innerWidth)
+				zoom = document.documentElement.clientWidth / window.innerWidth;
+			docHeight = Math.floor(docHeight*zoom);
+		}
+		else
+			docHeight = document.documentElement.offsetHeight;
+		var height = docHeight - Math.ceil($("#theImage").offset().top);
+
+		var dpr = window.devicePixelRatio && window.devicePixelRatio>1 ? window.devicePixelRatio : 1;
+		width = Math.floor(width*dpr); height = Math.floor(height*dpr);
+
+		document.cookie= 'phavsz='+width+'x'+height+'x'+dpr+';path='+RVAS.cp;
+		return {w:width, h:height, dpr:dpr, zoom:zoom};
+}
+
+function rvas_choose(relaxed){
+	var best,
+		available = rvas_get_available_size(),
+		$img = $("#theMainImage"),
+		changed = true;
+	for (var i=0; i<RVAS.derivatives.length; i++){
+		var d = RVAS.derivatives[i];
+		if (d.w > available.w*available.zoom || d.h > available.h*available.zoom){
+			if (available.dpr>1 || !best)
+				best = d;
+			break;
+		}
+		else
+			best = d;
+	}
+	if (best) {
+		if (available.dpr > 1) {
+			var rescaled = rvas_get_scaled_size(best, available);
+			if ($img.attr("width") && available.zoom==1) {
+				var changeRatio = rescaled.h / $img.height()
+					, limit = relaxed ? 1.25 : 1.15;
+				if (changeRatio>=1 && changeRatio<limit
+					|| (changeRatio<1 && changeRatio>1/limit && $img.width()<available.w/available.dpr) )
+						return;
+			}
+			if (!$img.data("natural-w") || $img.data("natural-w") < best.w) {
+				$img.attr("width", rescaled.w).attr("height", rescaled.h)
+					.attr("src", best.url)
+					.removeAttr("usemap")
+					.data("natural-w", best.w);
+			}
+			else {
+				$img.attr("width", rescaled.w).attr("height", rescaled.h);
+				changed = false;
+			}
+		}
+		else {
+			if ($img.attr("width")) {
+				var changeRatio = best.h / $img.height()
+					, limit = relaxed ? 2 : 1.15;
+				if (changeRatio>=1 && changeRatio<limit
+					|| (changeRatio<1 && changeRatio>1/limit && $img.width()<available.w) )
+						return;
+			}
+			$img
+				.attr("width", best.w).attr("height", best.h)
+				.attr("src", best.url)
+				.attr("usemap", "#map"+best.type);
+		}
+		if (changed) {
+			$('#derivativeSwitchBox .switchCheck').css('visibility','hidden');
+			$('#derivativeChecked'+best.type).css('visibility','visible');
+		}
+	}
+}
+
+$(document).ready( function() {
+
+	if (window.changeImgSrc) {
+		RVAS.changeImgSrcOrig = changeImgSrc;
+		changeImgSrc = function() {
+			RVAS.disable = 1;
+			RVAS.changeImgSrcOrig.apply(undefined, arguments);
+		}
+	}
+
+	$(window).resize(function() {
+		var w = $("body").width(),
+			de = $(document.documentElement);
+		if (document.location.search.indexOf("slideshow")==-1) {
+			if (w<1262)
+				de.removeClass("wide");
+			else
+				de.addClass("wide");
+		}
+
+		if (RVAS.disable)
+			rvas_get_available_size();
+		else
+			rvas_choose();
+	});
+
+	$("#theMainImage").click( function(e) {
+		if (!$(this).attr("usemap") && e.clientY) {
+			var pct = (e.pageX - $(this).offset().left) / $(this).width()
+				, clientY = e.pageY - $(this).offset().top;
+			if (pct < 0.3) {
+				if ($("#linkPrev").length && clientY>15)
+					window.location = $("#linkPrev").attr("href");
+			}
+			else if (pct > 0.7 ) {
+				if ($("#linkNext").length && clientY>15)
+					window.location = $("#linkNext").attr("href");
+			}
+			else if (clientY/$(this).height() < 0.5 && clientY>15) {
+				var href = $(".pwg-icon-arrow-n").parent("a").attr("href");
+				if (href)
+					window.location = href;
+			}
+		}
+	});
+});
Index: /extensions/modus/js/photo.autosize.min.js
===================================================================
--- /extensions/modus/js/photo.autosize.min.js	(revision 25794)
+++ /extensions/modus/js/photo.autosize.min.js	(revision 25794)
@@ -0,0 +1,7 @@
+function rvas_get_scaled_size(b,a){var c=b.w/a.w,d=b.h/a.h;return 1<c||1<d?c>d?{w:a.w/a.dpr,h:Math.floor(b.h/c/a.dpr)}:{w:Math.floor(b.w/d/a.dpr),h:a.h/a.dpr}:{w:Math.round(b.w/a.dpr),h:Math.round(b.h/a.dpr)}}
+function rvas_get_available_size(){var b=$("#theImage").width(),a=1,c;"innerHeight"in window?(c=window.innerHeight,document.documentElement.clientWidth>window.innerWidth&&window.innerWidth&&(a=document.documentElement.clientWidth/window.innerWidth),c=Math.floor(c*a)):c=document.documentElement.offsetHeight;c-=Math.ceil($("#theImage").offset().top);var d=window.devicePixelRatio&&1<window.devicePixelRatio?window.devicePixelRatio:1,b=Math.floor(b*d);c=Math.floor(c*d);document.cookie="phavsz="+b+"x"+
+c+"x"+d+";path="+RVAS.cp;return{w:b,h:c,dpr:d,zoom:a}}
+function rvas_choose(b){for(var a,c=rvas_get_available_size(),d=$("#theMainImage"),g=!0,f=0;f<RVAS.derivatives.length;f++){var e=RVAS.derivatives[f];if(e.w>c.w*c.zoom||e.h>c.h*c.zoom){if(1<c.dpr||!a)a=e;break}else a=e}if(a){if(1<c.dpr){f=rvas_get_scaled_size(a,c);if(d.attr("width")&&1==c.zoom&&(e=f.h/d.height(),b=b?1.25:1.15,1<=e&&e<b||1>e&&e>1/b&&d.width()<c.w/c.dpr))return;!d.data("natural-w")||d.data("natural-w")<a.w?d.attr("width",f.w).attr("height",f.h).attr("src",a.url).removeAttr("usemap").data("natural-w",
+a.w):(d.attr("width",f.w).attr("height",f.h),g=!1)}else{if(d.attr("width")&&(e=a.h/d.height(),b=b?2:1.15,1<=e&&e<b||1>e&&e>1/b&&d.width()<c.w))return;d.attr("width",a.w).attr("height",a.h).attr("src",a.url).attr("usemap","#map"+a.type)}g&&($("#derivativeSwitchBox .switchCheck").css("visibility","hidden"),$("#derivativeChecked"+a.type).css("visibility","visible"))}}
+$(document).ready(function(){window.changeImgSrc&&(RVAS.changeImgSrcOrig=changeImgSrc,changeImgSrc=function(){RVAS.disable=1;RVAS.changeImgSrcOrig.apply(void 0,arguments)});$(window).resize(function(){var b=$("body").width(),a=$(document.documentElement);-1==document.location.search.indexOf("slideshow")&&(1262>b?a.removeClass("wide"):a.addClass("wide"));RVAS.disable?rvas_get_available_size():rvas_choose()});$("#theMainImage").click(function(b){if(!$(this).attr("usemap")&&b.clientY){var a=(b.pageX-
+$(this).offset().left)/$(this).width();b=b.pageY-$(this).offset().top;0.3>a?$("#linkPrev").length&&15<b&&(window.location=$("#linkPrev").attr("href")):0.7<a?$("#linkNext").length&&15<b&&(window.location=$("#linkNext").attr("href")):0.5>b/$(this).height()&&15<b&&(a=$(".pwg-icon-arrow-n").parent("a").attr("href"))&&(window.location=a)}})});
Index: /extensions/modus/js/thumb.arrange.js
===================================================================
--- /extensions/modus/js/thumb.arrange.js	(revision 25794)
+++ /extensions/modus/js/thumb.arrange.js	(revision 25794)
@@ -0,0 +1,172 @@
+
+function RVGTLine(margin, rowHeight) {
+	this.elements = new Array;
+	this.margin = margin;
+	this.rowHeight = rowHeight;
+	this.maxHeight = 0;
+}
+
+RVGTLine.prototype = {
+	width: 0,
+	elementsWidth: 0,
+	firstThumbIndex: 0,
+
+	add: function($elt, absIndex) {
+		if (this.elements.length === 0)
+			this.firstThumbIndex = absIndex;
+		if (!$elt.data("w"))
+		{
+			var w=$elt.width(), h=$elt.height();
+			if (h > this.rowHeight) {
+				w = Math.round(w * this.rowHeight/h);
+				h = this.rowHeight;
+			}
+			$elt.data("w", w)
+				.data("h", h);
+		}
+
+		var eltObj = {
+			$elt: $elt,
+			w: $elt.data("w"),
+			h: $elt.data("h")
+		};
+		this.elements.push(eltObj);
+
+		if (eltObj.h > this.maxHeight)
+			this.maxHeight = eltObj.h;
+
+		this.width += this.margin + eltObj.w;
+		this.elementsWidth += eltObj.w;
+	},
+
+	clear: function() {
+		if (!this.elements.length) return;
+		this.width = this.elementsWidth = 0;
+		this.maxHeight = 0;
+		this.elements.length = 0;
+	}
+}
+
+
+function RVGThumbs(options) {
+	this.opts = options;
+
+	this.$thumbs = $('#thumbnails');
+	if (this.$thumbs.length==0) return;
+	this.$thumbs.css('text-align', 'left');
+
+	this.opts.extraRowHeight = 0;
+	if (window.devicePixelRatio > 1) {
+		var dpr = window.devicePixelRatio;
+		this.opts.resizeThreshold = 1.01;
+		this.opts.resizeFactor = 0.95;
+		this.opts.extraRowHeight = 6; /*loose sharpness but only for small screens when we could "almost" fit with full sharpness*/
+		this.opts.rowHeight = Math.round(this.opts.rowHeight / dpr ) + this.opts.extraRowHeight;
+	}
+	this.process();
+
+	var that = this;
+	$(window).on('resize', function() {
+		if (Math.abs(that.$thumbs.width() - that.prevContainerWidth)>1)
+			that.process();
+	})
+		.on('RVTS_loaded', function(evt, down) {
+			that.process( down && that.$thumbs.width() == that.prevContainerWidth ? that.prevLastLineFirstThumbIndex : 0);
+		} );
+}
+
+RVGThumbs.prototype = {
+	prevContainerWidth:0,
+	prevLastLineFirstThumbIndex: 0,
+
+	process: function(startIndex) {
+		startIndex = startIndex ? startIndex : 0;
+		var containerWidth  = this.$thumbs.width()
+			, maxExtraMarginPerThumb = 1;
+		this.prevContainerWidth = containerWidth;
+
+		var $elts = $('li>a>img', this.$thumbs)
+			, line  = new RVGTLine(this.opts.hMargin, this.opts.rowHeight);
+
+		for (var i=startIndex; i<$elts.length; i++) {
+			var $elt = $( $elts[i] );
+
+			line.add($elt, i);
+			if (line.width >= containerWidth - maxExtraMarginPerThumb * line.elements.length) {
+				this.processLine(line, containerWidth);
+				line.clear();
+			}
+		};
+
+		if(line.elements.length)
+			this.processLine(line, containerWidth, true);
+		this.prevLastLineFirstThumbIndex = line.firstThumbIndex;
+	},
+
+	processLine: function(line, containerWidth, lastLine) {
+		var toRecover, eltW, eltH
+			, rowHeight = line.maxHeight ? line.maxHeight : line.elements[0].h;
+
+		if (line.width / containerWidth > this.opts.resizeThreshold) {
+			var ratio = line.elementsWidth / (line.elementsWidth + containerWidth - line.width);
+			var adjustedRowHeight = rowHeight / (1 + (ratio-1) * this.opts.resizeFactor );
+			adjustedRowHeight = 6 * Math.round( adjustedRowHeight/6 );
+			if (adjustedRowHeight < rowHeight / ratio ) {
+				adjustedRowHeight = Math.ceil( rowHeight / ratio );
+				var missing = this.opts.rowHeight - this.opts.extraRowHeight - adjustedRowHeight;
+				if (missing>0 && missing<6)
+					adjustedRowHeight += missing;
+			}
+			if (adjustedRowHeight < rowHeight)
+				rowHeight = adjustedRowHeight;
+		}
+		else if (lastLine)
+			rowHeight = Math.min( rowHeight, this.opts.rowHeight - this.opts.extraRowHeight);
+
+		toRecover = line.width - containerWidth;
+		if (lastLine)
+			toRecover = 0;
+
+		for(var i=0; i<line.elements.length; i++) {
+			var eltObj = line.elements[i]
+				, eltW=eltObj.w
+				, eltH=eltObj.h
+				, eltToRecover;
+
+			if (i==line.elements.length-1)
+				eltToRecover = toRecover;
+			else
+				eltToRecover = Math.round(toRecover * eltW / line.elementsWidth);
+
+			toRecover -= eltToRecover;
+			line.elementsWidth -= eltW;
+
+			if (eltH > rowHeight ) {
+				eltW = Math.round( eltW * rowHeight/eltObj.h );
+				eltH = rowHeight;
+				eltToRecover -= eltObj.w - eltW;
+				if (lastLine)
+					eltToRecover = 0;
+			}
+
+			this.reposition(eltObj.$elt, eltW, eltH, eltW-eltToRecover, rowHeight);
+		}
+	},
+
+	reposition: function($img, imgW, imgH, liW, liH) {
+		$img.attr("width", imgW)
+			.attr("height", imgH);
+
+		$img.closest("li").css( {
+			width: liW+"px",
+			height: liH+"px"
+		});
+
+		$img.parent("a").css( {
+			left: Math.round((liW-imgW)/2)+"px",
+			top: Math.round((liH-imgH)/2)+"px"
+		});
+	}
+
+}
+
Index: /extensions/modus/js/thumb.arrange.min.js
===================================================================
--- /extensions/modus/js/thumb.arrange.min.js	(revision 25794)
+++ /extensions/modus/js/thumb.arrange.min.js	(revision 25794)
@@ -0,0 +1,8 @@
+function RVGTLine(a,c){this.elements=[];this.margin=a;this.rowHeight=c;this.maxHeight=0}
+RVGTLine.prototype={width:0,elementsWidth:0,firstThumbIndex:0,add:function(a,c){0===this.elements.length&&(this.firstThumbIndex=c);if(!a.data("w")){var d=a.width(),b=a.height();b>this.rowHeight&&(d=Math.round(d*this.rowHeight/b),b=this.rowHeight);a.data("w",d).data("h",b)}d={$elt:a,w:a.data("w"),h:a.data("h")};this.elements.push(d);d.h>this.maxHeight&&(this.maxHeight=d.h);this.width+=this.margin+d.w;this.elementsWidth+=d.w},clear:function(){this.elements.length&&(this.maxHeight=this.width=this.elementsWidth=
+0,this.elements.length=0)}};
+function RVGThumbs(a){this.opts=a;this.$thumbs=$("#thumbnails");if(0!=this.$thumbs.length){this.$thumbs.css("text-align","left");this.opts.extraRowHeight=0;1<window.devicePixelRatio&&(a=window.devicePixelRatio,this.opts.resizeThreshold=1.01,this.opts.resizeFactor=0.95,this.opts.extraRowHeight=6,this.opts.rowHeight=Math.round(this.opts.rowHeight/a)+this.opts.extraRowHeight);this.process();var c=this;$(window).on("resize",function(){1<Math.abs(c.$thumbs.width()-c.prevContainerWidth)&&c.process()}).on("RVTS_loaded",
+function(a,b){c.process(b&&c.$thumbs.width()==c.prevContainerWidth?c.prevLastLineFirstThumbIndex:0)})}}
+RVGThumbs.prototype={prevContainerWidth:0,prevLastLineFirstThumbIndex:0,process:function(a){a=a?a:0;var c=this.$thumbs.width();this.prevContainerWidth=c;for(var d=$("li>a>img",this.$thumbs),b=new RVGTLine(this.opts.hMargin,this.opts.rowHeight);a<d.length;a++){var e=$(d[a]);b.add(e,a);b.width>=c-1*b.elements.length&&(this.processLine(b,c),b.clear())}b.elements.length&&this.processLine(b,c,!0);this.prevLastLineFirstThumbIndex=b.firstThumbIndex},processLine:function(a,c,d){var b,e,f=a.maxHeight?a.maxHeight:
+a.elements[0].h;a.width/c>this.opts.resizeThreshold?(e=a.elementsWidth/(a.elementsWidth+c-a.width),b=f/(1+(e-1)*this.opts.resizeFactor),b=6*Math.round(b/6),b<f/e&&(b=Math.ceil(f/e),e=this.opts.rowHeight-this.opts.extraRowHeight-b,0<e&&6>e&&(b+=e)),b<f&&(f=b)):d&&(f=Math.min(f,this.opts.rowHeight-this.opts.extraRowHeight));c=a.width-c;d&&(c=0);for(var k=0;k<a.elements.length;k++){var h=a.elements[k];b=h.w;e=h.h;var g;g=k==a.elements.length-1?c:Math.round(c*b/a.elementsWidth);c-=g;a.elementsWidth-=
+b;e>f&&(b=Math.round(b*f/h.h),e=f,g-=h.w-b,d&&(g=0));this.reposition(h.$elt,b,e,b-g,f)}},reposition:function(a,c,d,b,e){a.attr("width",c).attr("height",d);a.closest("li").css({width:b+"px",height:e+"px"});a.parent("a").css({left:Math.round((b-c)/2)+"px",top:Math.round((e-d)/2)+"px"})}};
Index: /extensions/modus/js/thumb.pop.js
===================================================================
--- /extensions/modus/js/thumb.pop.js	(revision 25794)
+++ /extensions/modus/js/thumb.pop.js	(revision 25794)
@@ -0,0 +1,186 @@
+if (window.jQuery) {
+/**
+* hoverIntent is similar to jQuery's built-in "hover" function except that
+* instead of firing the onMouseOver event immediately, hoverIntent checks
+* to see if the user's mouse has slowed down (beneath the sensitivity
+* threshold) before firing the onMouseOver event.
+* 
+* hoverIntent r6 // 2011.02.26 // jQuery 1.5.1+
+* <http://cherne.net/brian/resources/jquery.hoverIntent.html>
+* 
+* hoverIntent is currently available for use in all personal or commercial 
+* projects under both MIT and GPL licenses. This means that you can choose 
+* the license that best suits your project, and use it accordingly.
+* 
+* // basic usage (just like .hover) receives onMouseOver and onMouseOut functions
+* $("ul li").hoverIntent( showNav , hideNav );
+* 
+* // advanced usage receives configuration object only
+* $("ul li").hoverIntent({
+*	sensitivity: 7, // number = sensitivity threshold (must be 1 or higher)
+*	interval: 100,   // number = milliseconds of polling interval
+*	over: showNav,  // function = onMouseOver callback (required)
+*	timeout: 0,   // number = milliseconds delay before onMouseOut function call
+*	out: hideNav    // function = onMouseOut callback (required)
+* });
+* 
+* @param  f  onMouseOver function || An object with configuration options
+* @param  g  onMouseOut function  || Nothing (use configuration options object)
+* @author    Brian Cherne brian(at)cherne(dot)net
+*/
+(function($) {
+	$.fn.hoverIntent = function(f,g) {
+		// default configuration options
+		var cfg = {
+			sensitivity: 7,
+			interval: 100,
+			timeout: 0
+		};
+		// override configuration options with user supplied object
+		cfg = $.extend(cfg, g ? { over: f, out: g } : f );
+
+		// instantiate variables
+		// cX, cY = current X and Y position of mouse, updated by mousemove event
+		// pX, pY = previous X and Y position of mouse, set by mouseover and polling interval
+		var cX, cY, pX, pY;
+
+		// A private function for getting mouse position
+		var track = function(ev) {
+			cX = ev.pageX;
+			cY = ev.pageY;
+		};
+
+		// A private function for comparing current and previous mouse position
+		var compare = function(ev,ob) {
+			ob.hoverIntent_t = clearTimeout(ob.hoverIntent_t);
+			// compare mouse positions to see if they've crossed the threshold
+			if ( ( Math.abs(pX-cX) + Math.abs(pY-cY) ) < cfg.sensitivity ) {
+				$(ob).unbind("mousemove",track);
+				// set hoverIntent state to true (so mouseOut can be called)
+				ob.hoverIntent_s = 1;
+				return cfg.over.apply(ob,[ev]);
+			} else {
+				// set previous coordinates for next time
+				pX = cX; pY = cY;
+				// use self-calling timeout, guarantees intervals are spaced out properly (avoids JavaScript timer bugs)
+				ob.hoverIntent_t = setTimeout( function(){compare(ev, ob);} , cfg.interval );
+			}
+		};
+
+		// A private function for delaying the mouseOut function
+		var delay = function(ev,ob) {
+			ob.hoverIntent_t = clearTimeout(ob.hoverIntent_t);
+			ob.hoverIntent_s = 0;
+			return cfg.out.apply(ob,[ev]);
+		};
+
+		// A private function for handling mouse 'hovering'
+		var handleHover = function(e) {
+			// copy objects to be passed into t (required for event object to be passed in IE)
+			var ev = jQuery.extend({},e);
+			var ob = this;
+
+			// cancel hoverIntent timer if it exists
+			if (ob.hoverIntent_t) { ob.hoverIntent_t = clearTimeout(ob.hoverIntent_t); }
+
+			// if e.type == "mouseenter"
+			if (e.type == "mouseenter") {
+				// set "previous" X and Y position based on initial entry point
+				pX = ev.pageX; pY = ev.pageY;
+				// update "current" X and Y position based on mousemove
+				$(ob).bind("mousemove",track);
+				// start polling interval (self-calling timeout) to compare mouse coordinates over time
+				if (ob.hoverIntent_s != 1) { 
+					ob.hoverIntent_t = setTimeout( function(){compare(ev,ob);} , cfg.interval );}
+
+			// else e.type == "mouseleave"
+			} else {
+				// unbind expensive mousemove event
+				$(ob).unbind("mousemove",track);
+				// if hoverIntent state is true, then call the mouseOut function after the specified delay
+				if (ob.hoverIntent_s == 1) { ob.hoverIntent_t = setTimeout( function(){delay(ev,ob);} , cfg.timeout );}
+			}
+		};
+
+
+		// bind the function to the two event listeners
+		//radu return this.bind('mouseenter',handleHover).bind('mouseleave',handleHover);
+		return jQuery( this.context ).on( 'mouseenter mouseleave', this.selector, handleHover );
+	};
+})(jQuery);
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+jQuery("li>a>img", jQuery("#thumbnails")).hoverIntent({
+interval: 150, sensitivity: 3,
+over: function() {
+	var $src_img = $(this),
+		$pop = $("#pop")
+		,data = $src_img.data("pop");
+	if (!data) return;
+
+	data = $.extend( {
+		iw: $src_img.width(),
+		ih: $src_img.height(),
+		image: new Image
+		}, data);
+	data.image.src = data.url;
+	if (window.devicePixelRatio) {
+		data.w = Math.floor(data.w/window.devicePixelRatio);
+		data.h = Math.floor(data.h/window.devicePixelRatio);
+	}
+	
+	var finalLeft = $src_img.offset().left - (data.w-data.iw)/2,
+		remaining =  $(window).scrollLeft() + $(window).width() - (finalLeft+data.w) - 1 /*rounding*/;
+	if (remaining<0)
+		finalLeft+=remaining;
+	finalLeft = Math.max(finalLeft, $(window).scrollLeft() );
+		
+	var finalTop = $src_img.offset().top - (data.h-data.ih)/2,
+		remaining = $(window).scrollTop() + $(window).height() - (finalTop+data.h) - 60 /*bottom description*/;
+	if (remaining<0)
+		finalTop+=remaining;
+	finalTop = Math.max(finalTop, $(window).scrollTop() );
+
+	$pop.css( {
+		left:  $src_img.offset().left,
+		top:  $src_img.offset().top,
+		width: data.iw
+		})
+	.html('<div><a href="'+$src_img.parent('a').attr('href')+'"><img src="'+ $src_img.attr('src') + '" style="width:100%;height:'+data.ih+'px"></a></div>'
+		+'<div style="overflow:hidden;height:5em;background-color:#000">'+$('.popDesc', $src_img.closest('li')).html()+'</div>')
+	.show()
+	.animate( {
+		width: data.w+"px",
+		left: finalLeft,
+		top: finalTop
+		},{
+		duration: 100,
+		complete: function() {
+				$pop.one("mouseleave", function() {$pop.hide()} );
+			},
+		step: function(tw,fx) {
+			if (fx.prop !== "width") return;
+			var th = tw * data.h / data.w;
+			$("img", $pop).first().css("height", th);
+			if (tw==data.iw)
+				$("img", $pop).first().attr("src", data.url);
+		}
+	})
+},
+out: $.noop
+});
+
+} //if (window.jQuery)
Index: /extensions/modus/language/de_DE/theme.lang.php
===================================================================
--- /extensions/modus/language/de_DE/theme.lang.php	(revision 25794)
+++ /extensions/modus/language/de_DE/theme.lang.php	(revision 25794)
@@ -0,0 +1,7 @@
+<?php
+
+$lang['modus_theme'] = 'modus_theme';
+$lang['Explore'] = 'Entdecken';
+$lang['%d album'] = '%d Album';
+$lang['%d albums'] = '%d Alben';
+?>
Index: /extensions/modus/language/en_UK/theme.lang.php
===================================================================
--- /extensions/modus/language/en_UK/theme.lang.php	(revision 25794)
+++ /extensions/modus/language/en_UK/theme.lang.php	(revision 25794)
@@ -0,0 +1,8 @@
+<?php
+
+$lang['modus_theme'] = 'modus_theme';
+$lang['Explore'] = 'Explore';
+$lang['%d album'] = '%d album';
+$lang['%d albums'] = '%d albums';
+
+?>
Index: /extensions/modus/language/es_ES/theme.lang.php
===================================================================
--- /extensions/modus/language/es_ES/theme.lang.php	(revision 25794)
+++ /extensions/modus/language/es_ES/theme.lang.php	(revision 25794)
@@ -0,0 +1,8 @@
+﻿<?php
+
+$lang['modus_theme'] = 'modus_theme';
+$lang['Explore'] = 'Explorar';
+$lang['%d album'] = '%d álbum';
+$lang['%d albums'] = '%d álbumes';
+
+?>
Index: /extensions/modus/language/fr_FR/theme.lang.php
===================================================================
--- /extensions/modus/language/fr_FR/theme.lang.php	(revision 25794)
+++ /extensions/modus/language/fr_FR/theme.lang.php	(revision 25794)
@@ -0,0 +1,8 @@
+<?php
+
+$lang['modus_theme'] = 'modus_theme';
+$lang['Explore'] = 'Explorer';
+$lang['%d album'] = '%d album';
+$lang['%d albums'] = '%d albums';
+
+?>
Index: /extensions/modus/language/ro_RO/theme.lang.php
===================================================================
--- /extensions/modus/language/ro_RO/theme.lang.php	(revision 25794)
+++ /extensions/modus/language/ro_RO/theme.lang.php	(revision 25794)
@@ -0,0 +1,8 @@
+<?php
+
+$lang['modus_theme'] = 'modus_theme';
+$lang['Explore'] = 'Exploreaza';
+$lang['%d album'] = '%d album';
+$lang['%d albums'] = '%d albume';
+
+?>
Index: /extensions/modus/mail-css.tpl
===================================================================
--- /extensions/modus/mail-css.tpl	(revision 25794)
+++ /extensions/modus/mail-css.tpl	(revision 25794)
@@ -0,0 +1,9 @@
+/* Theme dark mail css */
+
+body {ldelim} background-color:#444; color:#fff;}
+#copyright {ldelim} color: #69c;}
+h2 {ldelim} background-color: #333; color:#fff48e;}
+img {ldelim} margin: 16px; border: 16px solid #111; -moz-border-radius: 4px; border-radius: 4px 4px; }
+img:hover {ldelim} padding: 15px; border: 1px solid yellow;background-color:#444;-moz-border-radius: 4px; border-radius: 4px 4px; }
+a {ldelim} color: #fff48e; background: transparent;border-bottom:1px dotted #005e89; }
+a:hover {ldelim} color: #fff48e;}
Index: /extensions/modus/skins/clear.inc.php
===================================================================
--- /extensions/modus/skins/clear.inc.php	(revision 25794)
+++ /extensions/modus/skins/clear.inc.php	(revision 25794)
@@ -0,0 +1,63 @@
+<?php
+/*gradients facebook '#3B5998','#2B4170' ; Google '#E64522','#C33219' ; Pinterest '#CB2027','#A0171C'; Turquoise: '#009CDA','#0073B2'*/
+$skin = array(
+	'BODY' => array(
+			// REQUIRED
+			'backgroundColor' 	=> '#eee',
+			// REQUIRED
+			'color' 						=> '#444',
+		),
+
+	'A' => array(
+			// REQUIRED
+			'color' 						=> '#222',
+		),
+
+	'A:hover' => array(
+			'color' 						=> '#000',
+		),
+
+	'menubar' => array(
+			'backgroundColor' 	=> '#ccc',
+			//'gradient' 					=> array('#3B5998','#2B4170'),
+			'color' 						=> '#444',
+			'link'							=> array( 'color' => '#222' ),
+			'linkHover'					=> array( 'color' => '#000' ),
+		),
+
+	'dropdowns' => array(
+			// REQUIRED - cannot be transparent
+			'backgroundColor' 	=> '#ccc',
+		),
+
+	'pageTitle' => array(
+			'backgroundColor' 	=> '#ccc',
+			//'gradient' 					=> array('#A0171C','#CB2027'),
+			'color' 						=> '#444',
+			'link'							=> array( 'color' => '#222' ),
+			'linkHover'					=> array( 'color' => '#000' ),
+		),
+
+	'pictureBar' => array(
+			'backgroundColor' 	=> '#ccc',
+		),
+
+	/*'widePictureBar' => array(
+			'backgroundColor' 	=> '#ccc',
+		),*/
+
+	'pictureWideInfoTable' => array(
+			'backgroundColor' 	=> '#ccc',
+		),
+
+	'comment' => array(
+			'backgroundColor' 	=> '#ccc',
+		),
+
+	// should be white or around white
+	'albumLegend' => array(
+			'color' 	=> '#fff',
+		),
+
+);
+?>
Index: /extensions/modus/skins/dark.inc.php
===================================================================
--- /extensions/modus/skins/dark.inc.php	(revision 25794)
+++ /extensions/modus/skins/dark.inc.php	(revision 25794)
@@ -0,0 +1,75 @@
+<?php
+/*gradients facebook '#3B5998','#2B4170' ; Google '#E64522','#C33219' ; Pinterest '#CB2027','#A0171C'; Turquoise: '#009CDA','#0073B2'*/
+$skin = array(
+	'BODY' => array(
+			// REQUIRED
+			'backgroundColor' 	=> '#141414',
+			// REQUIRED
+			'color' 						=> '#bbb',
+		),
+
+	'A' => array(
+			// REQUIRED
+			'color' 						=> '#ddd',
+		),
+
+	'A:hover' => array(
+			'color' 						=> '#fff',
+		),
+
+	'controls' => array(
+			'backgroundColor' 	=> '#d3d3d3',
+			'color' 						=> '#000',
+			'border' 						=> '1px solid gray',
+	),
+
+	'controls:focus' => array(
+			'backgroundColor' 	=> '#f3f3f3',
+			//'color' 						=> '#000',
+			//'boxShadow' 	      => '0 0 2px white',
+	),
+
+	'menubar' => array(
+			'backgroundColor' 	=> '#3F3F3F',
+			//'gradient' 					=> array('#3B5998','#2B4170'),
+			//'color' 						=> '#bbb',
+			//'link'							=> array( 'color' => '#ddd' ),
+			//'linkHover'					=> array( 'color' => '#fff' ),
+		),
+
+	'dropdowns' => array(
+			// REQUIRED - cannot be transparent
+			'backgroundColor' 	=> '#3F3F3F',
+		),
+
+	'pageTitle' => array(
+			//'backgroundColor' 	=> '#3F3F3F',
+			//'gradient' 					=> array('#3B5998','#2B4170'),
+			//'color' 						=> '#bbb',
+			//'link'							=> array( 'color' => '#ddd' ),
+			//'linkHover'					=> array( 'color' => '#fff' ),
+		),
+
+	'pictureBar' => array(
+			//'backgroundColor' 	=> '#3F3F3F',
+		),
+
+	'widePictureBar' => array(
+			//'backgroundColor' 	=> '#3F3F3F',
+		),
+
+	'pictureWideInfoTable' => array(
+			'backgroundColor' 	=> '#3F3F3F',
+		),
+
+	'comment' => array(
+			'backgroundColor' 	=> '#3F3F3F',
+		),
+
+	// should be white or around white
+	/*'albumLegend' => array(
+			'color' 	=> '#fff',
+		),*/
+
+);
+?>
Index: /extensions/modus/skins/dark_lagoon.inc.php
===================================================================
--- /extensions/modus/skins/dark_lagoon.inc.php	(revision 25794)
+++ /extensions/modus/skins/dark_lagoon.inc.php	(revision 25794)
@@ -0,0 +1,88 @@
+<?php
+/*gradients facebook '#3B5998','#2B4170' ; Google '#E64522','#C33219' ; Pinterest '#CB2027','#A0171C'; Turquoise: '#009CDA','#0073B2'*/
+$skin = array(
+	'BODY' => array(
+			// REQUIRED
+			'backgroundColor' 	=> '#141414',
+			// REQUIRED
+			'color' 						=> '#bbb',
+		),
+
+	'A' => array(
+			// REQUIRED
+			'color' 						=> '#ddd',
+		),
+
+	'A:hover' => array(
+			'color' 						=> '#fff',
+		),
+
+	'controls' => array(
+			'backgroundColor' 	=> 'transparent',
+			'color' 						=> 'inherit',
+			'border' 						=> '1px solid gray',
+	),
+
+	'controls:focus' => array(
+			'backgroundColor' 	=> '#3F3F3F',
+			'color' 						=> '#fff',
+			'boxShadow' 	      => '0 0 2px white',
+	),
+
+	'buttons' => array(
+			'backgroundColor' 	=> '#0073B2',
+			'gradient' 					=> array('#009CDA','#0073B2'),
+			'color' 						=> '#ddd',
+			'border' 						=> '1px solid gray',
+	),
+
+	'buttonsHover' => array(
+			'color' 						=> '#fff',
+			'boxShadow' 	      => '0 0 2px white',
+	),
+
+	'menubar' => array(
+			'backgroundColor' 	=> '#0073B2',
+			'gradient' 					=> array('#009CDA','#0073B2'),
+			'color' 						=> '#ddd',
+			'link'							=> array( 'color' => '#fff' ),
+			//'linkHover'					=> array( 'color' => '#fff' ),
+		),
+
+	'dropdowns' => array(
+			// REQUIRED - cannot be transparent
+			'backgroundColor' 	=> '#3F3F3F',
+		),
+
+	'pageTitle' => array(
+			'backgroundColor' 	=> '#009CDA',
+			'gradient' 					=> array('#0073B2','#009CDA'),
+			'color' 						=> '#ddd',
+			'link'							=> array( 'color' => '#fff' ),
+			//'linkHover'					=> array( 'color' => '#fff' ),
+			'textShadowColor'   => '#000',
+		),
+
+	/*'pictureBar' => array(
+			'backgroundColor' 	=> '#3F3F3F',
+		),*/
+
+	'widePictureBar' => array(
+			'backgroundColor' 	=> '#3F3F3F',
+		),
+
+	'pictureWideInfoTable' => array(
+			'backgroundColor' 	=> '#3F3F3F',
+		),
+
+	'comment' => array(
+			'backgroundColor' 	=> '#3F3F3F',
+		),
+
+	// should be white or around white
+	/*'albumLegend' => array(
+			'color' 	=> '#fff',
+		),*/
+
+);
+?>
Index: /extensions/modus/skins/dark_radish.inc.php
===================================================================
--- /extensions/modus/skins/dark_radish.inc.php	(revision 25794)
+++ /extensions/modus/skins/dark_radish.inc.php	(revision 25794)
@@ -0,0 +1,88 @@
+<?php
+/*gradients facebook '#3B5998','#2B4170' ; Google '#E64522','#C33219' ; Pinterest '#CB2027','#A0171C'; Turquoise: '#009CDA','#0073B2'*/
+$skin = array(
+	'BODY' => array(
+			// REQUIRED
+			'backgroundColor' 	=> '#141414',
+			// REQUIRED
+			'color' 						=> '#bbb',
+		),
+
+	'A' => array(
+			// REQUIRED
+			'color' 						=> '#ddd',
+		),
+
+	'A:hover' => array(
+			'color' 						=> '#fff',
+		),
+
+	'controls' => array(
+			'backgroundColor' 	=> 'transparent',
+			'color' 						=> 'inherit',
+			'border' 						=> '1px solid gray',
+	),
+
+	'controls:focus' => array(
+			'backgroundColor' 	=> '#3F3F3F',
+			'color' 						=> '#fff',
+			'boxShadow' 	      => '0 0 2px white',
+	),
+
+	'buttons' => array(
+			'backgroundColor' 	=> '#A0171C',
+			'gradient' 					=> array('#CB2027','#A0171C'),
+			'color' 						=> '#ddd',
+			'border' 						=> '1px solid gray',
+	),
+
+	'buttonsHover' => array(
+			'color' 						=> '#fff',
+			'boxShadow' 	      => '0 0 2px white',
+	),
+
+	'menubar' => array(
+			'backgroundColor' 	=> '#A0171C',
+			'gradient' 					=> array('#CB2027','#A0171C'),
+			'color' 						=> '#ddd',
+			'link'							=> array( 'color' => '#fff' ),
+			//'linkHover'					=> array( 'color' => '#fff' ),
+		),
+
+	'dropdowns' => array(
+			// REQUIRED - cannot be transparent
+			'backgroundColor' 	=> '#3F3F3F',
+		),
+
+	'pageTitle' => array(
+			'backgroundColor' 	=> '#CB2027',
+			'gradient' 					=> array('#A0171C','#CB2027'),
+			'color' 						=> '#ddd',
+			'link'							=> array( 'color' => '#fff' ),
+			//'linkHover'					=> array( 'color' => '#fff' ),
+			'textShadowColor'   => '#000',
+		),
+
+	/*'pictureBar' => array(
+			'backgroundColor' 	=> '#3F3F3F',
+		),*/
+
+	'widePictureBar' => array(
+			'backgroundColor' 	=> '#3F3F3F',
+		),
+
+	'pictureWideInfoTable' => array(
+			'backgroundColor' 	=> '#3F3F3F',
+		),
+
+	'comment' => array(
+			'backgroundColor' 	=> '#3F3F3F',
+		),
+
+	// should be white or around white
+	/*'albumLegend' => array(
+			'color' 	=> '#fff',
+		),*/
+
+);
+?>
Index: /extensions/modus/skins/dark_sky.inc.php
===================================================================
--- /extensions/modus/skins/dark_sky.inc.php	(revision 25794)
+++ /extensions/modus/skins/dark_sky.inc.php	(revision 25794)
@@ -0,0 +1,88 @@
+<?php
+/*gradients facebook '#3B5998','#2B4170' ; Google '#E64522','#C33219' ; Pinterest '#CB2027','#A0171C'; Turquoise: '#009CDA','#0073B2'*/
+$skin = array(
+	'BODY' => array(
+			// REQUIRED
+			'backgroundColor' 	=> '#141414',
+			// REQUIRED
+			'color' 						=> '#bbb',
+		),
+
+	'A' => array(
+			// REQUIRED
+			'color' 						=> '#ddd',
+		),
+
+	'A:hover' => array(
+			'color' 						=> '#fff',
+		),
+
+	'controls' => array(
+			'backgroundColor' 	=> 'transparent',
+			'color' 						=> 'inherit',
+			'border' 						=> '1px solid gray',
+	),
+
+	'controls:focus' => array(
+			'backgroundColor' 	=> '#2B4170',
+			'color' 						=> '#fff',
+			'boxShadow' 	      => '0 0 2px white',
+	),
+
+	'buttons' => array(
+			'backgroundColor' 	=> '#2B4170',
+			'gradient' 					=> array('#3B5998','#2B4170'),
+			'color' 						=> '#ddd',
+			'border' 						=> '1px solid gray',
+	),
+
+	'buttonsHover' => array(
+			'color' 						=> '#fff',
+			'boxShadow' 	      => '0 0 2px white',
+	),
+
+	'menubar' => array(
+			'backgroundColor' 	=> '#2B4170',
+			'gradient' 					=> array('#3B5998','#2B4170'),
+			'color' 						=> '#ddd',
+			'link'							=> array( 'color' => '#fff' ),
+			//'linkHover'					=> array( 'color' => '#fff' ),
+		),
+
+	'dropdowns' => array(
+			// REQUIRED - cannot be transparent
+			'backgroundColor' 	=> '#3F3F3F',
+		),
+
+	'pageTitle' => array(
+			'backgroundColor' 	=> '#2B4170',
+			'gradient' 					=> array('#2B4170','#3B5998'),
+			'color' 						=> '#ddd',
+			'link'							=> array( 'color' => '#fff' ),
+			//'linkHover'					=> array( 'color' => '#fff' ),
+			'textShadowColor'   => 'rgba(0,0,0,0.8)',
+		),
+
+	/*'pictureBar' => array(
+			'backgroundColor' 	=> '#3F3F3F',
+		),*/
+
+	'widePictureBar' => array(
+			'backgroundColor' 	=> '#3F3F3F',
+		),
+
+	'pictureWideInfoTable' => array(
+			'backgroundColor' 	=> '#3F3F3F',
+		),
+
+	'comment' => array(
+			'backgroundColor' 	=> '#3F3F3F',
+		),
+
+	// should be white or around white
+	/*'albumLegend' => array(
+			'color' 	=> '#fff',
+		),*/
+
+);
+?>
Index: /extensions/modus/skins/debug.inc.php
===================================================================
--- /extensions/modus/skins/debug.inc.php	(revision 25794)
+++ /extensions/modus/skins/debug.inc.php	(revision 25794)
@@ -0,0 +1,63 @@
+<?php
+/*gradients facebook '#3B5998','#2B4170' ; Google '#E64522','#C33219' ; Pinterest '#CB2027','#A0171C'*/
+$skin = array(
+	'BODY' => array(
+			// REQUIRED
+			'backgroundColor' 	=> '#fff',
+			// REQUIRED
+			'color' 						=> '#000',
+		),
+		
+	'A' => array(
+			// REQUIRED
+			'color' 						=> '#00f',
+		),
+
+	'A:hover' => array(
+			'color' 						=> '#000',
+		),
+
+	'menubar' => array(
+			'backgroundColor' 	=> '#C33219', 
+			'gradient' 					=> array('#E64522','#C33219'),
+			'color' 						=> '#bbb',
+			'link'							=> array( 'color' => '#ddd' ),
+			'linkHover'					=> array( 'color' => '#fff' ),
+		),
+
+	'dropdowns' => array(
+			// REQUIRED - cannot be transparent
+			'backgroundColor' 	=> '#0f0',
+		),
+
+	'pageTitle' => array(
+			'backgroundColor' 	=> '#2B4170', 
+			'gradient' 					=> array('#3B5998','#2B4170'),
+			'color' 						=> '#bbb',
+			'link'							=> array( 'color' => '#ddd' ),
+			'linkHover'					=> array( 'color' => '#fff' ),
+		),
+
+	'pictureBar' => array(
+			'backgroundColor' 	=> '#ccc',
+		),
+
+	'widePictureBar' => array(
+			'backgroundColor' 	=> '#dca',
+		),
+
+	'pictureWideInfoTable' => array(
+			'backgroundColor' 	=> '#ccc',
+		),
+
+	'comment' => array(
+			'backgroundColor' 	=> '#ccc',
+		),
+
+	// should be white or around white
+	'albumLegend' => array(
+			'color' 	=> '#fff',
+		),
+
+);
+?>
Index: /extensions/modus/template/comment_list.tpl
===================================================================
--- /extensions/modus/template/comment_list.tpl	(revision 25794)
+++ /extensions/modus/template/comment_list.tpl	(revision 25794)
@@ -0,0 +1,91 @@
+{if isset($comment_derivative_params)}
+{strip}{html_style}
+.commentElement .illustration{
+	width:{$comment_derivative_params->max_width()+5}px
+}
+
+.content .commentElement .description{
+	min-height:{$comment_derivative_params->max_height()+5}px
+}
+
+@media {cssResolution min=1.3}{
+	.illustration IMG{
+		max-width:{($comment_derivative_params->max_width()/2)|intval}px;
+		max-height:{($comment_derivative_params->max_height()/2)|intval}px;
+	}
+
+	.commentElement .illustration{
+		width:{($comment_derivative_params->max_width()/2+5)|intval}px
+	}
+
+	.content .commentElement .description{
+		min-height:{($comment_derivative_params->max_height()/2+5)|intval}px
+	}
+}
+
+{/html_style}{/strip}
+{/if}
+<ul class="commentsList">
+{foreach from=$comments item=comment name=comment_loop}
+<li class="commentElement {if $smarty.foreach.comment_loop.index is odd}odd{else}even{/if}">
+	{if isset($comment.src_image)}
+	{if isset($comment_derivative_params)}
+	{assign var=derivative value=$pwg->derivative($comment_derivative_params, $comment.src_image)}
+	{else}
+	{assign var=derivative value=$pwg->derivative($derivative_params, $comment.src_image)}
+	{/if}
+	<div class="illustration">
+		<a href="{$comment.U_PICTURE}">
+		<img src="{$derivative->get_url()}" alt="{$comment.ALT}">
+		</a>
+	</div>
+	{/if}
+	<div class="description">
+		{if isset($comment.U_DELETE) or isset($comment.U_VALIDATE) or isset($comment.U_EDIT)}
+		<div class="actions" style="float:right;font-size:90%">
+		{if isset($comment.U_DELETE)}
+			<a href="{$comment.U_DELETE}" onclick="return confirm('{'Are you sure?'|@translate|@escape:javascript}');">
+				{'Delete'|@translate}
+			</a>{if isset($comment.U_VALIDATE) or isset($comment.U_EDIT) or isset($comment.U_CANCEL)} | {/if}
+		{/if}
+		{if isset($comment.U_CANCEL)}
+			<a href="{$comment.U_CANCEL}">
+				{'Cancel'|@translate}
+			</a>{if isset($comment.U_VALIDATE)} | {/if}
+		{/if}
+		{if isset($comment.U_EDIT) and !isset($comment.IN_EDIT)}
+			<a class="editComment" href="{$comment.U_EDIT}#edit_comment">
+				{'Edit'|@translate}
+			</a>{if isset($comment.U_VALIDATE)} | {/if}
+		{/if}
+		{if isset($comment.U_VALIDATE)}
+			<a href="{$comment.U_VALIDATE}">
+				{'Validate'|@translate}
+			</a>
+		{/if}&nbsp;
+		</div>
+		{/if}
+
+		<span class="commentAuthor">{if $comment.WEBSITE_URL}<a href="{$comment.WEBSITE_URL}" class="external" target="_blank" rel="nofollow">{$comment.AUTHOR}</a>{else}{$comment.AUTHOR}{/if}</span>
+			{if isset($comment.EMAIL)}- <a href="mailto:{$comment.EMAIL}">{$comment.EMAIL}</a>{/if}
+			- <span class="commentDate">{$comment.DATE}</span>
+		{if isset($comment.IN_EDIT)}
+		<a name="edit_comment"></a>
+		<form method="post" action="{$comment.U_EDIT}" id="editComment">
+			<p><label for="contenteditid">{'Edit a comment'|@translate} :</label></p>
+			<p><textarea name="content" id="contenteditid" rows="5" cols="80">{$comment.CONTENT|@escape}</textarea></p>
+			<p><label for="website_url">{'Website'|@translate} :</label></p>
+			<p><input type="text" name="website_url" id="website_url" value="{$comment.WEBSITE_URL}" size="40"></p>
+			<p><input type="hidden" name="key" value="{$comment.KEY}">
+				<input type="hidden" name="pwg_token" value="{$comment.PWG_TOKEN}">
+				<input type="hidden" name="image_id" value="{$comment.IMAGE_ID|@default:$current.id}">
+				<input type="submit" value="{'Submit'|@translate}">
+			</p>
+		</form>
+		{else}
+		<blockquote><div>{$comment.CONTENT}</div></blockquote>
+		{/if}
+	</div>
+</li>
+{/foreach}
+</ul>
Index: /extensions/modus/template/footer.tpl
===================================================================
--- /extensions/modus/template/footer.tpl	(revision 25794)
+++ /extensions/modus/template/footer.tpl	(revision 25794)
@@ -0,0 +1,32 @@
+<div id="copyright">
+{if isset($debug.TIME)}
+{if !is_admin()}<!--{$debug.TIME} ({$debug.NB_QUERIES} {$debug.SQL_TIME})-->{else}{'Page generated in'|@translate} {$debug.TIME} ({$debug.NB_QUERIES} {'SQL queries in'|@translate} {$debug.SQL_TIME}) - {/if}
+{/if}
+{*
+	Please, do not remove this copyright. If you really want to,
+			contact us on http://piwigo.org to find a solution on how
+			to show the origin of the script...
+*}
+	{'Powered by'|@translate}	<a href="{$PHPWG_URL}">Piwigo</a>
+	{$VERSION}
+	{if isset($CONTACT_MAIL)}
+	- <a href="mailto:{$CONTACT_MAIL}?subject={'A comment on your site'|@translate|@escape:url}">{'Contact webmaster'|@translate}</a>
+	{/if}
+	{if isset($TOGGLE_MOBILE_THEME_URL)}
+	- {'View in'|@translate} : <a href="{$TOGGLE_MOBILE_THEME_URL}">{'Mobile'|@translate}</a> | <b>{'Desktop'|@translate}</b>
+	{/if}
+
+{get_combined_scripts load='footer'}
+{if isset($footer_elements)}
+{foreach from=$footer_elements item=v}
+{$v}
+{/foreach}
+{/if}
+</div>{* copyright *}
+{if isset($debug.QUERIES_LIST)}
+<div id="debug">
+{$debug.QUERIES_LIST}
+</div>
+{/if}
+</body>
+</html>
Index: /extensions/modus/template/header.tpl
===================================================================
--- /extensions/modus/template/header.tpl	(revision 25794)
+++ /extensions/modus/template/header.tpl	(revision 25794)
@@ -0,0 +1,43 @@
+<!DOCTYPE html>
+<html lang={$lang_info.code} dir={$lang_info.direction}>
+<head>
+<title>{if $PAGE_TITLE=='Home'|@translate}{$GALLERY_TITLE}{else}{$PAGE_TITLE}{/if}</title>
+{strip}{get_combined_css}
+{combine_css path="themes/`$themeconf.id`/css/base.css.tpl" version=$MODUS_CSS_VERSION template=true order=-10}
+{combine_css path="themes/`$themeconf.id`/css/iconfontello.css.tpl" version=$MODUS_CSS_VERSION template=true order=-10}
+{combine_css path="themes/`$themeconf.id`/css/menuh.css.tpl" version=$MODUS_CSS_VERSION template=true order=-10}
+{combine_css path="themes/`$themeconf.id`/css/index.css.tpl" version=$MODUS_CSS_VERSION template=true order=-10}
+{combine_css path="themes/`$themeconf.id`/css/picture.css.tpl" version=$MODUS_CSS_VERSION template=true order=-10}
+{combine_css path="themes/`$themeconf.id`/css/tags.css" order=-10}
+{combine_css path="themes/`$themeconf.id`/css/print.css" order=-10}
+{/strip}
+{if isset($U_PREFETCH)}<link rel=prefetch href="{$U_PREFETCH}">{/if}
+{if isset($U_CANONICAL)}<link rel=canonical href="{$U_CANONICAL}">{/if}
+{if not empty($page_refresh)}<meta http-equiv="refresh" content="{$page_refresh.TIME};url={$page_refresh.U_REFRESH}">{/if}
+{get_combined_scripts load='header'}
+{if empty($smarty.server.HTTP_USER_AGENT) || strpos($smarty.server.HTTP_USER_AGENT, 'MSIE')}
+<!--[if lt IE 9]><script type="text/javascript" src="{$ROOT_URL}themes/{$themeconf.id}/html5shiv.js"></script><![endif]-->
+<!--[if lt IE 7]><script type="text/javascript" src="{$ROOT_URL}themes/default/js/pngfix.js"></script><![endif]-->
+{/if}
+<meta name=viewport content="width=device-width,initial-scale=1">
+{*combine_script id='jquery' load='footer'*}
+{if not empty($head_elements)}{foreach from=$head_elements item=elt}{$elt}
+{/foreach}{/if}
+</head>
+
+<body id={$BODY_ID}>
+{if not empty($header_msgs)}
+<div class="header_msgs">
+{if not empty($header_msgs)}
+	{foreach from=$header_msgs item=elt}
+	<p>{$elt}</p>
+	{/foreach}
+{/if}
+{if not empty($header_notes)}
+	{foreach from=$header_notes item=elt}
+	<p>{$elt}</p>
+  {/foreach}
+{/if}
+</div>
+{/if}
+{*<div id="theHeader">{$PAGE_BANNER}</div>*}
Index: /extensions/modus/template/mainpage_categories.tpl
===================================================================
--- /extensions/modus/template/mainpage_categories.tpl	(revision 25794)
+++ /extensions/modus/template/mainpage_categories.tpl	(revision 25794)
@@ -0,0 +1,87 @@
+{if !empty($album_thumb_size)}{* ================= modus mode ===*}
+<ul class="albThumbs" id="rv-at">
+{foreach from=$category_thumbnails item=item}
+<li>{strip}
+<a href="{$item.URL}">
+	<img class=albImg{$item.MODUS_STYLE} src="{$item.modus_deriv->get_url()}" alt="{$item.TN_ALT}">
+	<div class=albLegend>
+		<h4>{$item.NAME}</h4>
+		{if !empty($item.icon_ts)}<div class=albLegendRight><span class=albSymbol title="{if $item.icon_ts.IS_CHILD_DATE}{'Recent albums'|@translate} {$item.icon_ts.TITLE}">✻{else}{'Recent photos'|@translate} {$item.icon_ts.TITLE}">✽{/if}</span></div>{/if}
+		<div>
+			{if $item.nb_images}{$item.nb_images|@translate_dec:'%d photo':'%d photos'}{if $item.nb_categories}, {/if}{/if}
+			{if $item.nb_categories}
+			<span title="{$item.count_images|@translate_dec:'%d photo':'%d photos'} {$item.count_categories|@translate_dec:'in %d sub-album':'in %d sub-albums'}">{$item.nb_categories|@translate_dec:'%d album':'%d albums'}</span>
+			{/if}
+		</div>
+	</div>
+</a>
+{/strip}</li>
+{/foreach}
+</ul>
+{else}{* ================= standard mode ===*}
+{strip}{html_style}
+.thumbnailCategory .illustration{
+	width:{$derivative_params->max_width()+5}px;
+}
+
+.content .thumbnailCategory .description{
+	height:{$derivative_params->max_height()+5}px;
+}
+
+
+@media {cssResolution min=1.3}{
+	.thumbnailCategory .illustration{
+		width:{($derivative_params->max_width()/2+5)|intval}px;
+	}
+
+	.content .thumbnailCategory .description{
+		height:{($derivative_params->max_height()/2+5)|intval}px;
+	}
+
+	.illustration IMG{
+		max-width:{($derivative_params->max_width()/2)|intval}px;
+		max-height:{($derivative_params->max_height()/2)|intval}px;
+	}
+}
+
+@media (max-width: {(2+2*($derivative_params->max_width()+1+120))|intval}px),
+{$maxw={(2+2*($derivative_params->max_width()/2+1+120))|intval}}
+	{cssResolution base='(max-width:'|cat:$maxw|cat:'px)' min=1.3} {
+	.thumbnailCategories LI{
+		width:99%
+	}
+}
+
+{/html_style}{/strip}
+<ul class="thumbnailCategories">
+{foreach from=$category_thumbnails item=cat name=cat_loop}
+{assign var=derivative value=$pwg->derivative($derivative_params, $cat.representative.src_image)}
+  <li class="{if $smarty.foreach.cat_loop.index is odd}odd{else}even{/if}">
+		<div class="thumbnailCategory">
+			<div class="illustration">
+			<a href="{$cat.URL}">
+				<img src="{$derivative->get_url()}" alt="{$cat.TN_ALT}" title="{$cat.NAME|@replace:'"':' '|@strip_tags:false} - {'display this album'|@translate}">
+			</a>
+			</div>
+			<div class="description">
+				<h3>
+					<a href="{$cat.URL}">{$cat.NAME}</a>
+					{if !empty($cat.icon_ts)}
+					<img title="{$cat.icon_ts.TITLE}" src="{$ROOT_URL}{$themeconf.icon_dir}/recent{if $cat.icon_ts.IS_CHILD_DATE}_by_child{/if}.png" alt="(!)">
+					{/if}
+				</h3>
+		<div class="text">
+				{if isset($cat.INFO_DATES) }
+				<div class="dates">{$cat.INFO_DATES}</div>
+				{/if}
+				<div class="Nb_images">{$cat.CAPTION_NB_IMAGES}</div>
+				{if not empty($cat.DESCRIPTION)}
+				<div>{$cat.DESCRIPTION}</div>
+				{/if}
+		</div>
+			</div>
+		</div>
+	</li>
+{/foreach}
+</ul>
+{/if}
Index: /extensions/modus/template/menubar.tpl
===================================================================
--- /extensions/modus/template/menubar.tpl	(revision 25794)
+++ /extensions/modus/template/menubar.tpl	(revision 25794)
@@ -0,0 +1,224 @@
+{$COOKIE_PATH = cookie_path()}
+{$MENUBAR_VISIBLE = !isset($smarty.cookies.rvmb) || $smarty.cookies.rvmb|@intval > 0}
+
+{* basically a copy of menubar.tpl with manual inclusion of menubar_xxx.tpl *}
+{if !empty($blocks)}
+<aside id=menubar{if !$MENUBAR_VISIBLE} style="display:none"{/if}>
+	{foreach from=$blocks key=id item=block}{if ($id!="mbIdentification" && $id!="mbMenu")}
+	<dl id={$id}>
+		{if $id=="mbLinks"}
+{* ============ mbLinks ========== *}
+{if count($block->data)==1}
+<dt><a href="{$block->data[0].URL}">{$block->data[0].LABEL}</a></dt>
+{else}
+<dt>{'Links'|@translate}</dt>
+<dd>
+	<ul>{strip}
+		{foreach from=$block->data item=link}
+			<li>
+				<a href="{$link.URL}" class="external"{if isset($link.new_window)} onclick="window.open(this.href, '{$link.new_window.NAME}','{$link.new_window.FEATURES}'); return false;"{/if}>
+				{$link.LABEL}
+				</a>
+			</li>
+		{/foreach}
+	{/strip}</ul>
+</dd>
+{/if}
+
+		{elseif $id=="mbTags"}
+{* ============ mbTags ========== *}
+<dt><a>{'Related tags'|@translate}</a></dt>
+<dd>
+	<div id=menuTagCloud>
+		{foreach from=$block->data item=tag}{strip}
+			<a class="tagLevel{$tag.level}" href=
+			{if isset($tag.U_ADD)}
+				"{$tag.U_ADD}" title="{$tag.counter|@translate_dec:'%d photo is also linked to current tags':'%d photos are also linked to current tags'}" rel=nofollow>+
+			{else}
+				"{$tag.URL}" title="{'display photos linked to this tag'|@translate}">
+			{/if}
+				{$tag.name}</a>{/strip}
+		{/foreach}
+	</div>
+</dd>
+
+		{elseif $id=="mbSpecials"}
+{* ============ mbSpecials ========== *}
+<dt><a>{'Explore'|@translate}</a></dt>
+<dd>
+	<ul>{strip}
+		{foreach from=$block->data item=link}
+		<li><a href="{$link.URL}" title="{$link.TITLE}"{if isset($link.REL)} {$link.REL}{/if}>{$link.NAME}</a></li>
+		{/foreach}
+		{if isset($blocks.mbMenu)}
+		<hr>
+		{foreach from=$blocks.mbMenu->data item=link}{if is_array($link)}
+		<li><a href="{$link.URL}" title="{$link.TITLE}"{if isset($link.REL)} {$link.REL}{/if}>{$link.NAME}</a>{if isset($link.COUNTER)} ({$link.COUNTER}){/if}</li>
+		{/if}{/foreach}
+		{/if}
+	{/strip}</ul>
+</dd>
+
+		{elseif $id=="mbMenu"}
+{* ============ mbMenu ========== *}
+<dt>{'Menu'|@translate}</dt>
+<dd>
+	<ul>{strip}
+	{foreach from=$block->data item=link}
+		{if is_array($link)}
+			<li><a href="{$link.URL}" title="{$link.TITLE}"{if isset($link.REL)} {$link.REL}{/if}>{$link.NAME}</a>{if isset($link.COUNTER)} ({$link.COUNTER}){/if}</li>
+		{/if}
+	{/foreach}
+	{/strip}</ul>
+</dd>
+
+		{elseif $id=="mbIdentification"}
+{* ============ mbIdentification ========== *}
+<dt>{'Identification'|@translate}</dt>
+<dd>
+{strip}
+	{if isset($USERNAME)}
+	<p>{'Hello'|@translate} {$USERNAME} !</p>
+	{/if}
+	<ul>
+	{if isset($U_REGISTER)}
+	<li><a href="{$U_REGISTER}" title="{'Create a new account'|@translate}" rel=nofollow>{'Register'|@translate}</a></li>
+	{/if}
+	{if isset($U_LOGIN)}
+	<li><a href="{$U_LOGIN}" rel=nofollow>{'Login'|@translate}</a></li>
+	{/if}
+	{if isset($U_LOGOUT)}
+	<li><a href="{$U_LOGOUT}">{'Logout'|@translate}</a></li>
+	{/if}
+	{if isset($U_PROFILE)}
+	<li><a href="{$U_PROFILE}" title="{'customize the appareance of the gallery'|@translate}">{'Customize'|@translate}</a></li>
+	{/if}
+	{if isset($U_ADMIN)}
+	<li><a href="{$U_ADMIN}" title="{'available for administrators only'|@translate}">{'Administration'|@translate}</a></li>
+	{/if}
+	</ul>
+{/strip}
+	{if isset($U_LOGIN)}
+{strip}
+	<form method=post action="{$U_LOGIN}" id=quickconnect>
+	<fieldset>
+	<legend>{'Quick connect'|@translate}</legend>
+	<div>
+	<label for=username>{'Username'|@translate}</label><br>
+	<input type=text name=username id=username value="" style="width:99%">
+	</div>
+
+	<div><label for=password>{'Password'|@translate}</label><br>
+	<input type=password name=password id=password style="width:99%">
+	</div>
+
+	{if $AUTHORIZE_REMEMBERING}
+	<div><label for=remember_me>
+	{'Auto login'|@translate}&nbsp;<input type=checkbox name=remember_me id=remember_me value=1>
+	</label></div>
+	{/if}
+
+	<div>
+	<input type=hidden name=redirect value="{$smarty.server.REQUEST_URI|@urlencode}">
+	<input type=submit name=login value="{'Submit'|@translate}">
+	<span class=categoryActions>
+{if isset($U_REGISTER)}
+		<a href="{$U_REGISTER}" title="{'Create a new account'|@translate}" class="pwg-state-default pwg-button" rel=nofollow>
+			<span class="pwg-icon pwg-icon-register"> </span>
+		</a>
+{/if}
+		<a href="{$U_LOST_PASSWORD}" title="{'Forgot your password?'|@translate}" class="pwg-state-default pwg-button">
+			<span class="pwg-icon pwg-icon-lost-password"> </span>
+		</a>
+	</span>
+	</div>
+
+	</fieldset>
+	</form>
+{/strip}
+	{/if}
+</dd>
+
+		{else}
+		{if not empty($block->template)}
+		{include file=$block->template }
+		{else}
+		{$block->raw_content}
+		{/if}
+		{/if}
+	</dl>
+	{/if}{/foreach}
+{* ============ Horizontal menu specificities ========== *}
+{if isset($blocks.mbSpecials->data.most_visited)}
+<dl id="mbMostVisited"><dt><a href="{$blocks.mbSpecials->data.most_visited.URL}" title="{$blocks.mbSpecials->data.most_visited.TITLE}">{$blocks.mbSpecials->data.most_visited.NAME}</a></dt></dl>
+{/if}
+{if isset($blocks.mbSpecials->data.best_rated)}
+<dl id="mbBestRated"><dt><a href="{$blocks.mbSpecials->data.best_rated.URL}" title="{$blocks.mbSpecials->data.best_rated.TITLE}">{$blocks.mbSpecials->data.best_rated.NAME}</a></dt></dl>
+{/if}
+{if isset($blocks.mbSpecials->data.recent_pics)}
+<dl><dt><a href="{$blocks.mbSpecials->data.recent_pics.URL}" title="{$blocks.mbSpecials->data.recent_pics.TITLE}">{$blocks.mbSpecials->data.recent_pics.NAME}</a></dt></dl>
+{/if}
+<dl style="float:none">
+	<form style="margin:0;display:inline" action="{$ROOT_URL}qsearch.php" method=get id=quicksearch onsubmit="return this.q.value!='' && this.q.value!=qsearch_prompt;">
+			<input type="text" name=q id=qsearchInput onfocus="if(value==qsearch_prompt)value='';" onblur="if(value=='')value=qsearch_prompt;">
+	</form>
+	<script type="text/javascript">var qsearch_prompt="{'Search'|@translate|@escape:'javascript'}...";document.getElementById('qsearchInput').value=qsearch_prompt;</script>
+</dl>
+{if isset($U_LOGIN)}
+<dl style="float:right;margin-top:3px">
+	<dt style="font-size:100%;font-weight:normal;padding-left:15px{*to avoid loosing hover*}"><a href="{$U_LOGIN}" rel=nofollow>{'Login'|@translate}</a></dt>
+	<dd style="right:0">
+		<ul>
+		<li><a href="{$U_LOGIN}" rel="nofollow">{'Login'|@translate}</a></li>
+		{if isset($U_REGISTER)}
+		<li><a href="{$U_REGISTER}" title="{'Create a new account'|@translate}" rel="nofollow">{'Register'|@translate}</a></li>
+		{/if}
+		<li><a href="{$U_LOST_PASSWORD}" title="{'Forgot your password?'|@translate}" rel="nofollow">{'Forgot your password?'|@translate}</a></li>
+		</ul>
+{strip}
+		<form method=post action="{$U_LOGIN}" id=quickconnect>
+		<fieldset>
+		<legend>{'Quick connect'|@translate}</legend>
+		<p>
+		<label for=userX>{'Username'|@translate}</label><br>
+		<input type=text name=username id=userX value="" style="width:99%">
+		</p>
+
+		<p><label for=passX>{'Password'|@translate}</label><br>
+		<input type=password name=password id=passX style="width:99%">
+		</p>
+
+		{if $AUTHORIZE_REMEMBERING}
+		<p><label>
+		{'Auto login'|@translate}&nbsp;<input type=checkbox name=remember_me value=1>
+		</label></p>
+		{/if}
+
+		<p>
+		<input type=hidden name=redirect value="{$smarty.server.REQUEST_URI|@urlencode}">
+		<input type=submit name=login value="{'Submit'|@translate}">
+		</p>
+
+		</fieldset>
+		</form>
+{/strip}
+	</dd>
+</dl>
+{/if}
+{if isset($U_LOGOUT)}
+<dl style="float:right;margin-top:3px">
+	<dt style="font-size:100%;font-weight:normal">
+	{if isset($USERNAME)}{'Hello'|@translate} {if isset($U_PROFILE)}<a href="{$U_PROFILE}">{/if}{$USERNAME}{if isset($U_PROFILE)}</a>{/if} ! &nbsp;{/if}
+	<a href="{$U_LOGOUT}">{'Logout'|@translate}</a>
+	{if isset($U_PROFILE)}<a id="mbProfile" href="{$U_PROFILE}" title="{'customize the appareance of the gallery'|@translate}">{'Customize'|@translate}</a>{/if}
+	{if isset($U_ADMIN)}
+	<a href="{$U_ADMIN}" title="{'available for administrators only'|@translate}">Admin</a>
+	{/if}
+	</dt>
+</dl>
+{/if}
+
+</aside>
+{/if}
+<a id="menuSwitcher" class="pwg-button" title="{'Menu'|@translate}"><span class="pwg-icon pwg-icon-menu"></span></a>
+{combine_script id='zzz.d1.menu' load='async' path="themes/`$themeconf.id`/js/menuh.js" require="jquery" version=0}
Index: /extensions/modus/template/month_calendar.tpl
===================================================================
--- /extensions/modus/template/month_calendar.tpl	(revision 25794)
+++ /extensions/modus/template/month_calendar.tpl	(revision 25794)
@@ -0,0 +1,53 @@
+{include file='../../default/template/month_calendar.tpl'}
+{if isset($chronology_calendar.month_view)}
+{html_style}
+.calMonth TH{
+	max-width:{$chronology_calendar.month_view.CELL_WIDTH}px;
+	overflow:hidden;
+	text-overflow:ellipsis
+}
+.calImg IMG{
+	max-height:100%;
+	width:auto
+}
+
+{$crt_width=$chronology_calendar.month_view.CELL_WIDTH}
+@media (max-width:{7*($crt_width+3)}px){
+{$crt_width=($crt_width/1.5)|intval}
+	.calMonth TH{
+		max-width:{$crt_width}px
+	}
+	.calMonth TD,.calMonth .calImg{
+		width:{$crt_width}px;
+		height:{$crt_width}px
+	}
+}
+
+@media (max-width:{7*($crt_width+3)}px){
+{$crt_width=($chronology_calendar.month_view.CELL_WIDTH/2)|intval}
+	.calMonth TH{
+		max-width:{$crt_width}px
+	}
+	.calMonth TD,.calMonth .calImg{
+		font-size:16px;
+		width:{$crt_width}px;
+		height:{$crt_width}px
+	}
+}
+
+{if 7*($crt_width+3)>320}
+@media (max-width:360px){
+{$crt_width=(320/7-1)|intval}
+	.calMonth TH{
+		max-width:{$crt_width-2}px
+	}
+	.calMonth TD,.calMonth .calImg{
+		font-size:12px;
+		padding:0;
+		width:{$crt_width}px;
+		height:{$crt_width}px
+	}
+}
+{/if}
+{/html_style}
+{/if}
Index: /extensions/modus/template/picture_content_asize.tpl
===================================================================
--- /extensions/modus/template/picture_content_asize.tpl	(revision 25794)
+++ /extensions/modus/template/picture_content_asize.tpl	(revision 25794)
@@ -0,0 +1,29 @@
+{combine_script id='photo.autosize' path="themes/`$themeconf.id`/js/photo.autosize.min.js" load='footer' require='jquery'}
+
+{footer_script}RVAS = {
+derivatives: [
+{foreach from=$current.unique_derivatives item=derivative name=derivative_loop}{assign var='size' value=$derivative->get_size()}
+{ldelim}w:{$size[0]},h:{$size[1]},url:'{$derivative->get_url()|@escape:'javascript'}',type:'{$derivative->get_type()}'}{if !$smarty.foreach.derivative_loop.last},{/if}
+{/foreach}],
+cp: '{$COOKIE_PATH|@escape:'javascript'}'
+}{/footer_script}
+{if $RVAS_PENDING}
+<noscript><img src="{$current.selected_derivative->get_url()}" {$current.selected_derivative->get_size_htm()} alt="{$ALT_IMG}" id="theMainImage" usemap="#map{$current.selected_derivative->get_type()}" title="{if isset($COMMENT_IMG)}{$COMMENT_IMG|@strip_tags:false|@replace:'"':' '}{else}{$current.TITLE_ESC} - {$ALT_IMG}{/if}" itemprop=contentURL></noscript>
+{footer_script}rvas_choose();{/footer_script}
+{else}
+{footer_script}rvas_choose(1);{/footer_script}
+{/if}
+<img{if !$RVAS_PENDING} src="{$current.selected_derivative->get_url()}" {if isset($rvas_display_size)}width={$rvas_display_size[0]} height={$rvas_display_size[1]} data-natural-w={$rvas_natural_size[0]}{else}{$current.selected_derivative->get_size_htm()}{/if}{/if} alt="{$ALT_IMG}" id="theMainImage"{if !isset($rvas_display_size)} usemap="#map{$current.selected_derivative->get_type()}"{/if} title="{if isset($COMMENT_IMG)}{$COMMENT_IMG|@strip_tags:false|@replace:'"':' '}{else}{$current.TITLE_ESC} - {$ALT_IMG}{/if}" itemprop=contentURL>
+
+{foreach from=$current.unique_derivatives item=derivative key=derivative_type}{strip}
+<map name="map{$derivative->get_type()}">
+{assign var='size' value=$derivative->get_size()}
+{if isset($previous)}
+<area shape=rect coords="0,0,{($size[0]/4)|@intval},{$size[1]}" href="{$previous.U_IMG}" title="{'Previous'|@translate} : {$previous.TITLE_ESC}" alt="{$previous.TITLE_ESC}">
+{/if}
+<area shape=rect coords="{($size[0]/4)|@intval},0,{($size[0]/1.34)|@intval},{($size[1]/4)|@intval}" href="{$U_UP}" title="{'Thumbnails'|@translate}" alt="{'Thumbnails'|@translate}">
+{if isset($next)}
+<area shape=rect coords="{($size[0]/1.33)|@intval},0,{$size[0]},{$size[1]}" href="{$next.U_IMG}" title="{'Next'|@translate} : {$next.TITLE_ESC}" alt="{$next.TITLE_ESC}">
+{/if}
+</map>
+{/strip}{/foreach}
Index: /extensions/modus/template/thumbnails.tpl
===================================================================
--- /extensions/modus/template/thumbnails.tpl	(revision 25794)
+++ /extensions/modus/template/thumbnails.tpl	(revision 25794)
@@ -0,0 +1,142 @@
+{if !empty($thumbnails)}{strip}
+{if $derivative_params->max_width()/$derivative_params->max_height() > 1.5 || ($derivative_params->max_height()<400 && !$derivative_params->sizing->max_crop)}
+{html_style}{literal}
+.popDesc{display:none}
+{/literal}{/html_style}
+{modus_thumbs}
+{else}
+{if $smarty.const.IMG_SQUARE == $derivative_params->type}{assign var='SHOW_THUMBNAIL_CAPTION' value=false}{/if}
+{html_style}
+{*Set some sizes according to maximum thumbnail width and height*}
+.thumbnails SPAN,.thumbnails .wrap2 A{
+	width:{$derivative_params->max_width()+2}px
+}
+.thumbnails .wrap2{
+	height:{$derivative_params->max_height()+3}px
+}
+
+@media {cssResolution min=1.3 max=1.7}{
+	.thumbnails SPAN,.thumbnails .wrap2 A{
+		width:{($derivative_params->max_width()/1.5+2)|intval}px
+	}
+	.thumbnails .wrap2{
+		height:{($derivative_params->max_height()/1.5+3)|intval}px
+	}
+	.thumbnails .wrap2 IMG{
+		max-width:{($derivative_params->max_width()/1.5)|intval}px;
+		max-height:{($derivative_params->max_height()/1.5)|intval}px;
+	}
+}
+
+@media {cssResolution min=1.7 max=2.5}{
+	.thumbnails SPAN,.thumbnails .wrap2 A{
+		width:{($derivative_params->max_width()/2+2)|intval}px
+	}
+	.thumbnails .wrap2{
+		height:{($derivative_params->max_height()/2+3)|intval}px
+	}
+	.thumbnails .wrap2 IMG{
+		max-width:{($derivative_params->max_width()/2)|intval}px;
+		max-height:{($derivative_params->max_height()/2)|intval}px;
+	}
+}
+
+@media {cssResolution min=2.5 max=2.5}{
+	.thumbnails SPAN,.thumbnails .wrap2 A{
+		width:{($derivative_params->max_width()/3+2)|intval}px
+	}
+	.thumbnails .wrap2{
+		height:{($derivative_params->max_height()/3+3)|intval}px
+	}
+	.thumbnails .wrap2 IMG{
+		max-width:{($derivative_params->max_width()/3)|intval}px;
+		max-height:{($derivative_params->max_height()/3)|intval}px;
+	}
+}
+
+{*=== If we cannot fit two images per width (1 comes from border, 7 comes from css li margin)===*}
+@media
+{$maxw=(2+2*($derivative_params->max_width()+1+7))|intval}
+{cssResolution base='(max-width:'|cat:$maxw|cat:'px)' max=1},
+{$maxw=(2+2*($derivative_params->max_width()/1.5+1+7))|intval}
+{cssResolution base='(max-width:'|cat:$maxw|cat:'px)' min=1.3 max=1.7},
+{$maxw=(2+2*($derivative_params->max_width()/2+1+7))|intval}
+{cssResolution base='(max-width:'|cat:$maxw|cat:'px)' min=1.7 max=2.5},
+{$maxw=(2+2*($derivative_params->max_width()/3+1+7))|intval}
+{cssResolution base='(max-width:'|cat:$maxw|cat:'px)' min=2.5}{
+	.thumbnails .wrap2{
+		height:auto;
+		border:0
+	}
+	.thumbnails .thumbLegend{
+		height:auto;
+		min-height:4em;
+		overflow:visible;
+	}
+}
+
+{*=== If we cannot fit one image per width===*}
+@media
+{$maxw=(2+($derivative_params->max_width()+1+7))|intval}
+{cssResolution base='(max-width:'|cat:$maxw|cat:'px)' max=1},
+{$maxw=(2+($derivative_params->max_width()/1.5+1+7))|intval}
+{cssResolution base='(max-width:'|cat:$maxw|cat:'px)' min=1.3 max=1.7},
+{$maxw=(2+($derivative_params->max_width()/2+1+7))|intval}
+{cssResolution base='(max-width:'|cat:$maxw|cat:'px)' min=1.7 max=2.5},
+{$maxw=(2+($derivative_params->max_width()/3+1+7))|intval}
+{cssResolution base='(max-width:'|cat:$maxw|cat:'px)' min=2.5}{
+	.thumbnails .wrap1{
+		margin:0 0 5px
+	}
+	.thumbnails .wrap2{
+		display:block
+	}
+	.thumbnails SPAN, .thumbnails .wrap2 A{
+		max-width:99.8%
+	}
+	.thumbnails .wrap2 IMG{
+		max-width:100%
+	}
+}
+{if $derivative_params->max_width() > 400}
+.thumbLegend {ldelim}font-size: 110%}
+{else}
+.thumbLegend {ldelim}font-size: 90%}
+{/if}
+{/html_style}
+{foreach from=$thumbnails item=thumbnail}
+	<li>
+	<span class="wrap1">
+		<span class="wrap2">
+		<a href="{$thumbnail.URL}">
+{assign var=derivative value=$pwg->derivative($derivative_params, $thumbnail.src_image)}
+			<img src="{$derivative->get_url()}"{* {$derivative->get_size_htm()}*} alt="{$thumbnail.TN_ALT}" title="{$thumbnail.TN_TITLE}">
+		</a>
+		</span>
+		{if $SHOW_THUMBNAIL_CAPTION }
+		<div class="thumbLegend">
+		{$thumbnail.NAME}
+		{if !empty($thumbnail.icon_ts)}
+		<img title="{$thumbnail.icon_ts.TITLE}" src="{$ROOT_URL}{$themeconf.icon_dir}/recent.png" alt="(!)">
+		{/if}
+		{if isset($thumbnail.NB_COMMENTS)}
+		<span class="{if 0==$thumbnail.NB_COMMENTS}zero {/if}nb-comments">
+		<br>
+		{$thumbnail.NB_COMMENTS|@translate_dec:'%d comment':'%d comments'}
+		</span>
+		{/if}
+
+		{if isset($thumbnail.NB_HITS)}
+		<span class="{if 0==$thumbnail.NB_HITS}zero {/if}nb-hits">
+		<br>
+		{$thumbnail.NB_HITS|@translate_dec:'%d hit':'%d hits'}
+		</span>
+		{/if}
+		<span class="thumbDesc"><br>{$thumbnail.DESCRIPTION}</span>
+		</div>
+		{/if}
+	</span>
+	</li>
+{/foreach}
+{/if}
+{/strip}{/if}
Index: /extensions/modus/themeconf.inc.php
===================================================================
--- /extensions/modus/themeconf.inc.php	(revision 25794)
+++ /extensions/modus/themeconf.inc.php	(revision 25794)
@@ -0,0 +1,533 @@
+<?php
+/*
+Theme Name: modus
+Version: 201312
+Description: Dark background, grayscale.
+*/
+$themeconf = array(
+	'name'  => 'modus',
+	'parent' => 'default',
+);
+
+define('MODUS_STR_RECENT', "\xe2\x9c\xbd"); //HEAVY TEARDROP-SPOKED ASTERISK
+define('MODUS_STR_RECENT_CHILD', "\xe2\x9c\xbb"); //TEARDROP-SPOKED ASTERISK
+
+if (isset($conf['modus_theme']) && !is_array($conf['modus_theme']))
+{
+	$conf['modus_theme'] = unserialize($conf['modus_theme']);
+}
+
+if (!empty($_GET['skin']) && !preg_match('/[^a-zA-Z0-9_-]/', $_GET['skin']))
+	$conf['modus_theme']['skin'] = $_GET['skin'];
+
+$this->assign('MODUS_CSS_VERSION', crc32(implode(',', array(
+		'a'.@$conf['modus_theme']['skin'],
+		@$conf['modus_theme']['album_thumb_size'],
+		ImageStdParams::get_by_type(IMG_SQUARE)->max_width(),
+	))));
+
+if (isset($_COOKIE['caps']))
+{
+	setcookie('caps',false,0,cookie_path());
+	pwg_set_session_var('caps', explode('x', $_COOKIE['caps']) );
+	/*file_put_contents(PHPWG_ROOT_PATH.$conf['data_location'].'tmp/modus.log', implode("\t", array(
+		date("Y-m-d H:i:s"), $_COOKIE['caps'], $_SERVER['HTTP_USER_AGENT']
+		))."\n", FILE_APPEND);*/
+}
+
+if ('mobile'==get_device())
+	$conf['tag_letters_column_number'] = 1;
+elseif ('tablet'==get_device())
+	$conf['tag_letters_column_number'] = min($conf['tag_letters_column_number'],3);
+
+$this->smarty->registerFilter('pre', 'rv_menubar');
+function rv_menubar($source)
+{
+	global $lang, $conf;
+
+  //$source = str_replace('{if isset($MENUBAR)} contentWithMenu{/if}', '', $source );
+	//$source = str_replace('{if isset($MENUBAR)} class="contentWithMenu"{/if}', '', $source );
+
+	$source = str_replace('<div id="imageHeaderBar">', '<div class=titrePage id=imageHeaderBar>', $source );
+	$source = str_replace('<div id=imageHeaderBar>',   '<div class=titrePage id=imageHeaderBar>', $source );
+
+	if (!isset($lang['modus_theme']))
+		load_language('theme.lang', dirname(__FILE__).'/');
+
+	// picture page actionButtons wrap for mobile
+	if (strpos($source, '<div id="imageToolBar">')!==false || strpos($source, '<div id=imageToolBar>')!==false){
+		if ( !($pos=strpos($source,'<div class="actionButtons">') ) )
+			$pos = strpos($source,'<div class=actionButtons>');
+		if ($pos !== false)
+		{
+			$source = substr_replace($source, '<div class=actionButtonsWrapper><a id=imageActionsSwitch class=pwg-button><span class="pwg-icon pwg-icon-ellipsis"></span></a>{combine_script version=1 id=\'modus.async\' path="themes/`$themeconf.id`/js/modus.async.js" load=\'async\'}', $pos, 0);
+			$pos = strpos($source,'caddie', $pos+1);
+			$pos = strpos($source,'</div>', $pos+1);
+			$source = substr_replace($source, '</div>', $pos, 0);
+		}
+	}
+
+	if ( ($pos=strpos($source, '<ul class="categoryActions">'))!==false || ($pos=strpos($source, '<ul class=categoryActions>'))!==false){
+		if ( ($pos2=strpos($source, '</ul>', $pos))!==false 
+			&& (substr_count($source, '<li>', $pos, $pos2-$pos) > 2) )
+			$source = substr_replace($source, '<a id=albumActionsSwitcher class=pwg-button><span class="pwg-icon pwg-icon-ellipsis"></span></a>{combine_script version=1 id=\'modus.async\' path="themes/`$themeconf.id`/js/modus.async.js" load=\'async\'}', $pos, 0);
+	}
+
+	$re = preg_quote('<img title="{$cat.icon_ts.TITLE}" src="', '/')
+			.'[^>]+'
+			.preg_quote('/recent{if $cat.icon_ts.IS_CHILD_DATE}_by_child{/if}.png"', '/')
+			.'[^>]+'
+			.preg_quote('alt="(!)">', '/');
+	$source = preg_replace('/'.$re.'/',
+		'<span class=albSymbol title="{$cat.icon_ts.TITLE}">{if $cat.icon_ts.IS_CHILD_DATE}'.MODUS_STR_RECENT_CHILD.'{else}'.MODUS_STR_RECENT.'{/if}</span>',
+		$source);
+
+	$re = preg_quote('<img title="{$thumbnail.icon_ts.TITLE}" src="', '/')
+		.'[^>]+'
+		.preg_quote('/recent.png" alt="(!)">', '/');
+	$source = preg_replace('/'.$re.'/',
+		'<span class=albSymbol title="{$thumbnail.icon_ts.TITLE}">'.MODUS_STR_RECENT.'</span>',
+		$source);
+
+	return $source;
+}
+
+
+if (!defined('IN_ADMIN') && defined('RVCDN') )
+{
+	$this->smarty->registerFilter('pre', 'rv_cdn_prefilter' );
+	add_event_handler('combined_script', 'rv_cdn_combined_script', EVENT_HANDLER_PRIORITY_NEUTRAL, 2);
+	//add_event_handler('combined_css_postfilter', 'rv_cdn_combined_css_postfilter');
+}
+
+function rv_cdn_prefilter($source, &$smarty)
+{
+	$source = str_replace('src="{$ROOT_URL}{$themeconf.icon_dir}/', 'src="'.RVCDN_ROOT_URL.'{$themeconf.icon_dir}/', $source);
+	$source = str_replace('url({$'.'ROOT_URL}', 'url('.RVCDN_ROOT_URL, $source);
+	return $source;
+}
+function rv_cdn_combined_script($url, $script)
+{
+	if (!$script->is_remote() /*&& strpos($script->path,'thumb.arrange')===false*/)
+		$url = RVCDN_ROOT_URL.$script->path;
+	return $url;
+}
+function rv_cdn_combined_css_postfilter($css)
+{
+	return str_replace('url(/', 'url('.RVCDN.'/', $css);
+}
+
+if (defined('RVPT_JQUERY_SRC'))
+add_event_handler('loc_begin_page_header', 'modus_loc_begin_page_header');
+function modus_loc_begin_page_header()
+{
+	global $template;
+	$all = $template->scriptLoader->get_all();
+	if ( ($jq = @$all['jquery']) )
+	{
+		$jq->set_path(RVPT_JQUERY_SRC);
+	}
+}
+
+add_event_handler('combinable_preparse', 'modus_combinable_preparse');
+function modus_combinable_preparse($template)
+{
+	global $conf;
+	include_once(dirname(__FILE__).'/functions.inc.php');
+  $template->smarty->unregisterPlugin('modifier', 'cssGradient');
+	$template->smarty->registerPlugin('modifier', 'cssGradient', 'modus_css_gradient');
+
+	include( dirname(__FILE__).'/skins/'.$conf['modus_theme']['skin'].'.inc.php' );
+
+	$template->assign( array(
+		'skin' => $skin,
+		'MODUS_ALBUM_THUMB_SIZE' => intval(@$conf['modus_theme']['album_thumb_size']),
+		'SQUARE_WIDTH' => ImageStdParams::get_by_type(IMG_SQUARE)->max_width(),
+		));
+}
+
+
+$this->smarty->registerPlugin('function', 'cssResolution', 'modus_css_resolution');
+function modus_css_resolution($params)
+{
+  $base = @$params['base'];
+  $min = @$params['min'];
+  $max = @$params['max'];
+  
+  $rules = array();
+  if (!empty($base))
+    $rules[] = $base;
+  foreach(array('min','max') as $type)
+  {
+    if (!empty($$type))
+      $rules[] = '(-webkit-'.$type.'-device-pixel-ratio:'.$$type.')';
+  }
+  $res = implode(' and ', $rules);
+
+  $rules = array();
+  if (!empty($base))
+    $rules[] = $base;
+  foreach(array('min','max') as $type)
+  {
+    if (!empty($$type))
+      $rules[] = '('.$type.'-resolution:'.round(96*$$type,1).'dpi)';
+  }
+  $res .= ','.implode(' and ', $rules);
+
+  return $res;
+}
+
+$this->smarty->registerPlugin('function', 'modus_thumbs', 'modus_thumbs');
+function modus_thumbs()
+{
+	global $template, $page, $conf;
+	if (!isset($_GET['rvts'])) echo '<div id=pop style=display:none;z-index:2;border:0;position:absolute></div>
+';
+
+	$default_params = $template->get_template_vars('derivative_params');
+	$row_height = $default_params->max_height();
+	$device = get_device();
+	$container_margin = 5;
+	
+	if ('mobile'==$device)
+	{
+		$horizontal_margin = floor(0.01*$row_height);
+		$container_margin = 0;
+	}
+	elseif ('tablet'==$device)
+		$horizontal_margin = floor(0.015*$row_height);
+	else
+		$horizontal_margin = floor(0.02*$row_height);
+	$vertical_margin = $horizontal_margin+1;
+
+	$candidates = array($default_params);
+	foreach( ImageStdParams::get_defined_type_map() as $params)
+	{
+		if ($params->max_height() > $row_height && $params->sizing->max_crop == $default_params->sizing->max_crop )
+		{
+			$candidates[] = $params;
+			if (count($candidates)==3)
+				break;
+		}
+	}
+
+	$do_pop = 'desktop' == $device;
+
+	$new_icon = " <span class=albSymbol title=\"".l10n('posted on %s')."\">".MODUS_STR_RECENT.'</span>';
+
+	foreach($template->get_template_vars('thumbnails') as $item)
+	{
+		$src_image = $item['src_image'];
+		$new = !empty($item['icon_ts']) ? sprintf($new_icon, format_date($item['date_available'])) : '';
+
+		$idx=0;
+		do {
+			$cparams = $candidates[$idx];
+			$c = new DerivativeImage($cparams, $src_image);
+			$csize = $c->get_size();
+			$idx++;
+		}
+		while($csize[1]<$row_height-2 && $idx<count($candidates));
+		
+		if ($do_pop && $idx<count($candidates))
+		{
+			$pop = new DerivativeImage($candidates[$idx], $src_image);
+			$popsize = $pop->get_size();
+		}
+		else
+		{
+			$pop = $c;
+			$popsize = $csize;
+		}
+
+		$a_style = '';
+		if ($csize[1] < $row_height)
+			$a_style=' style="top:'.floor(($row_height-$csize[1])/2).'px"';
+		elseif ($csize[1] > $row_height)
+		{
+			$csize = $c->get_scaled_size(9999, $row_height);
+		}
+?>
+<li style=width:<?=$csize[0]?>px;height:<?=$row_height?>px><a href="<?=$item['URL']?>"<?=$a_style?>><img src="<?=$c->get_url()?>" width=<?=$csize[0]?> height=<?=$csize[1]?> alt="<?=$item['TN_ALT']?>" data-pop='{"w":<?=$popsize[0]?>,"h":<?=$popsize[1]?>,"url":"<?=$pop->get_url()?>"}'></a><b class=popDesc><b><?=$item['NAME']?></b><?=$new?><br><?=$item['DESCRIPTION']?></b></li>
+<?php
+	}
+
+	$template->block_html_style(null,
+'#thumbnails{text-align:justify;overflow:hidden;margin-left:'.($container_margin-$horizontal_margin).'px;margin-right:'.$container_margin.'px}
+#thumbnails>li{float:left;overflow:hidden;position:relative;margin-bottom:'.$vertical_margin.'px;margin-left:'.$horizontal_margin.'px}#thumbnails>li>a{position:absolute;border:0}');
+	$template->block_footer_script(null, 'rvgtProcessor=new RVGThumbs({hMargin:'.$horizontal_margin.',rowHeight:'.$row_height.',resizeThreshold:'.$conf['modus_theme']['resize_threshold'].',resizeFactor:'.$conf['modus_theme']['resize_factor'].'});');
+
+	$my_base_name = basename(dirname(__FILE__));
+  // not async to avoid visible flickering reflow
+  $template->scriptLoader->add('modus.arange', 1, array('jquery'), 'themes/'.$my_base_name."/js/thumb.arrange.min.js", 0);
+	if ($do_pop)
+		$template->scriptLoader->add('modus.pop', 2, array('jquery'), 'themes/'.$my_base_name."/js/thumb.pop.js", 0);
+}
+
+add_event_handler('loc_end_index', 'modus_on_end_index');
+function modus_on_end_index()
+{
+	global $template;
+	if (!pwg_get_session_var('caps'))
+		$template->block_footer_script(null, 'try{document.cookie="caps="+(window.devicePixelRatio?window.devicePixelRatio:1)+"x"+document.documentElement.clientWidth+"x"+document.documentElement.clientHeight+";path='.cookie_path().'"}catch(er){document.cookie="caps=1x1x1x"+err.message;}');
+
+	$req = null;
+	$all = $template->scriptLoader->get_all();
+	if (isset($all['modus.thumb.pop']) || 'desktop' != get_device())
+		return;
+	foreach($all as $script)
+	{
+		if($script->load_mode==2 && !$script->is_remote() && count($script->precedents)==0)
+		{
+			$req = $script->id;
+			break;
+		}
+	}
+	if($req!=null)
+	{
+		$my_base_name = basename(dirname(__FILE__));
+    $template->scriptLoader->add('modus.pop', 2, array($req), 'themes/'.$my_base_name."/js/thumb.pop.js", 0);
+	}
+}
+
+add_event_handler('get_index_derivative_params', 'modus_get_index_photo_derivative_params', EVENT_HANDLER_PRIORITY_NEUTRAL+1 );
+function modus_get_index_photo_derivative_params($default)
+{
+	global $conf;
+	if (isset($conf['modus_theme']) && pwg_get_session_var('index_deriv')===null)
+	{
+		$type = $conf['modus_theme']['index_photo_deriv'];
+		if ( $caps=pwg_get_session_var('caps') )
+		{
+			if ( ($caps[0]>=2 && $caps[1]>=768) /*Ipad3 always has clientWidth 768 independently of orientation*/
+				|| $caps[0]>=3
+				)
+				$type = $conf['modus_theme']['index_photo_deriv_hdpi'];
+		}
+		$new = @ImageStdParams::get_by_type($type);
+		if ($new) return $new;
+	}
+	return $default;
+}
+
+add_event_handler('loc_end_index_category_thumbnails', 'modus_index_category_thumbnails' );
+function modus_index_category_thumbnails($items)
+{
+	global $page, $template, $conf;
+
+	if ('categories'!=$page['section'] || !($wh=@$conf['modus_theme']['album_thumb_size']) )
+		return $items;;
+
+	$template->assign('album_thumb_size', $wh);
+
+	$def_params = ImageStdParams::get_custom($wh, $wh, 1, $wh, $wh);
+	foreach( ImageStdParams::get_defined_type_map() as $params)
+	{
+		if ($params->max_height() == $wh)
+			$alt_params = $params;
+	}
+
+	foreach($items as &$item)
+	{
+		$src_image = $item['representative']['src_image'];
+		$src_size = $src_image->get_size();
+
+		$deriv = null;
+		if (isset($alt_params) && $src_size[0]>=$src_size[1])
+		{
+			$dsize = $alt_params->compute_final_size($src_size);
+			if ($dsize[0]>=$wh && $dsize[1]>=$wh)
+			{
+				$deriv = new DerivativeImage($alt_params, $src_image);
+				$rect = new ImageRect($dsize);
+				$rect->crop_h( $dsize[0]-$wh, $item['representative']['coi'] );
+				$rect->crop_v( $dsize[1]-$wh, $item['representative']['coi'] );
+				$l = - $rect->l;
+				$t = - $rect->t;
+			}
+		}
+
+		if (!isset($deriv))
+		{
+			$deriv = new DerivativeImage($def_params, $src_image);
+			$dsize = $deriv->get_size();
+			$l = intval($wh-$dsize[0])/2;
+			$t = intval($wh-$dsize[1])/2;
+		}
+		$item['modus_deriv'] = $deriv;
+
+		if (!empty($item['icon_ts']))
+			$item['icon_ts']['TITLE'] = time_since($item['max_date_last'], 'month');
+
+			$styles = array();
+		if ($l<-1 || $l>1)
+		{
+			//$styles[] = 'left:'.$l.'px';
+			$styles[] = 'left:'.(100*$l/$wh).'%';
+		}
+		if ($t<-1 || $t>1)
+			$styles[] = 'top:'.$t.'px';
+		if (count($styles))
+			$styles = ' style='.implode(';', $styles);
+		else
+			$styles='';
+		$item['MODUS_STYLE'] = $styles;
+	}
+
+	return $items;
+}
+
+add_event_handler('loc_begin_picture', 'modus_loc_begin_picture');
+function modus_loc_begin_picture()
+{
+	global $conf, $template;
+	if ( isset($_GET['slideshow']) )
+	{
+		$conf['picture_menu'] = false;
+		return;
+	}
+
+	if ( isset($_GET['map']) )
+		return;
+	$template->append('head_elements', '<script>if(document.documentElement.offsetWidth>1270)document.documentElement.className=\'wide\'</script>');
+}
+
+add_event_handler('loc_end_picture', 'modus_loc_end_picture');
+function modus_loc_end_picture()
+{
+	global $template, $picture;
+}
+
+add_event_handler('render_element_content', 'modus_picture_content', EVENT_HANDLER_PRIORITY_NEUTRAL-1, 2 );
+function modus_picture_content($content, $element_info)
+{
+	global $conf, $picture, $template;
+
+	if ( !empty($content) )
+	{// someone hooked us - so we skip;
+		return $content;
+	}
+
+	$unique_derivatives = array();
+	$show_original = isset($element_info['element_url']);
+	$added = array();
+	foreach($element_info['derivatives'] as $type => $derivative)
+	{
+		if ($type==IMG_SQUARE || $type==IMG_THUMB)
+			continue;
+		if (!array_key_exists($type, ImageStdParams::get_defined_type_map()))
+			continue;
+		$url = $derivative->get_url();
+		if (isset($added[$url]))
+			continue;
+		$added[$url] = 1;
+		$show_original &= !($derivative->same_as_source());
+		$unique_derivatives[$type]= $derivative;
+	}
+
+	if (isset($_COOKIE['picture_deriv'])) // ignore persistence
+		setcookie('picture_deriv', false, 0, cookie_path() );
+
+	$selected_derivative = null;
+	if (isset($_COOKIE['phavsz']))
+	{
+		$available_size = explode('x', $_COOKIE['phavsz']);
+		if (empty($available_size[2]))
+			$available_size[2] = 1;
+
+		foreach($unique_derivatives as $derivative)
+		{
+			$size = $derivative->get_size();
+			if (!$size)
+				break;
+
+			if ($size[0] <= $available_size[0] and $size[1] <= $available_size[1])
+			{
+				$selected_derivative = $derivative;
+			}
+			else
+			{
+				if ($available_size[2]>1 || !$selected_derivative)
+					$selected_derivative = $derivative;
+				break;
+			}
+		}
+
+		if ($available_size[2]>1 && $selected_derivative)
+		{
+			$ratio_w = $size[0] / $available_size[0];
+			$ratio_h = $size[1] / $available_size[1];
+			if ($ratio_w>1 || $ratio_h>1)
+			{
+				if ($ratio_w > $ratio_h)
+					$display_size = array( $available_size[0]/$available_size[2], floor($size[1] / $ratio_w / $available_size[2]) );
+				else
+					$display_size = array( floor($size[0] / $ratio_h / $available_size[2]), $available_size[1]/$available_size[2] );
+			}
+			else
+				$display_size = array( round($size[0]/$available_size[2]), round($size[1]/$available_size[2]) );
+			$template->assign( array(
+					'rvas_display_size' => $display_size,
+					'rvas_natural_size' => $size,
+				));
+		}
+
+		if (isset($picture['next'])
+			and $picture['next']['src_image']->is_original())
+		{
+			$next_best = null;
+			foreach( $picture['next']['derivatives'] as $derivative)
+			{
+				$size = $derivative->get_size();
+				if (!$size)
+					break;
+				if ($size[0] <= $available_size[0] and $size[1] <= $available_size[1])
+					$next_best = $derivative;
+				else
+				{
+					if ($available_size[2]>1 || !$next_best)
+						 $next_best = $derivative;
+					break;
+				}
+			}
+
+			if (isset($next_best))
+				$template->assign('U_PREFETCH', $derivative->get_url() );
+		}
+
+	}
+
+	$as_pending = false;
+	if (!$selected_derivative)
+	{
+		$as_pending = true;
+		$selected_derivative = $element_info['derivatives'][ pwg_get_session_var('picture_deriv',$conf['derivative_default_size']) ];
+	}
+
+
+
+	if ($show_original)
+	{
+		$template->assign( 'U_ORIGINAL', $element_info['element_url'] );
+	}
+
+	$template->append('current', array(
+			'selected_derivative' => $selected_derivative,
+			'unique_derivatives' => $unique_derivatives,
+		), true);
+
+
+	$template->set_filenames(
+		array('default_content'=>'picture_content_asize.tpl')
+		);
+
+	$template->assign( array(
+			'ALT_IMG' => $element_info['file'],
+			'COOKIE_PATH' => cookie_path(),
+			'RVAS_PENDING' => $as_pending,
+			)
+		);
+	return $template->parse( 'default_content', true);
+}
+
+?>
