Index: main/kernel/i18n/messages_en.xml
===================================================================
--- main/kernel/i18n/messages_en.xml	(revision 34071)
+++ main/kernel/i18n/messages_en.xml	(working copy)
@@ -23,11 +23,5 @@
     
     <!-- UI -->
    	<message key="KERNEL_NOSCRIPT">You must activate javascript to use this application.</message>
-    
-    <!-- Error -->
-    <message key="KERNEL_ERROR_DETAILS">Error details</message>
-    <message key="KERNEL_ERROR_401">Authorisation required</message>
-    <message key="KERNEL_ERROR_403">Access denied</message>
-    <message key="KERNEL_ERROR_404">Resource not found</message>
-    <message key="KERNEL_ERROR_500">Server error</message>
-</catalogue>
\ No newline at end of file
+   	
+</catalogue>
Index: main/kernel/i18n/messages_fr.xml
===================================================================
--- main/kernel/i18n/messages_fr.xml	(revision 34071)
+++ main/kernel/i18n/messages_fr.xml	(working copy)
@@ -23,10 +23,5 @@
     
     <!-- UI -->
    	<message key="KERNEL_NOSCRIPT">Vous devez activer le javascript pour utiliser cette application.</message>
-    
-    <message key="KERNEL_ERROR_DETAILS">Détails de l'erreur</message>
-    <message key="KERNEL_ERROR_401">Autorisation requise</message>
-    <message key="KERNEL_ERROR_403">Accès refusé</message>
-    <message key="KERNEL_ERROR_404">Page introuvable</message>
-    <message key="KERNEL_ERROR_500">Erreur serveur</message>
-</catalogue>
\ No newline at end of file
+   	
+</catalogue>
Index: main/kernel/pages/error/fatal.xsl
===================================================================
--- main/kernel/pages/error/fatal.xsl	(revision 34071)
+++ main/kernel/pages/error/fatal.xsl	(working copy)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!--
-   Copyright 2012 Anyware Services
+   Copyright 2015 Anyware Services
 
    Licensed under the Apache License, Version 2.0 (the "License");
    you may not use this file except in compliance with the License.
@@ -22,77 +22,88 @@
 <xsl:stylesheet version="1.0" 
                 xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
                 xmlns:ex="http://apache.org/cocoon/exception/1.0" 
+                xmlns:stringutils="org.apache.commons.lang.StringUtils"
                 exclude-result-prefixes="ex">
 
-    <xsl:param name="pageTitle">An error has occurred</xsl:param>
-    <xsl:param name="contextPath" />
-    <xsl:param name="realpath" />
-
-    <xsl:variable name="backslashedRealpath" select="translate($realpath, '\', '/')" />
+    <xsl:param name="contextPath"/>
+    <xsl:param name="realPath" />
+    <xsl:param name="code" />
 
-    <xsl:template match="/ex:exception-report">
+    <xsl:template match="/">
         <html>
             <head> 
-                <meta http-equiv="X-UA-Compatible" content="IE=10" />
+                <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
                 <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"/>
+                <title>Ametys - Fatal error</title>
+
+                <link rel="icon" type="image/x-icon" href="{$contextPath}/kernel/resources/img/favicon.ico" />
+                <link rel="shortcut icon" type="image/x-icon" href="{$contextPath}/kernel/resources/img/favicon.ico" />
                 
                 <link rel="stylesheet" type="text/css" href="{$contextPath}/kernel/resources/css/fatal.css"/>
            </head>
            <body>
