diff --git a/src/main/java/de/bps/onyx/plugin/OnyxModule.java b/src/main/java/de/bps/onyx/plugin/OnyxModule.java index ecc9814a1fef1e779ea743dcbacc9d4d4d7d99cc..2d1a182fbafad9fc05c968b3a39d662b251f6897 100644 --- a/src/main/java/de/bps/onyx/plugin/OnyxModule.java +++ b/src/main/java/de/bps/onyx/plugin/OnyxModule.java @@ -23,19 +23,31 @@ package de.bps.onyx.plugin; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.nio.file.FileVisitResult; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.SimpleFileVisitor; +import java.nio.file.attribute.BasicFileAttributes; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; +import org.apache.commons.io.IOUtils; import org.olat.core.configuration.AbstractOLATModule; import org.olat.core.configuration.ConfigOnOff; import org.olat.core.configuration.PersistedProperties; import org.olat.core.id.Identity; import org.olat.core.id.OLATResourceable; +import org.olat.core.logging.OLog; +import org.olat.core.logging.Tracing; +import org.olat.core.util.PathUtils; import org.olat.core.util.ZipUtil; import org.olat.course.nodes.QTICourseNode; import org.olat.course.run.scoring.ScoreEvaluation; +import org.olat.fileresource.types.ResourceEvaluation; import org.olat.ims.qti.QTIResultManager; import org.olat.ims.qti.QTIResultSet; import org.olat.ims.qti.fileresource.SurveyFileResource; @@ -47,6 +59,8 @@ import org.olat.ims.qti.process.Resolver; * @author Ingmar Kroll */ public class OnyxModule extends AbstractOLATModule implements ConfigOnOff { + + private static final OLog log = Tracing.createLoggerFor(OnyxModule.class); private static String onyxPluginWSLocation; public static ArrayList<PlayerTemplate> PLAYERTEMPLATES; @@ -195,6 +209,52 @@ public class OnyxModule extends AbstractOLATModule implements ConfigOnOff { return false; } } + + public static ResourceEvaluation isOnyxTest(File file, String filename) { + ResourceEvaluation eval = new ResourceEvaluation(); + BufferedReader reader = null; + try { + ImsManifestFileFilter visitor = new ImsManifestFileFilter(); + Path fPath = PathUtils.visit(file, filename, visitor); + if(visitor.isValid()) { + Path qtiPath = fPath.resolve("imsmanifest.xml"); + reader = Files.newBufferedReader(qtiPath, StandardCharsets.UTF_8); + while (reader.ready()) { + String l = reader.readLine(); + if (l.indexOf("imsqti_xmlv2p1") != -1 || l.indexOf("imsqti_test_xmlv2p1") != -1 || l.indexOf("imsqti_assessment_xmlv2p1") != -1) { + eval.setValid(true); + break; + } + } + } else { + eval.setValid(false); + } + } catch (IOException e) { + log.error("", e); + eval.setValid(false); + } finally { + IOUtils.closeQuietly(reader); + } + return eval; + } + + private static class ImsManifestFileFilter extends SimpleFileVisitor<Path> { + private boolean imsManifestFile; + + @Override + public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) + throws IOException { + String filename = file.getFileName().toString(); + if("imsmanifest.xml".equals(filename)) { + imsManifestFile = true; + } + return imsManifestFile ? FileVisitResult.TERMINATE : FileVisitResult.CONTINUE; + } + + public boolean isValid() { + return imsManifestFile; + } + } public static boolean isOnyxTest(File zipfile) { // <OLTACE-72> @@ -226,11 +286,7 @@ public class OnyxModule extends AbstractOLATModule implements ConfigOnOff { } br.close(); } catch (Exception e) { - try { - br.close(); - } catch (Exception e1) { - // TODO Auto-generated catch block - } + IOUtils.closeQuietly(br); } // <OLTACE-72> if (unzippedDir != null) { diff --git a/src/main/java/de/bps/onyx/plugin/run/OnyxRunController.java b/src/main/java/de/bps/onyx/plugin/run/OnyxRunController.java index 011eb3d9adf7ceb5d384d5beb6488a43bf5af1ae..49e251e66f7d6d1f1a5b11df7c26116bea35f893 100644 --- a/src/main/java/de/bps/onyx/plugin/run/OnyxRunController.java +++ b/src/main/java/de/bps/onyx/plugin/run/OnyxRunController.java @@ -55,6 +55,7 @@ import org.olat.core.logging.Tracing; import org.olat.core.util.CodeHelper; import org.olat.core.util.Formatter; import org.olat.core.util.StringHelper; +import org.olat.core.util.Util; import org.olat.core.util.vfs.VFSContainer; import org.olat.course.CourseFactory; import org.olat.course.ICourse; @@ -71,7 +72,6 @@ import org.olat.course.run.userview.UserCourseEnvironment; import org.olat.fileresource.FileResourceManager; import org.olat.ims.qti.QTIResultSet; import org.olat.modules.ModuleConfiguration; -import org.olat.modules.iq.IQSecurityCallback; import org.olat.repository.RepositoryEntry; import de.bps.onyx.plugin.OnyxModule; @@ -150,9 +150,9 @@ public class OnyxRunController extends BasicController { * @param wControl * @param testCourseNode */ - public OnyxRunController(UserCourseEnvironment userCourseEnv, ModuleConfiguration moduleConfiguration, IQSecurityCallback secCallback, UserRequest ureq, - WindowControl wControl, QTICourseNode courseNode) { - super(ureq, wControl); + public OnyxRunController(UserCourseEnvironment userCourseEnv, ModuleConfiguration moduleConfiguration, + UserRequest ureq, WindowControl wControl, QTICourseNode courseNode) { + super(ureq, wControl, Util.createPackageTranslator(CourseNode.class, ureq.getLocale())); this.modConfig = moduleConfiguration; this.userCourseEnv = userCourseEnv; @@ -799,7 +799,7 @@ public class OnyxRunController extends BasicController { private final static String RESUME_LABEL = "resume"; public StartButtonForm(UserRequest ureq, WindowControl wControl, boolean resumeSuspended) { - super(ureq, wControl); + super(ureq, wControl, LAYOUT_BAREBONE); this.resumeSuspended = resumeSuspended; initForm(ureq); } @@ -812,6 +812,7 @@ public class OnyxRunController extends BasicController { @Override protected void initForm(FormItemContainer formLayout, Controller listener, UserRequest ureq) { startButton = FormUIFactory.getInstance().addFormLink(START_LABEL, resumeSuspended ? RESUME_LABEL : START_LABEL, null, flc, Link.BUTTON); + startButton.setPrimary(true); startButton.addActionListener(FormEvent.ONCLICK); } diff --git a/src/main/java/de/bps/onyx/plugin/run/_content/onyxrun.html b/src/main/java/de/bps/onyx/plugin/run/_content/onyxrun.html index 39f6c302ad111a48918e46aa867ce7f1235c672b..e876a32619ce4d96b829fa63970b72cae7aca1af 100644 --- a/src/main/java/de/bps/onyx/plugin/run/_content/onyxrun.html +++ b/src/main/java/de/bps/onyx/plugin/run/_content/onyxrun.html @@ -1,164 +1,134 @@ -<h3>$!menuTitle</h3> -<i>$!displayTitle</i> - #if( $viewmode == 0 || $viewmode == -1 ) - <p> + #if($showResultsOnHomePage) + #if($showResultsVisible) + <div class="panel panel-default o_personal"> + <div class="panel-heading"> + <h4 class="panel-title">$r.translate("personal.title")</h4> + </div> + <table class="table"> + <tbody> + <tr> + <th>$r.translate("attempts")</th> + <td> + #if ($attemptsConfig) + $attemptsConfig + #else + $r.translate("attempts.noLimit") + #end + </td> + </tr> + #if($attempts) + <tr> + <th>$r.translate("attempts.yourattempts")</th> + <td>$attempts</td> + </tr> + #end + #if ($attempts && $attempts >0 || $self) + <tr> + <th colspan="2">$r.translate("attempts.result")</th> + </tr> + #foreach ($var in $qtivars) + <tr> + <th>${var.getIdentifier()}:</th> + <td>${var.getValue()}</td> + </tr> + #end + #if ($hasResult == true) + <tr> + <th>$r.translate("score.yourscore")</th> + <td>$score</td> + </tr> + ## hide status - line if there is no passed value set + #if($passed != "") + <tr> + <th>$r.translate("assessment.state")</th> + <td> + #if($passed == true) + <span class="o_state o_passed"><i class="o_icon o_icon_passed"> </i> $r.translate("passed.yes")</span> + #elseif($passed == false) + <span class="o_state o_failed"><i class="o_icon o_icon_failed"> </i> $r.translate("passed.no")</span> + #end + </td> + </tr> + #end + #else + <tr> + <td colspan="2">$r.translate("no.testresults")</td> + </tr> + #end + #if($showResultsOnHomePage && $attempts && $attempts >0) + <tr> + <th>$r.translate("showResults.title")</th> + <td>$r.render("cmd.showOnyxReporter")</td> + </tr> + #end + #if ($comment) + <tr> + <th>$r.translate("comment.yourcomment")</th> + <td>$comment</td> + </tr> + #end + #end + </tbody> + </table> + </div> + #end ##showResultsVisible + #end ##showResultsOnHomePage -##<OLATCE-1281> -#if($showResultsOnHomePage) - #if($showResultsVisible) -##</OLATCE-1281> - <div class="o_course_run_scoreinfo"> - <p> - <table> - <tr> - <td> - $r.translate("attempts"): - </td> - <td> - #if ($attemptsConfig) - $attemptsConfig - #else - $r.translate("attempts.noLimit") - #end - </td> - </tr> - #if($attempts) - <tr> - <td>$r.translate("attempts.yourattempts"):</td> - <td>$attempts</td> - </tr> - #end - #if ($attempts && $attempts >0 || $self) - <tr> - <td colspan="2"><b>$r.translate("attempts.result")</b></td> - </tr> - #foreach ($var in $qtivars) - <tr> - <td>${var.getIdentifier()}:</td> - <td>${var.getValue()}</td> - </tr> - #end - #if ($hasResult == true) - <tr> - <td>$r.translate("score.yourscore"):</td> - <td>$score</td> - </tr> - ##<OLATCE-1014> hide status - line if there is no passed value set - #if($passed != "") - ##</OLATCE-1014> - <tr> - <td>$r.translate("assessment.state"): </td> - <td> - #if($passed == true) - <span class="o_state o_passed"><i class\="o_icon o_icon_passed"> </i> $r.translate("passed.yes")</span> - #elseif($passed == false) - <span class="o_state o_failed"><i class="o_icon o_icon_failed"> </i> $r.translate("passed.no")</span> - #end - </td> - </tr> - ##<OLATCE-1014> - #end - ##</OLATCE-1014> + #if($viewmode == -1) + <div class="o_important">$r.translate("onyx.onlyonetime")</div> #else - <tr> - <td colspan="2">$r.translate("no.testresults")</td> - </tr> - #end - <tr> - <td> - #if($showResultsOnHomePage && $attempts && $attempts >0) - <h4>$r.translate("showResults.title")</h4> - $r.render("cmd.showOnyxReporter") - #end - </td> - </tr> - #if ($comment) - <tr> - <td> - $r.translate("comment.yourcomment"): - </td> - <td> - $comment - </td> - </tr> + <div class="o_statusinfo"> + #if ($self) + <p>$r.translate("intro.self")</p> + <p>$r.translate("info.selfassessment")</p> + #else + <p>$r.translate("intro")</p> + <p>$r.translate("info.assessment")</p> #end - #end - </table> - </p> </div> -##<OLATCE-1281> else-block of showResultsVisible - #end - #end -##<OLATCE-1281> end of $showResultsOnHomePage - </p> - #if($viewmode == -1) - <b> $r.translate("onyx.onlyonetime") </b> - #else - <br><br> - <div class="o_course_run_statusinfo"> - #if ($self) - $r.translate("intro.self") - <div class="o_qti_typeinfo">$r.translate("info.selfassessment")</div> - #else - $r.translate("intro") - <div class="o_qti_typeinfo">$r.translate("info.assessment")</div> - #end - <p/> - </div> - <center> - $r.render("startapplet") - </center> + <div class="o_button_group"> + $r.render("startapplet") + </div> #end + #if ($hasDisc && $viewmode != -1) - <p> - <table width="90%" class="o_learningObjectives_content"> - <tr><td> - $r.render("disc") - </td></tr> - </table> - </p> + <div class="o_block"> + <table width="90%" class="o_learningObjectives_content"> + <tr><td>$r.render("disc")</td></tr> + </table> + </div> #end #elseif( $viewmode == 2 ) ## show endtest - - #if ($errorcode == 0) ## without errors - <h4> $r.translate("onyx.end") </h4> - #else ##with errors - <h1><font color="red"> $r.translate("onyx.end.errors") </font> </h1> - #end - + #if ($errorcode == 0) ## without errors + <div class="o_important">$r.translate("onyx.end")</h4> + #else ##with errors + <div class="o_error">$r.translate("onyx.end.errors")</div> + #end #elseif ($viewmode == 1) ##show survey - -<div class="o_course_run"> + <div class="o_course_run"> #if ($attempts && $attempts == 0) - <div class="o_course_run_statusinfo"> - <p> - $r.translate("Intro.surv") - </p> - <p> - $r.translate("info.survey") - </p> + <div class="o_statusinfo"> + <p>$r.translate("Intro.surv")</p> + <p>$r.translate("info.survey")</p> </div> - <div class="b_button_group"> + <div class="o_button_group"> $r.render("startapplet") </div> #else - <div class="o_course_run_statusinfo"> + <div class="o_statusinfo"> $r.translate("info.survey.alreadydone") </div> #end #if($showReporter) - <div class="b_button_group"> + <div class="o_button_group"> $r.render("cmd.showOnyxReporter") </div> #end #if ($hasDisc) - <div class="o_course_run_disclaimer"> + <div class="o_block"> $r.render("disc") </div> #end </div> - -#end -## - +#end \ No newline at end of file diff --git a/src/main/java/org/olat/course/nodes/iq/IQControllerCreatorOlat.java b/src/main/java/org/olat/course/nodes/iq/IQControllerCreatorOlat.java index 41a46a2f5dcd82855ddd991db4469de4a9b5c183..6f728f3b7c7af66ae9988917eddd5ffaf91e6e85 100644 --- a/src/main/java/org/olat/course/nodes/iq/IQControllerCreatorOlat.java +++ b/src/main/java/org/olat/course/nodes/iq/IQControllerCreatorOlat.java @@ -132,9 +132,7 @@ public class IQControllerCreatorOlat implements IQControllerCreator { ModuleConfiguration config = courseNode.getModuleConfiguration(); boolean onyx = IQEditController.CONFIG_VALUE_QTI2.equals(config.get(IQEditController.CONFIG_KEY_TYPE_QTI)); if (onyx) { - final AssessmentManager am = userCourseEnv.getCourseEnvironment().getAssessmentManager(); - final IQSecurityCallback sec = new CourseIQSecurityCallback(courseNode, am, ureq.getIdentity()); - controller = new OnyxRunController(userCourseEnv, config, sec, ureq, wControl, courseNode); + controller = new OnyxRunController(userCourseEnv, config, ureq, wControl, courseNode); } else { AssessmentManager am = userCourseEnv.getCourseEnvironment().getAssessmentManager(); IQSecurityCallback sec = new CourseIQSecurityCallback(courseNode, am, ureq.getIdentity()); @@ -174,11 +172,11 @@ public class IQControllerCreatorOlat implements IQControllerCreator { Controller controller; ModuleConfiguration config = courseNode.getModuleConfiguration(); AssessmentManager am = userCourseEnv.getCourseEnvironment().getAssessmentManager(); - IQSecurityCallback sec = new CourseIQSecurityCallback(courseNode, am, ureq.getIdentity()); boolean onyx = IQEditController.CONFIG_VALUE_QTI2.equals(config.get(IQEditController.CONFIG_KEY_TYPE_QTI)); if (onyx) { - controller = new OnyxRunController(userCourseEnv, config, sec, ureq, wControl, courseNode); + controller = new OnyxRunController(userCourseEnv, config, ureq, wControl, courseNode); } else { + IQSecurityCallback sec = new CourseIQSecurityCallback(courseNode, am, ureq.getIdentity()); controller = new IQRunController(userCourseEnv, courseNode.getModuleConfiguration(), sec, ureq, wControl, courseNode); } return controller; @@ -199,9 +197,7 @@ public class IQControllerCreatorOlat implements IQControllerCreator { ModuleConfiguration config = courseNode.getModuleConfiguration(); boolean onyx = IQEditController.CONFIG_VALUE_QTI2.equals(config.get(IQEditController.CONFIG_KEY_TYPE_QTI)); if (onyx) { - AssessmentManager am = userCourseEnv.getCourseEnvironment().getAssessmentManager(); - IQSecurityCallback sec = new CourseIQSecurityCallback(courseNode, am, ureq.getIdentity()); - controller = new OnyxRunController(userCourseEnv, config, sec, ureq, wControl, courseNode); + controller = new OnyxRunController(userCourseEnv, config, ureq, wControl, courseNode); } else { RepositoryEntry repositoryEntry = ne.getCourseNode().getReferencedRepositoryEntry(); OLATResourceable ores = repositoryEntry.getOlatResource(); diff --git a/src/main/java/org/olat/fileresource/FileResourceManager.java b/src/main/java/org/olat/fileresource/FileResourceManager.java index 26f5a6fe19dcd658069ae7ed05d61eb5e53055f4..abd37748c5d9b5ec28b7aba448021479c2b1800f 100644 --- a/src/main/java/org/olat/fileresource/FileResourceManager.java +++ b/src/main/java/org/olat/fileresource/FileResourceManager.java @@ -99,7 +99,7 @@ public class FileResourceManager extends BasicManager { * @param knownResource maybe null, FileResource type will be calculated * @return True upon success, false otherwise. */ - private FileResource addFileResource(File fResource, String newName, FileResource knownResource) throws AddingResourceException { + private FileResource addFileResource(File fResource, String newName, FileResource knownResource) { // ZIPDIR is a reserved name... check if (fResource.getName().equals(ZIPDIR)) throw new AssertException("Trying to add FileResource with reserved name '" + ZIPDIR + "'."); @@ -125,62 +125,56 @@ public class FileResourceManager extends BasicManager { // save resourceableID Long resourceableId = tempFr.getResourceableId(); // extract type - try { - if (DocFileResource.validate(fResource)) tempFr = new DocFileResource(); - else if (XlsFileResource.validate(fResource)) tempFr = new XlsFileResource(); - else if (PowerpointFileResource.validate(fResource)) tempFr = new PowerpointFileResource(); - else if (PdfFileResource.validate(fResource)) tempFr = new PdfFileResource(); - else if (ImageFileResource.validate(fResource)) tempFr = new ImageFileResource(); - else if (MovieFileResource.validate(fResource)) tempFr = new MovieFileResource(); - else if (SoundFileResource.validate(fResource)) tempFr = new SoundFileResource(); - else if (AnimationFileResource.validate(fResource)) tempFr = new AnimationFileResource(); - else if (SharedFolderFileResource.validate(fResource)) tempFr = new SharedFolderFileResource(); - // add a wiki copy - else if (WikiResource.validate(fResource, null).isValid()) tempFr = new WikiResource(); - // add a podcast copy - else if (PodcastFileResource.validate(fResource)) tempFr = new PodcastFileResource(fResourceFileroot, fResource); - // add a blog copy - else if (BlogFileResource.validate(fResource)) tempFr = new BlogFileResource(fResourceFileroot, fResource); - // add a glossary copy - else if (GlossaryResource.validate(fResource)) tempFr = new GlossaryResource(); - //add portfolio copy - else if (EPTemplateMapResource.validate(fResource)) tempFr = new EPTemplateMapResource(); - // the following types need unzippedDir - else if (fResource.getName().toLowerCase().endsWith(".zip")) { - File fUnzippedDir = unzipFileResource(tempFr); - if (fUnzippedDir == null) { - // in case of failure we forward the error message - throw new AddingResourceException("resource.error.zip"); - } - if (TestFileResource.validate(fUnzippedDir)) tempFr = new TestFileResource(); - else if (WikiResource.validate(fUnzippedDir, null).isValid()) tempFr = new WikiResource(); - else if (PodcastFileResource.validate(fUnzippedDir)) tempFr = new PodcastFileResource(fResourceFileroot, fUnzippedDir); - else if (BlogFileResource.validate(fUnzippedDir)) tempFr = new BlogFileResource(fResourceFileroot, fUnzippedDir); - else if (SurveyFileResource.validate(fUnzippedDir)) tempFr = new SurveyFileResource(); - // CP must be later entry... Test- and SurveyFileResource may contain - // imsmanifest.xml as well - else if (ImsCPFileResource.validate(fUnzippedDir)) tempFr = new ImsCPFileResource(); - // scorm and cp now can throw an exception which helps to show a - // better error message in case - // of a failure in adding a new resource - else if (ScormCPFileResource.validate(fUnzippedDir)) tempFr = new ScormCPFileResource(); - // glossary resources are packaged within zip for import/export - else if (GlossaryResource.validate(fUnzippedDir)) tempFr = new GlossaryResource(); - // portfolio template are packaged within zip for import/export - else if (EPTemplateMapResource.validate(fUnzippedDir)) { - tempFr = new EPTemplateMapResource(); - } - else { - // just a generic ZIP file... we can delete the temporary unziped - // dir... - throw new AddingResourceException("doesn't matter what error key is declared"); - } + + if (DocFileResource.validate(fResource)) tempFr = new DocFileResource(); + else if (XlsFileResource.validate(fResource)) tempFr = new XlsFileResource(); + else if (PowerpointFileResource.validate(fResource)) tempFr = new PowerpointFileResource(); + else if (PdfFileResource.validate(fResource)) tempFr = new PdfFileResource(); + else if (ImageFileResource.validate(fResource)) tempFr = new ImageFileResource(); + else if (MovieFileResource.validate(fResource)) tempFr = new MovieFileResource(); + else if (SoundFileResource.validate(fResource)) tempFr = new SoundFileResource(); + else if (AnimationFileResource.validate(fResource)) tempFr = new AnimationFileResource(); + else if (SharedFolderFileResource.validate(fResource)) tempFr = new SharedFolderFileResource(); + // add a wiki copy + else if (WikiResource.validate(fResource, null).isValid()) tempFr = new WikiResource(); + // add a podcast copy + else if (PodcastFileResource.validate(fResource)) tempFr = new PodcastFileResource(fResourceFileroot, fResource); + // add a blog copy + else if (BlogFileResource.validate(fResource)) tempFr = new BlogFileResource(fResourceFileroot, fResource); + // add a glossary copy + else if (GlossaryResource.validate(fResource)) tempFr = new GlossaryResource(); + //add portfolio copy + else if (EPTemplateMapResource.validate(fResource)) tempFr = new EPTemplateMapResource(); + // the following types need unzippedDir + else if (fResource.getName().toLowerCase().endsWith(".zip")) { + File fUnzippedDir = unzipFileResource(tempFr); + if (fUnzippedDir == null) { + // in case of failure we forward the error message + return null; + } + if (TestFileResource.validate(fUnzippedDir)) tempFr = new TestFileResource(); + else if (WikiResource.validate(fUnzippedDir, null).isValid()) tempFr = new WikiResource(); + else if (PodcastFileResource.validate(fUnzippedDir)) tempFr = new PodcastFileResource(fResourceFileroot, fUnzippedDir); + else if (BlogFileResource.validate(fUnzippedDir)) tempFr = new BlogFileResource(fResourceFileroot, fUnzippedDir); + else if (SurveyFileResource.validate(fUnzippedDir)) tempFr = new SurveyFileResource(); + // CP must be later entry... Test- and SurveyFileResource may contain + // imsmanifest.xml as well + else if (ImsCPFileResource.validate(fUnzippedDir)) tempFr = new ImsCPFileResource(); + // scorm and cp now can throw an exception which helps to show a + // better error message in case + // of a failure in adding a new resource + else if (ScormCPFileResource.validate(fUnzippedDir)) tempFr = new ScormCPFileResource(); + // glossary resources are packaged within zip for import/export + else if (GlossaryResource.validate(fUnzippedDir)) tempFr = new GlossaryResource(); + // portfolio template are packaged within zip for import/export + else if (EPTemplateMapResource.validate(fUnzippedDir)) { + tempFr = new EPTemplateMapResource(); + } + else { + // just a generic ZIP file... we can delete the temporary unziped + // dir... + return null; } - } catch (AddingResourceException exception) { - // in case of failure we delete the resource and forward the error - // message - deleteFileResource(tempFr); - throw exception; } tempFr.overrideResourceableId(resourceableId); diff --git a/src/main/java/org/olat/fileresource/types/ImsCPFileResource.java b/src/main/java/org/olat/fileresource/types/ImsCPFileResource.java index 46a6e79e1f510d085d323d1bd1c82133fa64b067..531616c9a55a3dffd044f141ae2f2b154d52dbfd 100644 --- a/src/main/java/org/olat/fileresource/types/ImsCPFileResource.java +++ b/src/main/java/org/olat/fileresource/types/ImsCPFileResource.java @@ -68,8 +68,7 @@ public class ImsCPFileResource extends FileResource { * @param unzippedDir * @return True if is of type. */ - public static boolean validate(File unzippedDir) - throws AddingResourceException { + public static boolean validate(File unzippedDir) { File fManifest = new File(unzippedDir, IMS_MANIFEST); Document doc = IMSLoader.loadIMSDocument(fManifest); //do not throw exception already here, as it might be only a generic zip file @@ -96,63 +95,77 @@ public class ImsCPFileResource extends FileResource { } else { eval.setValid(false); } - } catch (IOException | AddingResourceException e) { + } catch (IOException e) { log.error("", e); eval.setValid(false); } return eval; } - private static boolean validateImsManifest(Document doc) - throws AddingResourceException { - //do not throw exception already here, as it might be only a generic zip file - if (doc == null) return false; + private static boolean validateImsManifest(Document doc) { + try { + //do not throw exception already here, as it might be only a generic zip file + if (doc == null) return false; - // get all organization elements. need to set namespace - Element rootElement = doc.getRootElement(); - String nsuri = rootElement.getNamespace().getURI(); - Map<String,String> nsuris = new HashMap<>(1); - nsuris.put("ns", nsuri); + // get all organization elements. need to set namespace + Element rootElement = doc.getRootElement(); + String nsuri = rootElement.getNamespace().getURI(); + Map<String,String> nsuris = new HashMap<>(1); + nsuris.put("ns", nsuri); - // Check for organiztaion element. Must provide at least one... title gets ectracted from either - // the (optional) <title> element or the mandatory identifier attribute. - // This makes sure, at least a root node gets created in CPManifestTreeModel. - XPath meta = rootElement.createXPath("//ns:organization"); - meta.setNamespaceURIs(nsuris); - Element orgaEl = (Element) meta.selectSingleNode(rootElement); // TODO: accept several organizations? - if (orgaEl == null) { - throw new AddingResourceException("resource.no.organisation"); - } + // Check for organiztaion element. Must provide at least one... title gets ectracted from either + // the (optional) <title> element or the mandatory identifier attribute. + // This makes sure, at least a root node gets created in CPManifestTreeModel. + XPath meta = rootElement.createXPath("//ns:organization"); + meta.setNamespaceURIs(nsuris); + Element orgaEl = (Element) meta.selectSingleNode(rootElement); // TODO: accept several organizations? + if (orgaEl == null) { + return false; + } - // Check for at least one <item> element referencing a <resource>, which will serve as an entry point. - // This is mandatory, as we need an entry point as the user has the option of setting - // CPDisplayController to not display a menu at all, in which case the first <item>/<resource> - // element pair gets displayed. - XPath resourcesXPath = rootElement.createXPath("//ns:resources"); - resourcesXPath.setNamespaceURIs(nsuris); - Element elResources = (Element)resourcesXPath.selectSingleNode(rootElement); - if (elResources == null) { - throw new AddingResourceException("resource.no.resource"); // no <resources> element. - } - XPath itemsXPath = rootElement.createXPath("//ns:item"); - itemsXPath.setNamespaceURIs(nsuris); - List items = itemsXPath.selectNodes(rootElement); - if (items.size() == 0) throw new AddingResourceException("resource.no.item"); // no <item> element. - for (Iterator iter = items.iterator(); iter.hasNext();) { - Element item = (Element) iter.next(); - String identifierref = item.attributeValue("identifierref"); - if (identifierref == null) continue; - XPath resourceXPath = rootElement.createXPath("//ns:resource[@identifier='" + identifierref + "']"); - resourceXPath.setNamespaceURIs(nsuris); - Element elResource = (Element)resourceXPath.selectSingleNode(elResources); - if (elResource == null) throw new AddingResourceException("resource.no.matching.resource"); - if (elResource.attribute("scormtype") != null) return false; - if (elResource.attribute("scormType") != null) return false; - if (elResource.attribute("SCORMTYPE") != null) return false; - if (elResource.attributeValue("href") != null) return true; // success. + // Check for at least one <item> element referencing a <resource>, which will serve as an entry point. + // This is mandatory, as we need an entry point as the user has the option of setting + // CPDisplayController to not display a menu at all, in which case the first <item>/<resource> + // element pair gets displayed. + XPath resourcesXPath = rootElement.createXPath("//ns:resources"); + resourcesXPath.setNamespaceURIs(nsuris); + Element elResources = (Element)resourcesXPath.selectSingleNode(rootElement); + if (elResources == null) { + return false; // no <resources> element. + } + XPath itemsXPath = rootElement.createXPath("//ns:item"); + itemsXPath.setNamespaceURIs(nsuris); + List items = itemsXPath.selectNodes(rootElement); + if (items.size() == 0) { + return false; // no <item> element. + } + for (Iterator iter = items.iterator(); iter.hasNext();) { + Element item = (Element) iter.next(); + String identifierref = item.attributeValue("identifierref"); + if (identifierref == null) continue; + XPath resourceXPath = rootElement.createXPath("//ns:resource[@identifier='" + identifierref + "']"); + resourceXPath.setNamespaceURIs(nsuris); + Element elResource = (Element)resourceXPath.selectSingleNode(elResources); + if (elResource == null) { + return false; + } + if (elResource.attribute("scormtype") != null) { + return false; + } + if (elResource.attribute("scormType") != null) { + return false; + } + if (elResource.attribute("SCORMTYPE") != null) { + return false; + } + if (elResource.attributeValue("href") != null) { + return true; // success. + } + } + } catch (Exception e) { + log.warn("", e); } return false; - //throw new AddingResourceException("resource.general.error"); } private static class ImsManifestFileFilter extends SimpleFileVisitor<Path> { diff --git a/src/main/java/org/olat/ims/qti/repository/handlers/QTISurveyHandler.java b/src/main/java/org/olat/ims/qti/repository/handlers/QTISurveyHandler.java index 925609acdf0b0f9188c3044356e001f82581ebc6..0c1bc42957d047197cfec5acfcb193c14091c1d3 100644 --- a/src/main/java/org/olat/ims/qti/repository/handlers/QTISurveyHandler.java +++ b/src/main/java/org/olat/ims/qti/repository/handlers/QTISurveyHandler.java @@ -86,7 +86,11 @@ public class QTISurveyHandler extends QTIHandler { @Override public ResourceEvaluation acceptImport(File file, String filename) { - return SurveyFileResource.evaluate(file, filename); + ResourceEvaluation eval = SurveyFileResource.evaluate(file, filename); + if(!eval.isValid() && CoreSpringFactory.getImpl(OnyxModule.class).isEnabled()) { + eval = OnyxModule.isOnyxTest(file, filename); + } + return eval; } @Override diff --git a/src/main/java/org/olat/ims/qti/repository/handlers/QTITestHandler.java b/src/main/java/org/olat/ims/qti/repository/handlers/QTITestHandler.java index 0ffa5de6096c0369885a9ab199e8744204c7234d..77bd63971c36528d81af05041529083a231f3ef5 100644 --- a/src/main/java/org/olat/ims/qti/repository/handlers/QTITestHandler.java +++ b/src/main/java/org/olat/ims/qti/repository/handlers/QTITestHandler.java @@ -86,7 +86,11 @@ public class QTITestHandler extends QTIHandler { @Override public ResourceEvaluation acceptImport(File file, String filename) { - return TestFileResource.evaluate(file, filename); + ResourceEvaluation eval = TestFileResource.evaluate(file, filename); + if(!eval.isValid() && CoreSpringFactory.getImpl(OnyxModule.class).isEnabled()) { + eval = OnyxModule.isOnyxTest(file, filename); + } + return eval; } @Override diff --git a/src/main/java/org/olat/repository/ui/author/ImportRepositoryEntryController.java b/src/main/java/org/olat/repository/ui/author/ImportRepositoryEntryController.java index 87d7d5f6da218de4d4cda25eae157e0898727072..fa6bc660f294ab2e2cf95c3ebc07b158dbde8018 100644 --- a/src/main/java/org/olat/repository/ui/author/ImportRepositoryEntryController.java +++ b/src/main/java/org/olat/repository/ui/author/ImportRepositoryEntryController.java @@ -20,6 +20,8 @@ package org.olat.repository.ui.author; import java.io.File; +import java.util.ArrayList; +import java.util.List; import org.olat.NewControllerFactory; import org.olat.core.gui.UserRequest; @@ -27,6 +29,7 @@ import org.olat.core.gui.components.form.flexible.FormItem; import org.olat.core.gui.components.form.flexible.FormItemContainer; import org.olat.core.gui.components.form.flexible.elements.FileElement; import org.olat.core.gui.components.form.flexible.elements.MultipleSelectionElement; +import org.olat.core.gui.components.form.flexible.elements.SingleSelection; import org.olat.core.gui.components.form.flexible.elements.SpacerElement; import org.olat.core.gui.components.form.flexible.elements.StaticTextElement; import org.olat.core.gui.components.form.flexible.elements.TextElement; @@ -59,10 +62,11 @@ import org.springframework.beans.factory.annotation.Autowired; public class ImportRepositoryEntryController extends FormBasicController { private RepositoryEntry importedEntry; - private RepositoryHandler handlerForUploadedResource; + private List<ResourceHandler> handlerForUploadedResources; private SpacerElement spacerEl; private FormSubmit importButton; + private SingleSelection selectType; private FileElement uploadFileEl; private StaticTextElement typeEl; private TextElement displaynameEl; @@ -91,11 +95,14 @@ public class ImportRepositoryEntryController extends FormBasicController { typeEl = uifactory.addStaticTextElement("cif.type", "cif.type", "", formLayout); typeEl.setVisible(false); + selectType = uifactory.addDropdownSingleselect("cif.types", "cif.type", formLayout, new String[0], new String[0], null); + selectType.setVisible(false); + displaynameEl = uifactory.addTextElement("cif.displayname", "cif.displayname", 100, "", formLayout); displaynameEl.setDisplaySize(30); displaynameEl.setMandatory(true); displaynameEl.setVisible(false); - + String[] refValues = new String[]{ "" }; referencesEl = uifactory.addCheckboxesHorizontal("references", "references", formLayout, refKeys, refValues); referencesEl.setVisible(false); @@ -118,10 +125,6 @@ public class ImportRepositoryEntryController extends FormBasicController { return importedEntry; } - public RepositoryHandler getHandler() { - return handlerForUploadedResource; - } - @Override protected void formInnerEvent(UserRequest ureq, FormItem source, FormEvent event) { if(uploadFileEl == source) { @@ -132,7 +135,7 @@ public class ImportRepositoryEntryController extends FormBasicController { @Override protected void formOK(UserRequest ureq) { - if(handlerForUploadedResource != null) { + if(handlerForUploadedResources != null) { doImport(); fireEvent(ureq, Event.DONE_EVENT); } @@ -156,53 +159,114 @@ public class ImportRepositoryEntryController extends FormBasicController { displaynameEl.clearError(); } - return allOk & handlerForUploadedResource != null & super.validateFormLogic(ureq); + return allOk & handlerForUploadedResources != null + & handlerForUploadedResources.size() > 0 + & super.validateFormLogic(ureq); } private void doImport() { - if(handlerForUploadedResource == null) return; - - String displayname = displaynameEl.getValue(); - File uploadedFile = uploadFileEl.getUploadFile(); - String uploadedFilename = uploadFileEl.getUploadFileName(); - boolean withReferences = referencesEl.isAtLeastSelected(1); + RepositoryHandler handler; + if(handlerForUploadedResources == null || handlerForUploadedResources.isEmpty()) { + handler = null; + } else if(handlerForUploadedResources.size() == 1) { + handler = handlerForUploadedResources.get(0).getHandler(); + } else if(selectType.isOneSelected()){ + String type = selectType.getSelectedKey(); + handler = repositoryHandlerFactory.getRepositoryHandler(type); + } else { + handler = null; + } - importedEntry = handlerForUploadedResource.importResource(getIdentity(), null, displayname, - "", withReferences, getLocale(), uploadedFile, uploadedFilename); - - ThreadLocalUserActivityLogger.log(LearningResourceLoggingAction.LEARNING_RESOURCE_CREATE, getClass(), - LoggingResourceable.wrap(importedEntry, OlatResourceableType.genRepoEntry)); + if(handler != null) { + String displayname = displaynameEl.getValue(); + File uploadedFile = uploadFileEl.getUploadFile(); + String uploadedFilename = uploadFileEl.getUploadFileName(); + boolean withReferences = referencesEl.isAtLeastSelected(1); + + importedEntry = handler.importResource(getIdentity(), null, displayname, + "", withReferences, getLocale(), uploadedFile, uploadedFilename); + + ThreadLocalUserActivityLogger.log(LearningResourceLoggingAction.LEARNING_RESOURCE_CREATE, getClass(), + LoggingResourceable.wrap(importedEntry, OlatResourceableType.genRepoEntry)); + } } private void doAnalyseUpload() { File uploadedFile = uploadFileEl.getUploadFile(); String uploadedFilename = uploadFileEl.getUploadFileName(); + List<ResourceHandler> handlers = new ArrayList<>(3); for(String type:repositoryHandlerFactory.getSupportedTypes()) { RepositoryHandler handler = repositoryHandlerFactory.getRepositoryHandler(type); ResourceEvaluation eval = handler.acceptImport(uploadedFile, uploadedFilename); if(eval != null && eval.isValid()) { - updateResourceInfos(eval, handler); - break; + handlers.add(new ResourceHandler(handler, eval)); } } + + updateResourceInfos(handlers); } - private void updateResourceInfos(ResourceEvaluation eval, RepositoryHandler handler) { - handlerForUploadedResource = handler; - typeEl.setVisible(true); - if (handler != null) { // add image and typename code - String tName = NewControllerFactory.translateResourceableTypeName(handler.getSupportedType(), getLocale()); - typeEl.setValue(tName); + private void updateResourceInfos(List<ResourceHandler> handlers) { + handlerForUploadedResources = handlers; + + String displayName = ""; + boolean references = false; + if (handlers != null && handlers.size() > 0) { // add image and typename code + ResourceHandler handler = handlers.get(0); + displayName = handler.getEval().getDisplayname(); + references = handler.getEval().isReferences(); + + if(handlers.size() == 1) { + String resourceType = handler.getHandler().getSupportedType(); + String tName = NewControllerFactory.translateResourceableTypeName(resourceType, getLocale()); + typeEl.setValue(tName); + typeEl.setVisible(true); + selectType.setVisible(false); + } else { + int numOfHandlers = handlers.size(); + String[] keys = new String[numOfHandlers]; + String[] values = new String[numOfHandlers]; + for(int i=0; i<numOfHandlers; i++) { + String type = handlers.get(i).getHandler().getSupportedType(); + keys[i] = type; + values[i] = NewControllerFactory.translateResourceableTypeName(type, getLocale()); + } + selectType.setKeysAndValues(keys, values, null); + selectType.select(keys[0], true); + selectType.setVisible(true); + typeEl.setVisible(false); + } } else { typeEl.setValue(translate("cif.type.na")); + typeEl.setVisible(true); + selectType.setVisible(false); } displaynameEl.setVisible(true); - displaynameEl.setValue(eval.getDisplayname()); - referencesEl.setVisible(eval.isReferences()); - if(eval.isReferences()) { + displaynameEl.setValue(displayName); + referencesEl.setVisible(references); + if(references) { referencesEl.select(refKeys[0], true); } - importButton.setEnabled(handler != null); + importButton.setEnabled(handlers.size() > 0); + } + + private class ResourceHandler { + + private final RepositoryHandler handler; + private final ResourceEvaluation eval; + + public ResourceHandler(RepositoryHandler handler, ResourceEvaluation eval) { + this.handler = handler; + this.eval = eval; + } + + public RepositoryHandler getHandler() { + return handler; + } + + public ResourceEvaluation getEval() { + return eval; + } } } \ No newline at end of file diff --git a/src/main/webapp/static/themes/light/modules/_qti.scss b/src/main/webapp/static/themes/light/modules/_qti.scss index 42b8ed05fd080532266b0739bf716b67c23faa64..9d1435c819c4cd56ed72b4d3226fa131475df567 100644 --- a/src/main/webapp/static/themes/light/modules/_qti.scss +++ b/src/main/webapp/static/themes/light/modules/_qti.scss @@ -65,6 +65,14 @@ div.o_qti_statistics { } } +/* onyx */ +.onyx_iframe { + width: 100%; + height: 100%; + border: none; + min-height: 60em; +} + /* Instead of media print because Firefox doesn't take some rules in account */ .o_qti_print div.o_qti_statistics { width:680px; } diff --git a/src/main/webapp/static/themes/light/theme.css b/src/main/webapp/static/themes/light/theme.css index 694a5c982194322214580a171b6fa7ace86a222b..74d059688903d53c124da3396577e6d458836eb3 100644 --- a/src/main/webapp/static/themes/light/theme.css +++ b/src/main/webapp/static/themes/light/theme.css @@ -51,4 +51,4 @@ body{overflow-x:hidden}.o_container_offcanvas{position:relative;max-width:1324px .typeahead,.tt-query,.tt-hint{width:396px;height:30px;padding:8px 12px;font-size:24px;line-height:30px;border:2px solid #ccc;-webkit-border-radius:8px;-moz-border-radius:8px;border-radius:8px;outline:none}.typeahead{background-color:#fff}.typeahead:focus{border:2px solid #0097cf}.tt-query{-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.075);box-shadow:inset 0 1px 1px rgba(0,0,0,0.075)}.tt-hint{color:#999}.tt-dropdown-menu{width:422px;margin-top:12px;padding:8px 0;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,0.2);-webkit-border-radius:8px;-moz-border-radius:8px;border-radius:8px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,0.2);-moz-box-shadow:0 5px 10px rgba(0,0,0,0.2);box-shadow:0 5px 10px rgba(0,0,0,0.2)}.tt-suggestion{padding:3px 20px;font-size:18px;line-height:24px}.tt-suggestion.tt-cursor{color:#fff;background-color:#0097cf}.tt-suggestion p{margin:0}.o_search_link_extended,.o_search_link_simple{margin-top:12px;display:inline-block}.o_search_results_stats{color:#999;padding-left:1.5em}.o_search_highlight{margin-left:12px;font-size:12px}.o_search_result_title h4,.o_search_result_title .o_cal .fc-header-title h2,.o_cal .fc-header-title .o_search_result_title h2{display:inline-block;margin-right:12px;margin-bottom:6px}.o_search_result_highlight{font-weight:bold}.o_search_result_context{color:#3c763d}.o_search_result_excerpt{color:#555}.o_search_result_details .o_togglebox_wrapper.o_block{margin-top:0;margin-bottom:0}.o_search_result_details .o_togglebox_wrapper .o_togglebox_content{color:#999;font-size:12px;background:#fff;padding:6px 12px}@media (max-width: 767px){.o_search_result_details{display:none}} .o_visual{position:absolute;top:0;left:0;overflow:hidden;height:120px;width:180px;vertical-align:middle}@media (min-width: 768px) and (max-width: 991px){.o_visual{height:80px;width:120px}}@media (max-width: 767px){.o_visual{height:50px;width:75px}}.o_visual img{width:100%;height:auto}.o_visual .o_visual_not_available{width:100%;height:100%;background-image:url("../light/images/no_preview.png");background-repeat:no-repeat;background-position:50% 50%;background-size:contain}.o_coursetable.o_rendertype_custom .o_table_row{position:relative;border:1px solid #428bca;margin-bottom:10px}.o_coursetable.o_rendertype_custom .o_table_row .o_visual{border-right:1px solid #428bca}.o_coursetable.o_rendertype_custom .o_table_row .o_access{position:absolute;top:0;right:0;height:120px;width:180px;overflow:hidden;border-left:1px solid #428bca;padding-top:0.25em}.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_state,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_score{padding:0 1em;height:20px;line-height:20px;position:relative;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_score{position:relative;left:2px}.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_score .o_label{color:#999}.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_social{position:absolute;width:100%;bottom:32px;height:20px;padding-left:1em}.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_social .o_rating .o_rating_title,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_social .o_rating o_rating_legend,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_social .o_rating .o_rating_explanation{display:none}.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_bookings{padding:0 0 0 1em;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_bookings .o_label{margin-bottom:1em;color:#999}.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_bookings .o_methods{color:#5bc0de}.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details{position:absolute;display:block;bottom:0;width:90px;height:30px;line-height:30px;text-align:center}.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book{right:0}.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start{color:#fff;background-color:#428bca;border-color:#357ebd}.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start:hover,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start:focus,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start:active,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start.active{color:#fff;background-color:#3276b1;border-color:#285e8e}.open .o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start.dropdown-toggle{color:#fff;background-color:#3276b1;border-color:#285e8e}.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start:active,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start.active{background-image:none}.open .o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start.dropdown-toggle{background-image:none}.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start.disabled,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start.disabled:hover,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start.disabled:focus,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start.disabled:active,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start.disabled.active,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start[disabled],.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start[disabled]:hover,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start[disabled]:focus,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start[disabled]:active,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start[disabled].active,fieldset[disabled] .o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start,fieldset[disabled] .o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start:hover,fieldset[disabled] .o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start:focus,fieldset[disabled] .o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start:active,fieldset[disabled] .o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start.active{background-color:#428bca;border-color:#357ebd}.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start .badge{color:#428bca;background-color:#fff}.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book{color:#fff;background-color:#f0ad4e;border-color:#eea236}.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book:hover,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book:focus,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book:active,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book.active{color:#fff;background-color:#ed9c28;border-color:#d58512}.open .o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book.dropdown-toggle{color:#fff;background-color:#ed9c28;border-color:#d58512}.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book:active,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book.active{background-image:none}.open .o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book.dropdown-toggle{background-image:none}.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book.disabled,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book.disabled:hover,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book.disabled:focus,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book.disabled:active,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book.disabled.active,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book[disabled],.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book[disabled]:hover,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book[disabled]:focus,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book[disabled]:active,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book[disabled].active,fieldset[disabled] .o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book,fieldset[disabled] .o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book:hover,fieldset[disabled] .o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book:focus,fieldset[disabled] .o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book:active,fieldset[disabled] .o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book.active{background-color:#f0ad4e;border-color:#eea236}.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book .badge{color:#f0ad4e;background-color:#fff}.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details{right:90px;color:#fff;background-color:#5cb85c;border-color:#4cae4c}.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details:hover,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details:focus,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details:active,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details.active{color:#fff;background-color:#47a447;border-color:#398439}.open .o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details.dropdown-toggle{color:#fff;background-color:#47a447;border-color:#398439}.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details:active,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details.active{background-image:none}.open .o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details.dropdown-toggle{background-image:none}.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details.disabled,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details.disabled:hover,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details.disabled:focus,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details.disabled:active,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details.disabled.active,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details[disabled],.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details[disabled]:hover,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details[disabled]:focus,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details[disabled]:active,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details[disabled].active,fieldset[disabled] .o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details,fieldset[disabled] .o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details:hover,fieldset[disabled] .o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details:focus,fieldset[disabled] .o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details:active,fieldset[disabled] .o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details.active{background-color:#5cb85c;border-color:#4cae4c}.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details .badge{color:#5cb85c;background-color:#fff}@media (min-width: 768px) and (max-width: 991px){.o_coursetable.o_rendertype_custom .o_table_row .o_access{height:80px;width:120px}.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_score,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_comments,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_label{display:none}.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_start,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_book,.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details{width:60px}.o_coursetable.o_rendertype_custom .o_table_row .o_access .o_details{right:60px}}@media (max-width: 767px){.o_coursetable.o_rendertype_custom .o_table_row .o_access{display:none}}.o_coursetable.o_rendertype_custom .o_table_row .o_meta{height:120px;margin:0 180px 0 180px;position:relative;padding:1em 0.5em 0.25em 1em;overflow:hidden}.o_coursetable.o_rendertype_custom .o_table_row .o_meta .o_title{margin:0;position:relative;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.o_coursetable.o_rendertype_custom .o_table_row .o_meta .o_title a{display:block;color:#428bca}.o_coursetable.o_rendertype_custom .o_table_row .o_meta .o_title a:hover{color:#3071a9}.o_coursetable.o_rendertype_custom .o_table_row .o_meta .o_author{margin-top:0.5em;line-height:1em;font-size:90%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#3c763d}.o_coursetable.o_rendertype_custom .o_table_row .o_meta .o_lifecycle{position:absolute;top:5px;right:40px;font-size:90%;line-height:1em;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:#999}.o_coursetable.o_rendertype_custom .o_table_row .o_meta .o_lifecycle.o_active{color:#3c763d}.o_coursetable.o_rendertype_custom .o_table_row .o_meta .o_lifecycle.o_active:hover{color:#2b542c}.o_coursetable.o_rendertype_custom .o_table_row .o_meta .o_desc{margin-top:0.5em}.o_coursetable.o_rendertype_custom .o_table_row .o_meta .o_bookmark{position:absolute;top:-1px;right:15px}@media (min-width: 768px) and (max-width: 991px){.o_coursetable.o_rendertype_custom .o_table_row .o_meta{height:80px;margin:0 120px}}@media (max-width: 767px){.o_coursetable.o_rendertype_custom .o_table_row .o_meta{height:50px;margin:0 0 0 75px;padding:0 0 0 1em}.o_coursetable.o_rendertype_custom .o_table_row .o_meta .o_title{line-height:50px}.o_coursetable.o_rendertype_custom .o_table_row .o_meta .o_author,.o_coursetable.o_rendertype_custom .o_table_row .o_meta .o_bookmark,.o_coursetable.o_rendertype_custom .o_table_row .o_meta .o_lifecycle,.o_coursetable.o_rendertype_custom .o_table_row .o_meta .o_desc{display:none}}.o_coursetable.o_rendertype_custom .o_table_row .o_meta .o_go_xs{position:absolute;top:0;right:0;padding:0 1em;height:50px;line-height:50px;background-color:#dff0d8}.o_coursetable.o_rendertype_classic .o_rating_explanation{display:none}.o_coursetable.o_rendertype_classic .o_start,.o_coursetable.o_rendertype_classic .o_book{white-space:nowrap}.o_coursetable.o_rendertype_classic .o_repoentry_type{color:#555}.o_coursetable.o_rendertype_classic .o_repoentry_ac{color:#555}.o_catalog .o_level{position:relative;margin-bottom:10px;padding:0;border-top:1px solid #428bca;border-bottom:1px solid #428bca}.o_catalog .o_level .o_visual{height:180px}.o_catalog .o_level .o_meta{position:relative;min-height:180px;height:180px;overflow:hidden;margin:0 0 0 180px;padding:1em 0.5em 0.5em 2em}.o_catalog .o_level .o_meta .o_title{margin:0}.o_catalog .o_level .o_meta .o_title a{display:block;color:#428bca}.o_catalog .o_level .o_meta .o_title a:hover{color:#3071a9}.o_catalog .o_level .o_meta .o_desc{padding:1em 0 0.5em 0}@media (min-width: 768px) and (max-width: 991px){.o_catalog .o_level .o_visual{height:120px}.o_catalog .o_level .o_meta{min-height:120px;height:120px;margin:0 0 0 120px}}@media (max-width: 767px){.o_catalog .o_level .o_visual{height:75px}.o_catalog .o_level .o_meta{min-height:75px;height:75px;margin:0 0 0 75px;padding:0 0 0 1em}.o_catalog .o_level .o_meta .o_title{line-height:75px}.o_catalog .o_level .o_meta .o_desc{display:none}}.o_catalog .o_sublevels{position:relative;margin-bottom:20px}.o_catalog .o_sublevels:before,.o_catalog .o_sublevels:after{content:" ";display:table}.o_catalog .o_sublevels:after{clear:both}.o_catalog .o_sublevels .o_sublevel{position:relative;float:left;margin:0 20px 20px 0;width:180px}.o_catalog .o_sublevels .o_sublevel:last-child{margin-right:0}.o_catalog .o_sublevels .o_sublevel .o_visual{border:1px solid #428bca;position:relative;height:180px}.o_catalog .o_sublevels .o_sublevel .o_meta{position:absolute;left:0;bottom:0;width:100%;border:1px solid #428bca;border-top:0;background-color:rgba(255,255,255,0.8)}.o_catalog .o_sublevels .o_sublevel .o_meta .o_title{margin:0;text-align:center;line-height:2em;height:2em;width:100%;overflow:hidden}.o_catalog .o_sublevels .o_sublevel .o_meta .o_title a{display:block;color:#428bca}.o_catalog .o_sublevels .o_sublevel .o_meta .o_title a:hover{color:#3071a9}@media (min-width: 768px) and (max-width: 991px){.o_catalog .o_sublevels .o_sublevel{width:120px;margin:0 10px 10px 0}.o_catalog .o_sublevels .o_sublevel .o_visual{height:120px}.o_catalog .o_sublevels .o_sublevel .o_title{font-size:90%}}@media (max-width: 767px){.o_catalog .o_sublevels .o_sublevel{width:120px;margin:0 1px 1px 0}.o_catalog .o_sublevels .o_sublevel .o_visual{height:120px;width:120px}.o_catalog .o_sublevels .o_sublevel .o_title{font-size:90%}} .o_repo_details{position:relative}.o_repo_details .o_lead .o_media{float:right;margin-left:2em;margin-bottom:2em}.o_repo_details .o_lead h1 i{display:none}.o_repo_details .o_overview i{margin-right:0.5em}.o_repo_details .o_overview div{margin-bottom:0.25em}.o_repo_details .o_start,.o_repo_details .o_book{margin:2em 0}.o_repo_details .o_social:before,.o_repo_details .o_social:after{content:" ";display:table}.o_repo_details .o_social:after{clear:both}.o_repo_details .o_social .o_rating_wrapper{float:left}.o_repo_details .o_social .o_comments{margin-left:1em}@media (max-width: 767px){.o_repo_details .o_lead p{font-size:16px}.o_repo_details .o_lead .o_media{margin-top:0}}@media (max-width: 613px){.o_repo_details .o_subcolumn{width:100%}} -.o_sp_icon:before{content:"\f0f6"}.o_st_icon:before{content:"\f1b3"}.o_tu_icon:before{content:"\f08e"}.o_bc_icon:before{content:"\f115"}.o_lti_icon:before{content:"\f08e"}.o_cp_icon:before{content:"\f187"}.o_cp_item:before{content:"\f0f6"}.o_scorm_icon:before{content:"\f187"}.o_en_icon:before{content:"\f090"}.o_fo_icon:before{content:"\f0e6"}.o_co_icon:before{content:"\f003"}.o_infomsg_icon:before{content:"\f05a"}.o_cal_icon:before{content:"\f073"}.o_wiki_icon:before{content:"\f0ac"}.o_podcast_icon:before{content:"\f03d"}.o_blog_icon:before{content:"\f0a1"}.o_ep_icon:before{content:"\f12e"}.o_iqtest_icon:before{content:"\f044"}.o_iqself_icon:before{content:"\f044"}.o_iqsurv_icon:before{content:"\f11a"}.o_ta_icon:before{content:"\f0ae"}.o_ms_icon:before{content:"\f087"}.o_dialog_icon:before{content:"\f0c5"}.o_projectbroker_icon:before{content:"\f10c"}.o_ll_icon:before{content:"\f0c1"}.o_den_icon:before{content:"\f133"}.o_cmembers_icon:before{content:"\f0c0"}.o_cl_icon:before{content:"\f046"}.o_vc_icon:before{content:"\f108"}.o_vitero_icon:before{content:"\f108"}.o_openmeetings_icon:before{content:"\f108"}.o_midpub:before{content:"\f058";color:green}.o_midwarn:before{content:"\f071";color:orange}.o_midlock:before{content:"\f023"}.o_miderr:before{content:"\f071";color:red}.o_middel:before{content:"\f12d"}.o_passed{color:#3c763d;font-weight:bold}.o_passed a:hover{color:#2b542c}.o_passed th{color:#333}.o_failed{color:#a94442;font-weight:bold}.o_failed a:hover{color:#843534}.o_failed th{color:#333}.o_unknown{color:#8a6d3b;font-weight:bold}.o_unknown a:hover{color:#66512c}.o_unknown th{color:#333}.o_noinfo{color:#999}.o_course_run .o_toc .o_entry .o_shorttitle{border-bottom:1px solid #999}.o_course_run .o_toc .o_entry .o_displaytitle{margin-top:5px;color:#999}.o_course_run .o_toc .o_entry .o_objectives{margin-top:10px;font-style:italic}.o_st_peekview ul li{margin-bottom:0.5em}.o_cl_line{margin-bottom:10px;padding-bottom:5px}.o_cl_line.o_even{background-color:#f9f9f9}.o_cmembers .o_cmember{margin:12px 0}.o_cmembers .o_cmember .o_portrait{margin-right:6px}.o_cmembers .o_cmember .o_cmember_info_wrapper{line-height:30px}.o_cmembers .o_cmember .o_cmember_info_wrapper .o_mail{margin-left:6px}.o_course_editor .o_node_config{margin-bottom:20px}#o_course_editor_errorbox ul,#o_course_editor_warningbox ul{list-style-type:none}div.b_selectiontree{font-size:95%}div.b_selectiontree div.b_selectiontree_item{clear:both;position:relative;top:0;left:0;vertical-align:middle;height:16px;width:auto}div.b_selectiontree div.b_selectiontree_item div{width:16px;height:16px;float:left;display:inline;background-repeat:no-repeat}div.b_selectiontree div.b_selectiontree_item div.b_selectiontree_content{float:left;display:inline;margin-left:0.5em;width:auto;white-space:nowrap}div.b_selectiontree div.b_selectiontree_content{width:auto}div.b_selectiontree div.b_selectiontree_content div{width:auto}div.b_selectiontree div.b_selectiontree_content input{width:1em;height:1em;padding:0;margin:0 0.5em;vertical-align:middle}div.b_selectiontree div.b_selectiontree_content input.b_radio{margin:0}div.b_selectiontree .b_selectiontree_line{background-image:url(../openolat/images/tree/dots.gif)}div.b_selectiontree .b_selectiontree_space{background-image:url(../openolat/images/tree/dots_spacer.gif)}div.b_selectiontree .b_selectiontree_junction{background-image:url(../openolat/images/tree/dots_nt.gif)}div.b_selectiontree .b_selectiontree_end{background-image:url(../openolat/images/tree/dots_nl.gif)}table.table.o_qti_item_kprim>thead>tr>th,table.table.o_qti_item_kprim>tbody>tr>td{border:none}td.o_qti_item_kprim_input,th.o_qti_item_kprim_input{text-align:center}div.o_qti_item_itemfeedback{background-color:#ffffff;border-color:#000000}.d3chart .bar_green{fill:#5cb85c}.d3chart .bar_red{fill:#d9534f}.d3chart .bar_grey{fill:lightgrey}div.o_qti_statistics ul{list-style-type:none;padding:0;margin:0;font-size:90%}div.o_qti_statistics ul strong{font-weight:normal}div.o_qti_statistics ul li{padding-left:48px;margin-left:0;margin-bottom:10px}div.o_qti_statistics ul li.o_qti_statistics-ncorrect:before{font-size:125%;content:'\2A2F\00A0\00A0'}div.o_qti_statistics ul li.o_qti_statistics-correct:before{font-size:125%;content:'\2713\00A0\00A0'}div.o_qti_statistics ul li.o_qti_statistics-kplus:before{font-size:125%;content:'\2713\00A0\2A2F\00A0\00A0'}div.o_qti_statistics ul li.o_qti_statistics-kminus:before{font-size:125%;content:'\2A2F\00A0\2713\00A0\00A0'}div.o_qti_statistics ul li img{vertical-align:top}div.o_qti_statistics table.o_qti_statistics_figures tr{float:left}div.o_qti_statistics table.o_qti_statistics_figures tr:nth-child(2n+1){clear:left;padding-right:20px}div.o_qti_statistics table.o_qti_statistics_figures td{width:200px;padding-left:0}div.o_qti_statistics table.o_qti_statistics_figures td+td{width:100px}div.o_qti_statistics .o_qti_statistics_answer{background:#F5F5F5;padding:1px 2px;width:90%}div.o_qti_statistics div.o_qti_statistics_legend{padding-top:10px;width:470px;border:1px solid #ddd;border-radius:4px}div.o_qti_statistics div.o_qti_statistics_legend ul li .bar_green{background-color:#9dd53a}div.o_qti_statistics div.o_qti_statistics_legend ul li .bar_red{background-color:#f85032}div.o_qti_statistics div.o_qti_statistics_legend ul li .bar_grey{background-color:lightgrey}.o_qti_print div.o_qti_statistics{width:680px}@media print{div.o_qti_statistics{width:680px}}#o_dev_tool #o_dev_tool_mode{width:1em;height:1em;float:left;border:1px solid #000;margin-right:5px}a.o_dev{position:absolute;left:0;top:0;z-index:4000;background:#f0ad4e;border:1px solid #d59645;border-top:none;border-left:none;border-radius:0 0 4px 0;color:#fff}a.o_dev:hover{color:#d9534f}.o_dev_w{margin:1px}.o_dev_w .o_dev_h{color:#000;font-size:8px;line-height:10px;margin:0}.o_dev_w .o_dev_h span{background:#f4c37d;border:1px solid #f0ad4e;border-bottom:0}.o_dev_w .o_dev_c{position:relative;border:1px dotted #eee}.o_dev_w .o_dev_c .o_dev_i{position:absolute;top:0px;left:24px;height:auto;width:auto;padding:5px;border:1px solid black;display:none;margin:0px;z-index:999;font-size:11px;background-color:#BBF}.o_dev_w.o_dev_m>.o_dev_c{border:1px solid #f0ad4e;margin:0px;background-color:#f8e9d4}.o_wikimod_nav .o_noti{margin:0}.o_wikimod_editform_wrapper{margin-top:30px}.o_wiki-file-deleted{text-decoration:line-through}.o_ep_icon_map:before{content:"\f0b1"}.o_ep_icon_page:before{content:"\f016"}.o_ep_icon_struct:before{content:"\f1b3"}.o_ep_icon_liveblog:before{content:"\f0a1"}.o_portfolio_toc .o_ep_link{float:right;margin-right:0px}.o_portfolio_toc .o_ep_commentlink{float:right;margin-right:10%}.o_portfolio_toc li.level1{font-size:1.2em;margin:1.2em 0 0.2em 0;border-bottom:1px solid #ddd}.o_portfolio_toc li.level2{padding-left:20px;font-size:1.1em;border-bottom:1px dotted #ddd}.o_portfolio_toc li.level3{padding-left:40px}.b_eportfolio_map a.b_eportfolio_add_link,.b_eportfolio_map a.b_eportfolio_del_link{float:right;display:inline}.b_eportfolio_page .b_eportfolio_structure>h5{border-bottom:1px solid #ddd;margin-top:1.2em}.o_eportfolio_maps .panel{font-family:'Century Gothic', 'Apple Gothic', sans-serif}.o_eportfolio_maps .panel-heading{padding:5px 10px}.o_eportfolio_maps h4,.o_eportfolio_maps .o_cal .fc-header-title h2,.o_cal .fc-header-title .o_eportfolio_maps h2{padding:11px 15px;background:rgba(255,255,230,0.7) none;border-radius:6px}.o_eportfolio_maps .table>tbody>tr>td{border-top:none}.o_eportfolio_maps .panel-body{border-top:none}.o_eportfolio_maps .panel>.panel-body+.table{border-top:none}.o_eportfolio_map{padding:0 20px 2px 3px;border-radius:6px 10px 6px 0;font-family:'Century Gothic', 'Apple Gothic', sans-serif}.o_map_header{padding-left:5px}.o_eportfolio_map ul.nav-tabs li:not(.active) a{background-color:rgba(240,240,240,0.7);border-radius:4px 4px 0 0}.o_eportfolio_edit{border-radius:4px 4px 0 0}.o_ep_actualpage,.o_eportfolio_edit{padding:15px;background-color:#fff}.o_ep_content{margin-top:15px}.o_ep_filter .o_date.form-inline .form-group,.o_ep_filter .o_date.navbar-form .form-group,.o_ep_filter .o_date.o_navbar-form .form-group{margin-left:8px}.o_eportfolio_share_policy_wrapper{border:1px solid #ddd;border-radius:4px}.o_eportfolio_share_header{padding:10px 15px;border-bottom:1px solid #ddd;background-color:#f5f5f5}.o_eportfolio_share_policy{padding:10px 15px}.o_eportfolio_maps .o_map-default{background:#fafafa;background:#fafafa -webkit-gradient(linear, 37% 20%, 53% 100%, from(#fafafa), to(#efefef));background:#fafafa -moz-linear-gradient(43% 71% 101deg, #fafafa, #efefef);background:#fafafa -o-linear-gradient(#fafafa, #efefef);filter:progid:DXImageTransform.Microsoft.gradient(startColorStr='#fafafa', EndColorStr='#efefef');border:1px solid #efefef;border-left:3px solid rgba(188,188,188,0.8);box-shadow:3px 3px 4px rgba(20,20,20,0.4)}.o_eportfolio_maps .o_map-default h4,.o_eportfolio_maps .o_map-default .o_cal .fc-header-title h2,.o_cal .fc-header-title .o_eportfolio_maps .o_map-default h2{color:#444;background:none}.o_eportfolio_maps .o_map-default .panel-body,.o_eportfolio_maps .o_map-default td,.o_eportfolio_maps .o_map-default a{color:#000}.o_eportfolio_map.o_map-default{background:#fafafa;background:#fafafa -webkit-gradient(linear, 37% 20%, 53% 100%, from(#fafafa), to(#efefef));background:#fafafa -moz-linear-gradient(43% 71% 101deg, #fafafa, #efefef);background:#fafafa -o-linear-gradient(#fafafa, #efefef);filter:progid:DXImageTransform.Microsoft.gradient(startColorStr='#fafafa', EndColorStr='#efefef');border:1px solid #efefef;border-left:3px solid rgba(188,188,188,0.8)}.o_eportfolio_maps .o_map-comic{background:#a2c3e8 none;font-family:'Comic Sans MS', 'Comic Sans', fantasy;border:1px solid #888;border-left:3px solid rgba(85,85,85,0.8);box-shadow:3px 3px 4px rgba(20,20,20,0.4)}.o_eportfolio_map.o_map-comic{background:#a2c3e8;font-family:'Comic Sans MS', 'Comic Sans', fantasy;border:1px solid #888;border-left:3px solid rgba(85,85,85,0.8)}.o_eportfolio_maps .o_map-leather{background-color:#957352;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, rgba(248,248,248,0.7)), color-stop(100%, rgba(193,193,193,0.5))),url("../light/images/portfolio/white-leather-tile.jpg");background-image:-webkit-linear-gradient(top, rgba(248,248,248,0.7), rgba(193,193,193,0.5)),url("../light/images/portfolio/white-leather-tile.jpg");background-image:-moz-linear-gradient(top, rgba(248,248,248,0.7), rgba(193,193,193,0.5)),url("../light/images/portfolio/white-leather-tile.jpg");background-image:-ms-linear-gradient(top, rgba(248,248,248,0.7), rgba(193,193,193,0.5)),url("../light/images/portfolio/white-leather-tile.jpg");background-image:-o-linear-gradient(top, rgba(248,248,248,0.7), rgba(193,193,193,0.5)),url("../light/images/portfolio/white-leather-tile.jpg");background-image:linear-gradient(top, rgba(248,248,248,0.7), rgba(193,193,193,0.5)),url("../light/images/portfolio/white-leather-tile.jpg");font-family:Palatino, Georgia, serif;border:1px solid #888;border-left:3px solid rgba(85,85,85,0.8);box-shadow:3px 3px 4px rgba(20,20,20,0.4)}.o_eportfolio_maps .o_map-leather h4,.o_eportfolio_maps .o_map-leather .o_cal .fc-header-title h2,.o_cal .fc-header-title .o_eportfolio_maps .o_map-leather h2{background:rgba(243,230,225,0.3) none}.o_eportfolio_maps .o_map-leather .panel-body,.o_eportfolio_maps .o_map-leather td{color:#333}.o_eportfolio_maps .o_map-leather a{color:#fad9a4}.o_eportfolio_map.o_map-leather{background-color:#957352;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, rgba(248,248,248,0.7)), color-stop(100%, rgba(193,193,193,0.5))),url("../light/images/portfolio/white-leather-tile.jpg");background-image:-webkit-linear-gradient(top, rgba(248,248,248,0.7), rgba(193,193,193,0.5)),url("../light/images/portfolio/white-leather-tile.jpg");background-image:-moz-linear-gradient(top, rgba(248,248,248,0.7), rgba(193,193,193,0.5)),url("../light/images/portfolio/white-leather-tile.jpg");background-image:-ms-linear-gradient(top, rgba(248,248,248,0.7), rgba(193,193,193,0.5)),url("../light/images/portfolio/white-leather-tile.jpg");background-image:-o-linear-gradient(top, rgba(248,248,248,0.7), rgba(193,193,193,0.5)),url("../light/images/portfolio/white-leather-tile.jpg");background-image:linear-gradient(top, rgba(248,248,248,0.7), rgba(193,193,193,0.5)),url("../light/images/portfolio/white-leather-tile.jpg");font-family:Palatino, Georgia, serif;border:1px solid #888;border-left:3px solid rgba(60,60,60,0.8)}.o_eportfolio_map.o_map-leather .o_map_header h4,.o_eportfolio_map.o_map-leather .o_map_header .o_cal .fc-header-title h2,.o_cal .fc-header-title .o_eportfolio_map.o_map-leather .o_map_header h2,.o_eportfolio_map.o_map-leather .o_map_header p,.o_eportfolio_map.o_map-leather .o_map_header a,.o_eportfolio_map.o_map-leather .o_map_header span,.o_eportfolio_map.o_map-leather .o_map_header label{color:#333}.o_eportfolio_maps .o_map-epmst-green{background:#ecf69a;background:#ecf69a -webkit-gradient(linear, 37% 20%, 53% 100%, from(#ecf69a), to(#ecf69a));background:#ecf69a -moz-linear-gradient(43% 71% 101deg, #ecf69a, #ecf69a);background:#ecf69a -o-linear-gradient(#ecf69a, #ecf69a);filter:progid:DXImageTransform.Microsoft.gradient(startColorStr='#ecf69a', EndColorStr='#ecf69a');border:1px solid #888;border-left:3px solid rgba(85,85,85,0.8);box-shadow:3px 3px 4px rgba(20,20,20,0.4)}.o_eportfolio_maps .o_map-epmst-green h4,.o_eportfolio_maps .o_map-epmst-green .o_cal .fc-header-title h2,.o_cal .fc-header-title .o_eportfolio_maps .o_map-epmst-green h2{color:#444}.o_eportfolio_maps .o_map-epmst-green .panel-body,.o_eportfolio_maps .o_map-epmst-green td,.o_eportfolio_maps .o_map-epmst-green a{color:#000}.o_eportfolio_map.o_map-epmst-green{background:#ecf69a;background:#ecf69a -webkit-gradient(linear, 37% 20%, 53% 100%, from(#ecf69a), to(#ecf69a));background:#ecf69a -moz-linear-gradient(43% 71% 101deg, #ecf69a, #ecf69a);background:#ecf69a -o-linear-gradient(#ecf69a, #ecf69a);filter:progid:DXImageTransform.Microsoft.gradient(startColorStr='#ecf69a', EndColorStr='#ecf69a');border:1px solid #888;border-left:3px solid rgba(85,85,85,0.8)}.o_eportfolio_maps .o_map-epmst-green2{background:#99e44d;background:#99e44d -webkit-gradient(linear, 37% 20%, 53% 100%, from(#99e44d), to(#cbf1a5));background:#99e44d -moz-linear-gradient(43% 71% 101deg, #99e44d, #cbf1a5);background:#99e44d -o-linear-gradient(#99e44d, #cbf1a5);filter:progid:DXImageTransform.Microsoft.gradient(startColorStr='#99e44d', EndColorStr='#cbf1a5');border:1px solid #bbb;border-left:3px solid rgba(136,136,136,0.8);box-shadow:3px 3px 4px rgba(20,20,20,0.4)}.o_eportfolio_maps .o_map-epmst-green2 h4,.o_eportfolio_maps .o_map-epmst-green2 .o_cal .fc-header-title h2,.o_cal .fc-header-title .o_eportfolio_maps .o_map-epmst-green2 h2{color:#555}.o_eportfolio_maps .o_map-epmst-green2 .panel-body,.o_eportfolio_maps .o_map-epmst-green2 td,.o_eportfolio_maps .o_map-epmst-green2 a{color:#000}.o_eportfolio_map.o_map-epmst-green2{background:#99e44d;background:#99e44d -webkit-gradient(linear, 37% 20%, 53% 100%, from(#99e44d), to(#cbf1a5));background:#99e44d -moz-linear-gradient(43% 71% 101deg, #99e44d, #cbf1a5);background:#99e44d -o-linear-gradient(#99e44d, #cbf1a5);filter:progid:DXImageTransform.Microsoft.gradient(startColorStr='#99e44d', EndColorStr='#cbf1a5');border:1px solid #bbb;border-left:3px solid rgba(136,136,136,0.8)}.o_eportfolio_maps .o_map-epmst-green3{background:#dff0c1;background:#dff0c1 -webkit-gradient(linear, 37% 20%, 53% 100%, from(#dff0c1), to(#a0d346));background:#dff0c1 -moz-linear-gradient(43% 71% 101deg, #dff0c1, #a0d346);background:#dff0c1 -o-linear-gradient(#dff0c1, #a0d346);filter:progid:DXImageTransform.Microsoft.gradient(startColorStr='#dff0c1', EndColorStr='#a0d346');border:1px solid #bbb;border-left:3px solid rgba(136,136,136,0.8);box-shadow:3px 3px 4px rgba(20,20,20,0.4)}.o_eportfolio_maps .o_map-epmst-green3 h4,.o_eportfolio_maps .o_map-epmst-green3 .o_cal .fc-header-title h2,.o_cal .fc-header-title .o_eportfolio_maps .o_map-epmst-green3 h2{color:#555}.o_eportfolio_maps .o_map-epmst-green3 .panel-body,.o_eportfolio_maps .o_map-epmst-green3 td,.o_eportfolio_maps .o_map-epmst-green3 a{color:#000}.o_eportfolio_map.o_map-epmst-green3{background:#dff0c1;background:#dff0c1 -webkit-gradient(linear, 37% 20%, 53% 100%, from(#dff0c1), to(#a0d346));background:#dff0c1 -moz-linear-gradient(43% 71% 101deg, #dff0c1, #a0d346);background:#dff0c1 -o-linear-gradient(#dff0c1, #a0d346);filter:progid:DXImageTransform.Microsoft.gradient(startColorStr='#dff0c1', EndColorStr='#a0d346');border:1px solid #bbb;border-left:3px solid rgba(136,136,136,0.8)}.o_eportfolio_maps .o_map-epmst-green4{background:#d7dbb5;background:#d7dbb5 -webkit-gradient(linear, 37% 20%, 53% 100%, from(#d7dbb5), to(#d7dbb5));background:#d7dbb5 -moz-linear-gradient(43% 71% 101deg, #d7dbb5, #d7dbb5);background:#d7dbb5 -o-linear-gradient(#d7dbb5, #d7dbb5);filter:progid:DXImageTransform.Microsoft.gradient(startColorStr='#d7dbb5', EndColorStr='#d7dbb5');border:1px solid #bbb;border-left:3px solid rgba(136,136,136,0.8);box-shadow:3px 3px 4px rgba(20,20,20,0.4)}.o_eportfolio_maps .o_map-epmst-green4 h4,.o_eportfolio_maps .o_map-epmst-green4 .o_cal .fc-header-title h2,.o_cal .fc-header-title .o_eportfolio_maps .o_map-epmst-green4 h2{color:#555}.o_eportfolio_maps .o_map-epmst-green4 .panel-body,.o_eportfolio_maps .o_map-epmst-green4 td,.o_eportfolio_maps .o_map-epmst-green4 a{color:#000}.o_eportfolio_map.o_map-epmst-green4{background:#d7dbb5;background:#d7dbb5 -webkit-gradient(linear, 37% 20%, 53% 100%, from(#d7dbb5), to(#d7dbb5));background:#d7dbb5 -moz-linear-gradient(43% 71% 101deg, #d7dbb5, #d7dbb5);background:#d7dbb5 -o-linear-gradient(#d7dbb5, #d7dbb5);filter:progid:DXImageTransform.Microsoft.gradient(startColorStr='#d7dbb5', EndColorStr='#d7dbb5');border:1px solid #bbb;border-left:3px solid rgba(136,136,136,0.8)}.o_eportfolio_maps .o_map-epmst-red{background:#ffba71;background:#ffba71 -webkit-gradient(linear, 37% 20%, 53% 100%, from(#ffba71), to(#ffba99));background:#ffba71 -moz-linear-gradient(43% 71% 101deg, #ffba71, #ffba99);background:#ffba71 -o-linear-gradient(#ffba71, #ffba99);filter:progid:DXImageTransform.Microsoft.gradient(startColorStr='#ffba71', EndColorStr='#ffba99');border:1px solid #888;border-left:3px solid rgba(85,85,85,0.8);box-shadow:3px 3px 4px rgba(20,20,20,0.4)}.o_eportfolio_maps .o_map-epmst-red h4,.o_eportfolio_maps .o_map-epmst-red .o_cal .fc-header-title h2,.o_cal .fc-header-title .o_eportfolio_maps .o_map-epmst-red h2{color:#444}.o_eportfolio_maps .o_map-epmst-red .panel-body,.o_eportfolio_maps .o_map-epmst-red td,.o_eportfolio_maps .o_map-epmst-red a{color:#000}.o_eportfolio_map.o_map-epmst-red{background:#ffba71;background:#ffba71 -webkit-gradient(linear, 37% 20%, 53% 100%, from(#ffba71), to(#ffba99));background:#ffba71 -moz-linear-gradient(43% 71% 101deg, #ffba71, #ffba99);background:#ffba71 -o-linear-gradient(#ffba71, #ffba99);filter:progid:DXImageTransform.Microsoft.gradient(startColorStr='#ffba71', EndColorStr='#ffba99');border:1px solid #888;border-left:3px solid rgba(85,85,85,0.8)}.o_eportfolio_maps .o_map-epmst-red2{background:#ff9772;background:#ff9772 -webkit-gradient(linear, 37% 20%, 53% 100%, from(#ff9772), to(#ff9780));background:#ff9772 -moz-linear-gradient(43% 71% 101deg, #ff9772, #ff9780);background:#ff9772 -o-linear-gradient(#ff9772, #ff9780);filter:progid:DXImageTransform.Microsoft.gradient(startColorStr='#ff9772', EndColorStr='#ff9780');border:1px solid #888;border-left:3px solid rgba(85,85,85,0.8);box-shadow:3px 3px 4px rgba(20,20,20,0.4)}.o_eportfolio_maps .o_map-epmst-red2 h4,.o_eportfolio_maps .o_map-epmst-red2 .o_cal .fc-header-title h2,.o_cal .fc-header-title .o_eportfolio_maps .o_map-epmst-red2 h2{color:#444}.o_eportfolio_maps .o_map-epmst-red2 .panel-body,.o_eportfolio_maps .o_map-epmst-red2 td,.o_eportfolio_maps .o_map-epmst-red2 a{color:#000}.o_eportfolio_map.o_map-epmst-red2{background:#ff9772;background:#ff9772 -webkit-gradient(linear, 37% 20%, 53% 100%, from(#ff9772), to(#ff9780));background:#ff9772 -moz-linear-gradient(43% 71% 101deg, #ff9772, #ff9780);background:#ff9772 -o-linear-gradient(#ff9772, #ff9780);filter:progid:DXImageTransform.Microsoft.gradient(startColorStr='#ff9772', EndColorStr='#ff9780');border:1px solid #888;border-left:3px solid rgba(85,85,85,0.8)}.o_eportfolio_maps .o_map-epmst-red3{background:#e8afbb;background:#e8afbb -webkit-gradient(linear, 37% 20%, 53% 100%, from(#e8afbb), to(#e8afa0));background:#e8afbb -moz-linear-gradient(43% 71% 101deg, #e8afbb, #e8afa0);background:#e8afbb -o-linear-gradient(#e8afbb, #e8afa0);filter:progid:DXImageTransform.Microsoft.gradient(startColorStr='#e8afbb', EndColorStr='#e8afa0');border:1px solid #888;border-left:3px solid rgba(85,85,85,0.8);box-shadow:3px 3px 4px rgba(20,20,20,0.4)}.o_eportfolio_maps .o_map-epmst-red3 h4,.o_eportfolio_maps .o_map-epmst-red3 .o_cal .fc-header-title h2,.o_cal .fc-header-title .o_eportfolio_maps .o_map-epmst-red3 h2{color:#444}.o_eportfolio_maps .o_map-epmst-red3 .panel-body,.o_eportfolio_maps .o_map-epmst-red3 td,.o_eportfolio_maps .o_map-epmst-red3 a{color:#000}.o_eportfolio_map.o_map-epmst-red3{background:#e8afbb;background:#e8afbb -webkit-gradient(linear, 37% 20%, 53% 100%, from(#e8afbb), to(#e8afa0));background:#e8afbb -moz-linear-gradient(43% 71% 101deg, #e8afbb, #e8afa0);background:#e8afbb -o-linear-gradient(#e8afbb, #e8afa0);filter:progid:DXImageTransform.Microsoft.gradient(startColorStr='#e8afbb', EndColorStr='#e8afa0');border:1px solid #888;border-left:3px solid rgba(85,85,85,0.8)}.o_eportfolio_maps .o_map-epmst-red4{background:#ffa800;background:#ffa800 -webkit-gradient(linear, 37% 20%, 53% 100%, from(#ffa800), to(#ffaf00));background:#ffa800 -moz-linear-gradient(43% 71% 101deg, #ffa800, #ffaf00);background:#ffa800 -o-linear-gradient(#ffa800, #ffaf00);filter:progid:DXImageTransform.Microsoft.gradient(startColorStr='#ffa800', EndColorStr='#ffaf00');border:1px solid #888;border-left:3px solid rgba(85,85,85,0.8);box-shadow:3px 3px 4px rgba(20,20,20,0.4)}.o_eportfolio_maps .o_map-epmst-red4 h4,.o_eportfolio_maps .o_map-epmst-red4 .o_cal .fc-header-title h2,.o_cal .fc-header-title .o_eportfolio_maps .o_map-epmst-red4 h2{color:#444}.o_eportfolio_maps .o_map-epmst-red4 .panel-body,.o_eportfolio_maps .o_map-epmst-red4 td,.o_eportfolio_maps .o_map-epmst-red4 a{color:#000}.o_eportfolio_map.o_map-epmst-red4{background:#ffa800;background:#ffa800 -webkit-gradient(linear, 37% 20%, 53% 100%, from(#ffa800), to(#ffaf00));background:#ffa800 -moz-linear-gradient(43% 71% 101deg, #ffa800, #ffaf00);background:#ffa800 -o-linear-gradient(#ffa800, #ffaf00);filter:progid:DXImageTransform.Microsoft.gradient(startColorStr='#ffa800', EndColorStr='#ffaf00');border:1px solid #888;border-left:3px solid rgba(85,85,85,0.8)}.o_eportfolio_maps .o_map-epmst-blue{background:#00d2f8;background:#00d2f8 -webkit-gradient(linear, 37% 20%, 53% 100%, from(#00d2f8), to(#4a9ead));background:#00d2f8 -moz-linear-gradient(43% 71% 101deg, #00d2f8, #4a9ead);background:#00d2f8 -o-linear-gradient(#00d2f8, #4a9ead);filter:progid:DXImageTransform.Microsoft.gradient(startColorStr='#00d2f8', EndColorStr='#4a9ead');border:1px solid #888;border-left:3px solid rgba(85,85,85,0.8);box-shadow:3px 3px 4px rgba(20,20,20,0.4)}.o_eportfolio_maps .o_map-epmst-blue h4,.o_eportfolio_maps .o_map-epmst-blue .o_cal .fc-header-title h2,.o_cal .fc-header-title .o_eportfolio_maps .o_map-epmst-blue h2{color:#444}.o_eportfolio_maps .o_map-epmst-blue .panel-body,.o_eportfolio_maps .o_map-epmst-blue td,.o_eportfolio_maps .o_map-epmst-blue a{color:#000}.o_eportfolio_map.o_map-epmst-blue{background:#00d2f8;background:#00d2f8 -webkit-gradient(linear, 37% 20%, 53% 100%, from(#00d2f8), to(#4a9ead));background:#00d2f8 -moz-linear-gradient(43% 71% 101deg, #00d2f8, #4a9ead);background:#00d2f8 -o-linear-gradient(#00d2f8, #4a9ead);filter:progid:DXImageTransform.Microsoft.gradient(startColorStr='#00d2f8', EndColorStr='#4a9ead');border:1px solid #888;border-left:3px solid rgba(85,85,85,0.8)}.o_eportfolio_maps .o_map-epmst-blue2{background:#c4f6ff;background:#c4f6ff -webkit-gradient(linear, 37% 20%, 53% 100%, from(#c4f6ff), to(#c4f6ff));background:#c4f6ff -moz-linear-gradient(43% 71% 101deg, #c4f6ff, #c4f6ff);background:#c4f6ff -o-linear-gradient(#c4f6ff, #c4f6ff);filter:progid:DXImageTransform.Microsoft.gradient(startColorStr='#c4f6ff', EndColorStr='#c4f6ff');border:1px solid #888;border-left:3px solid rgba(85,85,85,0.8);box-shadow:3px 3px 4px rgba(20,20,20,0.4)}.o_eportfolio_maps .o_map-epmst-blue2 h4,.o_eportfolio_maps .o_map-epmst-blue2 .o_cal .fc-header-title h2,.o_cal .fc-header-title .o_eportfolio_maps .o_map-epmst-blue2 h2{color:#444}.o_eportfolio_maps .o_map-epmst-blue2 .panel-body,.o_eportfolio_maps .o_map-epmst-blue2 td,.o_eportfolio_maps .o_map-epmst-blue2 a{color:#000}.o_eportfolio_map.o_map-epmst-blue2{background:#c4f6ff;background:#c4f6ff -webkit-gradient(linear, 37% 20%, 53% 100%, from(#c4f6ff), to(#c4f6ff));background:#c4f6ff -moz-linear-gradient(43% 71% 101deg, #c4f6ff, #c4f6ff);background:#c4f6ff -o-linear-gradient(#c4f6ff, #c4f6ff);filter:progid:DXImageTransform.Microsoft.gradient(startColorStr='#c4f6ff', EndColorStr='#c4f6ff');border:1px solid #888;border-left:3px solid rgba(85,85,85,0.8)}.o_eportfolio_maps .o_map-epmst-blue3{background:#b3e2f7;background:#b3e2f7 -webkit-gradient(linear, 37% 20%, 53% 100%, from(#b3e2f7), to(#b3e2f7));background:#b3e2f7 -moz-linear-gradient(43% 71% 101deg, #b3e2f7, #b3e2f7);background:#b3e2f7 -o-linear-gradient(#b3e2f7, #b3e2f7);filter:progid:DXImageTransform.Microsoft.gradient(startColorStr='#b3e2f7', EndColorStr='#b3e2f7');border:1px solid #888;border-left:3px solid rgba(85,85,85,0.8);box-shadow:3px 3px 4px rgba(20,20,20,0.4)}.o_eportfolio_maps .o_map-epmst-blue3 h4,.o_eportfolio_maps .o_map-epmst-blue3 .o_cal .fc-header-title h2,.o_cal .fc-header-title .o_eportfolio_maps .o_map-epmst-blue3 h2{color:#444}.o_eportfolio_maps .o_map-epmst-blue3 .panel-body,.o_eportfolio_maps .o_map-epmst-blue3 td,.o_eportfolio_maps .o_map-epmst-blue3 a{color:#000}.o_eportfolio_map.o_map-epmst-blue3{background:#b3e2f7;background:#b3e2f7 -webkit-gradient(linear, 37% 20%, 53% 100%, from(#b3e2f7), to(#b3e2f7));background:#b3e2f7 -moz-linear-gradient(43% 71% 101deg, #b3e2f7, #b3e2f7);background:#b3e2f7 -o-linear-gradient(#b3e2f7, #b3e2f7);filter:progid:DXImageTransform.Microsoft.gradient(startColorStr='#b3e2f7', EndColorStr='#b3e2f7');border:1px solid #888;border-left:3px solid rgba(85,85,85,0.8)}.o_eportfolio_maps .o_map-epmst-blue4{background:#dee7f7;background:#dee7f7 -webkit-gradient(linear, 37% 20%, 53% 100%, from(#dee7f7), to(#c1e9fd));background:#dee7f7 -moz-linear-gradient(43% 71% 101deg, #dee7f7, #c1e9fd);background:#dee7f7 -o-linear-gradient(#dee7f7, #c1e9fd);filter:progid:DXImageTransform.Microsoft.gradient(startColorStr='#dee7f7', EndColorStr='#c1e9fd');border:1px solid #888;border-left:3px solid rgba(85,85,85,0.8);box-shadow:3px 3px 4px rgba(20,20,20,0.4)}.o_eportfolio_maps .o_map-epmst-blue4 h4,.o_eportfolio_maps .o_map-epmst-blue4 .o_cal .fc-header-title h2,.o_cal .fc-header-title .o_eportfolio_maps .o_map-epmst-blue4 h2{color:#444}.o_eportfolio_maps .o_map-epmst-blue4 .panel-body,.o_eportfolio_maps .o_map-epmst-blue4 td,.o_eportfolio_maps .o_map-epmst-blue4 a{color:#000}.o_eportfolio_map.o_map-epmst-blue4{background:#dee7f7;background:#dee7f7 -webkit-gradient(linear, 37% 20%, 53% 100%, from(#dee7f7), to(#c1e9fd));background:#dee7f7 -moz-linear-gradient(43% 71% 101deg, #dee7f7, #c1e9fd);background:#dee7f7 -o-linear-gradient(#dee7f7, #c1e9fd);filter:progid:DXImageTransform.Microsoft.gradient(startColorStr='#dee7f7', EndColorStr='#c1e9fd');border:1px solid #888;border-left:3px solid rgba(85,85,85,0.8)}.o_userbulk_changedcell{font-style:italic;font-weight:bold}.o_icon_qpool:before{content:"\f19c"}.o_sel_qpool_my_items:before{content:"\f007"}.o_sel_qpool_favorits:before{content:"\f02e"}.o_sel_qpool_collection:before{content:"\f03a"}.o_sel_qpool_pool:before{content:"\f1e1"}.o_sel_qpool_share:before{content:"\f0c0"}.o_icon_private_pool:before{content:"\f00d"}.o_icon_public_pool:before{content:"\f00c"}body.o_dmz{background:linear-gradient(to right, rgba(255,255,255,0) 0.2%, rgba(255,255,255,0.95) 60%, #fff 100%),url("../light/images/learn-bg.jpg");background-size:cover, cover}body.o_dmz #o_main_wrapper,body.o_dmz #o_main_wrapper #o_main_container{background:transparent}.o_login{padding-left:50%;padding-right:5%;padding-bottom:20px}.o_login h1{margin-bottom:40px}.o_login .o_infomessage_wrapper{background-color:#fff;border:1px solid #e3e3e3;border-radius:4px;padding:6px 12px}.o_login .o_infomessage_wrapper div.o_info,.o_login .o_infomessage_wrapper div.o_warning,.o_login .o_infomessage_wrapper div.o_note{margin:0}.o_login .o_login_providers{margin-bottom:6px;border-radius:4px;-webkit-box-shadow:0px 1px 20px rgba(0,0,0,0.25);box-shadow:0px 1px 20px rgba(0,0,0,0.25)}.o_login .o_login_providers a span{display:block;font-size:9px;padding-top:6px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.o_login .o_login_provider{background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:0px 1px 20px rgba(0,0,0,0.25);box-shadow:0px 1px 20px rgba(0,0,0,0.25)}.o_login .o_login_form{position:relative;padding:10px 12px}.o_login .o_login_form .o_login_pwd{position:absolute;bottom:2em;right:12px}.o_login .o_login_register{display:block;line-height:2em;font-size:18px;text-align:center;color:#fff;background-color:#5bc0de;border-color:#46b8da;border-radius:4px;margin-top:16px;padding:10px 12px}.o_login .o_login_register:hover,.o_login .o_login_register:focus,.o_login .o_login_register:active,.o_login .o_login_register.active{color:#fff;background-color:#39b3d7;border-color:#269abc}.open .o_login .o_login_register.dropdown-toggle{color:#fff;background-color:#39b3d7;border-color:#269abc}.o_login .o_login_register:active,.o_login .o_login_register.active{background-image:none}.open .o_login .o_login_register.dropdown-toggle{background-image:none}.o_login .o_login_register.disabled,.o_login .o_login_register.disabled:hover,.o_login .o_login_register.disabled:focus,.o_login .o_login_register.disabled:active,.o_login .o_login_register.disabled.active,.o_login .o_login_register[disabled],.o_login .o_login_register[disabled]:hover,.o_login .o_login_register[disabled]:focus,.o_login .o_login_register[disabled]:active,.o_login .o_login_register[disabled].active,fieldset[disabled] .o_login .o_login_register,fieldset[disabled] .o_login .o_login_register:hover,fieldset[disabled] .o_login .o_login_register:focus,fieldset[disabled] .o_login .o_login_register:active,fieldset[disabled] .o_login .o_login_register.active{background-color:#5bc0de;border-color:#46b8da}.o_login .o_login_register .badge{color:#5bc0de;background-color:#fff}.o_login .o_login_register small{font-size:14px}@media (max-width: 991px){body.o_dmz{background:none}.o_login{padding-left:0;padding-right:0}.o_login .o_login_providers,.o_login .o_login_provider{-webkit-box-shadow:none;box-shadow:none}}.o_home_main h1{text-align:center}.o_home_main .o_icon_rss{line-height:20px;vertical-align:middle}.o_showall{font-size:12px;text-align:right;margin-bottom:5px}.o_portlet{position:relative;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,0.1);box-shadow:0 1px 1px rgba(0,0,0,0.1)}.o_portlet .o_header{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;padding:6px 12px;border-bottom:1px solid #ddd;background-color:#f5f5f5;border-top-right-radius:4px;border-top-left-radius:4px}.o_portlet .o_content{padding:6px 12px}.o_portlet .o_portlet_table{margin:-12px;margin-bottom:-6px;margin-top:0}.o_portlet .o_table_empty.o_info{padding:6px}.o_portlet .o_toolbox{position:absolute;top:-1px;right:-1px;z-index:2;background-color:#fff;border:1px solid #faebcc;border-top-right-radius:4px;border-top-left-radius:4px;border-bottom-right-radius:4px;border-bottom-left-radius:4px;padding:6px 12px}.o_portlet .o_toolbox div{display:inline}.o_portlet .o_edit_shim{position:absolute;height:100%;width:100%;z-index:1;background:#fcf8e3;opacity:0.8}.o_inactive .o_header a{float:right;margin-left:12px;margin-top:10px}.o_portlet_dyk_q{margin-top:5px;font-style:italic}.o_portlet_dyk_a{margin:5px 0}.o_portlet_dyk_next{margin:5px 0;text-align:right}.ui-widget{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:100%}.ui-widget-header{border-top:none;border-left:none;border-right:none;border-bottom:1px solid #eee;background:#fff;font-weight:bold}.ui-dialog{-webkit-box-shadow:0px 1px 5px -1px rgba(0,0,0,0.25);box-shadow:0px 1px 5px -1px rgba(0,0,0,0.25);background-color:#fefefe}.ui-dialog .ui-widget-header .ui-icon-closethick:before{content:"\f00d"}.ui-dialog .ui-widget-header .ui-button.ui-corner-all{border:none !important;background:#fff !important}.ui-dialog .ui-widget-content{border-color:#fff;padding:5px}.ui-dialog .ui-dialog-titlebar{padding:4px 30px 4px 7px;margin:-2px -2px 0 -2px;background-color:#eee}.ui-dialog.ui-corner-all{border-radius:4px}.ui-dialog.ui-widget-content{border:1px solid transparent}.ui-dialog.o_modal-ui div.ui-dialog-buttonpane{display:none}.ui-datepicker{-webkit-box-shadow:0px 1px 5px -1px rgba(0,0,0,0.15);box-shadow:0px 1px 5px -1px rgba(0,0,0,0.15)}.ui-datepicker .ui-widget-header .ui-corner-all,.ui-datepicker .ui-widget-header .ui-datepicker-next.ui-corner-all{border:none !important;background:#fff !important}.ui-datepicker .ui-widget-header .ui-icon.ui-icon-circle-triangle-e:before{content:"\f061";font-weight:normal;color:black}.ui-datepicker .ui-widget-header .ui-icon.ui-icon-circle-triangle-w:before{content:"\f060";font-weight:normal;color:black}.ui-datepicker .ui-widget-header .ui-icon.ui-icon-circle-triangle-e,.ui-datepicker .ui-widget-header .ui-icon.ui-icon-circle-triangle-w{font-family:'FontAwesome';display:inline-block;background-image:none;background-position:0 0;font-weight:normal;text-indent:0;color:white}.ui-datepicker .ui-widget-header .ui-datepicker .ui-datepicker-prev-hover,.ui-datepicker .ui-widget-header .ui-datepicker .ui-datepicker-next-hover{top:2px}.ui-datepicker .ui-state-default{background:#eee}.ui-datepicker .ui-state-highlight,.ui-datepicker .ui-widget-content .ui-state-highlight{border:1px solid #357ebd;background:#428bca;color:#fff}.ui-datepicker.ui-corner-all{border-radius:4px}.ui-datepicker.ui-widget-content{border:1px solid transparent} +.o_sp_icon:before{content:"\f0f6"}.o_st_icon:before{content:"\f1b3"}.o_tu_icon:before{content:"\f08e"}.o_bc_icon:before{content:"\f115"}.o_lti_icon:before{content:"\f08e"}.o_cp_icon:before{content:"\f187"}.o_cp_item:before{content:"\f0f6"}.o_scorm_icon:before{content:"\f187"}.o_en_icon:before{content:"\f090"}.o_fo_icon:before{content:"\f0e6"}.o_co_icon:before{content:"\f003"}.o_infomsg_icon:before{content:"\f05a"}.o_cal_icon:before{content:"\f073"}.o_wiki_icon:before{content:"\f0ac"}.o_podcast_icon:before{content:"\f03d"}.o_blog_icon:before{content:"\f0a1"}.o_ep_icon:before{content:"\f12e"}.o_iqtest_icon:before{content:"\f044"}.o_iqself_icon:before{content:"\f044"}.o_iqsurv_icon:before{content:"\f11a"}.o_ta_icon:before{content:"\f0ae"}.o_ms_icon:before{content:"\f087"}.o_dialog_icon:before{content:"\f0c5"}.o_projectbroker_icon:before{content:"\f10c"}.o_ll_icon:before{content:"\f0c1"}.o_den_icon:before{content:"\f133"}.o_cmembers_icon:before{content:"\f0c0"}.o_cl_icon:before{content:"\f046"}.o_vc_icon:before{content:"\f108"}.o_vitero_icon:before{content:"\f108"}.o_openmeetings_icon:before{content:"\f108"}.o_midpub:before{content:"\f058";color:green}.o_midwarn:before{content:"\f071";color:orange}.o_midlock:before{content:"\f023"}.o_miderr:before{content:"\f071";color:red}.o_middel:before{content:"\f12d"}.o_passed{color:#3c763d;font-weight:bold}.o_passed a:hover{color:#2b542c}.o_passed th{color:#333}.o_failed{color:#a94442;font-weight:bold}.o_failed a:hover{color:#843534}.o_failed th{color:#333}.o_unknown{color:#8a6d3b;font-weight:bold}.o_unknown a:hover{color:#66512c}.o_unknown th{color:#333}.o_noinfo{color:#999}.o_course_run .o_toc .o_entry .o_shorttitle{border-bottom:1px solid #999}.o_course_run .o_toc .o_entry .o_displaytitle{margin-top:5px;color:#999}.o_course_run .o_toc .o_entry .o_objectives{margin-top:10px;font-style:italic}.o_st_peekview ul li{margin-bottom:0.5em}.o_cl_line{margin-bottom:10px;padding-bottom:5px}.o_cl_line.o_even{background-color:#f9f9f9}.o_cmembers .o_cmember{margin:12px 0}.o_cmembers .o_cmember .o_portrait{margin-right:6px}.o_cmembers .o_cmember .o_cmember_info_wrapper{line-height:30px}.o_cmembers .o_cmember .o_cmember_info_wrapper .o_mail{margin-left:6px}.o_course_editor .o_node_config{margin-bottom:20px}#o_course_editor_errorbox ul,#o_course_editor_warningbox ul{list-style-type:none}div.b_selectiontree{font-size:95%}div.b_selectiontree div.b_selectiontree_item{clear:both;position:relative;top:0;left:0;vertical-align:middle;height:16px;width:auto}div.b_selectiontree div.b_selectiontree_item div{width:16px;height:16px;float:left;display:inline;background-repeat:no-repeat}div.b_selectiontree div.b_selectiontree_item div.b_selectiontree_content{float:left;display:inline;margin-left:0.5em;width:auto;white-space:nowrap}div.b_selectiontree div.b_selectiontree_content{width:auto}div.b_selectiontree div.b_selectiontree_content div{width:auto}div.b_selectiontree div.b_selectiontree_content input{width:1em;height:1em;padding:0;margin:0 0.5em;vertical-align:middle}div.b_selectiontree div.b_selectiontree_content input.b_radio{margin:0}div.b_selectiontree .b_selectiontree_line{background-image:url(../openolat/images/tree/dots.gif)}div.b_selectiontree .b_selectiontree_space{background-image:url(../openolat/images/tree/dots_spacer.gif)}div.b_selectiontree .b_selectiontree_junction{background-image:url(../openolat/images/tree/dots_nt.gif)}div.b_selectiontree .b_selectiontree_end{background-image:url(../openolat/images/tree/dots_nl.gif)}table.table.o_qti_item_kprim>thead>tr>th,table.table.o_qti_item_kprim>tbody>tr>td{border:none}td.o_qti_item_kprim_input,th.o_qti_item_kprim_input{text-align:center}div.o_qti_item_itemfeedback{background-color:#ffffff;border-color:#000000}.d3chart .bar_green{fill:#5cb85c}.d3chart .bar_red{fill:#d9534f}.d3chart .bar_grey{fill:lightgrey}div.o_qti_statistics ul{list-style-type:none;padding:0;margin:0;font-size:90%}div.o_qti_statistics ul strong{font-weight:normal}div.o_qti_statistics ul li{padding-left:48px;margin-left:0;margin-bottom:10px}div.o_qti_statistics ul li.o_qti_statistics-ncorrect:before{font-size:125%;content:'\2A2F\00A0\00A0'}div.o_qti_statistics ul li.o_qti_statistics-correct:before{font-size:125%;content:'\2713\00A0\00A0'}div.o_qti_statistics ul li.o_qti_statistics-kplus:before{font-size:125%;content:'\2713\00A0\2A2F\00A0\00A0'}div.o_qti_statistics ul li.o_qti_statistics-kminus:before{font-size:125%;content:'\2A2F\00A0\2713\00A0\00A0'}div.o_qti_statistics ul li img{vertical-align:top}div.o_qti_statistics table.o_qti_statistics_figures tr{float:left}div.o_qti_statistics table.o_qti_statistics_figures tr:nth-child(2n+1){clear:left;padding-right:20px}div.o_qti_statistics table.o_qti_statistics_figures td{width:200px;padding-left:0}div.o_qti_statistics table.o_qti_statistics_figures td+td{width:100px}div.o_qti_statistics .o_qti_statistics_answer{background:#F5F5F5;padding:1px 2px;width:90%}div.o_qti_statistics div.o_qti_statistics_legend{padding-top:10px;width:470px;border:1px solid #ddd;border-radius:4px}div.o_qti_statistics div.o_qti_statistics_legend ul li .bar_green{background-color:#9dd53a}div.o_qti_statistics div.o_qti_statistics_legend ul li .bar_red{background-color:#f85032}div.o_qti_statistics div.o_qti_statistics_legend ul li .bar_grey{background-color:lightgrey}.onyx_iframe{width:100%;height:100%;border:none;min-height:60em}.o_qti_print div.o_qti_statistics{width:680px}@media print{div.o_qti_statistics{width:680px}}#o_dev_tool #o_dev_tool_mode{width:1em;height:1em;float:left;border:1px solid #000;margin-right:5px}a.o_dev{position:absolute;left:0;top:0;z-index:4000;background:#f0ad4e;border:1px solid #d59645;border-top:none;border-left:none;border-radius:0 0 4px 0;color:#fff}a.o_dev:hover{color:#d9534f}.o_dev_w{margin:1px}.o_dev_w .o_dev_h{color:#000;font-size:8px;line-height:10px;margin:0}.o_dev_w .o_dev_h span{background:#f4c37d;border:1px solid #f0ad4e;border-bottom:0}.o_dev_w .o_dev_c{position:relative;border:1px dotted #eee}.o_dev_w .o_dev_c .o_dev_i{position:absolute;top:0px;left:24px;height:auto;width:auto;padding:5px;border:1px solid black;display:none;margin:0px;z-index:999;font-size:11px;background-color:#BBF}.o_dev_w.o_dev_m>.o_dev_c{border:1px solid #f0ad4e;margin:0px;background-color:#f8e9d4}.o_wikimod_nav .o_noti{margin:0}.o_wikimod_editform_wrapper{margin-top:30px}.o_wiki-file-deleted{text-decoration:line-through}.o_ep_icon_map:before{content:"\f0b1"}.o_ep_icon_page:before{content:"\f016"}.o_ep_icon_struct:before{content:"\f1b3"}.o_ep_icon_liveblog:before{content:"\f0a1"}.o_portfolio_toc .o_ep_link{float:right;margin-right:0px}.o_portfolio_toc .o_ep_commentlink{float:right;margin-right:10%}.o_portfolio_toc li.level1{font-size:1.2em;margin:1.2em 0 0.2em 0;border-bottom:1px solid #ddd}.o_portfolio_toc li.level2{padding-left:20px;font-size:1.1em;border-bottom:1px dotted #ddd}.o_portfolio_toc li.level3{padding-left:40px}.b_eportfolio_map a.b_eportfolio_add_link,.b_eportfolio_map a.b_eportfolio_del_link{float:right;display:inline}.b_eportfolio_page .b_eportfolio_structure>h5{border-bottom:1px solid #ddd;margin-top:1.2em}.o_eportfolio_maps .panel{font-family:'Century Gothic', 'Apple Gothic', sans-serif}.o_eportfolio_maps .panel-heading{padding:5px 10px}.o_eportfolio_maps h4,.o_eportfolio_maps .o_cal .fc-header-title h2,.o_cal .fc-header-title .o_eportfolio_maps h2{padding:11px 15px;background:rgba(255,255,230,0.7) none;border-radius:6px}.o_eportfolio_maps .table>tbody>tr>td{border-top:none}.o_eportfolio_maps .panel-body{border-top:none}.o_eportfolio_maps .panel>.panel-body+.table{border-top:none}.o_eportfolio_map{padding:0 20px 2px 3px;border-radius:6px 10px 6px 0;font-family:'Century Gothic', 'Apple Gothic', sans-serif}.o_map_header{padding-left:5px}.o_eportfolio_map ul.nav-tabs li:not(.active) a{background-color:rgba(240,240,240,0.7);border-radius:4px 4px 0 0}.o_eportfolio_edit{border-radius:4px 4px 0 0}.o_ep_actualpage,.o_eportfolio_edit{padding:15px;background-color:#fff}.o_ep_content{margin-top:15px}.o_ep_filter .o_date.form-inline .form-group,.o_ep_filter .o_date.navbar-form .form-group,.o_ep_filter .o_date.o_navbar-form .form-group{margin-left:8px}.o_eportfolio_share_policy_wrapper{border:1px solid #ddd;border-radius:4px}.o_eportfolio_share_header{padding:10px 15px;border-bottom:1px solid #ddd;background-color:#f5f5f5}.o_eportfolio_share_policy{padding:10px 15px}.o_eportfolio_maps .o_map-default{background:#fafafa;background:#fafafa -webkit-gradient(linear, 37% 20%, 53% 100%, from(#fafafa), to(#efefef));background:#fafafa -moz-linear-gradient(43% 71% 101deg, #fafafa, #efefef);background:#fafafa -o-linear-gradient(#fafafa, #efefef);filter:progid:DXImageTransform.Microsoft.gradient(startColorStr='#fafafa', EndColorStr='#efefef');border:1px solid #efefef;border-left:3px solid rgba(188,188,188,0.8);box-shadow:3px 3px 4px rgba(20,20,20,0.4)}.o_eportfolio_maps .o_map-default h4,.o_eportfolio_maps .o_map-default .o_cal .fc-header-title h2,.o_cal .fc-header-title .o_eportfolio_maps .o_map-default h2{color:#444;background:none}.o_eportfolio_maps .o_map-default .panel-body,.o_eportfolio_maps .o_map-default td,.o_eportfolio_maps .o_map-default a{color:#000}.o_eportfolio_map.o_map-default{background:#fafafa;background:#fafafa -webkit-gradient(linear, 37% 20%, 53% 100%, from(#fafafa), to(#efefef));background:#fafafa -moz-linear-gradient(43% 71% 101deg, #fafafa, #efefef);background:#fafafa -o-linear-gradient(#fafafa, #efefef);filter:progid:DXImageTransform.Microsoft.gradient(startColorStr='#fafafa', EndColorStr='#efefef');border:1px solid #efefef;border-left:3px solid rgba(188,188,188,0.8)}.o_eportfolio_maps .o_map-comic{background:#a2c3e8 none;font-family:'Comic Sans MS', 'Comic Sans', fantasy;border:1px solid #888;border-left:3px solid rgba(85,85,85,0.8);box-shadow:3px 3px 4px rgba(20,20,20,0.4)}.o_eportfolio_map.o_map-comic{background:#a2c3e8;font-family:'Comic Sans MS', 'Comic Sans', fantasy;border:1px solid #888;border-left:3px solid rgba(85,85,85,0.8)}.o_eportfolio_maps .o_map-leather{background-color:#957352;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, rgba(248,248,248,0.7)), color-stop(100%, rgba(193,193,193,0.5))),url("../light/images/portfolio/white-leather-tile.jpg");background-image:-webkit-linear-gradient(top, rgba(248,248,248,0.7), rgba(193,193,193,0.5)),url("../light/images/portfolio/white-leather-tile.jpg");background-image:-moz-linear-gradient(top, rgba(248,248,248,0.7), rgba(193,193,193,0.5)),url("../light/images/portfolio/white-leather-tile.jpg");background-image:-ms-linear-gradient(top, rgba(248,248,248,0.7), rgba(193,193,193,0.5)),url("../light/images/portfolio/white-leather-tile.jpg");background-image:-o-linear-gradient(top, rgba(248,248,248,0.7), rgba(193,193,193,0.5)),url("../light/images/portfolio/white-leather-tile.jpg");background-image:linear-gradient(top, rgba(248,248,248,0.7), rgba(193,193,193,0.5)),url("../light/images/portfolio/white-leather-tile.jpg");font-family:Palatino, Georgia, serif;border:1px solid #888;border-left:3px solid rgba(85,85,85,0.8);box-shadow:3px 3px 4px rgba(20,20,20,0.4)}.o_eportfolio_maps .o_map-leather h4,.o_eportfolio_maps .o_map-leather .o_cal .fc-header-title h2,.o_cal .fc-header-title .o_eportfolio_maps .o_map-leather h2{background:rgba(243,230,225,0.3) none}.o_eportfolio_maps .o_map-leather .panel-body,.o_eportfolio_maps .o_map-leather td{color:#333}.o_eportfolio_maps .o_map-leather a{color:#fad9a4}.o_eportfolio_map.o_map-leather{background-color:#957352;background-image:-webkit-gradient(linear, left top, left bottom, color-stop(0%, rgba(248,248,248,0.7)), color-stop(100%, rgba(193,193,193,0.5))),url("../light/images/portfolio/white-leather-tile.jpg");background-image:-webkit-linear-gradient(top, rgba(248,248,248,0.7), rgba(193,193,193,0.5)),url("../light/images/portfolio/white-leather-tile.jpg");background-image:-moz-linear-gradient(top, rgba(248,248,248,0.7), rgba(193,193,193,0.5)),url("../light/images/portfolio/white-leather-tile.jpg");background-image:-ms-linear-gradient(top, rgba(248,248,248,0.7), rgba(193,193,193,0.5)),url("../light/images/portfolio/white-leather-tile.jpg");background-image:-o-linear-gradient(top, rgba(248,248,248,0.7), rgba(193,193,193,0.5)),url("../light/images/portfolio/white-leather-tile.jpg");background-image:linear-gradient(top, rgba(248,248,248,0.7), rgba(193,193,193,0.5)),url("../light/images/portfolio/white-leather-tile.jpg");font-family:Palatino, Georgia, serif;border:1px solid #888;border-left:3px solid rgba(60,60,60,0.8)}.o_eportfolio_map.o_map-leather .o_map_header h4,.o_eportfolio_map.o_map-leather .o_map_header .o_cal .fc-header-title h2,.o_cal .fc-header-title .o_eportfolio_map.o_map-leather .o_map_header h2,.o_eportfolio_map.o_map-leather .o_map_header p,.o_eportfolio_map.o_map-leather .o_map_header a,.o_eportfolio_map.o_map-leather .o_map_header span,.o_eportfolio_map.o_map-leather .o_map_header label{color:#333}.o_eportfolio_maps .o_map-epmst-green{background:#ecf69a;background:#ecf69a -webkit-gradient(linear, 37% 20%, 53% 100%, from(#ecf69a), to(#ecf69a));background:#ecf69a -moz-linear-gradient(43% 71% 101deg, #ecf69a, #ecf69a);background:#ecf69a -o-linear-gradient(#ecf69a, #ecf69a);filter:progid:DXImageTransform.Microsoft.gradient(startColorStr='#ecf69a', EndColorStr='#ecf69a');border:1px solid #888;border-left:3px solid rgba(85,85,85,0.8);box-shadow:3px 3px 4px rgba(20,20,20,0.4)}.o_eportfolio_maps .o_map-epmst-green h4,.o_eportfolio_maps .o_map-epmst-green .o_cal .fc-header-title h2,.o_cal .fc-header-title .o_eportfolio_maps .o_map-epmst-green h2{color:#444}.o_eportfolio_maps .o_map-epmst-green .panel-body,.o_eportfolio_maps .o_map-epmst-green td,.o_eportfolio_maps .o_map-epmst-green a{color:#000}.o_eportfolio_map.o_map-epmst-green{background:#ecf69a;background:#ecf69a -webkit-gradient(linear, 37% 20%, 53% 100%, from(#ecf69a), to(#ecf69a));background:#ecf69a -moz-linear-gradient(43% 71% 101deg, #ecf69a, #ecf69a);background:#ecf69a -o-linear-gradient(#ecf69a, #ecf69a);filter:progid:DXImageTransform.Microsoft.gradient(startColorStr='#ecf69a', EndColorStr='#ecf69a');border:1px solid #888;border-left:3px solid rgba(85,85,85,0.8)}.o_eportfolio_maps .o_map-epmst-green2{background:#99e44d;background:#99e44d -webkit-gradient(linear, 37% 20%, 53% 100%, from(#99e44d), to(#cbf1a5));background:#99e44d -moz-linear-gradient(43% 71% 101deg, #99e44d, #cbf1a5);background:#99e44d -o-linear-gradient(#99e44d, #cbf1a5);filter:progid:DXImageTransform.Microsoft.gradient(startColorStr='#99e44d', EndColorStr='#cbf1a5');border:1px solid #bbb;border-left:3px solid rgba(136,136,136,0.8);box-shadow:3px 3px 4px rgba(20,20,20,0.4)}.o_eportfolio_maps .o_map-epmst-green2 h4,.o_eportfolio_maps .o_map-epmst-green2 .o_cal .fc-header-title h2,.o_cal .fc-header-title .o_eportfolio_maps .o_map-epmst-green2 h2{color:#555}.o_eportfolio_maps .o_map-epmst-green2 .panel-body,.o_eportfolio_maps .o_map-epmst-green2 td,.o_eportfolio_maps .o_map-epmst-green2 a{color:#000}.o_eportfolio_map.o_map-epmst-green2{background:#99e44d;background:#99e44d -webkit-gradient(linear, 37% 20%, 53% 100%, from(#99e44d), to(#cbf1a5));background:#99e44d -moz-linear-gradient(43% 71% 101deg, #99e44d, #cbf1a5);background:#99e44d -o-linear-gradient(#99e44d, #cbf1a5);filter:progid:DXImageTransform.Microsoft.gradient(startColorStr='#99e44d', EndColorStr='#cbf1a5');border:1px solid #bbb;border-left:3px solid rgba(136,136,136,0.8)}.o_eportfolio_maps .o_map-epmst-green3{background:#dff0c1;background:#dff0c1 -webkit-gradient(linear, 37% 20%, 53% 100%, from(#dff0c1), to(#a0d346));background:#dff0c1 -moz-linear-gradient(43% 71% 101deg, #dff0c1, #a0d346);background:#dff0c1 -o-linear-gradient(#dff0c1, #a0d346);filter:progid:DXImageTransform.Microsoft.gradient(startColorStr='#dff0c1', EndColorStr='#a0d346');border:1px solid #bbb;border-left:3px solid rgba(136,136,136,0.8);box-shadow:3px 3px 4px rgba(20,20,20,0.4)}.o_eportfolio_maps .o_map-epmst-green3 h4,.o_eportfolio_maps .o_map-epmst-green3 .o_cal .fc-header-title h2,.o_cal .fc-header-title .o_eportfolio_maps .o_map-epmst-green3 h2{color:#555}.o_eportfolio_maps .o_map-epmst-green3 .panel-body,.o_eportfolio_maps .o_map-epmst-green3 td,.o_eportfolio_maps .o_map-epmst-green3 a{color:#000}.o_eportfolio_map.o_map-epmst-green3{background:#dff0c1;background:#dff0c1 -webkit-gradient(linear, 37% 20%, 53% 100%, from(#dff0c1), to(#a0d346));background:#dff0c1 -moz-linear-gradient(43% 71% 101deg, #dff0c1, #a0d346);background:#dff0c1 -o-linear-gradient(#dff0c1, #a0d346);filter:progid:DXImageTransform.Microsoft.gradient(startColorStr='#dff0c1', EndColorStr='#a0d346');border:1px solid #bbb;border-left:3px solid rgba(136,136,136,0.8)}.o_eportfolio_maps .o_map-epmst-green4{background:#d7dbb5;background:#d7dbb5 -webkit-gradient(linear, 37% 20%, 53% 100%, from(#d7dbb5), to(#d7dbb5));background:#d7dbb5 -moz-linear-gradient(43% 71% 101deg, #d7dbb5, #d7dbb5);background:#d7dbb5 -o-linear-gradient(#d7dbb5, #d7dbb5);filter:progid:DXImageTransform.Microsoft.gradient(startColorStr='#d7dbb5', EndColorStr='#d7dbb5');border:1px solid #bbb;border-left:3px solid rgba(136,136,136,0.8);box-shadow:3px 3px 4px rgba(20,20,20,0.4)}.o_eportfolio_maps .o_map-epmst-green4 h4,.o_eportfolio_maps .o_map-epmst-green4 .o_cal .fc-header-title h2,.o_cal .fc-header-title .o_eportfolio_maps .o_map-epmst-green4 h2{color:#555}.o_eportfolio_maps .o_map-epmst-green4 .panel-body,.o_eportfolio_maps .o_map-epmst-green4 td,.o_eportfolio_maps .o_map-epmst-green4 a{color:#000}.o_eportfolio_map.o_map-epmst-green4{background:#d7dbb5;background:#d7dbb5 -webkit-gradient(linear, 37% 20%, 53% 100%, from(#d7dbb5), to(#d7dbb5));background:#d7dbb5 -moz-linear-gradient(43% 71% 101deg, #d7dbb5, #d7dbb5);background:#d7dbb5 -o-linear-gradient(#d7dbb5, #d7dbb5);filter:progid:DXImageTransform.Microsoft.gradient(startColorStr='#d7dbb5', EndColorStr='#d7dbb5');border:1px solid #bbb;border-left:3px solid rgba(136,136,136,0.8)}.o_eportfolio_maps .o_map-epmst-red{background:#ffba71;background:#ffba71 -webkit-gradient(linear, 37% 20%, 53% 100%, from(#ffba71), to(#ffba99));background:#ffba71 -moz-linear-gradient(43% 71% 101deg, #ffba71, #ffba99);background:#ffba71 -o-linear-gradient(#ffba71, #ffba99);filter:progid:DXImageTransform.Microsoft.gradient(startColorStr='#ffba71', EndColorStr='#ffba99');border:1px solid #888;border-left:3px solid rgba(85,85,85,0.8);box-shadow:3px 3px 4px rgba(20,20,20,0.4)}.o_eportfolio_maps .o_map-epmst-red h4,.o_eportfolio_maps .o_map-epmst-red .o_cal .fc-header-title h2,.o_cal .fc-header-title .o_eportfolio_maps .o_map-epmst-red h2{color:#444}.o_eportfolio_maps .o_map-epmst-red .panel-body,.o_eportfolio_maps .o_map-epmst-red td,.o_eportfolio_maps .o_map-epmst-red a{color:#000}.o_eportfolio_map.o_map-epmst-red{background:#ffba71;background:#ffba71 -webkit-gradient(linear, 37% 20%, 53% 100%, from(#ffba71), to(#ffba99));background:#ffba71 -moz-linear-gradient(43% 71% 101deg, #ffba71, #ffba99);background:#ffba71 -o-linear-gradient(#ffba71, #ffba99);filter:progid:DXImageTransform.Microsoft.gradient(startColorStr='#ffba71', EndColorStr='#ffba99');border:1px solid #888;border-left:3px solid rgba(85,85,85,0.8)}.o_eportfolio_maps .o_map-epmst-red2{background:#ff9772;background:#ff9772 -webkit-gradient(linear, 37% 20%, 53% 100%, from(#ff9772), to(#ff9780));background:#ff9772 -moz-linear-gradient(43% 71% 101deg, #ff9772, #ff9780);background:#ff9772 -o-linear-gradient(#ff9772, #ff9780);filter:progid:DXImageTransform.Microsoft.gradient(startColorStr='#ff9772', EndColorStr='#ff9780');border:1px solid #888;border-left:3px solid rgba(85,85,85,0.8);box-shadow:3px 3px 4px rgba(20,20,20,0.4)}.o_eportfolio_maps .o_map-epmst-red2 h4,.o_eportfolio_maps .o_map-epmst-red2 .o_cal .fc-header-title h2,.o_cal .fc-header-title .o_eportfolio_maps .o_map-epmst-red2 h2{color:#444}.o_eportfolio_maps .o_map-epmst-red2 .panel-body,.o_eportfolio_maps .o_map-epmst-red2 td,.o_eportfolio_maps .o_map-epmst-red2 a{color:#000}.o_eportfolio_map.o_map-epmst-red2{background:#ff9772;background:#ff9772 -webkit-gradient(linear, 37% 20%, 53% 100%, from(#ff9772), to(#ff9780));background:#ff9772 -moz-linear-gradient(43% 71% 101deg, #ff9772, #ff9780);background:#ff9772 -o-linear-gradient(#ff9772, #ff9780);filter:progid:DXImageTransform.Microsoft.gradient(startColorStr='#ff9772', EndColorStr='#ff9780');border:1px solid #888;border-left:3px solid rgba(85,85,85,0.8)}.o_eportfolio_maps .o_map-epmst-red3{background:#e8afbb;background:#e8afbb -webkit-gradient(linear, 37% 20%, 53% 100%, from(#e8afbb), to(#e8afa0));background:#e8afbb -moz-linear-gradient(43% 71% 101deg, #e8afbb, #e8afa0);background:#e8afbb -o-linear-gradient(#e8afbb, #e8afa0);filter:progid:DXImageTransform.Microsoft.gradient(startColorStr='#e8afbb', EndColorStr='#e8afa0');border:1px solid #888;border-left:3px solid rgba(85,85,85,0.8);box-shadow:3px 3px 4px rgba(20,20,20,0.4)}.o_eportfolio_maps .o_map-epmst-red3 h4,.o_eportfolio_maps .o_map-epmst-red3 .o_cal .fc-header-title h2,.o_cal .fc-header-title .o_eportfolio_maps .o_map-epmst-red3 h2{color:#444}.o_eportfolio_maps .o_map-epmst-red3 .panel-body,.o_eportfolio_maps .o_map-epmst-red3 td,.o_eportfolio_maps .o_map-epmst-red3 a{color:#000}.o_eportfolio_map.o_map-epmst-red3{background:#e8afbb;background:#e8afbb -webkit-gradient(linear, 37% 20%, 53% 100%, from(#e8afbb), to(#e8afa0));background:#e8afbb -moz-linear-gradient(43% 71% 101deg, #e8afbb, #e8afa0);background:#e8afbb -o-linear-gradient(#e8afbb, #e8afa0);filter:progid:DXImageTransform.Microsoft.gradient(startColorStr='#e8afbb', EndColorStr='#e8afa0');border:1px solid #888;border-left:3px solid rgba(85,85,85,0.8)}.o_eportfolio_maps .o_map-epmst-red4{background:#ffa800;background:#ffa800 -webkit-gradient(linear, 37% 20%, 53% 100%, from(#ffa800), to(#ffaf00));background:#ffa800 -moz-linear-gradient(43% 71% 101deg, #ffa800, #ffaf00);background:#ffa800 -o-linear-gradient(#ffa800, #ffaf00);filter:progid:DXImageTransform.Microsoft.gradient(startColorStr='#ffa800', EndColorStr='#ffaf00');border:1px solid #888;border-left:3px solid rgba(85,85,85,0.8);box-shadow:3px 3px 4px rgba(20,20,20,0.4)}.o_eportfolio_maps .o_map-epmst-red4 h4,.o_eportfolio_maps .o_map-epmst-red4 .o_cal .fc-header-title h2,.o_cal .fc-header-title .o_eportfolio_maps .o_map-epmst-red4 h2{color:#444}.o_eportfolio_maps .o_map-epmst-red4 .panel-body,.o_eportfolio_maps .o_map-epmst-red4 td,.o_eportfolio_maps .o_map-epmst-red4 a{color:#000}.o_eportfolio_map.o_map-epmst-red4{background:#ffa800;background:#ffa800 -webkit-gradient(linear, 37% 20%, 53% 100%, from(#ffa800), to(#ffaf00));background:#ffa800 -moz-linear-gradient(43% 71% 101deg, #ffa800, #ffaf00);background:#ffa800 -o-linear-gradient(#ffa800, #ffaf00);filter:progid:DXImageTransform.Microsoft.gradient(startColorStr='#ffa800', EndColorStr='#ffaf00');border:1px solid #888;border-left:3px solid rgba(85,85,85,0.8)}.o_eportfolio_maps .o_map-epmst-blue{background:#00d2f8;background:#00d2f8 -webkit-gradient(linear, 37% 20%, 53% 100%, from(#00d2f8), to(#4a9ead));background:#00d2f8 -moz-linear-gradient(43% 71% 101deg, #00d2f8, #4a9ead);background:#00d2f8 -o-linear-gradient(#00d2f8, #4a9ead);filter:progid:DXImageTransform.Microsoft.gradient(startColorStr='#00d2f8', EndColorStr='#4a9ead');border:1px solid #888;border-left:3px solid rgba(85,85,85,0.8);box-shadow:3px 3px 4px rgba(20,20,20,0.4)}.o_eportfolio_maps .o_map-epmst-blue h4,.o_eportfolio_maps .o_map-epmst-blue .o_cal .fc-header-title h2,.o_cal .fc-header-title .o_eportfolio_maps .o_map-epmst-blue h2{color:#444}.o_eportfolio_maps .o_map-epmst-blue .panel-body,.o_eportfolio_maps .o_map-epmst-blue td,.o_eportfolio_maps .o_map-epmst-blue a{color:#000}.o_eportfolio_map.o_map-epmst-blue{background:#00d2f8;background:#00d2f8 -webkit-gradient(linear, 37% 20%, 53% 100%, from(#00d2f8), to(#4a9ead));background:#00d2f8 -moz-linear-gradient(43% 71% 101deg, #00d2f8, #4a9ead);background:#00d2f8 -o-linear-gradient(#00d2f8, #4a9ead);filter:progid:DXImageTransform.Microsoft.gradient(startColorStr='#00d2f8', EndColorStr='#4a9ead');border:1px solid #888;border-left:3px solid rgba(85,85,85,0.8)}.o_eportfolio_maps .o_map-epmst-blue2{background:#c4f6ff;background:#c4f6ff -webkit-gradient(linear, 37% 20%, 53% 100%, from(#c4f6ff), to(#c4f6ff));background:#c4f6ff -moz-linear-gradient(43% 71% 101deg, #c4f6ff, #c4f6ff);background:#c4f6ff -o-linear-gradient(#c4f6ff, #c4f6ff);filter:progid:DXImageTransform.Microsoft.gradient(startColorStr='#c4f6ff', EndColorStr='#c4f6ff');border:1px solid #888;border-left:3px solid rgba(85,85,85,0.8);box-shadow:3px 3px 4px rgba(20,20,20,0.4)}.o_eportfolio_maps .o_map-epmst-blue2 h4,.o_eportfolio_maps .o_map-epmst-blue2 .o_cal .fc-header-title h2,.o_cal .fc-header-title .o_eportfolio_maps .o_map-epmst-blue2 h2{color:#444}.o_eportfolio_maps .o_map-epmst-blue2 .panel-body,.o_eportfolio_maps .o_map-epmst-blue2 td,.o_eportfolio_maps .o_map-epmst-blue2 a{color:#000}.o_eportfolio_map.o_map-epmst-blue2{background:#c4f6ff;background:#c4f6ff -webkit-gradient(linear, 37% 20%, 53% 100%, from(#c4f6ff), to(#c4f6ff));background:#c4f6ff -moz-linear-gradient(43% 71% 101deg, #c4f6ff, #c4f6ff);background:#c4f6ff -o-linear-gradient(#c4f6ff, #c4f6ff);filter:progid:DXImageTransform.Microsoft.gradient(startColorStr='#c4f6ff', EndColorStr='#c4f6ff');border:1px solid #888;border-left:3px solid rgba(85,85,85,0.8)}.o_eportfolio_maps .o_map-epmst-blue3{background:#b3e2f7;background:#b3e2f7 -webkit-gradient(linear, 37% 20%, 53% 100%, from(#b3e2f7), to(#b3e2f7));background:#b3e2f7 -moz-linear-gradient(43% 71% 101deg, #b3e2f7, #b3e2f7);background:#b3e2f7 -o-linear-gradient(#b3e2f7, #b3e2f7);filter:progid:DXImageTransform.Microsoft.gradient(startColorStr='#b3e2f7', EndColorStr='#b3e2f7');border:1px solid #888;border-left:3px solid rgba(85,85,85,0.8);box-shadow:3px 3px 4px rgba(20,20,20,0.4)}.o_eportfolio_maps .o_map-epmst-blue3 h4,.o_eportfolio_maps .o_map-epmst-blue3 .o_cal .fc-header-title h2,.o_cal .fc-header-title .o_eportfolio_maps .o_map-epmst-blue3 h2{color:#444}.o_eportfolio_maps .o_map-epmst-blue3 .panel-body,.o_eportfolio_maps .o_map-epmst-blue3 td,.o_eportfolio_maps .o_map-epmst-blue3 a{color:#000}.o_eportfolio_map.o_map-epmst-blue3{background:#b3e2f7;background:#b3e2f7 -webkit-gradient(linear, 37% 20%, 53% 100%, from(#b3e2f7), to(#b3e2f7));background:#b3e2f7 -moz-linear-gradient(43% 71% 101deg, #b3e2f7, #b3e2f7);background:#b3e2f7 -o-linear-gradient(#b3e2f7, #b3e2f7);filter:progid:DXImageTransform.Microsoft.gradient(startColorStr='#b3e2f7', EndColorStr='#b3e2f7');border:1px solid #888;border-left:3px solid rgba(85,85,85,0.8)}.o_eportfolio_maps .o_map-epmst-blue4{background:#dee7f7;background:#dee7f7 -webkit-gradient(linear, 37% 20%, 53% 100%, from(#dee7f7), to(#c1e9fd));background:#dee7f7 -moz-linear-gradient(43% 71% 101deg, #dee7f7, #c1e9fd);background:#dee7f7 -o-linear-gradient(#dee7f7, #c1e9fd);filter:progid:DXImageTransform.Microsoft.gradient(startColorStr='#dee7f7', EndColorStr='#c1e9fd');border:1px solid #888;border-left:3px solid rgba(85,85,85,0.8);box-shadow:3px 3px 4px rgba(20,20,20,0.4)}.o_eportfolio_maps .o_map-epmst-blue4 h4,.o_eportfolio_maps .o_map-epmst-blue4 .o_cal .fc-header-title h2,.o_cal .fc-header-title .o_eportfolio_maps .o_map-epmst-blue4 h2{color:#444}.o_eportfolio_maps .o_map-epmst-blue4 .panel-body,.o_eportfolio_maps .o_map-epmst-blue4 td,.o_eportfolio_maps .o_map-epmst-blue4 a{color:#000}.o_eportfolio_map.o_map-epmst-blue4{background:#dee7f7;background:#dee7f7 -webkit-gradient(linear, 37% 20%, 53% 100%, from(#dee7f7), to(#c1e9fd));background:#dee7f7 -moz-linear-gradient(43% 71% 101deg, #dee7f7, #c1e9fd);background:#dee7f7 -o-linear-gradient(#dee7f7, #c1e9fd);filter:progid:DXImageTransform.Microsoft.gradient(startColorStr='#dee7f7', EndColorStr='#c1e9fd');border:1px solid #888;border-left:3px solid rgba(85,85,85,0.8)}.o_userbulk_changedcell{font-style:italic;font-weight:bold}.o_icon_qpool:before{content:"\f19c"}.o_sel_qpool_my_items:before{content:"\f007"}.o_sel_qpool_favorits:before{content:"\f02e"}.o_sel_qpool_collection:before{content:"\f03a"}.o_sel_qpool_pool:before{content:"\f1e1"}.o_sel_qpool_share:before{content:"\f0c0"}.o_icon_private_pool:before{content:"\f00d"}.o_icon_public_pool:before{content:"\f00c"}body.o_dmz{background:linear-gradient(to right, rgba(255,255,255,0) 0.2%, rgba(255,255,255,0.95) 60%, #fff 100%),url("../light/images/learn-bg.jpg");background-size:cover, cover}body.o_dmz #o_main_wrapper,body.o_dmz #o_main_wrapper #o_main_container{background:transparent}.o_login{padding-left:50%;padding-right:5%;padding-bottom:20px}.o_login h1{margin-bottom:40px}.o_login .o_infomessage_wrapper{background-color:#fff;border:1px solid #e3e3e3;border-radius:4px;padding:6px 12px}.o_login .o_infomessage_wrapper div.o_info,.o_login .o_infomessage_wrapper div.o_warning,.o_login .o_infomessage_wrapper div.o_note{margin:0}.o_login .o_login_providers{margin-bottom:6px;border-radius:4px;-webkit-box-shadow:0px 1px 20px rgba(0,0,0,0.25);box-shadow:0px 1px 20px rgba(0,0,0,0.25)}.o_login .o_login_providers a span{display:block;font-size:9px;padding-top:6px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.o_login .o_login_provider{background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;-webkit-box-shadow:0px 1px 20px rgba(0,0,0,0.25);box-shadow:0px 1px 20px rgba(0,0,0,0.25)}.o_login .o_login_form{position:relative;padding:10px 12px}.o_login .o_login_form .o_login_pwd{position:absolute;bottom:2em;right:12px}.o_login .o_login_register{display:block;line-height:2em;font-size:18px;text-align:center;color:#fff;background-color:#5bc0de;border-color:#46b8da;border-radius:4px;margin-top:16px;padding:10px 12px}.o_login .o_login_register:hover,.o_login .o_login_register:focus,.o_login .o_login_register:active,.o_login .o_login_register.active{color:#fff;background-color:#39b3d7;border-color:#269abc}.open .o_login .o_login_register.dropdown-toggle{color:#fff;background-color:#39b3d7;border-color:#269abc}.o_login .o_login_register:active,.o_login .o_login_register.active{background-image:none}.open .o_login .o_login_register.dropdown-toggle{background-image:none}.o_login .o_login_register.disabled,.o_login .o_login_register.disabled:hover,.o_login .o_login_register.disabled:focus,.o_login .o_login_register.disabled:active,.o_login .o_login_register.disabled.active,.o_login .o_login_register[disabled],.o_login .o_login_register[disabled]:hover,.o_login .o_login_register[disabled]:focus,.o_login .o_login_register[disabled]:active,.o_login .o_login_register[disabled].active,fieldset[disabled] .o_login .o_login_register,fieldset[disabled] .o_login .o_login_register:hover,fieldset[disabled] .o_login .o_login_register:focus,fieldset[disabled] .o_login .o_login_register:active,fieldset[disabled] .o_login .o_login_register.active{background-color:#5bc0de;border-color:#46b8da}.o_login .o_login_register .badge{color:#5bc0de;background-color:#fff}.o_login .o_login_register small{font-size:14px}@media (max-width: 991px){body.o_dmz{background:none}.o_login{padding-left:0;padding-right:0}.o_login .o_login_providers,.o_login .o_login_provider{-webkit-box-shadow:none;box-shadow:none}}.o_home_main h1{text-align:center}.o_home_main .o_icon_rss{line-height:20px;vertical-align:middle}.o_showall{font-size:12px;text-align:right;margin-bottom:5px}.o_portlet{position:relative;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,0.1);box-shadow:0 1px 1px rgba(0,0,0,0.1)}.o_portlet .o_header{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;padding:6px 12px;border-bottom:1px solid #ddd;background-color:#f5f5f5;border-top-right-radius:4px;border-top-left-radius:4px}.o_portlet .o_content{padding:6px 12px}.o_portlet .o_portlet_table{margin:-12px;margin-bottom:-6px;margin-top:0}.o_portlet .o_table_empty.o_info{padding:6px}.o_portlet .o_toolbox{position:absolute;top:-1px;right:-1px;z-index:2;background-color:#fff;border:1px solid #faebcc;border-top-right-radius:4px;border-top-left-radius:4px;border-bottom-right-radius:4px;border-bottom-left-radius:4px;padding:6px 12px}.o_portlet .o_toolbox div{display:inline}.o_portlet .o_edit_shim{position:absolute;height:100%;width:100%;z-index:1;background:#fcf8e3;opacity:0.8}.o_inactive .o_header a{float:right;margin-left:12px;margin-top:10px}.o_portlet_dyk_q{margin-top:5px;font-style:italic}.o_portlet_dyk_a{margin:5px 0}.o_portlet_dyk_next{margin:5px 0;text-align:right}.ui-widget{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:100%}.ui-widget-header{border-top:none;border-left:none;border-right:none;border-bottom:1px solid #eee;background:#fff;font-weight:bold}.ui-dialog{-webkit-box-shadow:0px 1px 5px -1px rgba(0,0,0,0.25);box-shadow:0px 1px 5px -1px rgba(0,0,0,0.25);background-color:#fefefe}.ui-dialog .ui-widget-header .ui-icon-closethick:before{content:"\f00d"}.ui-dialog .ui-widget-header .ui-button.ui-corner-all{border:none !important;background:#fff !important}.ui-dialog .ui-widget-content{border-color:#fff;padding:5px}.ui-dialog .ui-dialog-titlebar{padding:4px 30px 4px 7px;margin:-2px -2px 0 -2px;background-color:#eee}.ui-dialog.ui-corner-all{border-radius:4px}.ui-dialog.ui-widget-content{border:1px solid transparent}.ui-dialog.o_modal-ui div.ui-dialog-buttonpane{display:none}.ui-datepicker{-webkit-box-shadow:0px 1px 5px -1px rgba(0,0,0,0.15);box-shadow:0px 1px 5px -1px rgba(0,0,0,0.15)}.ui-datepicker .ui-widget-header .ui-corner-all,.ui-datepicker .ui-widget-header .ui-datepicker-next.ui-corner-all{border:none !important;background:#fff !important}.ui-datepicker .ui-widget-header .ui-icon.ui-icon-circle-triangle-e:before{content:"\f061";font-weight:normal;color:black}.ui-datepicker .ui-widget-header .ui-icon.ui-icon-circle-triangle-w:before{content:"\f060";font-weight:normal;color:black}.ui-datepicker .ui-widget-header .ui-icon.ui-icon-circle-triangle-e,.ui-datepicker .ui-widget-header .ui-icon.ui-icon-circle-triangle-w{font-family:'FontAwesome';display:inline-block;background-image:none;background-position:0 0;font-weight:normal;text-indent:0;color:white}.ui-datepicker .ui-widget-header .ui-datepicker .ui-datepicker-prev-hover,.ui-datepicker .ui-widget-header .ui-datepicker .ui-datepicker-next-hover{top:2px}.ui-datepicker .ui-state-default{background:#eee}.ui-datepicker .ui-state-highlight,.ui-datepicker .ui-widget-content .ui-state-highlight{border:1px solid #357ebd;background:#428bca;color:#fff}.ui-datepicker.ui-corner-all{border-radius:4px}.ui-datepicker.ui-widget-content{border:1px solid transparent}