-                <div class="ametys-fatal-page">
-                
-                    <div class="ametys-fatal-page-text">Too bad <span>:(</span></div>
-                    
-                    <div class="ametys-fatal-page-desc"><xsl:call-template name="message"/></div>
-                    
-                    <div class="ametys-fatal-page-details">
-                        <pre>
-                            <code>
-                                <xsl:call-template name="details"/>
-                            </code>
-                        </pre>
-                    </div>
-                </div>
+                <table>
+                    <tr class="main">
+                        <td>
+				               <div class="ametys-fatal-page-text">Too bad <span>:(</span></div>
+				               <div class="ametys-fatal-page-subtext">An error occurred.<br/>Please contact the administrator of the application.</div>
+                        </td>
+                    </tr>
+                    <tr class="secondary">
+                        <td>
+                            <div class="wrap">
+				               <xsl:call-template name="stacktrace">
+				                    <xsl:with-param name="exception" select="/ex:exception-report"/>
+                                    <xsl:with-param name="realPath" select="$realPath"/>
+				               </xsl:call-template>
+				            </div>
+                        </td>
+                    </tr>
+                </table>
            </body>
         </html>
     </xsl:template>
     
-    <xsl:template name="message">
-        <xsl:if test="@class"><xsl:value-of select="@class" /></xsl:if>
-        <xsl:if test="string-length (ex:message) != 0">
-            <xsl:if test="@class">:</xsl:if><xsl:value-of select="ex:message" />
-            <xsl:if test="ex:location">
-                <br />
-                <span style="font-weight: normal">
-                    <xsl:apply-templates select="ex:location" />
-                </span>
-            </xsl:if>
-        </xsl:if>
+    <xsl:template name="stacktrace">
+        <xsl:param name="exception"/>
+        <xsl:param name="realPath"/>
+
+        <xsl:variable name="backslashedRealpath" select="translate($realPath, '\', '/')" />
+        
+        <div class="stacktrace">
+            <h1>
+               <xsl:if test="@class"><xsl:value-of select="$exception/@class" /></xsl:if>
+               <xsl:if test="string-length ($exception/ex:message) != 0">
+                   <xsl:if test="@class">:</xsl:if><xsl:value-of select="$exception/ex:message" />
+                   <xsl:if test="$exception/ex:location">
+                       <br/>
+                       <xsl:apply-templates select="$exception/ex:location">
+                            <xsl:with-param name="backslashedRealpath" select="$backslashedRealpath"/>
+                       </xsl:apply-templates>
+                   </xsl:if>
+               </xsl:if>
+            </h1>
+            <pre><code><xsl:call-template name="escape-location"><xsl:with-param name="location" select="$exception/ex:stacktrace"/></xsl:call-template></code></pre>
+        </div>
     </xsl:template>
     
-    <xsl:template name="details"><xsl:value-of select="ex:stacktrace"/></xsl:template>
-    
     <xsl:template match="ex:location">
+        <xsl:param name="backslashedRealpath"/>
+        
         <xsl:if test="string-length(.) > 0">
             <em>
                 <xsl:value-of select="." />
             </em>
             <xsl:text> - </xsl:text>
         </xsl:if>
-        <xsl:call-template name="print-location" />
+        <xsl:call-template name="escape-location"><xsl:with-param name="location" select="@uri"/><xsl:with-param name="backslashedRealpath" select="$backslashedRealpath"/></xsl:call-template>
     </xsl:template>
+    
+    <xsl:template name="escape-location">
+        <xsl:param name="location"/>
+        <xsl:param name="backslashedRealpath"/>
 
-    <xsl:template name="print-location">
-        <xsl:choose>
-            <xsl:when test="contains(@uri, $backslashedRealpath)">
-                <xsl:text>context:/</xsl:text>
-                <xsl:value-of select="substring-after(@uri, $backslashedRealpath)" />
-            </xsl:when>
-            <xsl:otherwise>
-                <xsl:value-of select="@uri" />
-            </xsl:otherwise>
-        </xsl:choose>
-        <xsl:text> - </xsl:text><xsl:value-of select="@line" /> : <xsl:value-of select="@column" />
+        <xsl:value-of select="stringutils:replace($location, concat('file:/', $backslashedRealpath), 'context:/')"/>
     </xsl:template>
     
 </xsl:stylesheet>
Index: main/kernel/resources/css/fatal.css
===================================================================
--- main/kernel/resources/css/fatal.css	(revision 34071)
+++ main/kernel/resources/css/fatal.css	(working copy)
@@ -14,11 +14,18 @@
  *  limitations under the License.
  */
 
-body {
+html {
     background-color: #812281;
     background-size: cover;
-    font-family: 'Open Sans', 'Helvetica Neue', helvetica, arial, verdana, sans-serif;
+    font-family: 'Helvetica Neue', helvetica, arial, verdana, sans-serif;
+    font-size: 12px;
     color: #efefef;
+    height: 100%;
+}
+
+body {
+    height: 100%;
+    margin: 0;
 }
 
 /* The animation code **/
@@ -40,7 +47,6 @@
     	-o-transform: rotate(0deg);
     }
     100% {
-    	margin: 0 20px; 
 	 	transform: rotate(90deg); 
 	 	-ms-transform: rotate(90deg); 
     	-webkit-transform: rotate(90deg); 
@@ -49,49 +55,79 @@
     }
 }
 
-.ametys-fatal-page {
-	padding: 30px 20px 20px 10%;
+table {
+    table-layout: fixed;
+    width: 100%;
+    height: 100%;
+    border-collapse: collapse;
 }
-
-.ametys-fatal-page .ametys-fatal-page-text {
-    font-size: 130px;
-    line-height: 180px;
+table tr.main td {
+    padding: 3em 2em 2em 10%;
 }
 
-.ametys-fatal-page .ametys-fatal-page-text span {
-	 -ms-transform: rotate(90deg); 
+.ametys-fatal-page-text {
+    font-size: 11em;
+    line-height: 1.3em;
+}
+.ametys-fatal-page-text span {
+     -ms-transform: rotate(90deg); 
      -webkit-transform: rotate(90deg); 
      -moz-transform: rotate(90deg);     
      -o-transform: rotate(90deg);  
-	 margin: 0 20px;  
-	 display: inline-block; 
-	 animation-name: smiley;
-	 animation-duration: 4s;
-	 animation-timing-function: ease;
+     margin: 0 0.25em;  
+     display: inline-block; 
+     animation-name: smiley;
+     animation-duration: 4s;
+     animation-timing-function: ease;
 }
 
-.ametys-fatal-page .ametys-fatal-page-desc {
-    line-height: 32px;
-    font-size: 26px;
+.ametys-fatal-page-subtext
+{
+    font-size: 2em;
+    line-height: 1.5em;
 }
 
-.ametys-fatal-page .ametys-fatal-page-message {
-	overflow-x: hidden;
+table tr.secondary {
+    height: 100%;
+}
+table tr.secondary td {
+    padding: 0 1em 1em 10%;
 }
 
-.ametys-fatal-page .ametys-fatal-page-details {
-	padding: 4px;
-	background: none;
-	border: none;
+.wrap {
+    height: 100%;
+    overflow: auto;
 }
 
-.ametys-fatal-page .ametys-fatal-page-details > .x-panel-header .x-title {
-	font-size: 14px;
-	color: #097adb;
-	line-height: 32px;
+h1 {
+	font-size: 1em;
 }
 
-.ametys-fatal-page .ametys-fatal-page-details {
-	margin-top: 30px;
+.ametys-fatal-page-details {
+	padding: 0.3em;
+	background: none;
+	border: none;
+	margin-top: 0.5em;
 }
 
+/**
+ * MOBILE
+ */
+
+@media screen and (max-width: 960px), screen and (max-height: 360px)) {
+    html {
+        font-size: 9px;
+    }
+    table tr.main td {
+        padding: 3em 2em 2em 2em;
+    }
+    table tr.secondary td {
+        padding: 0 1em 1em 2em;
+    }
+    .wrap {
+        height: auto;
+    }
+    .ametys-fatal-page-text {
+        font-size: 7em;
+    }
+}
Index: main/kernel/sitemap.xmap
===================================================================
--- main/kernel/sitemap.xmap	(revision 34071)
+++ main/kernel/sitemap.xmap	(working copy)
@@ -48,14 +48,14 @@
 		</map:readers>
     
 		<map:serializers default="xhtml">
-            <map:serializer name="xhtml" src="org.ametys.core.cocoon.XHTMLSerializer" mime-type="text/html; charset=UTF-8" logger="sitemap.serializer.html" pool-max="32">
+            <map:serializer name="xhtml4" src="org.ametys.core.cocoon.XHTMLSerializer" mime-type="text/html; charset=UTF-8" logger="sitemap.serializer.html" pool-max="32">
                 <encoding>UTF-8</encoding>
                 <doctype-default>strict</doctype-default>
                 <omit-xml-declaration>yes</omit-xml-declaration>
                 <indent>false</indent>
             </map:serializer>
             
-            <map:serializer name="xhtml5" src="org.ametys.core.cocoon.XHTMLSerializer" mime-type="text/html; charset=UTF-8" logger="sitemap.serializer.html" pool-max="32">
+            <map:serializer name="xhtml" src="org.ametys.core.cocoon.XHTMLSerializer" mime-type="text/html; charset=UTF-8" logger="sitemap.serializer.html" pool-max="32">
                 <encoding>UTF-8</encoding>
                 <doctype-default>xhtml5</doctype-default>
                 <omit-xml-declaration>yes</omit-xml-declaration>
@@ -67,12 +67,12 @@
                 <indent>false</indent>
             </map:serializer>
             
-			<map:serializer logger="org.ametys.runtime.kernel.sitemap.serializer.xml" mime-type="text/xml" name="xml" pool-grow="4" pool-max="32" pool-min="16" src="org.apache.cocoon.serialization.XMLSerializer">
+			<map:serializer name="xml" logger="org.ametys.runtime.kernel.sitemap.serializer.xml" mime-type="text/xml" pool-grow="4" pool-max="32" pool-min="16" src="org.apache.cocoon.serialization.XMLSerializer">
 				<encoding>UTF-8</encoding>
 				<indent>no</indent>
 			</map:serializer>
 
-			<map:serializer logger="org.ametys.runtime.kernel.sitemap.serializer.text" mime-type="text/plain; charset=UTF-8" name="text" src="org.apache.cocoon.serialization.TextSerializer">   
+			<map:serializer name="text" logger="org.ametys.runtime.kernel.sitemap.serializer.text" mime-type="text/plain; charset=UTF-8" src="org.apache.cocoon.serialization.TextSerializer">   
                 <encoding>UTF-8</encoding>
             </map:serializer>
 		</map:serializers>
@@ -228,9 +228,7 @@
 			        		<map:generate type="exception" label="content"/>
 			          		<map:transform src="{xsl}">
 			            		<map:parameter name="realPath" value="{realpath:}"/>
-		    	        		<map:parameter name="contextPath" value="{request:contextPath}"/>
 			            		<map:parameter name="code" value="404"/>
-			            		<map:parameter name="pageTitle" value="Ametys - Resource not found"/>
 			          		</map:transform>
 			          		<map:transform type="i18n">
 			          			<map:parameter name="locale" value="{locale:locale}"/>
@@ -243,9 +241,7 @@
 			        		<map:generate type="exception" label="content"/>
 			          		<map:transform src="{xsl}">
 			            		<map:parameter name="realPath" value="{realpath:}"/>
-		    	        		<map:parameter name="contextPath" value="{request:contextPath}"/>
 			            		<map:parameter name="code" value="403"/>
-			            		<map:parameter name="pageTitle" value="Ametys - Access denied"/>
 			          		</map:transform>
 			          		<map:transform type="i18n">
 			          			<map:parameter name="locale" value="{locale:locale}"/>
@@ -259,9 +255,7 @@
 			        		<map:generate type="exception" label="content"/>
 			          		<map:transform src="{xsl}">
 			            		<map:parameter name="realPath" value="{realpath:}"/>
-		    	        		<map:parameter name="contextPath" value="{request:contextPath}"/>
 			            		<map:parameter name="code" value="401"/>
-			            		<map:parameter name="pageTitle" value="Ametys - Authorization required"/>
 			          		</map:transform>
 			          		<map:transform type="i18n">
 			          			<map:parameter name="locale" value="{locale:locale}"/>
@@ -274,9 +268,7 @@
 			        		<map:generate type="exception" label="content"/>
 			          		<map:transform src="{xsl}">
 			            		<map:parameter name="realPath" value="{realpath:}"/>
-		    	        		<map:parameter name="contextPath" value="{request:contextPath}"/>
 			            		<map:parameter name="code" value="500"/>
-			            		<map:parameter name="pageTitle" value="Ametys - An error occured"/>
 			          		</map:transform>
 			          		<map:transform type="i18n">
 			          			<map:parameter name="locale" value="{locale:locale}"/>
Index: main/plugin-core-ui/i18n/messages_en.xml
===================================================================
--- main/plugin-core-ui/i18n/messages_en.xml	(revision 34071)
+++ main/plugin-core-ui/i18n/messages_en.xml	(working copy)
@@ -18,8 +18,86 @@
 
     <message key="PLUGINS_CORE_UI_SHUTDOWN_DEFAULTTITLE">The application is stopped</message>
     <message key="PLUGINS_CORE_UI_SHUTDOWN_DEFAULTTEXT">The application is now stop. You can close your browser or click on the following link to restart it now.</message>
+
+    <!-- +
+         | Workspace
+         + -->
+    <message key="WORKSPACE_AMETYS_MAIN_ERROR_NOJS">This application can't work without javascript</message>
+    <message key="WORKSPACE_AMETYS_SPLASHSCREEN_LOADING">Loading. Please wait ... </message>
+    <message key="WORKSPACE_AMETYS_SPLASHSCREEN_APP_AMETYS_VERSION">powered by Ametys </message>
+    
+    <!-- +
+         | Login screen
+         + -->
+    <message key="PLUGINS_CORE_UI_LOGIN_SCREEN_TITLE">Log in</message>
+    <message key="PLUGINS_CORE_UI_LOGIN_SCREEN_FORM_LABEL">Sign into your account</message>
+    <message key="PLUGINS_CORE_UI_LOGIN_SCREEN_FORM_LOGIN">User id</message>
+    <message key="PLUGINS_CORE_UI_LOGIN_SCREEN_FORM_PASSWORD">Password</message>
+    <message key="PLUGINS_CORE_UI_LOGIN_SCREEN_FORM_SUBMIT">Login</message>
+    <message key="PLUGINS_CORE_UI_LOGIN_SCREEN_FORM_FORGOT_PASSWORD">Forgot password?</message>
+    <message key="PLUGINS_CORE_UI_LOGIN_SCREEN_FORM_PERSIST">Remember me</message>
+    <message key="PLUGINS_CORE_UI_LOGIN_SCREEN_FORM_AUTH_FAILURE">Invalid user id or password</message>
+    
+    <!-- +
+         | Incomplete configuration
+         + -->
+    <message key="PLUGINS_CORE_UI_INCOMPLETE_CONFIG_HEAD">Incomplete configuration</message>
+    <message key="PLUGINS_CORE_UI_INCOMPLETE_CONFIG_TITLE">Warning</message>
+    <message key="PLUGINS_CORE_UI_INCOMPLETE_CONFIG_TEXT">At first launch or after an update,<br/>it is necessary to configure the application.<br/>This message may also appear if<br/>your current configuration is incorrect.</message>
+    <message key="PLUGINS_CORE_UI_INCOMPLETE_CONFIG_LINK">Configure the application</message>
     
     <!-- +
+         | Safe mode
+         + -->
+    <message key="PLUGINS_CORE_UI_SAFE_MODE_PAGE_TITLE">Safe mode</message>
+    <message key="PLUGINS_CORE_UI_SAFE_MODE_TITLE">Unable to initialize the application</message>
+    <message key="PLUGINS_CORE_UI_SAFE_MODE_TEXT">The application could not initialize correctly and started in safe mode.<br/>You should check application's logs and settings.</message>
+    <message key="PLUGINS_CORE_UI_SAFE_MODE_LINK">Manage the application</message>
+    
+    <!-- +
+         | Unsupported browser
+         + -->
+    <message key="PLUGINS_CORE_UI_UNSUPPORTED_BROWSER_HEAD">Browser not compatible</message>
+    <message key="PLUGINS_CORE_UI_UNSUPPORTED_BROWSER_TITLE">Sorry…</message>
+    <message key="PLUGINS_CORE_UI_UNSUPPORTED_BROWSER_TEXT1">This application does not support your browser<br/>or the version you are using{0}.</message>
+    <message key="PLUGINS_CORE_UI_UNSUPPORTED_BROWSER_TEXT2">Here is the list of supported browsers:</message>
+    <message key="PLUGINS_CORE_UI_UNSUPPORTED_BROWSER_NAME_ie">Microsoft Internet Explorer</message>
+    <message key="PLUGINS_CORE_UI_UNSUPPORTED_BROWSER_NAME_ff">Mozilla Firefox</message>
+    <message key="PLUGINS_CORE_UI_UNSUPPORTED_BROWSER_NAME_ch">Google Chrome</message>
+    <message key="PLUGINS_CORE_UI_UNSUPPORTED_BROWSER_NAME_sa">Apple Safari</message>
+    <message key="PLUGINS_CORE_UI_UNSUPPORTED_BROWSER_NAME_op">Opera</message>
+    <message key="PLUGINS_CORE_UI_UNSUPPORTED_BROWSER_DOC">Consult the user manual of your application to know the recommended browsers.</message>
+    <message key="PLUGINS_CORE_UI_UNSUPPORTED_BROWSER_LINK">Documentation</message>
+    
+    <message key="PLUGINS_CORE_UI_SUPPORTED_BROWSER_UNKNOWN">Unknown</message>
+    <message key="PLUGINS_CORE_UI_SUPPORTED_BROWSER_VERSIONS_ALL">All versions</message>
+    <message key="PLUGINS_CORE_UI_SUPPORTED_BROWSER_VERSIONS_LOWER">Versions {0} and lower</message>
+    <message key="PLUGINS_CORE_UI_SUPPORTED_BROWSER_VERSIONS_ABOVE">Versions {0} and above</message>
+    <message key="PLUGINS_CORE_UI_SUPPORTED_BROWSER_VERSIONS_BETWEEN">Versions {0} to {1}</message>
+    
+    <!-- +
+         | Errors
+         + -->
+    <message key="PLUGINS_CORE_UI_ERROR_401_HEAD">Login required</message>
+    <message key="PLUGINS_CORE_UI_ERROR_401_TITLE">Who are you?</message>
+    <message key="PLUGINS_CORE_UI_ERROR_401_TEXT">The application failed to identify you.<br/>You can try again by refreshing this page<br/>or contact the application administrator if the problem persits.</message>
+    <message key="PLUGINS_CORE_UI_ERROR_401_LINK">Try again</message>
+    
+    <message key="PLUGINS_CORE_UI_ERROR_403_HEAD">Access denied</message>
+    <message key="PLUGINS_CORE_UI_ERROR_403_TITLE">Stop!</message>
+    <message key="PLUGINS_CORE_UI_ERROR_403_TEXT">Your rights are insufficient to access this page.<br/>You can contact the application administrator to know more.</message>
+    
+    <message key="PLUGINS_CORE_UI_ERROR_404_HEAD">Page not found</message>
+    <message key="PLUGINS_CORE_UI_ERROR_404_TITLE">Lost?!</message>
+    <message key="PLUGINS_CORE_UI_ERROR_404_TEXT">The requested page does not exist.</message>
+    <message key="PLUGINS_CORE_UI_ERROR_404_LINK">Return to the application</message>
+    
+    <message key="PLUGINS_CORE_UI_ERROR_500_HEAD">Server error</message>
+    <message key="PLUGINS_CORE_UI_ERROR_500_TITLE">Oops...</message>
+    <message key="PLUGINS_CORE_UI_ERROR_500_TEXT">An error occurred. The page can not be displayed.<br/>You can try again later<br/>or contact the application administrator if the problem persits.</message>
+    <message key="PLUGINS_CORE_UI_ERROR_500_LINK">Technical details</message>
+            
+    <!-- +
          | Config 
          + -->
     <message key="PLUGINS_CORE_UI_DEBUG_UI_LABEL">User interfaces</message>
@@ -582,52 +660,4 @@
     <message key="PLUGINS_CORE_UI_REQUESTSTRACKER_TOOL_DISPLAYMESSAGE_PARAMETERS">Parameters</message>
     <message key="PLUGINS_CORE_UI_REQUESTSTRACKER_TOOL_DISPLAYMESSAGE_RESPONSE">Response</message>
     
-    <!-- +
-         | Workspace
-         + -->
-    <message key="WORKSPACE_AMETYS_MAIN_ERROR_NOJS">This application can't work without javascript</message>
-    <message key="WORKSPACE_AMETYS_SPLASHSCREEN_LOADING">Loading. Please wait ... </message>
-    <message key="WORKSPACE_AMETYS_SPLASHSCREEN_APP_AMETYS_VERSION">powered by Ametys </message>
-    
-    <!-- +
-         | Login screen
-         + -->
-    <message key="PLUGINS_CORE_UI_LOGIN_SCREEN_TITLE">Log in</message>
-    <message key="PLUGINS_CORE_UI_LOGIN_SCREEN_FORM_LABEL">Sign into your account</message>
-    <message key="PLUGINS_CORE_UI_LOGIN_SCREEN_FORM_LOGIN">User id</message>
-    <message key="PLUGINS_CORE_UI_LOGIN_SCREEN_FORM_PASSWORD">Password</message>
-    <message key="PLUGINS_CORE_UI_LOGIN_SCREEN_FORM_SUBMIT">Login</message>
-    <message key="PLUGINS_CORE_UI_LOGIN_SCREEN_FORM_FORGOT_PASSWORD">Forgot password?</message>
-    <message key="PLUGINS_CORE_UI_LOGIN_SCREEN_FORM_PERSIST">Remember me</message>
-    <message key="PLUGINS_CORE_UI_LOGIN_SCREEN_FORM_AUTH_FAILURE">Invalid user id or password</message>
-    
-    <!-- +
-         | Incomplete configuration
-         + -->
-    <message key="PLUGINS_CORE_UI_INCOMPLETE_CONFIG_PAGE_TITLE">Configuration incomplete</message>
-    <message key="PLUGINS_CORE_UI_INCOMPLETE_CONFIG_TITLE">Unable to load configuration</message>
-    <message key="PLUGINS_CORE_UI_INCOMPLETE_CONFIG_TEXT">The application configuration is incomplete or incorrect.&lt;br/&gt;You must configure the application before using it.</message>
-    <message key="PLUGINS_CORE_UI_INCOMPLETE_CONFIG_BTN">Configure the application</message>
-    
-    <!-- +
-         | Safe mode
-         + -->
-    <message key="PLUGINS_CORE_UI_SAFE_MODE_PAGE_TITLE">Safe mode</message>
-    <message key="PLUGINS_CORE_UI_SAFE_MODE_TITLE">Unable to initialize the application</message>
-    <message key="PLUGINS_CORE_UI_SAFE_MODE_TEXT">The application could not initialize correctly and started in safe mode.&lt;br/&gt;You should check application's logs and settings.</message>
-    <message key="PLUGINS_CORE_UI_SAFE_MODE_BTN">Manage the application</message>
-    
-    <!-- +
-         | Unsupported browser
-         + -->
-    <message key="PLUGINS_CORE_UI_UNSUPPORTED_BROWSER_TITLE">Browser not supported</message>
-    <message key="PLUGINS_CORE_UI_UNSUPPORTED_BROWSER_TEXT1">This application does not support your Web browser or the version you are using{0}.</message>
-    <message key="PLUGINS_CORE_UI_UNSUPPORTED_BROWSER_TEXT2">Here is the list of supported browsers:</message>
-    <message key="PLUGINS_CORE_UI_UNSUPPORTED_BROWSER_DOC">Consult the user manual of your application to know the recommanded browsers.</message>
-	<message key="PLUGINS_CORE_UI_UNSUPPORTED_BROWSER_DOC_BTN">Documentation</message>
-    <message key="PLUGINS_CORE_UI_SUPPORTED_BROWSER_UNKNOWN">Unknown</message>
-    <message key="PLUGINS_CORE_UI_SUPPORTED_BROWSER_VERSIONS_ALL">All versions</message>
-    <message key="PLUGINS_CORE_UI_SUPPORTED_BROWSER_VERSIONS_LOWER">Versions {0} and lower</message>
-    <message key="PLUGINS_CORE_UI_SUPPORTED_BROWSER_VERSIONS_ABOVE">Versions {0} and above</message>
-    <message key="PLUGINS_CORE_UI_SUPPORTED_BROWSER_VERSIONS_BETWEEN">Versions {0} to {1}</message>
 </catalogue>
Index: main/plugin-core-ui/i18n/messages_fr.xml
===================================================================
--- main/plugin-core-ui/i18n/messages_fr.xml	(revision 34071)
+++ main/plugin-core-ui/i18n/messages_fr.xml	(working copy)
@@ -16,9 +16,87 @@
    -->
 <catalogue xml:lang="fr">
 	
-    <message key="PLUGINS_CORE_UI_SHUTDOWN_DEFAULTTITLE">L'application est arrêtée</message>
+    <message key="PLUGINS_CORE_UI_SHUTDOWN_DEFAULTTITLE">L'application est arrêtée</message> 
     <message key="PLUGINS_CORE_UI_SHUTDOWN_DEFAULTTEXT">L'application est maintenant arrêtée. Vous pouvez fermer votre navigateur ou cliquer sur le lien suivant pour la redémarrer maintenant.</message>
+
+    <!-- +
+         | Workspace
+         + -->
+    <message key="WORKSPACE_AMETYS_MAIN_ERROR_NOJS">Cette application ne peut pas fonctionner en l'absence de javascript</message>
+    <message key="WORKSPACE_AMETYS_SPLASHSCREEN_LOADING">Chargement en cours. Veuillez patienter ... </message>
+    <message key="WORKSPACE_AMETYS_SPLASHSCREEN_APP_AMETYS_VERSION">motorisé par Ametys</message>
+    
+    <!-- +
+         | Login screen
+         + -->
+    <message key="PLUGINS_CORE_UI_LOGIN_SCREEN_TITLE">Connexion</message>
+    <message key="PLUGINS_CORE_UI_LOGIN_SCREEN_FORM_LABEL">Entrez vos identifiants</message>
+    <message key="PLUGINS_CORE_UI_LOGIN_SCREEN_FORM_LOGIN">Identifiant</message>
+    <message key="PLUGINS_CORE_UI_LOGIN_SCREEN_FORM_PASSWORD">Mot de passe</message>
+    <message key="PLUGINS_CORE_UI_LOGIN_SCREEN_FORM_SUBMIT">Se connecter</message>
+    <message key="PLUGINS_CORE_UI_LOGIN_SCREEN_FORM_FORGOT_PASSWORD">Mot de passe oublié ?</message>
+    <message key="PLUGINS_CORE_UI_LOGIN_SCREEN_FORM_PERSIST">Se souvenir de moi</message>
+    <message key="PLUGINS_CORE_UI_LOGIN_SCREEN_FORM_AUTH_FAILURE">Identifiant ou mot de passe incorrect</message>
+    
+    <!-- +
+         | Incomplete configuration
+         + -->
+    <message key="PLUGINS_CORE_UI_INCOMPLETE_CONFIG_HEAD">Configuration incomplète</message>
+    <message key="PLUGINS_CORE_UI_INCOMPLETE_CONFIG_TITLE">Attention</message>
+    <message key="PLUGINS_CORE_UI_INCOMPLETE_CONFIG_TEXT">Lors du premier lancement ou suite à une mise à jour, il est nécessaire de configurer l'application.<br/><br/>Ce message peut aussi apparaître si votre configuration actuelle est incorrecte.</message>
+    <message key="PLUGINS_CORE_UI_INCOMPLETE_CONFIG_LINK">Configurer l'application</message>
+    
+    <!-- +
+         | Safe mode
+         + -->
+    <message key="PLUGINS_CORE_UI_SAFE_MODE_HEAD">Mode sans échec</message>
+    <message key="PLUGINS_CORE_UI_SAFE_MODE_TITLE">Problème</message>
+    <message key="PLUGINS_CORE_UI_SAFE_MODE_TEXT">L'application a été démarrée en mode sans échec suite à un problème d'initialisation.<br/><br/>Dans ce mode, vous avez uniquement accès à certains outils d'aministration afin de réparer le problème.<br/><br/>Vous pouvez commencer par consulter les journaux applicatifs et vérifier la configuration.</message>
+    <message key="PLUGINS_CORE_UI_SAFE_MODE_LINK">Administrer l'application</message>
+    
+    <!-- +
+         | Unsupported browser
+         + -->
+    <message key="PLUGINS_CORE_UI_UNSUPPORTED_BROWSER_HEAD">Navigateur incompatible</message>
+    <message key="PLUGINS_CORE_UI_UNSUPPORTED_BROWSER_TITLE">Désolé…</message>
+    <message key="PLUGINS_CORE_UI_UNSUPPORTED_BROWSER_TEXT1">L'application n'est pas compatible avec votre navigateur<br/>ou la version que vous utilisez{0}.</message>
+    <message key="PLUGINS_CORE_UI_UNSUPPORTED_BROWSER_TEXT2">Voici la liste des navigateurs compatibles :</message>
+    <message key="PLUGINS_CORE_UI_UNSUPPORTED_BROWSER_NAME_ie">Microsoft Internet Explorer</message>
+    <message key="PLUGINS_CORE_UI_UNSUPPORTED_BROWSER_NAME_ff">Mozilla Firefox</message>
+    <message key="PLUGINS_CORE_UI_UNSUPPORTED_BROWSER_NAME_ch">Google Chrome</message>
+    <message key="PLUGINS_CORE_UI_UNSUPPORTED_BROWSER_NAME_sa">Apple Safari</message>
+    <message key="PLUGINS_CORE_UI_UNSUPPORTED_BROWSER_NAME_op">Opera</message>
+    <message key="PLUGINS_CORE_UI_UNSUPPORTED_BROWSER_DOC">Consultez le manuel utilisateur pour connaître les navigateurs recommandés.</message>
+    <message key="PLUGINS_CORE_UI_UNSUPPORTED_BROWSER_LINK">Documentation</message>
+    
+    <message key="PLUGINS_CORE_UI_SUPPORTED_BROWSER_UNKNOWN">Inconnu</message>
+    <message key="PLUGINS_CORE_UI_SUPPORTED_BROWSER_VERSIONS_ALL">Toutes versions</message>
+    <message key="PLUGINS_CORE_UI_SUPPORTED_BROWSER_VERSIONS_LOWER">Versions {0} et inférieures</message>
+    <message key="PLUGINS_CORE_UI_SUPPORTED_BROWSER_VERSIONS_ABOVE">Versions {0} et supérieures</message>
+    <message key="PLUGINS_CORE_UI_SUPPORTED_BROWSER_VERSIONS_BETWEEN">Versions {0} à {1}</message>
+    
+    <!-- +
+         | Errors
+         + -->
+    <message key="PLUGINS_CORE_UI_ERROR_401_HEAD">Identification requise</message>
+    <message key="PLUGINS_CORE_UI_ERROR_401_TITLE">Qui êtes-vous ?</message>
+    <message key="PLUGINS_CORE_UI_ERROR_401_TEXT">L'application n'a pas réussi à vous identifier.<br/><br/>Vous pouvez essayer à nouveau en rafraichissant cette page ou contacter l'administrateur de l'application si le problème persiste.</message>
+    <message key="PLUGINS_CORE_UI_ERROR_401_LINK">Réessayer</message>
     
+    <message key="PLUGINS_CORE_UI_ERROR_403_HEAD">Accès refusé</message>
+    <message key="PLUGINS_CORE_UI_ERROR_403_TITLE">Stop !</message>
+    <message key="PLUGINS_CORE_UI_ERROR_403_TEXT">Vos droits sont insuffisants pour accéder à cette page.<br/><br/>Vous pouvez contacter l'admistrateur de l'application pour en savoir plus.</message>
+    
+    <message key="PLUGINS_CORE_UI_ERROR_404_HEAD">Page introuvable</message>
+    <message key="PLUGINS_CORE_UI_ERROR_404_TITLE">Perdu ?!</message>
+    <message key="PLUGINS_CORE_UI_ERROR_404_TEXT">La page que vous avez demandé n'existe pas.</message>
+    <message key="PLUGINS_CORE_UI_ERROR_404_LINK">Revenir à l'application</message>
+    
+    <message key="PLUGINS_CORE_UI_ERROR_500_HEAD">Erreur serveur</message>
+    <message key="PLUGINS_CORE_UI_ERROR_500_TITLE">Oups...</message>
+    <message key="PLUGINS_CORE_UI_ERROR_500_TEXT">Une erreur est survenue. Il est impossible d'afficher la page.<br/><br/>Vous pouvez réessayer ultérieurement ou contacter l'administrateur de l'application si le problème persiste.</message>
+    <message key="PLUGINS_CORE_UI_ERROR_500_LINK">Détails techniques</message>
+        
     <!-- +
          | Config 
          + -->
@@ -582,52 +660,4 @@
     <message key="PLUGINS_CORE_UI_REQUESTSTRACKER_TOOL_DISPLAYMESSAGE_PARAMETERS">Paramètres</message>
     <message key="PLUGINS_CORE_UI_REQUESTSTRACKER_TOOL_DISPLAYMESSAGE_RESPONSE">Réponse</message>
 
-    <!-- +
-         | Workspace
-         + -->
-    <message key="WORKSPACE_AMETYS_MAIN_ERROR_NOJS">Cette application ne peut pas fonctionner en l'absence de javascript</message>
-    <message key="WORKSPACE_AMETYS_SPLASHSCREEN_LOADING">Chargement en cours. Veuillez patienter ... </message>
-    <message key="WORKSPACE_AMETYS_SPLASHSCREEN_APP_AMETYS_VERSION">motorisé par Ametys </message>
-    
-    <!-- +
-         | Login screen
-         + -->
-    <message key="PLUGINS_CORE_UI_LOGIN_SCREEN_TITLE">Connexion</message>
-    <message key="PLUGINS_CORE_UI_LOGIN_SCREEN_FORM_LABEL">Entrez vos identifiants</message>
-    <message key="PLUGINS_CORE_UI_LOGIN_SCREEN_FORM_LOGIN">Identifiant</message>
-    <message key="PLUGINS_CORE_UI_LOGIN_SCREEN_FORM_PASSWORD">Mot de passe</message>
-    <message key="PLUGINS_CORE_UI_LOGIN_SCREEN_FORM_SUBMIT">Se connecter</message>
-    <message key="PLUGINS_CORE_UI_LOGIN_SCREEN_FORM_FORGOT_PASSWORD">Mot de passe oublié ?</message>
-    <message key="PLUGINS_CORE_UI_LOGIN_SCREEN_FORM_PERSIST">Se souvenir de moi</message>
-    <message key="PLUGINS_CORE_UI_LOGIN_SCREEN_FORM_AUTH_FAILURE">Identifiant ou mot de passe incorrect</message>
-    
-    <!-- +
-         | Incomplete configuration
-         + -->
-    <message key="PLUGINS_CORE_UI_INCOMPLETE_CONFIG_PAGE_TITLE">Configuration incomplète</message>
-    <message key="PLUGINS_CORE_UI_INCOMPLETE_CONFIG_TITLE">Impossible de charger la configuration</message>
-    <message key="PLUGINS_CORE_UI_INCOMPLETE_CONFIG_TEXT">La configuration de l'application est incomplète ou incorrecte.&lt;br/&gt;Vous devez configurer l'application avant de pouvoir l'utiliser.</message>
-    <message key="PLUGINS_CORE_UI_INCOMPLETE_CONFIG_BTN">Configurer l'application</message>
-    
-    <!-- +
-         | Safe mode
-         + -->
-    <message key="PLUGINS_CORE_UI_SAFE_MODE_PAGE_TITLE">Mode sans échec</message>
-    <message key="PLUGINS_CORE_UI_SAFE_MODE_TITLE">Impossible d'initialiser l'application</message>
-    <message key="PLUGINS_CORE_UI_SAFE_MODE_TEXT">L'application n'a pu s'initialiser correctement et a démarré en mode sans échec.&lt;br/&gt;Vous devriez vérifier les logs et le paramétrage de l'application.</message>
-    <message key="PLUGINS_CORE_UI_SAFE_MODE_BTN">Administrer l'application</message>
-    
-    <!-- +
-         | Unsupported browser
-         + -->
-    <message key="PLUGINS_CORE_UI_UNSUPPORTED_BROWSER_TITLE">Navigateur internet non supporté</message>
-    <message key="PLUGINS_CORE_UI_UNSUPPORTED_BROWSER_TEXT1">L'application n'est pas compatible avec votre navigateur internet ou la version que vous utilisez{0}.</message>
-    <message key="PLUGINS_CORE_UI_UNSUPPORTED_BROWSER_TEXT2">Voici la liste des navigateurs compatibles :</message>
-    <message key="PLUGINS_CORE_UI_UNSUPPORTED_BROWSER_DOC">Consultez le manuel utilisateur pour connaître les navigateurs recommandés.</message>
-    <message key="PLUGINS_CORE_UI_UNSUPPORTED_BROWSER_DOC_BTN">Documentation</message>
-    <message key="PLUGINS_CORE_UI_SUPPORTED_BROWSER_UNKNOWN">Inconnu</message>
-    <message key="PLUGINS_CORE_UI_SUPPORTED_BROWSER_VERSIONS_ALL">Toutes versions</message>
-    <message key="PLUGINS_CORE_UI_SUPPORTED_BROWSER_VERSIONS_LOWER">Versions {0}  et inférieures</message>
-    <message key="PLUGINS_CORE_UI_SUPPORTED_BROWSER_VERSIONS_ABOVE">Versions {0} et supérieures</message>
-    <message key="PLUGINS_CORE_UI_SUPPORTED_BROWSER_VERSIONS_BETWEEN">Versions {0} à {1}</message>
 </catalogue>
Index: main/plugin-core-ui/pages/common.xsl
===================================================================
--- main/plugin-core-ui/pages/common.xsl	(revision 34071)
+++ main/plugin-core-ui/pages/common.xsl	(working copy)
@@ -18,111 +18,116 @@
                 xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
                 xmlns:ametys="org.ametys.core.util.AmetysXSLTHelper"
                 xmlns:ex="http://apache.org/cocoon/exception/1.0" 
-                xmlns:escape="org.apache.commons.lang.StringEscapeUtils"
                 xmlns:i18n="http://apache.org/cocoon/i18n/2.1">
     
-    <xsl:import href="plugin:core-ui://stylesheets/kernel.xsl"/>    
-    
-    <xsl:param name="realpath" />
-    
     <xsl:variable name="contextPath" select="ametys:uriPrefix(false())"/>
-    <xsl:variable name="workspaceURI" select="ametys:workspacePrefix()"/>
-    <xsl:variable name="debug-mode" select="ametys:config('runtime.debug.ui')"/>
-    
-    <xsl:variable name="backslashedRealpath" select="translate($realpath, '\', '/')" />
     
     <xsl:template match="/">
         <html>
             <head>
-                <title>Ametys - <xsl:call-template name="description"/></title>
-                <meta http-equiv="X-UA-Compatible" content="IE=10" />
+                <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
                 <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"/>
+                <title>Ametys - <xsl:call-template name="head"/></title>
+
+                <link rel="icon" type="image/x-icon" href="{$contextPath}/kernel/resources/img/favicon.ico" />
+                <link rel="shortcut icon" type="image/x-icon" href="{$contextPath}/kernel/resources/img/favicon.ico" />
                 
-                <link rel="stylesheet" type="text/css" href="{$contextPath}/plugins/core-ui/resources/css/error.css"/>
+                <link rel="stylesheet" type="text/css">
+                    <xsl:attribute name="href"><xsl:value-of select="$contextPath"/><xsl:call-template name="css-file"/></xsl:attribute>
+                </link>
             </head>
             <body>
-                <noscript><xsl:comment><xsl:copy-of select="/"/></xsl:comment></noscript>
-                <noscript><i18n:text i18n:key="WORKSPACE_AMETYS_MAIN_ERROR_NOJS" i18n:catalogue="plugin.core-ui"/></noscript>
-                
-                <xsl:call-template name="kernel-base">
-                    <xsl:with-param name="theme">triton</xsl:with-param>
-                </xsl:call-template>
-                
-                <script type="text/javascript" src="{$contextPath}/plugins/core-ui/resources/js/Ametys/error/ErrorPage.js"/>
-                
-                <script>
-                    Ext.onReady(function ()
-                    {
-                        Ext.application({
-                            requires: ['Ext.container.Viewport'],
-                            name: 'AmetysLogin',
-                            
-                            appFolder: 'ametys',
-                            enableQuickTips: false,
-                            launch: function() {
-                                Ext.create('Ext.container.Viewport', {
-                                    layout: 'fit',
-                                    items: Ext.create('Ametys.error.ErrorPage', {
-                                        text: "<xsl:call-template name="text"/>",
-                                        description: "<xsl:call-template name="description"/>",
-                                        message: "<xsl:call-template name="message"/>",
-                                        details: "<xsl:call-template name="details"/>"
-                                    })
-                                });
-                            }
-                        })
-                    });
-                </script>
+                <div class="bg">
+                    <xsl:call-template name="body-start"/>
+	                <table class="main">
+	                    <thead>
+	                       <tr><td>&#160;</td></tr>
+	                    </thead>
+	                    <tbody>
+	                        <tr class="main">
+	                            <td class="main">
+	                                <div class="wrap">
+	                                   <xsl:call-template name="inside-wrap"/>
+	                                </div>
+	                            </td>
+	                        </tr>
+	                        <xsl:variable name="row-additionnal"><xsl:call-template name="row-additionnal"/></xsl:variable>
+	                        <xsl:if test="$row-additionnal != ''">
+	                           <tr class="additionnal">
+	                               <td>
+	                                   <xsl:call-template name="row-additionnal"/>
+	                               </td>
+	                           </tr> 
+                            </xsl:if>    
+	                    </tbody>
+                        <tfoot>
+                           <tr><td>&#160;</td></tr>
+                        </tfoot>
+	                </table>
+	                <div class="head"><i18n:text i18n:catalogue='application' i18n:key='APPLICATION_PRODUCT_LABEL'/></div>
+	                <div class="foot">
+	                    <p>
+	                        <i18n:text i18n:key="WORKSPACE_AMETYS_SPLASHSCREEN_APP_AMETYS_VERSION" i18n:catalogue="plugin.core-ui"/>
+	                        <xsl:variable name="Versions" select="ametys:versions()"/>
+	                        <xsl:if test="$Versions/Component[Name='Ametys' and Version]">
+	                            &#160;<xsl:value-of select="Component[Name='Ametys']/Version"/>
+	                        </xsl:if>
+	                    </p>
+	                </div>
+	           </div>
             </body>
         </html>
     </xsl:template>
+
+    <xsl:template name="inside-wrap">
+         <h1>
+           <xsl:attribute name="class"><xsl:call-template name="title-class"/></xsl:attribute>
+           <xsl:call-template name="title"/>
+         </h1>
+         <p class="text">
+           <xsl:call-template name="text"/>
+         </p>
+         <xsl:call-template name="text-additionnal"/>
+    </xsl:template>
     
+    <xsl:template name="css-file">/plugins/core-ui/resources/css/special/common.css</xsl:template>
+    <xsl:template name="body-start"/>
+    <xsl:template name="title"/>
+    <xsl:template name="title-class"/>
     <xsl:template name="text"/>
-    <xsl:template name="description"/>
+    <xsl:template name="text-additionnal"/>
+    <xsl:template name="row-additionnal"/>
     
-    <xsl:template name="message">
-        <xsl:variable name="message">
-            <xsl:if test="@class"><xsl:value-of select="/ex:exception-report/@class" /></xsl:if>
-            <xsl:if test="string-length (/ex:exception-report/ex:message) != 0">
-                <xsl:if test="@class">:</xsl:if><xsl:value-of select="/ex:exception-report/ex:message" />
-                <xsl:if test="/ex:exception-report/ex:location">
-                    <xsl:text>&lt;br/&gt;</xsl:text><xsl:apply-templates select="/ex:exception-report/ex:location" />
-                </xsl:if>
+    <xsl:template name="button">
+        <xsl:param name="text"/>
+        <xsl:param name="action"/>
+        <xsl:param name="href">javascript:void(0)</xsl:param>
+        <xsl:param name="condition"/>
+        <xsl:param name="type">load</xsl:param>
+
+        <script type="text/javascript">
+            <xsl:if test="$condition">
+                if (<xsl:copy-of select="$condition"/>)
+                {
             </xsl:if>
-        </xsl:variable>
-        <xsl:value-of select="escape:escapeJavaScript(escape:escapeHtml($message))"/>
-    </xsl:template>
-    
-    
-    <xsl:template name="details"><xsl:value-of select="escape:escapeJavaScript(escape:escapeHtml(/ex:exception-report/ex:stacktrace))"/></xsl:template>
-    
-    <xsl:template match="ex:location">
-        <xsl:if test="string-length(.) > 0">
-            <em>
-                <xsl:value-of select="." />
-            </em>
-            <xsl:text> - </xsl:text>
-        </xsl:if>
-        <xsl:call-template name="print-location" />
-    </xsl:template>
+            document.write("&lt;p class='additionnal'>\
+                          &lt;a href=\"<xsl:value-of select='$href'/>\" onclick=\"<xsl:if test="$type = 'toggle'">this.className = (this.className == '') ? 'toggled' : ''; </xsl:if><xsl:if test="$type = 'load'">this.parentNode.remove(this); document.getElementById('pulse').style.display = '';</xsl:if> <xsl:copy-of select='$action'/>\">\
+                          <xsl:copy-of select="$text"/>\
+                          &lt;/a>\
+                          &lt;/p>\
+                          <xsl:if test="$type = 'load'">\
+                          &lt;div class=\"la-ball-pulse la-dark la-2x\" id=\"pulse\" style=\"display: none\">\
+                          &lt;div>&lt;/div>\
+                          &lt;div>&lt;/div>\
+                          &lt;div>&lt;/div>\
+                          &lt;/div>\
+                          </xsl:if>\
+                          ");
+            <xsl:if test="$condition">
+                }
+            </xsl:if>
+        </script>
 
-    <xsl:template name="print-location">
-        <xsl:choose>
-            <xsl:when test="contains(@uri, $backslashedRealpath)">
-                <xsl:text>context:/</xsl:text>
-                <xsl:value-of select="substring-after(@uri, $backslashedRealpath)" />
-            </xsl:when>
-            <xsl:otherwise>
-                <xsl:value-of select="@uri" />
-            </xsl:otherwise>
-        </xsl:choose>
-        <xsl:text> - </xsl:text><xsl:value-of select="@line" /> : <xsl:value-of select="@column" />
     </xsl:template>
     
-    <!-- Do not load Ametys scripts -->
-    <xsl:template name="ametys-scripts"/>
-    
-    <!-- Ignore browser compatibility -->
-    <xsl:template name="kernel-browsers"/>
-    
-</xsl:stylesheet>
\ No newline at end of file
+</xsl:stylesheet>
Index: main/plugin-core-ui/pages/error/401.xsl
===================================================================
--- main/plugin-core-ui/pages/error/401.xsl	(revision 34071)
+++ main/plugin-core-ui/pages/error/401.xsl	(working copy)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!--
-   Copyright 2012 Anyware Services
+   Copyright 2015 Anyware Services
 
    Licensed under the Apache License, Version 2.0 (the "License");
    you may not use this file except in compliance with the License.
@@ -22,8 +22,15 @@
     
     <xsl:import href="common.xsl"/>    
     
-    <xsl:template name="text">401</xsl:template>
-    
-    <xsl:template name="description"><i18n:text i18n:key="KERNEL_ERROR_401" i18n:catalogue="kernel"/></xsl:template>
+    <xsl:template name="head"><i18n:text i18n:key="PLUGINS_CORE_UI_ERROR_401_HEAD" i18n:catalogue="plugin.core-ui"/></xsl:template>
+    <xsl:template name="title"><i18n:text i18n:key="PLUGINS_CORE_UI_ERROR_401_TITLE" i18n:catalogue="plugin.core-ui"/></xsl:template>
+    <xsl:template name="title-class">long</xsl:template>
+    <xsl:template name="text"><i18n:text i18n:key="PLUGINS_CORE_UI_ERROR_401_TEXT" i18n:catalogue="plugin.core-ui"/></xsl:template>
+    <xsl:template name="text-additionnal">
+        <xsl:call-template name="button">
+            <xsl:with-param name="text"><i18n:text i18n:key='PLUGINS_CORE_UI_ERROR_401_LINK' i18n:catalogue='plugin.core-ui'/></xsl:with-param>
+            <xsl:with-param name="action">location.reload(true);</xsl:with-param>
+        </xsl:call-template>
+    </xsl:template>
     
 </xsl:stylesheet>
\ No newline at end of file
Index: main/plugin-core-ui/pages/error/403.xsl
===================================================================
--- main/plugin-core-ui/pages/error/403.xsl	(revision 34071)
+++ main/plugin-core-ui/pages/error/403.xsl	(working copy)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!--
-   Copyright 2012 Anyware Services
+   Copyright 2015 Anyware Services
 
    Licensed under the Apache License, Version 2.0 (the "License");
    you may not use this file except in compliance with the License.
@@ -22,8 +22,8 @@
     
     <xsl:import href="common.xsl"/>    
     
-    <xsl:template name="text">403</xsl:template>
-    
-    <xsl:template name="description"><i18n:text i18n:key="KERNEL_ERROR_403" i18n:catalogue="kernel"/></xsl:template>
+    <xsl:template name="head"><i18n:text i18n:key="PLUGINS_CORE_UI_ERROR_403_HEAD" i18n:catalogue="plugin.core-ui"/></xsl:template>
+    <xsl:template name="title"><i18n:text i18n:key="PLUGINS_CORE_UI_ERROR_403_TITLE" i18n:catalogue="plugin.core-ui"/></xsl:template>
+    <xsl:template name="text"><i18n:text i18n:key="PLUGINS_CORE_UI_ERROR_403_TEXT" i18n:catalogue="plugin.core-ui"/></xsl:template>
     
 </xsl:stylesheet>
\ No newline at end of file
Index: main/plugin-core-ui/pages/error/404.xsl
===================================================================
--- main/plugin-core-ui/pages/error/404.xsl	(revision 34071)
+++ main/plugin-core-ui/pages/error/404.xsl	(working copy)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!--
-   Copyright 2012 Anyware Services
+   Copyright 2015 Anyware Services
 
    Licensed under the Apache License, Version 2.0 (the "License");
    you may not use this file except in compliance with the License.
@@ -22,8 +22,16 @@
     
     <xsl:import href="common.xsl"/>    
     
-    <xsl:template name="text">Hmm…</xsl:template>
+    <xsl:template name="head"><i18n:text i18n:key="PLUGINS_CORE_UI_ERROR_404_HEAD" i18n:catalogue="plugin.core-ui"/></xsl:template>
+    <xsl:template name="title"><i18n:text i18n:key="PLUGINS_CORE_UI_ERROR_404_TITLE" i18n:catalogue="plugin.core-ui"/></xsl:template>
+    <xsl:template name="text"><i18n:text i18n:key="PLUGINS_CORE_UI_ERROR_404_TEXT" i18n:catalogue="plugin.core-ui"/></xsl:template>
     
-    <xsl:template name="description"><i18n:text i18n:key="KERNEL_ERROR_404" i18n:catalogue="kernel"/></xsl:template>
+    <xsl:template name="text-additionnal">
+        <xsl:call-template name="button">
+            <xsl:with-param name="text"><i18n:text i18n:key='PLUGINS_CORE_UI_ERROR_404_LINK' i18n:catalogue='plugin.core-ui'/></xsl:with-param>
+            <xsl:with-param name="href" select="ametys:uriPrefix()"/>
+            <xsl:with-param name="condition">window.parent == window</xsl:with-param>
+        </xsl:call-template>
+    </xsl:template>
     
 </xsl:stylesheet>
\ No newline at end of file
Index: main/plugin-core-ui/pages/error/500.xsl
===================================================================
--- main/plugin-core-ui/pages/error/500.xsl	(revision 34071)
+++ main/plugin-core-ui/pages/error/500.xsl	(working copy)
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!--
-   Copyright 2012 Anyware Services
+   Copyright 2015 Anyware Services
 
    Licensed under the Apache License, Version 2.0 (the "License");
    you may not use this file except in compliance with the License.
@@ -15,14 +15,36 @@
    limitations under the License.
    -->
 <xsl:stylesheet version="1.0" 
-                xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
+                xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                 xmlns:ametys="org.ametys.core.util.AmetysXSLTHelper"
                 xmlns:ex="http://apache.org/cocoon/exception/1.0" 
                 xmlns:i18n="http://apache.org/cocoon/i18n/2.1">
+
+    <xsl:import href="common.xsl"/>
     
-    <xsl:import href="common.xsl"/>    
+    <xsl:import href="stacktrace.xsl"/>
+
+    <xsl:param name="realPath" />
     
-    <xsl:template name="text">Oops :(</xsl:template>
-    <xsl:template name="description"><i18n:text i18n:key="KERNEL_ERROR_500" i18n:catalogue="kernel"/></xsl:template>
+    <xsl:template name="head"><i18n:text i18n:key="PLUGINS_CORE_UI_ERROR_500_HEAD" i18n:catalogue="plugin.core-ui"/></xsl:template>
+    <xsl:template name="title"><i18n:text i18n:key="PLUGINS_CORE_UI_ERROR_500_TITLE" i18n:catalogue="plugin.core-ui"/></xsl:template>
+    <xsl:template name="text"><i18n:text i18n:key="PLUGINS_CORE_UI_ERROR_500_TEXT" i18n:catalogue="plugin.core-ui"/></xsl:template>
     
+    <xsl:template name="text-additionnal">
+	    <xsl:if test="not(ametys:config('runtime.debug.ui') = 0)">
+	        <xsl:call-template name="button">
+	            <xsl:with-param name="text"><i18n:text i18n:key='PLUGINS_CORE_UI_ERROR_500_LINK' i18n:catalogue='plugin.core-ui'/></xsl:with-param>
+	            <xsl:with-param name="action">document.body.className = (document.body.className == '') ? 'stacktrace' : '';</xsl:with-param>
+	            <xsl:with-param name="type">toggle</xsl:with-param>
+	        </xsl:call-template>
+	    </xsl:if>
+	</xsl:template>
+	
+    <xsl:template name="row-additionnal">
+        <xsl:call-template name="stacktrace">
+	        <xsl:with-param name="exception" select="/ex:exception-report"/>
+	        <xsl:with-param name="realPath" select="$realPath"/>
+        </xsl:call-template>
+    </xsl:template>
+        
 </xsl:stylesheet>
\ No newline at end of file
Index: main/plugin-core-ui/pages/error/common.xsl
===================================================================
--- main/plugin-core-ui/pages/error/common.xsl	(revision 34071)
+++ main/plugin-core-ui/pages/error/common.xsl	(nonexistent)
@@ -1,128 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-   Copyright 2012 Anyware Services
-
-   Licensed under the Apache License, Version 2.0 (the "License");
-   you may not use this file except in compliance with the License.
-   You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-   Unless required by applicable law or agreed to in writing, software
-   distributed under the License is distributed on an "AS IS" BASIS,
-   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-   See the License for the specific language governing permissions and
-   limitations under the License.
-   -->
-<xsl:stylesheet version="1.0" 
-                xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
-                xmlns:ametys="org.ametys.core.util.AmetysXSLTHelper"
-                xmlns:ex="http://apache.org/cocoon/exception/1.0" 
-                xmlns:escape="org.apache.commons.lang.StringEscapeUtils"
-                xmlns:i18n="http://apache.org/cocoon/i18n/2.1">
-    
-    <xsl:import href="plugin:core-ui://stylesheets/kernel.xsl"/>    
-    
-    <xsl:param name="realpath" />
-    
-    <xsl:variable name="contextPath" select="ametys:uriPrefix(false())"/>
-    <xsl:variable name="workspaceURI" select="ametys:workspacePrefix()"/>
-    <xsl:variable name="debug-mode" select="ametys:config('runtime.debug.ui')"/>
-    
-    <xsl:variable name="backslashedRealpath" select="translate($realpath, '\', '/')" />
-    
-    <xsl:template match="/">
-        <html>
-            <head>
-                <title>Ametys - <xsl:call-template name="description"/></title>
-                <meta http-equiv="X-UA-Compatible" content="IE=10" />
-                <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"/>
-                
-                <link rel="stylesheet" type="text/css" href="{$contextPath}/plugins/core-ui/resources/css/error.css"/>
-            </head>
-            <body>
-                <noscript><xsl:comment><xsl:copy-of select="/"/></xsl:comment></noscript>
-                <noscript><i18n:text i18n:key="WORKSPACE_AMETYS_MAIN_ERROR_NOJS" i18n:catalogue="plugin.core-ui"/></noscript>
-                
-                <xsl:call-template name="kernel-base">
-                    <xsl:with-param name="theme">triton</xsl:with-param>
-                </xsl:call-template>
-                
-                <script type="text/javascript" src="{$contextPath}/plugins/core-ui/resources/js/Ametys/error/ErrorPage.js"/>
-                
-                <script>
-                    Ext.onReady(function ()
-                    {
-                        Ext.application({
-                            requires: ['Ext.container.Viewport'],
-                            name: 'AmetysLogin',
-                            
-                            appFolder: 'ametys',
-                            enableQuickTips: false,
-                            launch: function() {
-                                Ext.create('Ext.container.Viewport', {
-                                    layout: 'fit',
-                                    items: Ext.create('Ametys.error.ErrorPage', {
-                                        text: "<xsl:call-template name="text"/>",
-                                        description: "<xsl:call-template name="description"/>",
-                                        message: "<xsl:call-template name="message"/>",
-                                        details: "<xsl:call-template name="details"/>"
-                                    })
-                                });
-                            }
-                        })
-                    });
-                </script>
-            </body>
-        </html>
-    </xsl:template>
-    
-    <xsl:template name="text"/>
-    <xsl:template name="description"/>
-    
-    <xsl:template name="message">
-        <xsl:variable name="message">
-            <xsl:if test="@class"><xsl:value-of select="/ex:exception-report/@class" /></xsl:if>
-            <xsl:if test="string-length (/ex:exception-report/ex:message) != 0">
-                <xsl:if test="@class">:</xsl:if><xsl:value-of select="/ex:exception-report/ex:message" />
-                <xsl:if test="/ex:exception-report/ex:location">
-                    <xsl:text>&lt;br/&gt;</xsl:text><xsl:apply-templates select="/ex:exception-report/ex:location" />
-                </xsl:if>
-            </xsl:if>
-        </xsl:variable>
-        <xsl:value-of select="escape:escapeJavaScript(escape:escapeHtml($message))"/>
-    </xsl:template>
-    
-    
-    <xsl:template name="details"><xsl:value-of select="escape:escapeJavaScript(escape:escapeHtml(/ex:exception-report/ex:stacktrace))"/></xsl:template>
-    
-    <xsl:template match="ex:location">
-        <xsl:if test="string-length(.) > 0">
-            <em>
-                <xsl:value-of select="." />
-            </em>
-            <xsl:text> - </xsl:text>
-        </xsl:if>
-        <xsl:call-template name="print-location" />
-    </xsl:template>
-
-    <xsl:template name="print-location">
-        <xsl:choose>
-            <xsl:when test="contains(@uri, $backslashedRealpath)">
-                <xsl:text>context:/</xsl:text>
-                <xsl:value-of select="substring-after(@uri, $backslashedRealpath)" />
-            </xsl:when>
-            <xsl:otherwise>
-                <xsl:value-of select="@uri" />
-            </xsl:otherwise>
-        </xsl:choose>
-        <xsl:text> - </xsl:text><xsl:value-of select="@line" /> : <xsl:value-of select="@column" />
-    </xsl:template>
-    
-    <!-- Do not load Ametys scripts -->
-    <xsl:template name="ametys-scripts"/>
-    
-    <!-- Ignore browser compatibility -->
-    <xsl:template name="kernel-browsers"/>
-    
-</xsl:stylesheet>
\ No newline at end of file
Index: main/plugin-core-ui/pages/error/stacktrace.xsl
===================================================================
--- main/plugin-core-ui/pages/error/stacktrace.xsl	(revision 0)
+++ main/plugin-core-ui/pages/error/stacktrace.xsl	(revision 0)
@@ -0,0 +1,66 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+   Copyright 2012 Anyware Services
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+   -->
+<xsl:stylesheet version="1.0" 
+                xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+                xmlns:ametys="org.ametys.core.util.AmetysXSLTHelper"
+                xmlns:stringutils="org.apache.commons.lang.StringUtils"                
+                xmlns:ex="http://apache.org/cocoon/exception/1.0" 
+                xmlns:i18n="http://apache.org/cocoon/i18n/2.1">
+
+    <xsl:template name="stacktrace">
+        <xsl:param name="exception"/>
+        <xsl:param name="realPath"/>
+
+        <xsl:variable name="backslashedRealpath" select="translate($realPath, '\', '/')" />
+        
+        <div class="stacktrace">
+            <h1>
+               <xsl:if test="@class"><xsl:value-of select="$exception/@class" /></xsl:if>
+               <xsl:if test="string-length ($exception/ex:message) != 0">
+                   <xsl:if test="@class">:</xsl:if><xsl:value-of select="$exception/ex:message" />
+                   <xsl:if test="$exception/ex:location">
+                       <br/>
+                       <xsl:apply-templates select="$exception/ex:location">
+                            <xsl:with-param name="backslashedRealpath" select="$backslashedRealpath"/>
+                       </xsl:apply-templates>
+                   </xsl:if>
+               </xsl:if>
+            </h1>
+            <pre><code><xsl:call-template name="escape-location"><xsl:with-param name="location" select="$exception/ex:stacktrace"/></xsl:call-template></code></pre>
+        </div>
+    </xsl:template>
+    
+    <xsl:template match="ex:location">
+        <xsl:param name="backslashedRealpath"/>
+        
+        <xsl:if test="string-length(.) > 0">
+            <em>
+                <xsl:value-of select="." />
+            </em>
+            <xsl:text> - </xsl:text>
+        </xsl:if>
+        <xsl:call-template name="escape-location"><xsl:with-param name="location" select="@uri"/><xsl:with-param name="backslashedRealpath" select="$backslashedRealpath"/></xsl:call-template>
+    </xsl:template>
+    
+    <xsl:template name="escape-location">
+        <xsl:param name="location"/>
+        <xsl:param name="backslashedRealpath"/>
+
+        <xsl:value-of select="stringutils:replace($location, concat('file:/', $backslashedRealpath), 'context:/')"/>
+    </xsl:template>
+
+</xsl:stylesheet>    
Index: main/plugin-core-ui/pages/public/browser-unsupported.xsl
===================================================================
--- main/plugin-core-ui/pages/public/browser-unsupported.xsl	(revision 34071)
+++ main/plugin-core-ui/pages/public/browser-unsupported.xsl	(working copy)
@@ -20,159 +20,159 @@
                 xmlns:escape="org.apache.commons.lang.StringEscapeUtils"
                 xmlns:i18n="http://apache.org/cocoon/i18n/2.1">
     
-    <xsl:param name="doc"/>
-    <xsl:param name="browser"/><!-- current browser -->
-    <xsl:param name="browserversion"/><!-- current version -->
-    <xsl:param name="supported"/><!-- the json list of supported browsers -->
+    <xsl:param name="doc" select="ametys:requestParameter('doc')"/><!-- absolute link to online doc -->
+    <xsl:param name="browser" select="ametys:requestParameter('browser')"/><!-- current browser -->
+    <xsl:param name="browserversion" select="ametys:requestParameter('browserversion')"/><!-- current version -->
+    <xsl:param name="supported" select="ametys:requestParameter('supported')"/><!-- the json list of supported browsers -->
     
     <xsl:variable name="contextPath" select="ametys:uriPrefix(false())"/>
-    <xsl:variable name="workspaceURI" select="ametys:workspacePrefix()"/>
-    <xsl:variable name="debug-mode" select="ametys:config('runtime.debug.ui')"/>
     
     <xsl:template match="/">
         <html>
             <head>
-                <title>Ametys - <i18n:text i18n:key='PLUGINS_CORE_UI_UNSUPPORTED_BROWSER_TITLE' i18n:catalogue='plugin.core-ui'/></title>
-                <meta http-equiv="X-UA-Compatible" content="IE=10" />
-                <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"/>
+                <meta http-equiv="X-UA-Compatible" content="IE=Edge" />
+                <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"/>
+                <title>Ametys - <i18n:text i18n:key="PLUGINS_CORE_UI_UNSUPPORTED_BROWSER_HEAD" i18n:catalogue="plugin.core-ui"/></title>
+
+                <link rel="icon" type="image/x-icon" href="{$contextPath}/kernel/resources/img/favicon.ico" />
+                <link rel="shortcut icon" type="image/x-icon" href="{$contextPath}/kernel/resources/img/favicon.ico" />
                 
-                <link rel="stylesheet" type="text/css" href="{$contextPath}/plugins/core-ui/resources/css/unsupported-browser.css"/>
+                <link rel="stylesheet" type="text/css" href="{$contextPath}/plugins/core-ui/resources/css/special/browsers.css"/>
             </head>
             <body>
-                    <div class="unsupported-browser-header"><i18n:text i18n:catalogue='application' i18n:key='APPLICATION_PRODUCT_LABEL'/></div>
-                    <table class="unsupported-browser-inner-container" width="900px" height="100%" align="center">
-                        <tr>
-                            <td valign="middle">
-                                <div class="text-container">
-                                    <div class="unsupported-browser-text"><i18n:text i18n:key="PLUGINS_CORE_UI_UNSUPPORTED_BROWSER_TITLE" i18n:catalogue='plugin.core-ui'/></div>
-                            
-                                    <div class="unsupported-browser-desc">
-                                        <xsl:call-template name="description"/>
-                                    </div>                    
-                                    
-                                    <xsl:call-template name="showBrowsers"/>
-                                    
-                                    <div class="unsupported-browser-redirect-text">
-                                        <xsl:choose>
-                                            <xsl:when test="$doc != ''">
-                                                <a href="{$doc}" target="_blank">
-                                                    <i18n:text i18n:key="PLUGINS_CORE_UI_UNSUPPORTED_BROWSER_DOC" i18n:catalogue='plugin.core-ui'/>
-                                                </a>
-                                            </xsl:when>
-                                            <xsl:otherwise>
-                                                <i18n:text i18n:key="PLUGINS_CORE_UI_UNSUPPORTED_BROWSER_DOC" i18n:catalogue='plugin.core-ui'/>
-                                            </xsl:otherwise>
-                                        </xsl:choose>
-                                     </div>
-                                </div>
-                            </td>
-                        </tr>
-                    </table>
+                    <table class="main">
+                        <thead>
+                           <tr><td><i18n:text i18n:catalogue='application' i18n:key='APPLICATION_PRODUCT_LABEL'/></td></tr>
+                        </thead>
+                        <tbody>
+                            <tr class="main">
+                                <td class="main">
+                                    <div class="wrap">
+                                        <h1 class="long">
+                                            <i18n:text i18n:key="PLUGINS_CORE_UI_UNSUPPORTED_BROWSER_TITLE" i18n:catalogue="plugin.core-ui"/>
+                                        </h1>
+                                        <p class="text">
+									        <i18n:translate>
+									                <i18n:text i18n:key="PLUGINS_CORE_UI_UNSUPPORTED_BROWSER_TEXT1" i18n:catalogue='plugin.core-ui'/>
+									                <i18n:param><xsl:call-template name="browserName"/></i18n:param>
+									        </i18n:translate>
+									        <br/>
+									        
+									        <xsl:if test="$supported">
+									           <i18n:text i18n:key="PLUGINS_CORE_UI_UNSUPPORTED_BROWSER_TEXT2" i18n:catalogue='plugin.core-ui'/>
+									        </xsl:if>
+                                        </p>
+                                        <xsl:if test="$supported">
+									        <div class="browsers">
+									            <xsl:call-template name="showBrowsers"/>
+									            <div class="browsers-end"></div>
+									        </div>
+									    </xsl:if>
+								        
+								        <p class="bottomtext">
+								           <i18n:text i18n:key="PLUGINS_CORE_UI_UNSUPPORTED_BROWSER_DOC" i18n:catalogue='plugin.core-ui'/>
+								        </p>
+								        <xsl:if test="$doc != ''">
+								            <xsl:call-template name="button">
+								                <xsl:with-param name="text"><i18n:text i18n:key='PLUGINS_CORE_UI_UNSUPPORTED_BROWSER_DOC_BTN' i18n:catalogue='plugin.core-ui'/></xsl:with-param>
+								                <xsl:with-param name="href" select="$doc"/>
+								            </xsl:call-template>
+								        </xsl:if>
+                                    </div>
+                                </td>
+                            </tr>
+                        </tbody>
+                        <tfoot>
+                           <tr>
+                                <td>
+				                        <p>
+				                            <i18n:text i18n:key="WORKSPACE_AMETYS_SPLASHSCREEN_APP_AMETYS_VERSION" i18n:catalogue="plugin.core-ui"/>
+				                            <xsl:variable name="Versions" select="ametys:versions()"/>
+				                            <xsl:if test="$Versions/Component[Name='Ametys' and Version]">
+				                                &#160;<xsl:value-of select="Component[Name='Ametys']/Version"/>
+				                            </xsl:if>
+				                        </p>
+                                </td>
+                           </tr>
+                        </tfoot>
+                    </table>            
             </body>
         </html>
     </xsl:template>
     
-    <xsl:template name="description">
-        <i18n:translate>
-                <i18n:text i18n:key="PLUGINS_CORE_UI_UNSUPPORTED_BROWSER_TEXT1" i18n:catalogue='plugin.core-ui'/>
-                <i18n:param><xsl:call-template name="browserName"/></i18n:param>
-        </i18n:translate>
-        <br/>
-        <i18n:text i18n:key="PLUGINS_CORE_UI_UNSUPPORTED_BROWSER_TEXT2" i18n:catalogue='plugin.core-ui'/>
+    <xsl:template name="button">
+        <xsl:param name="text"/>
+        <xsl:param name="href">javascript:void(0)</xsl:param>
+        
+        <p class="additionnal">
+            <a href="{$href}"><xsl:copy-of select="$text"/> ></a>
+        </p>    
     </xsl:template>
     
     <xsl:template name="browserName">
-        <xsl:choose>
-            <xsl:when test="$browser = 'ie'"><xsl:text> </xsl:text>(Microsoft Internet Explorer<xsl:text> </xsl:text><xsl:value-of select="$browserversion"/>)</xsl:when>
-            <xsl:when test="$browser = 'ff'"><xsl:text> </xsl:text>(Mozilla Firefox<xsl:text> </xsl:text><xsl:value-of select="$browserversion"/>)</xsl:when>
-            <xsl:when test="$browser = 'ch'"><xsl:text> </xsl:text>(Google Chrome<xsl:text> </xsl:text><xsl:value-of select="$browserversion"/>)</xsl:when>
-            <xsl:when test="$browser = 'sa'"><xsl:text> </xsl:text>(Apple Safari<xsl:text> </xsl:text><xsl:value-of select="$browserversion"/>)</xsl:when>
-            <xsl:when test="$browser = 'op'"><xsl:text> </xsl:text>(Opera<xsl:text> </xsl:text><xsl:value-of select="$browserversion"/>)</xsl:when>
-        </xsl:choose>
+        <xsl:if test="string-length($browser) > 0">
+	        <xsl:text> (</xsl:text>
+	        <i18n:text i18n:catalogue='plugin.core-ui'>PLUGINS_CORE_UI_UNSUPPORTED_BROWSER_NAME_<xsl:value-of select="$browser"/></i18n:text>
+	        <xsl:text> </xsl:text>
+	        <xsl:value-of select="$browserversion"/>
+	        <xsl:text>)</xsl:text>
+	    </xsl:if>
     </xsl:template>
     
     <xsl:template name="showBrowsers">
-        <div class="browsers">
-            <xsl:call-template name="parseBrowser">
-                <xsl:with-param name="browserCode" select="'ie'"/>
-                <xsl:with-param name="browserName" select="'Internet Explorer'"/>
-                <xsl:with-param name="browserIcon" select="'ie_48.png'"/>
-                <xsl:with-param name="supported" select="$supported"/>
-            </xsl:call-template>
-            <xsl:call-template name="parseBrowser">
-                <xsl:with-param name="browserCode" select="'ff'"/>
-                <xsl:with-param name="browserName" select="'Mozilla Firefox'"/>
-                <xsl:with-param name="browserIcon" select="'firefox_48.png'"/>
-                <xsl:with-param name="supported" select="$supported"/>
-            </xsl:call-template>
-            <xsl:call-template name="parseBrowser">
-                <xsl:with-param name="browserCode" select="'ch'"/>
-                <xsl:with-param name="browserName" select="'Google Chrome'"/>
-                <xsl:with-param name="browserIcon" select="'chrome_48.png'"/>
-                <xsl:with-param name="supported" select="$supported"/>
-            </xsl:call-template>
-            <xsl:call-template name="parseBrowser">
-                <xsl:with-param name="browserCode" select="'sa'"/>
-                <xsl:with-param name="browserName" select="'Apple Safari'"/>
-                <xsl:with-param name="browserIcon" select="'safari_48.png'"/>
-                <xsl:with-param name="supported" select="$supported"/>
-            </xsl:call-template>
-            <xsl:call-template name="parseBrowser">
-                <xsl:with-param name="browserCode" select="'op'"/>
-                <xsl:with-param name="browserName" select="'Opera'"/>
-                <xsl:with-param name="browserIcon" select="'opera_48.png'"/>
-                <xsl:with-param name="supported" select="$supported"/>
-            </xsl:call-template>
-            <div class="browsers-end"/>
-        </div>    
-    </xsl:template>
-    
-    <xsl:template name="parseBrowser">
-        <xsl:param name="browserCode"/>
-        <xsl:param name="browserName"/>
-        <xsl:param name="browserIcon"/>
-        <xsl:param name="supported"/>
-    
-        <xsl:variable name="browserCodeWithQuots" select="substring-after($supported, $browserCode)"/>
-        <xsl:if test="$browserCodeWithQuots != ''">
-            <xsl:variable name="c">'</xsl:variable>
-
-
-            <xsl:variable name="v" select="substring-before(substring-after(substring-after($browserCodeWithQuots, ':'), $c), $c)"/>
-            <div class="browser">
-                <div class="browser-name">
-                    <img src="{$contextPath}/plugins/core-ui/resources/img/browsers/{$browserIcon}" alt=""/>
-                    <br/><xsl:value-of select="$browserName"/>
-                </div>
-                <div class="browser-version">
-                    <xsl:choose>
-                        <xsl:when test="$v = '0-0'">
-                            <i18n:key i18n:text="PLUGINS_CORE_UI_SUPPORTED_BROWSER_VERSIONS_ALL" i18n:catalogue='plugin.core-ui'/>
-                        </xsl:when>
-                        <xsl:when test="substring-after($v, '0-') != ''">
-                            <i18n:translate>
-                                <i18n:text i18n:key="PLUGINS_CORE_UI_SUPPORTED_BROWSER_VERSIONS_LOWER" i18n:catalogue='plugin.core-ui'/>
-                                <i18n:param><xsl:value-of select="substring-after($v, '0-')"/></i18n:param>
-                            </i18n:translate>               
-                        </xsl:when>
-                        <xsl:when test="substring-before($v, '-0') != ''">
-                            <i18n:translate>
-                                <i18n:text i18n:key="PLUGINS_CORE_UI_SUPPORTED_BROWSER_VERSIONS_ABOVE" i18n:catalogue='plugin.core-ui'/>
-                                <i18n:param><xsl:value-of select="substring-before($v, '-0')"/></i18n:param>
-                            </i18n:translate>               
-                        </xsl:when>
-                        <xsl:otherwise>
-                            <i18n:translate >
-                                <i18n:text i18n:key="PLUGINS_CORE_UI_SUPPORTED_BROWSER_VERSIONS_BETWEEN" i18n:catalogue='plugin.core-ui'/>
-                                <i18n:param><xsl:value-of select="substring-before($v, '-')"/></i18n:param>
-                                <i18n:param><xsl:value-of select="substring-after($v, '-')"/></i18n:param>
-                            </i18n:translate>               
-                        </xsl:otherwise>
-                    </xsl:choose>
-                </div>
-                <div class="browser-end"></div>
+        <xsl:param name="supported" select="$supported"/>
+        
+        <xsl:variable name="browserRaw">
+	        <xsl:choose>
+	            <xsl:when test="contains($supported, ',')"><xsl:value-of select="substring-before($supported, ',')"/></xsl:when>
+	            <xsl:otherwise><xsl:value-of select="$supported"/></xsl:otherwise>
+	        </xsl:choose>
+	    </xsl:variable>
+	    
+	    <xsl:variable name="separator">'</xsl:variable>
+	    <xsl:variable name="browserCode" select="substring-before(substring-after($browserRaw, $separator), $separator)"/>
+        <xsl:variable name="browserMin" select="substring-before(substring-after(substring-after(substring-after($browserRaw, $separator), $separator), $separator), '-')"/>
+        <xsl:variable name="browserMax" select="substring-before(substring-after(substring-after(substring-after(substring-after($browserRaw, $separator), $separator), $separator), '-'), $separator)"/>
+	    
+        <div class="browser">
+            <div class="browser-name">
+                <img src="{$contextPath}/plugins/core-ui/resources/img/special/browsers/{$browserCode}_48.png" alt=""/>
+                <br/>
+                <i18n:text i18n:key="PLUGINS_CORE_UI_UNSUPPORTED_BROWSER_NAME_{$browserCode}" i18n:catalogue='plugin.core-ui'/>
+            </div>
+            <div class="browser-version">
+                <xsl:choose>
+                    <xsl:when test="$browserMin = '0' and $browserMax = '0'">
+                        <i18n:key i18n:text="PLUGINS_CORE_UI_SUPPORTED_BROWSER_VERSIONS_ALL" i18n:catalogue='plugin.core-ui'/>
+                    </xsl:when>
+                    <xsl:when test="$browserMin = '0'">
+                        <i18n:translate>
+                            <i18n:text i18n:key="PLUGINS_CORE_UI_SUPPORTED_BROWSER_VERSIONS_LOWER" i18n:catalogue='plugin.core-ui'/>
+                            <i18n:param><xsl:value-of select="$browserMax"/></i18n:param>
+                        </i18n:translate>               
+                    </xsl:when>
+                    <xsl:when test="$browserMax = '0'">
+                        <i18n:translate>
+                            <i18n:text i18n:key="PLUGINS_CORE_UI_SUPPORTED_BROWSER_VERSIONS_ABOVE" i18n:catalogue='plugin.core-ui'/>
+                            <i18n:param><xsl:value-of select="$browserMin"/></i18n:param>
+                        </i18n:translate>               
+                    </xsl:when>
+                    <xsl:otherwise>
+                        <i18n:translate >
+                            <i18n:text i18n:key="PLUGINS_CORE_UI_SUPPORTED_BROWSER_VERSIONS_BETWEEN" i18n:catalogue='plugin.core-ui'/>
+                            <i18n:param><xsl:value-of select="$browserMin"/></i18n:param>
+                            <i18n:param><xsl:value-of select="$browserMax"/></i18n:param>
+                        </i18n:translate>               
+                    </xsl:otherwise>
+                </xsl:choose>
             </div>
-        </xsl:if>
+        </div>
+	    
+	    <xsl:if test="contains($supported, ',')">
+	       <xsl:call-template name="showBrowsers">
+	           <xsl:with-param name="supported" select="substring-after($supported, ',')"/>
+	       </xsl:call-template>
+	    </xsl:if>
     </xsl:template>
-    
+        
 </xsl:stylesheet>
\ No newline at end of file
Index: main/plugin-core-ui/pages/public/load-config.xsl
===================================================================
--- main/plugin-core-ui/pages/public/load-config.xsl	(revision 34071)
+++ main/plugin-core-ui/pages/public/load-config.xsl	(working copy)
@@ -19,67 +19,24 @@
                 xmlns:ametys="org.ametys.core.util.AmetysXSLTHelper"
                 xmlns:i18n="http://apache.org/cocoon/i18n/2.1">
     
-    <xsl:import href="plugin:core-ui://stylesheets/kernel.xsl"/>    
-    
-    <xsl:param name="redirect"/>
+    <xsl:import href="../common.xsl"/>    
     
-    <xsl:variable name="contextPath" select="ametys:uriPrefix(false())"/>
-    <xsl:variable name="workspaceURI" select="ametys:workspacePrefix()"/>
-    <xsl:variable name="debug-mode" select="ametys:config('runtime.debug.ui')"/>
+    <xsl:template name="css-file">/plugins/core-ui/resources/css/special/config.css</xsl:template>
     
-    <xsl:param name="authFailure">false</xsl:param>
+    <xsl:template name="head"><i18n:text i18n:key="PLUGINS_CORE_UI_INCOMPLETE_CONFIG_HEAD" i18n:catalogue="plugin.core-ui"/></xsl:template>
+    <xsl:template name="title"><i18n:text i18n:key="PLUGINS_CORE_UI_INCOMPLETE_CONFIG_TITLE" i18n:catalogue="plugin.core-ui"/></xsl:template>
+    <xsl:template name="title-class">long</xsl:template>
+    <xsl:template name="text"><i18n:text i18n:key="PLUGINS_CORE_UI_INCOMPLETE_CONFIG_TEXT" i18n:catalogue="plugin.core-ui"/></xsl:template>
     
-    <xsl:template match="/">
-        <html>
-            <head>
-                <title>Ametys - <i18n:text i18n:key='PLUGINS_CORE_UI_INCOMPLETE_CONFIG_PAGE_TITLE' i18n:catalogue='plugin.core-ui'/></title>
-                <meta http-equiv="X-UA-Compatible" content="IE=10" />
-                <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"/>
-                
-                <link rel="stylesheet" type="text/css" href="{$contextPath}/plugins/core-ui/resources/css/public.css"/>
-            </head>
-            <body>
-                <noscript><i18n:text i18n:key="WORKSPACE_AMETYS_MAIN_ERROR_NOJS" i18n:catalogue="plugin.core-ui"/></noscript>
-                
-                <xsl:call-template name="kernel-base">
-                    <xsl:with-param name="theme">triton</xsl:with-param>
-                </xsl:call-template>
-                
-               <script type="text/javascript" src="{$contextPath}/plugins/core-ui/resources/js/Ametys/public/RedirectActionScreen.js"></script>
-                
-                <script>
-                    Ext.onReady(function ()
-                    {
-                        Ext.application({
-                            requires: ['Ext.container.Viewport'],
-                            name: 'AmetysLogin',
-                            
-                            appFolder: 'ametys',
-                            enableQuickTips: false,
-                            launch: function() {
-                                Ext.create('Ext.container.Viewport', {
-                                    layout: 'fit',
-                                    items: Ext.create('Ametys.public.RedirectActionScreen', {
-                                        text: "<i18n:text i18n:key='PLUGINS_CORE_UI_INCOMPLETE_CONFIG_TITLE' i18n:catalogue='plugin.core-ui'/>",
-                                        description: "<i18n:text i18n:key='PLUGINS_CORE_UI_INCOMPLETE_CONFIG_TEXT' i18n:catalogue='plugin.core-ui'/>",
+    <xsl:template name="text-additionnal">
+        <xsl:call-template name="button">
+            <xsl:with-param name="text"><i18n:text i18n:key='PLUGINS_CORE_UI_INCOMPLETE_CONFIG_LINK' i18n:catalogue='plugin.core-ui'/></xsl:with-param>
+            <xsl:with-param name="href" select="concat(ametys:uriPrefix(), '/index.html')"/>
+        </xsl:call-template>
+    </xsl:template>   
     
-                                        image: "<xsl:value-of select="$contextPath"/>/plugins/core-ui/resources/img/public/load_config.png",
-                                        
-                                       redirectUrl: "<xsl:value-of select="concat($contextPath, $workspaceURI, '/index.html')"/>",
-                                         btnText: "<i18n:text i18n:key='PLUGINS_CORE_UI_INCOMPLETE_CONFIG_BTN' i18n:catalogue='plugin.core-ui'/>"
-                                    })
-                                });
-                            }
-                        })
-                    });
-                </script>
-            </body>
-        </html>
+    <xsl:template name="body-start">
+        <div class="code"><div></div></div>
     </xsl:template>
-    
-    <!-- Do not load Ametys scripts -->
-    <xsl:template name="ametys-scripts"/>
-    
-    <!-- Ignore browser compatibility -->
-    <xsl:template name="kernel-browsers"/>
-</xsl:stylesheet>
\ No newline at end of file
+     
+</xsl:stylesheet>
Index: main/plugin-core-ui/pages/public/login.xsl
===================================================================
--- main/plugin-core-ui/pages/public/login.xsl	(revision 34071)
+++ main/plugin-core-ui/pages/public/login.xsl	(working copy)
@@ -17,74 +17,92 @@
 <xsl:stylesheet version="1.0" 
                 xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
                 xmlns:ametys="org.ametys.core.util.AmetysXSLTHelper"
+                xmlns:math="java.lang.Math"
                 xmlns:i18n="http://apache.org/cocoon/i18n/2.1">
     
-    <xsl:import href="plugin:core-ui://stylesheets/kernel.xsl"/>    
+    <xsl:import href="../common.xsl"/> 
+    <xsl:import href="plugin:core://stylesheets/helper/common.xsl"/>    
     
-    <xsl:variable name="contextPath" select="ametys:uriPrefix(false())"/>
-    <xsl:variable name="workspaceURI" select="ametys:workspacePrefix()"/>
-    <xsl:variable name="debug-mode" select="ametys:config('runtime.debug.ui')"/>
+    <xsl:param name="login-failed"/><!-- true to display a login failed message -->
+    <xsl:param name="tooManyAttempts"/><!-- true when authentication failed due to too many attempts with that login -->
+    <xsl:param name="cookieFailure"/><!-- true when the remember me function failed to authenticate -->
     
-    <xsl:param name="authFailure">false</xsl:param>
+    <xsl:variable name="uniqueId" select="substring-after(math:random(), '.')"/>
     
-    <xsl:template match="/LoginForm">
-        <html>
-            <head>
-                <title>Ametys - <i18n:text i18n:key='PLUGINS_CORE_UI_LOGIN_SCREEN_TITLE' i18n:catalogue='plugin.core-ui'/></title>
-                <meta http-equiv="X-UA-Compatible" content="IE=10" />
-                <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"/>
-                
-                <link rel="stylesheet" type="text/css" href="{$contextPath}/plugins/core-ui/resources/css/login.css"/>
-            </head>
-            <body>
-                <noscript><i18n:text i18n:key="WORKSPACE_AMETYS_MAIN_ERROR_NOJS" i18n:catalogue="plugin.core-ui"/></noscript>
-                
-                <xsl:call-template name="kernel-base">
-                    <xsl:with-param name="theme">triton</xsl:with-param>
-                </xsl:call-template>
-                
-                <script type="text/javascript" src="{$contextPath}/plugins/core-ui/resources/js/Ametys/public/LoginScreen.js"/>
-                
-                <xsl:call-template name="twitter-scripts"/>
-                
-                <script>
-                    Ext.onReady(function ()
-                    {
-                        Ext.application({
-                            requires: ['Ext.container.Viewport'],
-                            name: 'AmetysLogin',
-                            
-                            appFolder: 'ametys',
-                            enableQuickTips: false,
-                            launch: function() {
-                                Ext.create('Ext.container.Viewport', {
-                                    layout: 'fit',
-                                    items: Ext.create('Ametys.public.LoginScreen', {
-                                        loginFieldName: 'Username',
-                                        pwdFieldName: 'Password',
-                                        
-                                        authFailure: <xsl:value-of select="$authFailure"/>,
-                                        rememberMe: <xsl:value-of select="rememberMe"/>,
-                                        forgotPassword: false
-                                    })
-                                });
-                            }
-                        })
-                    });
-                </script>
-            </body>
-        </html>
-    </xsl:template>
+    <xsl:template name="css-file">/plugins/core-ui/resources/css/special/login.css</xsl:template>
     
-    <xsl:template name="twitter-scripts">
-        <script>
-        !function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?'http':'https';if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+"://platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");
-        </script>
-    </xsl:template>
+    <xsl:template name="head"><i18n:text i18n:key="PLUGINS_CORE_UI_LOGIN_SCREEN_TITLE" i18n:catalogue="plugin.core-ui"/></xsl:template>
     
-    <!-- Do not load Ametys scripts -->
-    <xsl:template name="ametys-scripts"/>
+    <xsl:template name="inside-wrap">
+         <xsl:variable name="autocomplete">
+             <xsl:choose>
+                 <xsl:when test="/LoginForm/autocomplete = 'true'">on</xsl:when>
+                 <xsl:otherwise>off</xsl:otherwise>
+             </xsl:choose>
+         </xsl:variable>
+             
+        <div class="connection">
+            <form method="post" action="">
+                <div>
+	                    <table class="input text login">
+	                        <tr>
+	                            <td class="input"><input type="text" name="Username" id="Username" autocomplete="{$autocomplete}" placeholder="plugin.core-ui:PLUGINS_CORE_UI_LOGIN_SCREEN_FORM_LOGIN" i18n:attr="placeholder"/></td>
+	                            <td class="image"></td>
+	                        </tr>
+	                    </table>
+
+                        <table class="input text password">
+                            <tr>
+                                <td class="input"><input type="password" name="Password" id="Password" autocomplete="{$autocomplete}" placeholder="plugin.core-ui:PLUGINS_CORE_UI_LOGIN_SCREEN_FORM_PASSWORD" i18n:attr="placeholder"/></td>
+                                <td class="image"></td>
+                            </tr>
+                        </table>                            
+                        
+                        <xsl:if test="useCaptcha = 'true'">
+                            <div class="input">
+                                <label for="Captcha"><i18n:text i18n:key="WORKSPACE_CMS_LOGIN_CAPTCHA" i18n:catalogue="workspace.cms"/></label>
+                                
+                                <xsl:call-template name="captcha">
+                                    <xsl:with-param name="key-name" select="'CaptchaKey'"/>
+                        
+                                    <xsl:with-param name="value-name" select="'Captcha'"/>
+                                    <xsl:with-param name="value-id" select="concat('captcha-', $uniqueId)"/>
+                                    <xsl:with-param name="value-class">captcha</xsl:with-param>
+                        
+                                    <xsl:with-param name="image-alt"/>
+                                    <xsl:with-param name="image-alt-i18n" select="false()"/>
+                                    <xsl:with-param name="image-class">captcha-image</xsl:with-param>
+                                    
+                                    <xsl:with-param name="image-height">50</xsl:with-param>
+                                    <xsl:with-param name="image-width">160</xsl:with-param>
+                                    
+                                    <xsl:with-param name="contextPath" select="$contextPath"/>
+                                </xsl:call-template>         
+                            </div>
+                            <br style="clear: left"/>
+                        </xsl:if>
+                        
+                        <xsl:if test="$login-failed = 'true'">
+                            <span class="error">
+                                <xsl:choose>
+                                    <xsl:when test="$tooManyAttempts = 'true'"><i18n:text i18n:key="WORKSPACE_CMS_LOGIN_FAILED_MANY_TIME" i18n:catalogue="workspace.cms"/></xsl:when>
+                                    <xsl:when test="/LoginForm/useCaptcha = 'true'"><i18n:text i18n:key="WORKSPACE_CMS_LOGIN_FAILED_WITH_CAPTCHA" i18n:catalogue="workspace.cms"/></xsl:when>
+                                    <xsl:when test="$cookieFailure != 'true'"><i18n:text i18n:key="WORKSPACE_CMS_LOGIN_FAILED" i18n:catalogue="workspace.cms"/></xsl:when>
+                                </xsl:choose>
+                            </span>
+                            <br/><br/>
+                        </xsl:if>
+                        
+                        <xsl:if test="/LoginForm/rememberMe = 'true'">
+                            <div class="input checkbox rememberMe">
+                                <input type="checkbox" name="rememberMe" id="rememberMe" value="true"/><label for="rememberMe"><i18n:text i18n:key="PLUGINS_CORE_UI_LOGIN_SCREEN_FORM_PERSIST" i18n:catalogue="plugin.core-ui"/></label>
+                            </div>
+                        </xsl:if>
+                        
+                        <button type="submit"><i18n:text i18n:key="PLUGINS_CORE_UI_LOGIN_SCREEN_FORM_SUBMIT" i18n:catalogue="plugin.core-ui"/></button>
+                </div>
+            </form>
+        </div>
+    </xsl:template>
     
-    <!-- Ignore browser compatibility -->
-    <xsl:template name="kernel-browsers"/>
-</xsl:stylesheet>
\ No newline at end of file
+</xsl:stylesheet>
Index: main/plugin-core-ui/pages/public/safe-mode.xsl
===================================================================
--- main/plugin-core-ui/pages/public/safe-mode.xsl	(revision 34071)
+++ main/plugin-core-ui/pages/public/safe-mode.xsl	(working copy)
@@ -19,67 +19,24 @@
                 xmlns:ametys="org.ametys.core.util.AmetysXSLTHelper"
                 xmlns:i18n="http://apache.org/cocoon/i18n/2.1">
     
-    <xsl:import href="plugin:core-ui://stylesheets/kernel.xsl"/>    
-    
-    <xsl:param name="redirect"/>
+    <xsl:import href="../common.xsl"/>    
     
-    <xsl:variable name="contextPath" select="ametys:uriPrefix(false())"/>
-    <xsl:variable name="workspaceURI" select="ametys:workspacePrefix()"/>
-    <xsl:variable name="debug-mode" select="ametys:config('runtime.debug.ui')"/>
+    <xsl:template name="css-file">/plugins/core-ui/resources/css/special/safemode.css</xsl:template>
     
-    <xsl:param name="authFailure">false</xsl:param>
+    <xsl:template name="head"><i18n:text i18n:key="PLUGINS_CORE_UI_SAFE_MODE_HEAD" i18n:catalogue="plugin.core-ui"/></xsl:template>
+    <xsl:template name="title"><i18n:text i18n:key="PLUGINS_CORE_UI_SAFE_MODE_TITLE" i18n:catalogue="plugin.core-ui"/></xsl:template>
+    <xsl:template name="title-class">long</xsl:template>
+    <xsl:template name="text"><i18n:text i18n:key="PLUGINS_CORE_UI_SAFE_MODE_TEXT" i18n:catalogue="plugin.core-ui"/></xsl:template>
     
-    <xsl:template match="/">
-        <html>
-            <head>
-                <title>Ametys - <i18n:text i18n:key='PLUGINS_CORE_UI_SAFE_MODE_PAGE_TITLE' i18n:catalogue='plugin.core-ui'/></title>
-                <meta http-equiv="X-UA-Compatible" content="IE=10" />
-                <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"/>
-                
-                <link rel="stylesheet" type="text/css" href="{$contextPath}/plugins/core-ui/resources/css/public.css"/>
-            </head>
-            <body>
-                <noscript><i18n:text i18n:key="WORKSPACE_AMETYS_MAIN_ERROR_NOJS" i18n:catalogue="plugin.core-ui"/></noscript>
-                
-                <xsl:call-template name="kernel-base">
-                    <xsl:with-param name="theme">triton</xsl:with-param>
-                </xsl:call-template>
-                
-               <script type="text/javascript" src="{$contextPath}/plugins/core-ui/resources/js/Ametys/public/RedirectActionScreen.js"></script>
-                
-                <script>
-                    Ext.onReady(function ()
-                    {
-                        Ext.application({
-                            requires: ['Ext.container.Viewport'],
-                            name: 'AmetysLogin',
-                            
-                            appFolder: 'ametys',
-                            enableQuickTips: false,
-                            launch: function() {
-                                Ext.create('Ext.container.Viewport', {
-                                    layout: 'fit',
-                                    items: Ext.create('Ametys.public.RedirectActionScreen', {
-                                        text: "<i18n:text i18n:key='PLUGINS_CORE_UI_SAFE_MODE_TITLE' i18n:catalogue='plugin.core-ui'/>",
-                                        description: "<i18n:text i18n:key='PLUGINS_CORE_UI_SAFE_MODE_TEXT' i18n:catalogue='plugin.core-ui'/>",
+    <xsl:template name="text-additionnal">
+        <xsl:call-template name="button">
+            <xsl:with-param name="text"><i18n:text i18n:key='PLUGINS_CORE_UI_SAFE_MODE_LINK' i18n:catalogue='plugin.core-ui'/></xsl:with-param>
+            <xsl:with-param name="href" select="concat(ametys:uriPrefix(), '/index.html')"/>
+        </xsl:call-template>
+    </xsl:template>   
     
-                                        image: "<xsl:value-of select="$contextPath"/>/plugins/core-ui/resources/img/public/load_config.png",
-                                        
-                                        redirectUrl: "<xsl:value-of select="concat($contextPath, $workspaceURI, '/index.html')"/>",
-                                        btnText: "<i18n:text i18n:key='PLUGINS_CORE_UI_SAFE_MODE_BTN' i18n:catalogue='plugin.core-ui'/>"
-                                    })
-                                });
-                            }
-                        })
-                    });
-                </script>
-            </body>
-        </html>
+    <xsl:template name="body-start">
+        <div class="code"><div></div></div>
     </xsl:template>
-    
-    <!-- Do not load Ametys scripts -->
-    <xsl:template name="ametys-scripts"/>
-    
-    <!-- Ignore browser compatibility -->
-    <xsl:template name="kernel-browsers"/>
+     
 </xsl:stylesheet>
\ No newline at end of file
Index: main/plugin-core-ui/resources/css/error.css
===================================================================
--- main/plugin-core-ui/resources/css/error.css	(revision 34071)
+++ main/plugin-core-ui/resources/css/error.css	(nonexistent)
@@ -1,61 +0,0 @@
-/*
- *  Copyright 2010 Anyware Services
- *
- *  Licensed under the Apache License, Version 2.0 (the "License");
- *  you may not use this file except in compliance with the License.
- *  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- */
-
-.ametys-error-page > .x-panel-header-default {
-}
-
-.ametys-error-page > .x-panel-header-default .x-panel-header-title-default {
-}
-
-.ametys-error-page > .x-panel-body {
-	background-image: url('../img/error_bg.jpg');
-    background-color: rgba(95,162,221,0.1);
-    background-size: cover;
-    font-family: 'Open Sans', 'Helvetica Neue', helvetica, arial, verdana, sans-serif;
-    color: #111;
-}
-
-.ametys-error-page .ametys-error-page-text {
-    font-size: 150px;
-    line-height: 180px;
-}
-
-.ametys-error-page .ametys-error-page-desc {
-    line-height: 24px;
-    text-align: center;
-    font-size: 18px;
-}
-
-.ametys-error-page .ametys-error-page-message {
-	overflow-x: hidden;
-}
-
-.ametys-error-page .ametys-error-page-details > .x-panel-header {
-	padding: 4px;
-	background: none;
-	border: none;
-}
-
-.ametys-error-page .ametys-error-page-details > .x-panel-header .x-title {
-	font-size: 14px;
-	color: #097adb;
-	line-height: 32px;
-}
-
-.ametys-error-page .ametys-error-page-details > .x-panel-body {
-	background: rgba(255,255,255,0.4);
-}
-
Index: main/plugin-core-ui/resources/css/login.css
===================================================================
--- main/plugin-core-ui/resources/css/login.css	(revision 34071)
+++ main/plugin-core-ui/resources/css/login.css	(nonexistent)
@@ -1,69 +0,0 @@
-/*
- *  Copyright 2010 Anyware Services
- *
- *  Licensed under the Apache License, Version 2.0 (the "License");
- *  you may not use this file except in compliance with the License.
- *  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- */
-.ametys-auth-screen > .x-panel-body {
-	background-color: #e9e9e9;
-	background-image: url('../img/bg.jpg');
-    background-size: cover;
-    background-repeat: repeat;
-}
-
-.ametys-auth-screen .ametys-news-dialog > .x-panel-body,
-.ametys-auth-screen .ametys-auth-dialog > .x-panel-body {
-	background: rgba(255,255,255,0.85)
-}
-
-.ametys-auth-screen .ametys-auth-dialog label {
-	font-size: 14px;
-	line-height: 14px;
-}
-
-.ametys-auth-screen .ametys-auth-dialog .link-forgot-password {
-    line-height: 32px;
-    color: #35baf6;
-    text-decoration: none;
-    margin-left: 5px;
-}
-
-.ametys-auth-screen .ametys-auth-dialog .link-forgot-password:hover {
-    text-decoration: underline;
-}
-
-.ametys-auth-screen .ametys-auth-dialog .ametys-auth-textbox {
-    background-color: #FFF
-}
-
-.ametys-auth-screen .ametys-auth-dialog .ametys-auth-error-text {
-	color: #cf4c35;
-}
-
-.ametys-auth-screen .ametys-auth-dialog .x-form-trigger {
-    text-align: right;
-    width: 40px;
-    background-repeat: no-repeat;
-    background-position: 0 9px;
-}
-
-.ametys-auth-screen .ametys-auth-dialog .x-form-trigger::before {
-	content: "";
-}
-
-.ametys-auth-screen .ametys-auth-dialog .auth-login-trigger {
-	background-image: url('../img/login/login.png');
-}
-
-.ametys-auth-screen .ametys-auth-dialog .auth-password-trigger {
-	background-image: url('../img/login/password.png');
-}
Index: main/plugin-core-ui/resources/css/public.css
===================================================================
--- main/plugin-core-ui/resources/css/public.css	(revision 34071)
+++ main/plugin-core-ui/resources/css/public.css	(nonexistent)
@@ -1,39 +0,0 @@
-/*
- *  Copyright 2010 Anyware Services
- *
- *  Licensed under the Apache License, Version 2.0 (the "License");
- *  you may not use this file except in compliance with the License.
- *  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- */
-
-.ametys-public-page > .x-panel-body {
-	background-color: #e9e9e9;
-	background-image: url('../img/bg.jpg');
-    background-size: cover;
-    background-repeat: repeat;
-}
-
-.ametys-public-page .ametys-public-page-inner-container > .x-panel-body {
-	background: rgba(255,255,255,0.85);
-}
-
-.ametys-public-page .ametys-public-page-text {
-    font-size: 40px;
-    line-height: 50px;
-}
-
-.ametys-public-page .ametys-public-page-desc,
-.ametys-public-page .ametys-public-page-redirect-text {
-    line-height: 30px;
-    text-align: center;
-    font-size: 18px;
-}
-
Index: main/plugin-core-ui/resources/css/special/browsers.css
===================================================================
--- main/plugin-core-ui/resources/css/special/browsers.css	(revision 0)
+++ main/plugin-core-ui/resources/css/special/browsers.css	(revision 0)
@@ -0,0 +1,123 @@
+/*
+ *  Copyright 2015 Anyware Services
+ *
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+
+html {
+    height: 100%;
+    font-family: 'Helvetica Neue', helvetica, arial, verdana, sans-serif;
+    margin: 0;
+    padding: 0;
+    font-size: 16px;
+}
+body {
+    height: 100%;
+    margin: 0;
+    padding: 0;
+    text-align: center;
+}
+ 
+table
+{
+    background-image: url('../../img/special/browsers/bg.jpg');
+    width: 100%;
+    height: 100%;
+    background-repeat: no-repeat;
+    background-position: center center;
+    background-size: cover;
+    background-color: #eff6fc;
+    border-collapse: collapse;
+}
+
+table thead td {
+    background-image: url('../../img/special/logo.png');
+    background-repeat: no-repeat;
+    background-position: 1.5em center;
+    background-color: #7f7f7f;
+    color: #F0F0F0;
+
+    padding: 24px;
+    font-weight: 100;
+}
+
+table tfoot td {
+    text-align: right;
+    color: #F0F0F0;
+    
+    background-color: #7f7f7f;
+}
+table tfoot td p {
+    font-size: 11px; 
+    font-weight: 100;
+    padding: 11px;
+    margin: 0;
+}
+
+table tbody td {
+    text-align: center;
+}
+table tbody td h1 {
+    font-size: 128px;
+    font-weight: normal;
+    margin: 12px;
+}
+table tbody td p.text {
+    font-size: 27px;
+}
+
+
+.browsers {
+    margin: 1.3em auto 0 auto;
+    width: 1075px;
+}
+
+.browsers .browser {
+    margin: 5px;
+    width: 204px;
+    font-size: 14px;
+    line-height: 16px;
+    font-weight: normal;
+    float: left;
+}
+
+.browser-version {
+    color: #1F1F1F;
+    font-size: 12px;
+}
+
+.browsers-end {
+    clear: both;
+}
+
+table.main > tbody > tr > td > div.wrap > p.bottomtext {
+    font-size: 1em;
+    position: relative;
+    top: 1em;
+}
+
+p.additionnal {
+    text-align: right;
+    margin-right: 10%;
+}
+
+a {
+    background-color: #7d3d92;
+    border: 1px solid #7d3d92; 
+    color: #F0F0F0;
+    text-decoration: none;
+    text-shadow: none;
+    padding: 6px 13px;
+    font-size: 13px;
+    font-weight: normal;
+}
\ No newline at end of file
Index: main/plugin-core-ui/resources/css/special/code.css
===================================================================
--- main/plugin-core-ui/resources/css/special/code.css	(revision 0)
+++ main/plugin-core-ui/resources/css/special/code.css	(revision 0)
@@ -0,0 +1,95 @@
+/*
+ *  Copyright 2015 Anyware Services
+ *
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+ 
+div.code {
+    position: absolute;
+    font-size: 45em;
+    font-weight: 700;
+    line-height: 1em;
+    
+    width: 100%;
+    height: 100%;
+    overflow: hidden;
+    
+    display: inline-block;
+    
+    -moz-transform-style: preserve-3d;
+    -webkit-transform-style: preserve-3d;
+    -o-transform-style: preserve-3d;
+    -ms-transform-style: preserve-3d;
+    transform-style: preserve-3d;
+    
+    -moz-perspective: 1em;
+    -webkit-perspective: 1em;
+    perspective: 1em;
+
+    -webkit-animation-name: code;
+    -moz-animation-name: code;
+    -o-animation-name: code;
+    animation-name: code;
+    
+    top: 0;
+}
+div.code > div {
+    -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=3)";
+}
+div.code > div {
+    opacity: 0.03;
+    position: absolute;
+    -moz-transform: rotateY(28deg) rotateX(14deg) rotateZ(-8deg);
+    -webkit-transform: rotateY(28deg) rotateX(14deg) rotateZ(-8deg);
+    -o-transform: rotateY(28deg) rotateX(14deg) rotateZ(-8deg);
+    -ms-transform: rotateY(28deg) rotateX(14deg) rotateZ(-8deg);
+    transform: rotateY(40deg) rotateX(2deg) rotateZ(-14deg);
+    left: 0.25em;
+    top: -0.05em;
+}
+
+/**
+ * ANIMATIONS
+ */
+@keyframes code {
+    0% {
+        perspective: 1.2em; 
+    }
+    100% {
+        perspective: 1em; 
+    }
+}
+
+div.code {
+    -webkit-animation-duration: 1.5s;
+    -moz-animation-duration: 1.5s;
+    -o-animation-duration: 1.5s;
+    animation-duration: 1.5s;
+    -webkit-animation-timing-function: ease;
+    -moz-animation-timing-function: ease;
+    -o-animation-timing-function: ease;
+    animation-timing-function: ease;
+}
+
+/**
+ * MOBILE
+ */
+@media screen and (max-width: 960px), screen and (max-height: 360px)) {
+    div.code {
+        font-size: 25em;
+    }
+    div.code > div {
+        left: 0;
+        top: 10%;
+    }
+}
Index: main/plugin-core-ui/resources/css/special/common.css
===================================================================
--- main/plugin-core-ui/resources/css/special/common.css	(revision 0)
+++ main/plugin-core-ui/resources/css/special/common.css	(revision 0)
@@ -0,0 +1,403 @@
+/*
+ *  Copyright 2015 Anyware Services
+ *
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+ 
+@import 'fonts.css';
+
+html {
+    height: 100%;
+    font-family: 'Open Sans', 'Helvetica Neue', helvetica, arial, verdana, sans-serif;
+    margin: 0;
+    padding: 0;
+    font-size: 16px;
+}
+body {
+    -webkit-animation-name: opacity;
+    -moz-animation-name: opacity;
+    -o-animation-name: opacity;
+    animation-name: opacity;
+    height: 100%;
+    margin: 0;
+    padding: 0;
+    overflow: hidden;
+}
+
+div.head {
+    position: absolute;
+    width: 100%;
+    box-sizing: border-box;
+    
+    text-align: center;
+    
+    background-image: url('../../img/special/logo.png');
+    background-repeat: no-repeat;
+    background-position: 1.5em center;
+    background-color: #7f7f7f;
+    background-color: rgba(0,0,0,0.5);
+    color: #F0F0F0;
+
+    -webkit-animation-name: wakeup;
+    -moz-animation-name: wakeup;
+    -o-animation-name: wakeup;
+    animation-name: wakeup;
+}
+div.head, table.main thead tr td {
+    padding: 1.5em;
+    font-weight: 100;
+}
+
+div.bg
+{
+    width: 100%;
+    height: 100%;
+    background-repeat: no-repeat;
+    background-position: center center;
+    background-color: #eff6fc;
+    -webkit-background-size: cover;    
+    -moz-background-size: cover;    
+    -o-background-size: cover;    
+    background-size: cover;    
+}
+
+table.main {
+    position: absolute;
+    width: 100%;
+    height: 100%;
+    table-layout: fixed;
+    border-collapse: collapse;
+}
+
+table.main > tbody {
+    text-align: center;
+}
+
+table.main > tbody > tr > td {
+    text-align: center;
+}
+table.main > tbody > tr > td > div.wrap {
+    display: inline-block;
+    box-sizing: border-box;
+    width: 55em;
+    max-width: 100%;
+    max-height: 100%;
+    overflow: auto;
+    padding: 1em;
+}
+table.main > tbody > tr > td > div.wrap > h1 {
+    font-size: 9em;
+    line-height: 1em;
+    font-weight: normal;
+    margin: 0 0 0.1em 0;
+    overflow: hidden;
+}
+table.main > tbody > tr > td > div.wrap > h1.long {
+    font-size: 7.5em;
+}
+table.main > tbody > tr > td > div.wrap > p, .la-ball-pulse {
+    font-size: 1.7em;
+    font-weight: normal;
+    margin: 0.1em;
+    overflow: hidden;
+}
+table.main > tbody > tr > td > div.wrap > p.additionnal, .la-ball-pulse {
+    text-align: right;
+    margin-top: 0.75em;
+}
+.la-ball-pulse {
+    color: #7d3d92 !important;
+    margin-left: auto;
+}
+table.main > tbody > tr > td > div.wrap > p.additionnal a {
+    background-color: #7d3d92;
+    border: 1px solid #7d3d92; 
+    color: #F0F0F0;
+    text-decoration: none;
+    text-shadow: none;
+    padding: 0.5em 1em;
+    font-size: .5em;
+    font-weight: normal;
+    display: inline-block;
+}
+table.main > tbody > tr > td > div.wrap > p.additionnal a:after {
+    content: "\f105";
+    font-family: FontAwesome;
+    padding-left: 1em;
+}
+
+table.main > tbody > tr > td > div.wrap > p.additionnal a.toggled:after {
+    display: none;
+}
+table.main > tbody > tr > td > div.wrap > p.additionnal a.toggled:before {
+    content: "\f104";
+    font-family: FontAwesome;
+    padding-right: 1em;
+}
+table.main > tbody > tr > td > div.wrap > p.additionnal a.toggled {
+    background-color: #61336f;
+    border-color: #61336f; 
+}
+
+table.main > tbody > tr > td > div.wrap > p.additionnal a:hover {
+    background-color: #9d57b3;
+    border-color: #9d57b3;
+}
+table.main > tbody > tr > td > div.wrap > p.additionnal a.toggled:hover {
+    background-color: #7d3d92;
+    border-color: #7d3d92; 
+}
+
+table.main > tbody > tr > td > div.wrap > p.additionnal a:active,
+table.main > tbody > tr > td > div.wrap > p.additionnal a.toggled:active {
+    background-color: #613171;
+    border-color: #613171;
+}
+
+
+
+table.main > tbody > tr > td > div.wrap > p.additionnal a:focus {
+    -webkit-box-shadow: inset 0px 0px 0px 1px #F0F0F0;
+    -moz-box-shadow: inset 0px 0px 0px 1px #F0F0F0;
+    box-shadow: inset 0px 0px 0px 1px #F0F0F0;
+}
+
+table.main > tbody > tr > td > div.wrap > p.additionnal a.disabled,
+table.main > tbody > tr > td > div.wrap > p.additionnal a.disabled:hover,
+table.main > tbody > tr > td > div.wrap > p.additionnal a.disabled:active,
+table.main > tbody > tr > td > div.wrap > p.additionnal a.disabled:focus {
+    background-color: #7f7f7f;
+    border: 1px solid #7f7f7f; 
+    -webkit-box-shadow: none;
+    -moz-box-shadow: none;
+    box-shadow: none;
+}
+
+div.foot {
+    position: absolute;
+    width: 100%;
+    bottom: 0;
+    
+    text-align: right;
+    color: #F0F0F0;
+    
+    background-color: #7f7f7f;
+    background-color: rgba(0, 0, 0 ,0.5);
+
+    -webkit-animation-name: wakedown;
+    -moz-animation-name: wakedown;
+    -o-animation-name: wakedown;
+    animation-name: wakedown;
+}
+div.foot p {
+    display: inline-block;
+}
+div.foot p, table.main > tfoot > td > td {
+    font-size: 0.7em; 
+    font-weight: 100;
+    padding: 1em;
+    margin: 0;
+}
+
+/**
+ * ANIMATIONS
+ */
+@keyframes wakeup {
+    0% {
+        top: -5em; 
+    }
+    100% {
+        top: 0; 
+    }
+}
+
+@keyframes wakedown {
+    0% {
+        bottom: -4em; 
+    }
+    100% {
+        bottom: 0; 
+    }
+}
+
+@keyframes opacity {
+    0% {
+        opacity: 0; 
+    }
+    100% {
+        opacity: 1; 
+    }
+}
+
+body, div.head, div.foot {
+    -webkit-animation-duration: 1.5s;
+    -moz-animation-duration: 1.5s;
+    -o-animation-duration: 1.5s;
+    animation-duration: 1.5s;
+    -webkit-animation-timing-function: ease;
+    -moz-animation-timing-function: ease;
+    -o-animation-timing-function: ease;
+    animation-timing-function: ease;
+}
+
+/**
+ * MOBILE
+ */
+
+@media screen and (max-width: 960px), screen and (max-height: 360px)) {
+    html {
+        font-size: 12px;
+    }
+    table.main > tbody > tr > td > div.wrap > h1 {
+        font-size: 7em;
+        text-shadow: 0 0 4px #F0F0F0;
+    }
+    table.main > tbody > tr > td > div.wrap > h1.long {
+        font-size: 6em;
+        .longtext
+    }
+    table.main > tbody > tr > td > div.wrap > p {
+        text-shadow: 0 0 3px #F0F0F0;
+    }
+}
+
+/**
+ * WAIT
+ */
+
+/*!
+ * Load Awesome v1.1.0 (http://github.danielcardoso.net/load-awesome/)
+ * Copyright 2015 Daniel Cardoso <@DanielCardoso>
+ * Licensed under MIT
+ */
+.la-ball-pulse,
+.la-ball-pulse > div {
+    position: relative;
+    -webkit-box-sizing: border-box;
+       -moz-box-sizing: border-box;
+            box-sizing: border-box;
+}
+.la-ball-pulse {
+    display: block;
+    /*font-size: 0;*/
+    color: #fff;
+}
+.la-ball-pulse.la-dark {
+    color: #333;
+}
+.la-ball-pulse > div {
+    display: inline-block;
+    float: none;
+    background-color: currentColor;
+    border: 0 solid currentColor;
+}
+.la-ball-pulse > div:nth-child(1) {
+    -webkit-animation-delay: -200ms;
+       -moz-animation-delay: -200ms;
+         -o-animation-delay: -200ms;
+            animation-delay: -200ms;
+}
+.la-ball-pulse > div:nth-child(2) {
+    -webkit-animation-delay: -100ms;
+       -moz-animation-delay: -100ms;
+         -o-animation-delay: -100ms;
+            animation-delay: -100ms;
+}
+.la-ball-pulse > div:nth-child(3) {
+    -webkit-animation-delay: 0ms;
+       -moz-animation-delay: 0ms;
+         -o-animation-delay: 0ms;
+            animation-delay: 0ms;
+}
+.la-ball-pulse > div {
+    width: 10px;
+    height: 10px;
+    margin: 4px;
+    border-radius: 100%;
+    -webkit-animation: ball-pulse 1s ease infinite;
+       -moz-animation: ball-pulse 1s ease infinite;
+         -o-animation: ball-pulse 1s ease infinite;
+            animation: ball-pulse 1s ease infinite;
+}
+.la-ball-pulse {
+    width: 4.25em;
+    height: 1.475em;
+}
+.la-ball-pulse > div {
+    width: 0.6em;
+    height: 0.6em;
+    margin: 0.3em;
+}
+/*
+ * Animation
+ */
+@-webkit-keyframes ball-pulse {
+    0%,
+    60%,
+    100% {
+        opacity: 1;
+        -webkit-transform: scale(1);
+                transform: scale(1);
+    }
+    30% {
+        opacity: .1;
+        -webkit-transform: scale(.01);
+                transform: scale(.01);
+    }
+}
+@-moz-keyframes ball-pulse {
+    0%,
+    60%,
+    100% {
+        opacity: 1;
+        -moz-transform: scale(1);
+             transform: scale(1);
+    }
+    30% {
+        opacity: .1;
+        -moz-transform: scale(.01);
+             transform: scale(.01);
+    }
+}
+@-o-keyframes ball-pulse {
+    0%,
+    60%,
+    100% {
+        opacity: 1;
+        -o-transform: scale(1);
+           transform: scale(1);
+    }
+    30% {
+        opacity: .1;
+        -o-transform: scale(.01);
+           transform: scale(.01);
+    }
+}
+@keyframes ball-pulse {
+    0%,
+    60%,
+    100% {
+        opacity: 1;
+        -webkit-transform: scale(1);
+           -moz-transform: scale(1);
+             -o-transform: scale(1);
+                transform: scale(1);
+    }
+    30% {
+        opacity: .1;
+        -webkit-transform: scale(.01);
+           -moz-transform: scale(.01);
+             -o-transform: scale(.01);
+                transform: scale(.01);
+    }
+}
\ No newline at end of file
Index: main/plugin-core-ui/resources/css/special/config.css
===================================================================
--- main/plugin-core-ui/resources/css/special/config.css	(revision 0)
+++ main/plugin-core-ui/resources/css/special/config.css	(revision 0)
@@ -0,0 +1,37 @@
+/*
+ *  Copyright 2015 Anyware Services
+ *
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+ 
+@import 'common.css';
+@import 'code.css';
+
+div.bg
+{
+    background-image: url('../../img/special/public/bg.jpg');
+}
+
+div.wrap {
+    background-color: #CCCCCC;
+    background-color: rgba(255, 255, 255, 0.8);
+}
+
+div.code > div:before {
+    font-family: 'FontAwesome';
+    content: "\f085";
+}
+div.code > div {
+    opacity: 0.1;
+    -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=10)";
+}
Index: main/plugin-core-ui/resources/css/special/error.css
===================================================================
--- main/plugin-core-ui/resources/css/special/error.css	(revision 0)
+++ main/plugin-core-ui/resources/css/special/error.css	(revision 0)
@@ -0,0 +1,98 @@
+/*
+ *  Copyright 2015 Anyware Services
+ *
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+ 
+@import 'common.css';
+@import 'code.css';
+
+
+div.bg
+{
+    background-image: url('../../img/special/errors/bg.jpg');
+}
+
+/**
+ * STACKTRACE
+ */
+table tr.additionnal {
+    display: none;
+}
+.stacktrace table tr.additionnal {
+    display: table-row;
+    height: 100%;
+    
+    -webkit-animation-name: stacktrace-tr-additionnal;
+    -moz-animation-name: stacktrace-tr-additionnal;
+    -o-animation-name: stacktrace-tr-additionnal;
+    animation-name: stacktrace-tr-additionnal;    
+}
+
+.stacktrace table tbody tr.main {
+    display: none;
+}
+.stacktrace table tbody p.additionnal {
+    margin-top: 0;
+}
+table.main > tbody > tr.additionnal > td {
+    padding: 0 1em;
+    text-align: left;
+}
+tr.additionnal h1 {
+    font-size: 1.5em;
+    line-height: 1em;
+    font-weight: normal;
+    margin: 0.1em;
+}
+div.stacktrace {
+    box-sizing: border-box;
+    margin: 0 auto;
+    padding: 1em;
+    height: 100%;
+    overflow: scroll;
+    background-color: #E5E5E5;
+    background-color: rgba(255,255,255,0.9);
+}
+
+/**
+ * ANIMATIONS
+ */
+@keyframes code {
+    0% {
+        perspective: 1.2em; 
+    }
+    100% {
+        perspective: 1em; 
+    }
+}
+
+@keyframes stacktrace-tr-additionnal {
+    0% {
+        opacity: 0;
+    }
+    100% {
+        opacity: 1;
+    }
+}
+
+.stacktrace table tr.additionnal {
+    -webkit-animation-duration: 1.5s;
+    -moz-animation-duration: 1.5s;
+    -o-animation-duration: 1.5s;
+    animation-duration: 1.5s;
+    -webkit-animation-timing-function: ease;
+    -moz-animation-timing-function: ease;
+    -o-animation-timing-function: ease;
+    animation-timing-function: ease;
+}
Index: main/plugin-core-ui/resources/css/special/fonts.css
===================================================================
--- main/plugin-core-ui/resources/css/special/fonts.css	(revision 0)
+++ main/plugin-core-ui/resources/css/special/fonts.css	(revision 0)
@@ -0,0 +1,93 @@
+/*
+ *  Copyright 2015 Anyware Services
+ *
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+ 
+@font-face {
+    font-family: 'Open Sans';
+    src: url('../../../../../plugins/extjs6/resources/classic/theme-triton/resources/fonts/OpenSans-Light.ttf');
+    font-weight: 300;
+    font-style: normal;
+}
+
+@font-face {
+    font-family: 'Open Sans';
+    src: url('../../../../../plugins/extjs6/resources/classic/theme-triton/resources/fonts/OpenSans-LightItalic.ttf');
+    font-weight: 300;
+    font-style: italic;
+}
+
+@font-face {
+    font-family: 'Open Sans';
+    src: url('../../../../../plugins/extjs6/resources/classic/theme-triton/resources/fonts/OpenSans-Regular.ttf');
+    font-weight: 400;
+    font-style: normal;
+}
+
+@font-face {
+    font-family: 'Open Sans';
+    src: url('../../../../../plugins/extjs6/resources/classic/theme-triton/resources/fonts/OpenSans-Italic.ttf');
+    font-weight: 400;
+    font-style: italic;
+}
+
+@font-face {
+    font-family: 'Open Sans';
+    src: url('../../../../../plugins/extjs6/resources/classic/theme-triton/resources/fonts/OpenSans-Semibold.ttf');
+    font-weight: 600;
+    font-style: normal;
+}
+
+@font-face {
+    font-family: 'Open Sans';
+    src: url('../../../../../plugins/extjs6/resources/classic/theme-triton/resources/fonts/OpenSans-SemiboldItalic.ttf');
+    font-weight: 600;
+    font-style: italic;
+}
+
+@font-face {
+    font-family: 'Open Sans';
+    src: url('../../../../../plugins/extjs6/resources/classic/theme-triton/resources/fonts/OpenSans-Bold.ttf');
+    font-weight: 700;
+    font-style: normal;
+}
+
+@font-face {
+    font-family: 'Open Sans';
+    src: url('../../../../../plugins/extjs6/resources/classic/theme-triton/resources/fonts/OpenSans-BoldItalic.ttf');
+    font-weight: 700;
+    font-style: italic;
+}
+
+@font-face {
+    font-family: 'Open Sans';
+    src: url('../../../../../plugins/extjs6/resources/classic/theme-triton/resources/fonts/OpenSans-ExtraBold.ttf');
+    font-weight: 800;
+    font-style: normal;
+}
+
+@font-face {
+    font-family: 'Open Sans';
+    src: url('../../../../../plugins/extjs6/resources/classic/theme-triton/resources/fonts/OpenSans-ExtraBoldItalic.ttf');
+    font-weight: 800;
+    font-style: italic;
+}
+
+@font-face {
+    font-family: 'FontAwesome';
+    src: url('../../../../../plugins/extjs6/resources/classic/theme-triton/resources/font-awesome/fonts/fontawesome-webfont.eot?v=4.4.0');
+    src: url('../../../../../plugins/extjs6/resources/classic/theme-triton/resources/font-awesome/fonts/fontawesome-webfont.eot?#iefix&v=4.4.0') format('embedded-opentype'), url('../../../../../plugins/extjs6/resources/classic/theme-triton/resources/font-awesome/fonts/fontawesome-webfont.woff2?v=4.4.0') format('woff2'), url('../../../../../plugins/extjs6/resources/classic/theme-triton/resources/font-awesome/fonts/fontawesome-webfont.woff?v=4.4.0') format('woff'), url('../../../../../plugins/extjs6/resources/classic/theme-triton/resources/font-awesome/fonts/fontawesome-webfont.ttf?v=4.4.0') format('truetype'), url('../../../../../plugins/extjs6/resources/classic/theme-triton/resources/font-awesome/fonts/fontawesome-webfont.svg?v=4.4.0#fontawesomeregular') format('svg');
+    font-weight: normal;
+    font-style: normal;
+}
Index: main/plugin-core-ui/resources/css/special/login.css
===================================================================
--- main/plugin-core-ui/resources/css/special/login.css	(revision 0)
+++ main/plugin-core-ui/resources/css/special/login.css	(revision 0)
@@ -0,0 +1,121 @@
+/*
+ *  Copyright 2015 Anyware Services
+ *
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+ 
+@import 'common.css';
+
+div.bg {
+    background-image: url('../../img/special/public/bg.jpg');
+}
+
+div.connection {
+    background-color: #CCCCCC;
+    background-color: rgba(255, 255, 255, 0.8);
+    border: 1px solid #7d3d92;
+    
+    padding: 1em;
+    
+    max-width: 20em;
+    
+    text-align: left;
+}
+
+table.input {
+    width: 100%;
+    border: 1px solid #7f7f7f;
+    border: 1px solid #7f7f7f;
+    background-color: #FFF;
+    border-collapse: collapse;
+    table-layout: fixed;
+    margin-bottom: 0.5em;
+}
+
+table.input td.input {
+    padding: 1em 0 1em 1em;
+}
+table.input td.input input {
+    border-style: none;
+    outline-style: none;
+    background-color: transparent;
+    width: 100%;
+}
+
+table.input td.image {
+   width: 2em;
+   padding: 0 1em;
+}
+table.input td.image:after {
+    font-family: "FontAwesome";
+    font-size: 2em;
+    color: #E4E4E4;
+    vertical-align: middle;
+}
+table.input.login td.image:after {
+    content: "\f007";
+}
+table.input.password td.image:after {
+    content: "\f023";
+}
+
+
+
+div.checkbox {
+    margin-bottom: 1em;
+}
+div.checkbox input {
+    width: 0.8em;
+    height: 0.8em;
+    vertical-align: middle;
+}
+div.checkbox label {
+    font-size: 0.8em;
+}
+
+button {
+    box-sizing: border-box;
+    width: 100%;
+    padding: 0.8em;
+    position: relative;
+    background-color: #7d3d92;
+    border: 1px solid #7d3d92;
+    color: #fff;
+    font-size: 1em;
+    outline-style: none;
+}
+
+button:after {
+    content: "\f105";
+    font-family: "FontAwesome";
+    font-size: 2em;
+    line-height: 1.39em;
+    position: absolute;
+    right: 0.5em;
+    top: 0;
+}
+
+button:hover {
+    background-color: #9d57b3;
+    border-color: #9d57b3;
+}
+button:active {
+    background-color: #613171;
+    border-color: #613171;
+}
+button:focus {
+    -webkit-box-shadow: inset 0px 0px 0px 1px #F0F0F0;
+    -moz-box-shadow: inset 0px 0px 0px 1px #F0F0F0;
+    box-shadow: inset 0px 0px 0px 1px #F0F0F0;
+}
+}
\ No newline at end of file
Index: main/plugin-core-ui/resources/css/special/safemode.css
===================================================================
--- main/plugin-core-ui/resources/css/special/safemode.css	(revision 0)
+++ main/plugin-core-ui/resources/css/special/safemode.css	(revision 0)
@@ -0,0 +1,32 @@
+/*
+ *  Copyright 2015 Anyware Services
+ *
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+ 
+@import 'common.css';
+@import 'code.css';
+
+div.bg
+{
+    background-image: url('../../img/special/errors/bg.jpg');
+}
+
+div.code > div:before {
+    font-family: 'FontAwesome';
+    content: "\f071";
+}
+div.code > div {
+    opacity: 0.03;
+    -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=10)";
+}
Index: main/plugin-core-ui/resources/css/unsupported-browser.css
===================================================================
--- main/plugin-core-ui/resources/css/unsupported-browser.css	(revision 34071)
+++ main/plugin-core-ui/resources/css/unsupported-browser.css	(nonexistent)
@@ -1,104 +0,0 @@
-/*
- *  Copyright 2010 Anyware Services
- *
- *  Licensed under the Apache License, Version 2.0 (the "License");
- *  you may not use this file except in compliance with the License.
- *  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- */
-
-html, body {
-    margin: 0;
-    height: 100%
-}
-
-body {
-	background-color: #e9e9e9;
-	background-image: url('../img/bg.jpg');
-    background-size: cover;
-    background-repeat: repeat;
-    font-family: 'Open Sans', 'Helvetica Neue', helvetica, arial, verdana, sans-serif;
-	color: #404040;
-	font-weight: 300;
-}
-.unsupported-browser-header {
-	background-color:#812281; 
-	color:#f0f0f0; 
-	text-align:center; 
-	padding: 10px 0;
-	color: #F0F0F0;
-	font-size: 16px;
-	font-weight: 400;
-	font-family: "Open Sans","Helvetica Neue",helvetica,arial,verdana,sans-serif;
-	line-height: 20px;
-}
-
-
-table.unsupported-browser-inner-container .text-container {
-	background: rgba(255,255,255,0.85);
-	padding: 20px;
-}
-
-table.unsupported-browser-inner-container td {
-	text-align: center;
-}
-
-.unsupported-browser-text {
-    font-size: 40px;
-    line-height: 50px;
-}
-
-.unsupported-browser-desc,
-.unsupported-browser-redirect-text {
-    line-height: 30px;
-    text-align: center;
-    font-size: 16px;
-}
-
-.unsupported-browser-redirect-text a {
-    color: #35baf6;
-    text-decoration: none;
-}
-
-.unsupported-browser-redirect-text a:hover {
-    text-decoration: underline;
-}
-
-.browsers {
-	margin-top: 20px;
-	margin-left: auto;
-	margin-right: auto;
-	display: inline-block;
-}
-
-.browsers .browser {
-	margin: 5px;
-	float: left;
-	width: 130px;
-	line-height: 22px;
-}
-
-.browsers .browser div.browser-end {
-	clear: both;
-}
-
-
-.browsers .browser .browser-name {
-	display: block;
-	margin-left: auto;
-	margin-right: auto;
-}
-
-.browsers .browser .browser-version {
-	color: #999;
-	font-size: 14px;
-}
-
-
Index: main/plugin-core-ui/resources/img/special/browsers/chrome_48.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: main\plugin-core-ui\resources\img\special\browsers\chrome_48.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
Index: main/plugin-core-ui/resources/img/special/browsers/firefox_48.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: main\plugin-core-ui\resources\img\special\browsers\firefox_48.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
Index: main/plugin-core-ui/resources/img/special/browsers/opera_48.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: main\plugin-core-ui\resources\img\special\browsers\opera_48.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
Index: main/plugin-core-ui/resources/img/special/browsers/safari_48.png
===================================================================
Cannot display: file marked as a binary type.
svn:mime-type = image/png

Property changes on: main\plugin-core-ui\resources\img\special\browsers\safari_48.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+image/png
Index: main/plugin-core-ui/resources/js/Ametys/form/widget/AbstractQueryableComboBox.js
===================================================================
--- main/plugin-core-ui/resources/js/Ametys/form/widget/AbstractQueryableComboBox.js	(revision 34071)
+++ main/plugin-core-ui/resources/js/Ametys/form/widget/AbstractQueryableComboBox.js	(working copy)
@@ -224,7 +224,7 @@
     {
     	value = Ext.Array.from(value);
     	
-    	this.combobox.value = this.combobox.multiSelect ? value : value[0];
+    	//this.combobox.value = this.combobox.multiSelect ? value : value[0];
     	this.callParent([value]);
     	this.combobox.setValue(value);
     },
Index: main/plugin-core-ui/resources/js/Ametys/public/RedirectActionScreen.js
===================================================================
--- main/plugin-core-ui/resources/js/Ametys/public/RedirectActionScreen.js	(revision 34071)
+++ main/plugin-core-ui/resources/js/Ametys/public/RedirectActionScreen.js	(nonexistent)
@@ -1,152 +0,0 @@
-/*
- *  Copyright 2012 Anyware Services
- *
- *  Licensed under the Apache License, Version 2.0 (the "License");
- *  you may not use this file except in compliance with the License.
- *  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- */
-
-/**
- * This panel display a full screen for an action of redirection.
- * This is an example of use:
- * 
- * 
- * 		Ext.create('Ametys.public.RedirectActionScreen', {
- *             text: "My action title",
- *             description: "My action description",
- *             
- *             image: "/my/action/image.png",
- *             
- *             btnText: "Action",
- *             redirectUrl: "/my/action/url",
- *             redirectText: 'Go to ...'
- *       });
- * 	
- */
-Ext.define('Ametys.public.RedirectActionScreen', {
-    extend: 'Ext.panel.Panel',
-    
-    /**
-     * @cfg {String} text The main text
-     */
-    text: '',
-    
-    /**
-     * @cfg {String} btnText The text of button to redirect
-     */
-    btnText: '',
-    
-    /**
-     * @cfg {String} redirectUrl The URL to redirect to.
-     */
-    redirectUrl: '#',
-    
-    /**
-     * @cfg {String} [redirectText] The text to display above redirect button
-     */
-    redirectText: '',
-    
-    /**
-     * @cfg {String} [description] The description
-     */
-    description: '',
-    
-    /**
-     * @cfg {String} [image] The path to the image illustration in size 128x128 pixels.
-     */
-    
-    cls : 'ametys-public-page',
-    
-    title: "<i18n:text i18n:catalogue='application' i18n:key='APPLICATION_PRODUCT_LABEL'/>",
-    titleAlign : "center",
-    
-    maximized : true,
-    frameHeader : false,
-    
-    layout : {
-      type : "vbox",
-      align: "center",
-      pack: "center"
-    },
-    
-    initComponent: function ()
-    {
-    	this.items = [{
-    	    xtype : "panel",
-    	    bodyPadding: '30 20',
-    	    width : "80%",
-    	    cls : "ametys-public-page-inner-container",
-    	    layout : {
-    	      type : "vbox",
-    	      align : "center",
-    	      pack : "center"
-    	    },
-    	    items : [
-    	        // Title
-    	        {
-    	        	xtype : "label",
-    	        	cls : "ametys-public-page-text",
-    	        	text : this.text
-	    	    },
-	    	    // Description
-	    	    this.getDescription(),
-	    	    // Image
-	    	    {
-	    	    	hidden: Ext.isEmpty(this.image),
-	    	    	xtype: 'image',
-	    	    	cls : "ametys-public-page-img",
-	    	    	src: this.image,
-	    	        width: 128,
-	    	        height: 128,
-	    	        margin: '20 0 0 0'
-	    	    },
-	    	    // Redirect text
-	    	    {
-	    	    	hidden: Ext.isEmpty(this.redirectText),
-    	        	xtype : "label",
-    	        	cls : "ametys-public-page-redirect-text",
-    	        	text : this.redirectText
-	    	    }, 
-	    	    // Redirection button
-	    	    {
-	      	      xtype : "button",
-	      	      scale : "large",
-	      	      margin: '20 0 0 0',
-	      	      cls : "ametys-public-page-btn",
-	      	      iconAlign : "right",
-	      	      iconCls : "x-fa fa-angle-right",
-	      	      text : this.btnText,
-	      	      handler: function (btn) {
-	      	    	  window.location.href = this.redirectUrl;
-	      	      },
-	      	      scope: this
-	      	    }
-    	    ]
-    	}]
-    	
-    	this.callParent(arguments);
-    },
-    
-    /**
-     * Get the description's component
-     * @return {Object} The component configuration
-     */
-    getDescription: function ()
-    {
-    	return {
-	    	hidden: Ext.isEmpty(this.description),
-	    	xtype : "label",
-	    	cls : "ametys-public-page-desc",
-	    	html : '<div>' + this.description + '</div>'
-	    };
-    }
-});
-
Index: main/plugin-core-ui/stylesheets/workspace.xsl
===================================================================
--- main/plugin-core-ui/stylesheets/workspace.xsl	(revision 34071)
+++ main/plugin-core-ui/stylesheets/workspace.xsl	(working copy)
@@ -57,12 +57,12 @@
     <xsl:template match="workspace">
     	<html>
 			<head>
-				<meta http-equiv="X-UA-Compatible" content="IE=10" />
+				<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
                 <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"/>
 				<xsl:call-template name="title"/>
 				
-				<link rel="icon" type="image/gif" href="{$contextPath}/plugins/core-ui/resources/img/runtime_favico.gif" />
-        		<link rel="shortcut icon" type="image/x-icon" href="{$contextPath}/plugins/core-ui/resources/img/runtime_favico.ico" />
+                <link rel="icon" type="image/x-icon" href="{$contextPath}/kernel/resources/img/favicon.ico" />
+                <link rel="shortcut icon" type="image/x-icon" href="{$contextPath}/kernel/resources/img/favicon.ico" />
 				
 				<xsl:if test="$splashscreen != 'no'">
 					<style type="text/css" media="screen">
Index: main/workspace-admin/sitemap.xmap
===================================================================
--- main/workspace-admin/sitemap.xmap	(revision 34071)
+++ main/workspace-admin/sitemap.xmap	(working copy)
@@ -106,40 +106,25 @@
             <!-- unauthenticated pages -->
             <map:match pattern="public/unsupported-browser.html">
                 <map:generate type="action-result"/>
-                <map:transform src="plugin:core-ui://pages/public/{1}.xsl">
-                    <map:parameter name="contextPath" value="{request:contextPath}"/>
-                    <map:parameter name="workspaceName" value="{request-attr:workspaceName}"/>
-                    <map:parameter name="workspaceURI" value="{request-attr:workspaceURI}"/>
-                    
-                    <map:parameter name="redirect" value="{request-param:uri}"/>
-                    <map:parameter name="doc" value="{request-param:doc}"/>
-                    
-                    <map:parameter name="browser" value="{request-param:browser}"/>
-                    <map:parameter name="browserversion" value="{request-param:browserversion}"/>
-                    <map:parameter name="supported" value="{request-param:supported}"/>
-                </map:transform>
+                <map:transform src="plugin:core-ui://pages/public/{1}.xsl"/>
                 <map:transform type="i18n">
                     <map:parameter name="locale" value="{locale:locale}"/>
                     <map:parameter name="workspace" value="{request-attr:workspaceName}"/>
                 </map:transform>
                 <!-- Do not minimize here. See RUNTIME-877 -->
                 <!-- No HTML5 here -->
-                <map:serialize/>
+                <map:serialize type="xhtml4"/>
             </map:match>
             
 			<map:match pattern="public/*.html">
 				<map:generate type="action-result"/>
-				<map:transform src="plugin:core-ui://pages/public/{1}.xsl">
-					<map:parameter name="contextPath" value="{request:contextPath}"/>
-                    <map:parameter name="workspaceName" value="{request-attr:workspaceName}"/>
-                    <map:parameter name="workspaceURI" value="{request-attr:workspaceURI}"/>
-				</map:transform>
+				<map:transform src="plugin:core-ui://pages/public/{1}.xsl"/>
 				<map:transform type="i18n">
 					<map:parameter name="locale" value="{locale:locale}"/>
                     <map:parameter name="workspace" value="{request-attr:workspaceName}"/>
 				</map:transform>
                 <!-- Do not minimize here. See RUNTIME-877 -->
-				<map:serialize type="xhtml5"/>
+				<map:serialize/>
 			</map:match>
             
             <!-- ************** -->