From 79d2a5efb1c24736566ab50ea8db98c214eb5508 Mon Sep 17 00:00:00 2001 From: Uwe Steinmann Date: Mon, 19 Apr 2021 15:53:04 +0200 Subject: [PATCH 1/2] new theme based on bootstrap 4 --- views/bootstrap4/class.Bootstrap4.php | 3516 +++++++ views/bootstrap4/styles/application.css | 405 + views/bootstrap4/styles/application.js | 1425 +++ views/bootstrap4/styles/seeddms.css | 10899 ++++++++++++++++++++++ views/bootstrap4/styles/styles.css | 51 + 5 files changed, 16296 insertions(+) create mode 100644 views/bootstrap4/class.Bootstrap4.php create mode 100644 views/bootstrap4/styles/application.css create mode 100644 views/bootstrap4/styles/application.js create mode 100644 views/bootstrap4/styles/seeddms.css create mode 100644 views/bootstrap4/styles/styles.css diff --git a/views/bootstrap4/class.Bootstrap4.php b/views/bootstrap4/class.Bootstrap4.php new file mode 100644 index 000000000..83ce4efdd --- /dev/null +++ b/views/bootstrap4/class.Bootstrap4.php @@ -0,0 +1,3516 @@ +extraheader = array('js'=>'', 'css'=>'', 'favicon'=>''); + $this->footerjs = array(); + $this->nonces = array(); + } + + /** + * Add javascript to an internal array which is output at the + * end of the page within a document.ready() function. + * + * @param string $script javascript to be added + */ + function addFooterJS($script) { /* {{{ */ + $this->footerjs[] = $script; + } /* }}} */ + + function htmlStartPage($title="", $bodyClass="", $base="", $httpheader=array()) { /* {{{ */ + if(1 || method_exists($this, 'js')) { + /* We still need unsafe-eval, because printDocumentChooserHtml and + * printFolderChooserHtml will include a javascript file with ajax + * which is evaluated by jquery + * worker-src blob: is needed for cytoscape + * X-WebKit-CSP is deprecated, Chrome understands Content-Security-Policy + * since version 25+ + * X-Content-Security-Policy is deprecated, Firefox understands + * Content-Security-Policy since version 23+ + * 'worker-src blob:' is needed for cytoscape + */ + $csp_rules = ''; + $csp_rules .= "script-src 'self' 'unsafe-eval'"; + if($this->nonces) { + $csp_rules .= " 'nonce-".implode("' 'nonce-", $this->nonces)."'"; + } + $csp_rules .= ";"; + $csp_rules .= " worker-src blob:;"; + //$csp_rules .= "style-src 'self';"; + /* Do not allow to embed myself into frames on foreigns pages */ + $csp_rules .= " frame-ancestors 'self';"; + foreach (array("X-WebKit-CSP", "X-Content-Security-Policy", "Content-Security-Policy") as $csp) { + header($csp . ": " . $csp_rules); + } + } + header('X-Content-Type-Options: nosniff'); + header('Strict-Transport-Security: max-age=15768000; includeSubDomains; preload'); + if($httpheader) { + foreach($httpheader as $name=>$value) { + header($name . ": " . $value); + } + } + $hookObjs = $this->getHookObjects('SeedDMS_View_Bootstrap'); + foreach($hookObjs as $hookObj) { + if (method_exists($hookObj, 'startPage')) { + $hookObj->startPage($this); + } + } + echo "\n"; + echo "\n\n"; + echo "\n"; + echo ''."\n"; + if($base) + echo ''."\n"; + elseif($this->baseurl) + echo ''."\n"; + $sitename = trim(strip_tags($this->params['sitename'])); + if($this->params['session']) + echo ''."\n"; + $parenttheme = 'bootstrap'; + echo ''."\n"; + echo ''."\n"; + echo ''."\n"; + echo ''."\n"; + echo ''."\n"; + echo ''."\n"; + echo ''."\n"; + echo ''."\n"; + echo ''."\n"; + if($this->extraheader['css']) + echo $this->extraheader['css']; + if(method_exists($this, 'css')) + echo ''."\n"; + + echo ''."\n"; + if($this->extraheader['js']) + echo $this->extraheader['js']; + echo ''."\n"; + echo ''."\n"; + echo ''."\n"; + echo ''."\n"; + echo ''."\n"; + echo ''."\n"; + echo ''."\n"; + echo ''."\n"; + if(!empty($this->extraheader['favicon'])) + echo $this->extraheader['favicon']; + else { + echo ''."\n"; + echo ''."\n"; + } + if($this->params['session'] && $this->params['session']->getSu()) { +?> + +".(strlen($sitename)>0 ? $sitename : "SeedDMS").(strlen($title)>0 ? ": " : "").htmlspecialchars($title)."\n"; + echo "\n"; + echo "0 ? " class=\"".$bodyClass."\"" : "").">\n"; + if($this->params['session'] && $flashmsg = $this->params['session']->getSplashMsg()) { + $this->params['session']->clearSplashMsg(); + echo "
".$flashmsg['msg']."
\n"; + } + echo "

".getMLText('recent_uploads')."

\n"; + foreach($hookObjs as $hookObj) { + if (method_exists($hookObj, 'startBody')) { + $hookObj->startBody($this); + } + } + } /* }}} */ + + function htmlAddHeader($head, $type='js') { /* {{{ */ + $this->extraheader[$type] .= $head; + } /* }}} */ + + function htmlAddJsHeader($script) { /* {{{ */ + $nonce = createNonce(); + $this->nonces[] = $nonce; + $this->extraheader['js'] .= ''."\n"; + } /* }}} */ + + function htmlEndPage($nofooter=false) { /* {{{ */ + if(!$nofooter) { + $hookObjs = $this->getHookObjects('SeedDMS_View_Bootstrap'); + $html = $this->footNote(); + foreach($hookObjs as $hookObj) { + if (method_exists($hookObj, 'footNote')) { + $html = $hookObj->footNote($this, $html); + } + } + echo $html; + if($this->params['showmissingtranslations']) { + $this->missingLanguageKeys(); + } + } + $parenttheme = 'bootstrap'; + echo ''."\n"; + //echo ''."\n"; + echo ''."\n"; + echo ''."\n"; + echo ''."\n"; + foreach(array('de', 'es', 'ar', 'el', 'bg', 'ru', 'hr', 'hu', 'ko', 'pl', 'ro', 'sk', 'tr', 'uk', 'ca', 'nl', 'fi', 'cs', 'it', 'fr', 'sv', 'sl', 'pt-BR', 'zh-CN', 'zh-TW') as $lang) + echo ''."\n"; + echo ''."\n"; + echo ''."\n"; + parse_str($_SERVER['QUERY_STRING'], $tmp); + $tmp['action'] = 'webrootjs'; + if(isset($tmp['formtoken'])) + unset($tmp['formtoken']); + echo ''."\n"; + echo ''."\n"; + if($this->params['enablemenutasks'] && isset($this->params['user']) && $this->params['user']) { + $this->addFooterJS('SeedDMSTask.run();'); + } + if($this->params['enabledropfolderlist'] && isset($this->params['user']) && $this->params['user']) { + $this->addFooterJS("SeedDMSTask.add({name: 'dropfolder', interval: 30, func: function(){\$('#menu-dropfolder > div.ajax').trigger('update', {folderid: seeddms_folder});}});"); + } + if($this->footerjs) { + $jscode = "$(document).ready(function () {\n"; + foreach($this->footerjs as $script) { + $jscode .= $script."\n"; + } + $jscode .= "});\n"; + $hashjs = md5($jscode); + if(!is_dir($this->params['cachedir'].'/js')) { + SeedDMS_Core_File::makeDir($this->params['cachedir'].'/js'); + } + if(is_dir($this->params['cachedir'].'/js')) { + file_put_contents($this->params['cachedir'].'/js/'.$hashjs.'.js', $jscode); + } + $tmp['action'] = 'footerjs'; + $tmp['hashjs'] = $hashjs; + echo ''."\n"; + } + if(method_exists($this, 'js')) { + parse_str($_SERVER['QUERY_STRING'], $tmp); + $tmp['action'] = 'js'; + echo ''."\n"; + } + echo "\n\n"; + } /* }}} */ + + function webrootjs() { /* {{{ */ + header('Content-Type: application/javascript; charset=UTF-8'); + echo "var seeddms_absbaseprefix=\"".$this->params['absbaseprefix']."\";\n"; + echo "var seeddms_webroot=\"".$this->params['settings']->_httpRoot."\";\n"; + /* Place the current folder id in a js variable, just in case some js code + * needs it, e.g. for reloading parts of the page via ajax. + */ + if(!empty($_REQUEST['folderid'])) + echo "var seeddms_folder=".(int) $_REQUEST['folderid'].";\n"; + else + echo "var seeddms_folder=0;\n"; + } /* }}} */ + + function footerjs() { /* {{{ */ + header('Content-Type: application/javascript'); + if(file_exists($this->params['cachedir'].'/js/'.$_GET['hashjs'].'.js')) { + readfile($this->params['cachedir'].'/js/'.$_GET['hashjs'].'.js'); + } + } /* }}} */ + + function missingLanguageKeys() { /* {{{ */ + global $MISSING_LANG, $LANG; + if($MISSING_LANG) { + echo '
'."\n"; + $this->rowStart(); + $this->columnStart(12); + echo $this->errorMsg("This page contains missing translations in the selected language. Please help to improve SeedDMS and provide the translation."); + echo ""; + echo "\n"; + foreach($MISSING_LANG as $key=>$lang) { + echo ""; + } + echo "
Keyengl. TextYour translation
".$key."".(isset($LANG['en_GB'][$key]) ? $LANG['en_GB'][$key] : '')."
"; + echo "
There are missing translations on this page!
Please check the bottom of the page.
\n"; + echo "
\n"; + $this->columnEnd(); + $this->rowEnd(); + } + } /* }}} */ + + function footNote() { /* {{{ */ + $html = "
\n"; + $html .= '
'."\n"; + + if ($this->params['printdisclaimer']){ + $html .= "
".getMLText("disclaimer")."
"; + } + + if (isset($this->params['footnote']) && strlen((string)$this->params['footnote'])>0) { + $html .= "
".(string)$this->params['footnote']."
"; + } + $html .= "
\n"; + $html .= "
\n"; + + return $html; + } /* }}} */ + + function contentStart() { /* {{{ */ + echo "
\n"; + echo "
\n"; + } /* }}} */ + + function contentEnd() { /* {{{ */ + echo "
\n"; + echo "
\n"; + } /* }}} */ + + function globalBanner() { /* {{{ */ + echo "\n"; + } /* }}} */ + + function globalNavigation($folder=null) { /* {{{ */ + $dms = $this->params['dms']; + $accessobject = $this->params['accessobject']; + echo "\n"; + return; + } /* }}} */ + + function getFolderPathHTML($folder, $tagAll=false, $document=null) { /* {{{ */ + $path = $folder->getPath(); + $txtpath = ""; + for ($i = 0; $i < count($path); $i++) { + $txtpath .= "
  • "; + if ($i +1 < count($path)) { + $txtpath .= "getID()."&showtree=".showtree()."\" data-droptarget=\"folder_".$path[$i]->getID()."\" rel=\"folder_".$path[$i]->getID()."\" class=\"table-row-folder droptarget\" data-uploadformtoken=\"".createFormKey('')."\" formtoken=\"".createFormKey('')."\">". + htmlspecialchars($path[$i]->getName()).""; + } + else { + $txtpath .= ($tagAll ? "getID()."&showtree=".showtree()."\">". + htmlspecialchars($path[$i]->getName())."" : htmlspecialchars($path[$i]->getName())); + } + } + if($document) + $txtpath .= "
  • getId()."\">".htmlspecialchars($document->getName())."
  • "; + + return ''; + } /* }}} */ + + function pageNavigation($pageTitle, $pageType=null, $extra=null) { /* {{{ */ + + if ($pageType!=null && strcasecmp($pageType, "noNav")) { + echo "\n"; + if($pageType == "view_folder" || $pageType == "view_document") + echo $pageTitle."\n"; + } else { + echo "".$pageTitle."\n"; + } + + return; + } /* }}} */ + + protected function showNavigationBar($menuitems, $options=array()) { /* {{{ */ + $content = ''; + $content .= "\n"; + foreach($menuitems as $menuitem) { + if(!empty($menuitem['children'])) { + $content .= "
  • \n"; + $content .= " ".$menuitem['label']."\n"; + $content .= "
    \n"; + foreach($menuitem['children'] as $submenuitem) { + if(!empty($submenuitem['children'])) { + $content .= "
    \n"; + $content .= " ".$submenuitem['label']."\n"; + $content .= "
    \n"; + foreach($submenuitem['children'] as $subsubmenuitem) { + if(!empty($submenuitem['divider'])) { + $content .= "
    \n"; + } else { + $content .= " "; + } + } + $content .= "
    \n"; + $content .= "
    \n"; + } else { + if(!empty($submenuitem['divider'])) { + $content .= "
    \n"; + } else { + $content .= "
    \n"; + } + } + } + $content .= "
    \n"; + } else { + if(!empty($menuitem['divider'])) { + $content .= "
    \n"; + } else { + $content .= "
  • \n"; + $content .= ""; + $content .= "
  • "; + } + } + } + $content .= "\n"; + echo $content; + } /* }}} */ + + protected function showNavigationListWithBadges($menuitems, $options=array()) { /* {{{ */ + $content = ''; + $content .= "\n"; + foreach($menuitems as $menuitem) { + $content .= "
  • \n"; + $content .= ' "; + $content .= "
  • \n"; + } + + $content .= "\n"; + echo $content; + } /* }}} */ + + protected function showButtonwithMenu($button, $options=array()) { /* {{{ */ + $content = ''; + $content .= ' +
    + +'; + echo $content; + } /* }}} */ + + private function folderNavigationBar($folder) { /* {{{ */ + $dms = $this->params['dms']; + $accessobject = $this->params['accessobject']; + if (!is_object($folder) || !$folder->isType('folder')) { + self::showNavigationBar(array()); + return; + } + $accessMode = $folder->getAccessMode($this->params['user']); + $folderID = $folder->getID(); + $menuitems = array(); + + if ($accessMode == M_READ && !$this->params['user']->isGuest()) { + if ($accessobject->check_view_access('FolderNotify')) + $menuitems['edit_folder_notify'] = array('link'=>"../out/out.FolderNotify.php?folderid=".$folderID."&showtree=".showtree(), 'label'=>getMLText('edit_folder_notify')); + } + else if ($accessMode >= M_READWRITE) { + if ($accessobject->check_view_access('AddSubFolder')) + $menuitems['add_subfolder'] = array('link'=>"../out/out.AddSubFolder.php?folderid=". $folderID ."&showtree=".showtree(), 'label'=>getMLText('add_subfolder')); + if ($accessobject->check_view_access('AddDocument')) + $menuitems['add_document'] = array('link'=>"../out/out.AddDocument.php?folderid=". $folderID ."&showtree=".showtree(), 'label'=>getMLText('add_document')); + if(0 && $this->params['enablelargefileupload']) + $menuitems['add_multiple_documents'] = array('link'=>"../out/out.AddMultiDocument.php?folderid=". $folderID ."&showtree=".showtree(), 'label'=>getMLText('add_multiple_documents')); + $menuitems['edit_folder_props'] = array('link'=>"../out/out.EditFolder.php?folderid=". $folderID ."&showtree=".showtree(), 'label'=>getMLText('edit_folder_props')); + if ($folderID != $this->params['rootfolderid'] && $folder->getParent()) + $menuitems['move_folder'] = array('link'=>"../out/out.MoveFolder.php?folderid=". $folderID ."&showtree=".showtree(), 'label'=>getMLText('move_folder')); + + if ($accessMode == M_ALL) { + if ($folderID != $this->params['rootfolderid'] && $folder->getParent()) + if ($accessobject->check_view_access('RemoveFolder')) + $menuitems['rm_folder'] = array('link'=>"../out/out.RemoveFolder.php?folderid=". $folderID ."&showtree=".showtree(), 'label'=>getMLText('rm_folder')); + } + if ($accessMode == M_ALL) { + if ($accessobject->check_view_access('FolderAccess')) + $menuitems['edit_folder_access'] = array('link'=>"../out/out.FolderAccess.php?folderid=".$folderID."&showtree=".showtree(), 'label'=>getMLText('edit_folder_access')); + } + if ($accessobject->check_view_access('FolderNotify')) + $menuitems['edit_existing_notify'] = array('link'=>"../out/out.FolderNotify.php?folderid=". $folderID ."&showtree=". showtree(), 'label'=>getMLText('edit_existing_notify')); + } + if ($this->params['user']->isAdmin() && $this->params['enablefullsearch']) { + $menuitems['index_folder'] = array('link'=>"../out/out.Indexer.php?folderid=". $folderID."&showtree=".showtree(), 'label'=>getMLText('index_folder')); + } + + /* Check if hook exists because otherwise callHook() will override $menuitems */ + if($this->hasHook('folderNavigationBar')) + $menuitems = $this->callHook('folderNavigationBar', $folder, $menuitems); + + self::showNavigationBar($menuitems); + } /* }}} */ + + private function documentNavigationBar($document) { /* {{{ */ + $accessobject = $this->params['accessobject']; + $accessMode = $document->getAccessMode($this->params['user']); + $docid=".php?documentid=" . $document->getID(); + $menuitems = array(); + + if ($accessMode >= M_READWRITE) { + if (!$document->isLocked()) { + if($accessobject->check_controller_access('UpdateDocument')) + $menuitems['update_document'] = array('link'=>"../out/out.UpdateDocument".$docid, 'label'=>getMLText('update_document')); + if($accessobject->check_controller_access('LockDocument')) + $menuitems['lock_document'] = array('link'=>"../op/op.LockDocument".$docid, 'label'=>getMLText('lock_document')); + if($accessobject->check_controller_access('EditDocument')) + $menuitems['edit_document_props'] = array('link'=>"../out/out.EditDocument".$docid , 'label'=>getMLText('edit_document_props')); + $menuitems['move_document'] = array('link'=>"../out/out.MoveDocument".$docid, 'label'=>getMLText('move_document')); + } + else { + $lockingUser = $document->getLockingUser(); + if (($lockingUser->getID() == $this->params['user']->getID()) || ($document->getAccessMode($this->params['user']) == M_ALL)) { + if($accessobject->check_controller_access('UpdateDocument')) + $menuitems['update_document'] = array('link'=>"../out/out.UpdateDocument".$docid, 'label'=>getMLText('update_document')); + if($accessobject->check_controller_access('UnlockDocument')) + $menuitems['unlock_document'] = array('link'=>"../op/op.UnlockDocument".$docid, 'label'=>getMLText('unlock_document')); + if($accessobject->check_controller_access('EditDocument')) + $menuitems['edit_document_props'] = array('link'=>"../out/out.EditDocument".$docid, 'label'=>getMLText('edit_document_props')); + $menuitems['move_document'] = array('link'=>"../out/out.MoveDocument".$docid, 'label'=>getMLText('move_document')); + } + } + if($accessobject->maySetExpires()) { + if ($accessobject->check_view_access('SetExpires')) + $menuitems['expires'] = array('link'=>"../out/out.SetExpires".$docid, 'label'=>getMLText('expires')); + } + } + if ($accessMode == M_ALL) { + if ($accessobject->check_view_access('RemoveDocument')) + $menuitems['rm_document'] = array('link'=>"../out/out.RemoveDocument".$docid, 'label'=>getMLText('rm_document')); + if ($accessobject->check_view_access('DocumentAccess')) + $menuitems['edit_document_access'] = array('link'=>"../out/out.DocumentAccess". $docid, 'label'=>getMLText('edit_document_access')); + } + if ($accessMode >= M_READ && !$this->params['user']->isGuest()) { + if ($accessobject->check_view_access('DocumentNotify')) + $menuitems['edit_existing_notify'] = array('link'=>"../out/out.DocumentNotify". $docid, 'label'=>getMLText('edit_existing_notify')); + } + if ($this->params['user']->isAdmin()) { + $menuitems['transfer_document'] = array('link'=>"../out/out.TransferDocument". $docid, 'label'=>getMLText('transfer_document')); + } + + /* Check if hook exists because otherwise callHook() will override $menuitems */ + if($this->hasHook('documentNavigationBar')) + $menuitems = $this->callHook('documentNavigationBar', $document, $menuitems); + + /* Do not use $this->callHook() because $menuitems must be returned by the hook + * or left unchanged + */ + /* + $hookObjs = $this->getHookObjects(); + foreach($hookObjs as $hookObj) { + if (method_exists($hookObj, 'documentNavigationBar')) { + $menuitems = $hookObj->documentNavigationBar($this, $document, $menuitems); + } + } + */ + + self::showNavigationBar($menuitems); + } /* }}} */ + + private function accountNavigationBar() { /* {{{ */ + $accessobject = $this->params['accessobject']; + + $menuitems = array(); + if ($this->params['user']->isAdmin() || !$this->params['disableselfedit']) + $menuitems['edit_user_details'] = array('link'=>"../out/out.EditUserData.php", 'label'=>getMLText('edit_user_details')); + + if (!$this->params['user']->isAdmin()) + $menuitems['edit_default_keywords'] = array('link'=>"../out/out.UserDefaultKeywords.php", 'label'=>getMLText('edit_default_keywords')); + + $menuitems['edit_notify'] = array('link'=>"../out/out.ManageNotify.php", 'label'=>getMLText('edit_existing_notify')); + + if ($this->params['enableusersview']){ + if ($accessobject->check_view_access('UsrView')) + $menuitems['users'] = array('link'=>"../out/out.UsrView.php", 'label'=>getMLText('users')); + if ($accessobject->check_view_access('GroupView')) + $menuitems['groups'] = array('link'=>"../out/out.GroupView.php", 'label'=>getMLText('groups')); + } + + /* Check if hook exists because otherwise callHook() will override $menuitems */ + if($this->hasHook('accountNavigationBar')) + $menuitems = $this->callHook('accountNavigationBar', $menuitems); + + self::showNavigationBar($menuitems); + + } /* }}} */ + + private function myDocumentsNavigationBar() { /* {{{ */ + $accessobject = $this->params['accessobject']; + + $menuitems = array(); + $menuitems['inprocess'] = array('link'=>"../out/out.MyDocuments.php?inProcess=1", 'label'=>getMLText('documents_in_process')); + $menuitems['all_documents'] = array('link'=>"../out/out.MyDocuments.php", 'label'=>getMLText('all_documents')); + if($this->params['workflowmode'] == 'traditional' || $this->params['workflowmode'] == 'traditional_only_approval') { + if ($accessobject->check_view_access('ReviewSummary')) + $menuitems['review_summary'] = array('link'=>"../out/out.ReviewSummary.php", 'label'=>getMLText('review_summary')); + if ($accessobject->check_view_access('ApprovalSummary')) + $menuitems['approval_summary'] = array('link'=>"../out/out.ApprovalSummary.php", 'label'=>getMLText('approval_summary')); + } else { + if ($accessobject->check_view_access('WorkflowSummary')) + $menuitems['workflow_summary'] = array('link'=>"../out/out.WorkflowSummary.php", 'label'=>getMLText('workflow_summary')); + } + + /* Check if hook exists because otherwise callHook() will override $menuitems */ + if($this->hasHook('mydocumentsNavigationBar')) + $menuitems = $this->callHook('mydocumentsNavigationBar', $menuitems); + + self::showNavigationBar($menuitems); + + } /* }}} */ + + private function adminToolsNavigationBar() { /* {{{ */ + $accessobject = $this->params['accessobject']; + $settings = $this->params['settings']; + + $menuitems = array(); + if($accessobject->check_view_access(array('UsrMgr', 'GroupMgr', 'UserList'))) { + $menuitems['user_group_management'] = array('link'=>"#", 'label'=>getMLText('user_group_management')); + if ($accessobject->check_view_access('UsrMgr')) + $menuitems['user_group_management']['children']['user_management'] = array('link'=>"../out/out.UsrMgr.php", 'label'=>getMLText('user_management')); + if ($accessobject->check_view_access('GroupMgr')) + $menuitems['user_group_management']['children']['group_management'] = array('link'=>"../out/out.GroupMgr.php", 'label'=>getMLText('group_management')); + if ($accessobject->check_view_access('UserList')) + $menuitems['user_group_management']['children']['user_list'] = array('link'=>"../out/out.UserList.php", 'label'=>getMLText('user_list')); + } + + if($accessobject->check_view_access(array('DefaultKeywords', 'Categories', 'AttributeMgr', 'WorkflowMgr', 'WorkflowStatesMgr', 'WorkflowActionsMgr'))) { + $menuitems['definitions'] = array('link'=>"#", 'label'=>getMLText('definitions')); + if ($accessobject->check_view_access('DefaultKeywords')) + $menuitems['definitions']['children']['default_keywords'] = array('link'=>"../out/out.DefaultKeywords.php", 'label'=>getMLText('global_default_keywords')); + if ($accessobject->check_view_access('Categories')) + $menuitems['definitions']['children']['document_categories'] = array('link'=>"../out/out.Categories.php", 'label'=>getMLText('global_document_categories')); + if ($accessobject->check_view_access('AttributeMgr')) + $menuitems['definitions']['children']['attribute_definitions'] = array('link'=>"../out/out.AttributeMgr.php", 'label'=>getMLText('global_attributedefinitions')); + if($this->params['workflowmode'] == 'advanced') { + if ($accessobject->check_view_access('WorkflowMgr')) + $menuitems['definitions']['children']['workflows'] = array('link'=>"../out/out.WorkflowMgr.php", 'label'=>getMLText('global_workflows')); + if ($accessobject->check_view_access('WorkflowStatesMgr')) + $menuitems['definitions']['children']['workflow_states'] = array('link'=>"../out/out.WorkflowStatesMgr.php", 'label'=>getMLText('global_workflow_states')); + if ($accessobject->check_view_access('WorkflowActionsMgr')) + $menuitems['definitions']['children']['workflow_actions'] = array('link'=>"../out/out.WorkflowActionsMgr.php", 'label'=>getMLText('global_workflow_actions')); + } + } + + if($this->params['enablefullsearch']) { + if($accessobject->check_view_access(array('Indexer', 'CreateIndex', 'IndexInfo'))) { + $menuitems['fulltext'] = array('link'=>"#", 'label'=>getMLText('fullsearch')); + if ($accessobject->check_view_access('Indexer')) + $menuitems['fulltext']['children']['update_fulltext_index'] = array('link'=>"../out/out.Indexer.php", 'label'=>getMLText('update_fulltext_index')); + if ($accessobject->check_view_access('CreateIndex')) + $menuitems['fulltext']['children']['create_fulltext_index'] = array('link'=>"../out/out.CreateIndex.php", 'label'=>getMLText('create_fulltext_index')); + if ($accessobject->check_view_access('IndexInfo')) + $menuitems['fulltext']['children']['fulltext_info'] = array('link'=>"../out/out.IndexInfo.php", 'label'=>getMLText('fulltext_info')); + } + } + + if($accessobject->check_view_access(array('BackupTools', 'LogManagement'))) { + $menuitems['backup_log_management'] = array('link'=>"#", 'label'=>getMLText('backup_log_management')); + if ($accessobject->check_view_access('BackupTools')) + $menuitems['backup_log_management']['children'][] = array('link'=>"../out/out.BackupTools.php", 'label'=>getMLText('backup_tools')); + if ($this->params['logfileenable']) + if ($accessobject->check_view_access('LogManagement')) + $menuitems['backup_log_management']['children'][] = array('link'=>"../out/out.LogManagement.php", 'label'=>getMLText('log_management')); + } + + if($accessobject->check_view_access(array('ImportFS', 'ImportUsers', 'Statistic', 'Charts', 'Timeline', 'ObjectCheck', 'ExtensionMgr', 'Info'))) { + $menuitems['misc'] = array('link'=>"#", 'label'=>getMLText('misc')); + if ($accessobject->check_view_access('ImportFS')) + $menuitems['misc']['children']['import_fs'] = array('link'=>"../out/out.ImportFS.php", 'label'=>getMLText('import_fs')); + if ($accessobject->check_view_access('ImportUsers')) + $menuitems['misc']['children']['import_users'] = array('link'=>"../out/out.ImportUsers.php", 'label'=>getMLText('import_users')); + if ($accessobject->check_view_access('Statistic')) + $menuitems['misc']['children']['folders_and_documents_statistic'] = array('link'=>"../out/out.Statistic.php", 'label'=>getMLText('folders_and_documents_statistic')); + if ($accessobject->check_view_access('Charts')) + $menuitems['misc']['children']['charts'] = array('link'=>"../out/out.Charts.php", 'label'=>getMLText('charts')); + if ($accessobject->check_view_access('Timeline')) + $menuitems['misc']['children']['timeline'] = array('link'=>"../out/out.Timeline.php", 'label'=>getMLText('timeline')); + if ($accessobject->check_view_access('ObjectCheck')) + $menuitems['misc']['children']['objectcheck'] = array('link'=>"../out/out.ObjectCheck.php", 'label'=>getMLText('objectcheck')); + if ($accessobject->check_view_access('ExpiredDocuments')) + $menuitems['misc']['children']['documents_expired'] = array('link'=>"../out/out.ExpiredDocuments.php", 'label'=>getMLText('documents_expired')); + if ($accessobject->check_view_access('ExtensionMgr')) + $menuitems['misc']['children']['extension_manager'] = array('link'=>"../out/out.ExtensionMgr.php", 'label'=>getMLText('extension_manager')); + if ($accessobject->check_view_access('ClearCache')) + $menuitems['misc']['children']['clear_cache'] = array('link'=>"../out/out.ClearCache.php", 'label'=>getMLText('clear_cache')); + if ($accessobject->check_view_access('Info')) + $menuitems['misc']['children']['version_info'] = array('link'=>"../out/out.Info.php", 'label'=>getMLText('version_info')); + } + + /* Check if hook exists because otherwise callHook() will override $menuitems */ + if($this->hasHook('admintoolsNavigationBar')) + $menuitems = $this->callHook('admintoolsNavigationBar', $menuitems); + + self::showNavigationBar($menuitems); + + } /* }}} */ + + private function calendarOldNavigationBar($d){ /* {{{ */ + $accessobject = $this->params['accessobject']; + $ds="&day=".$d[0]."&month=".$d[1]."&year=".$d[2]; + echo "".getMLText("calendar")."\n"; + echo "
    \n"; + echo "\n"; + echo "
    \n"; + return; + + } /* }}} */ + + private function calendarNavigationBar($d){ /* {{{ */ + $accessobject = $this->params['accessobject']; + + $menuitems = array(); + if (!$this->params['user']->isGuest()) + $menuitems['addevent'] = array('link'=>"../out/out.AddEvent.php", 'label'=>getMLText('add_event')); + + /* Check if hook exists because otherwise callHook() will override $menuitems */ + if($this->hasHook('calendarNavigationBar')) + $menuitems = $this->callHook('calendarNavigationBar', $menuitems); + + self::showNavigationBar($menuitems); + + } /* }}} */ + + function pageList($pageNumber, $totalPages, $baseURI, $params) { /* {{{ */ + + $maxpages = 25; // skip pages when more than this is shown + $range = 5; // pages left and right of current page + if (!is_numeric($pageNumber) || !is_numeric($totalPages) || $totalPages<2) { + return; + } + + // Construct the basic URI based on the $_GET array. One could use a + // regular expression to strip out the pg (page number) variable to + // achieve the same effect. This seems to be less haphazard though... + $resultsURI = $baseURI; + unset($params['pg']); + $first=true; + if($params) { + $resultsURI .= '?'.http_build_query($params); + $first=false; + } + + echo ""; + + return; + } /* }}} */ + + function contentContainer($content) { /* {{{ */ + echo "
    \n"; + echo $content; + echo "
    \n"; + return; + } /* }}} */ + + function contentContainerStart($class='', $id='') { /* {{{ */ + echo "
    \n"; + return; + } /* }}} */ + + function contentContainerEnd() { /* {{{ */ + + echo "
    \n"; + return; + } /* }}} */ + + function contentHeading($heading, $noescape=false) { /* {{{ */ + + if($noescape) + echo "".$heading."\n"; + else + echo "".htmlspecialchars($heading)."\n"; + return; + } /* }}} */ + + function contentSubHeading($heading, $first=false) { /* {{{ */ + +// echo "
    ".htmlspecialchars($heading)."
    \n"; + echo "
    ".$heading."
    "; + return; + } /* }}} */ + + function rowStart() { /* {{{ */ + echo "
    \n"; + return; + } /* }}} */ + + function rowEnd() { /* {{{ */ + echo "
    \n"; + return; + } /* }}} */ + + function columnStart($width=6) { /* {{{ */ + echo "
    \n"; + return; + } /* }}} */ + + function columnEnd() { /* {{{ */ + echo "
    \n"; + return; + } /* }}} */ + + function formField($title, $value, $params=array()) { /* {{{ */ + if($title !== null) { + echo "
    "; + echo " "; + echo "
    "; + } + if(isset($params['field_wrap'][0])) + echo $params['field_wrap'][0]; + if(is_string($value)) { + echo $value; + } elseif(is_array($value)) { + switch($value['element']) { + case 'select': + echo '"; + if(isset($value['options']) && is_array($value['options'])) { + foreach($value['options'] as $val) { + if(is_string($val)) { + echo ''; + } elseif(is_array($val)) { + echo ''; + } + } + } + echo ''; + break; + case 'textarea': + echo '".(!empty($value['value']) ? $value['value'] : '').""; + break; + case 'input': + default: + switch($value['type']) { + case 'checkbox': + echo '
    '; + echo '"; + echo "
    "; + break; + default: + echo '"; + break; + } + break; + } + } + if(isset($params['field_wrap'][1])) + echo $params['field_wrap'][1]; + if($title !== null) { + echo "
    "; + echo "
    "; + } + return; + } /* }}} */ + + function formSubmit($value, $name='', $target='') { /* {{{ */ +// echo "
    \n"; + if(is_string($value)) { + echo "\n"; + } else { + if(is_array($value)) { + foreach($value as $i=>$v) + echo "\n"; + } + } +// echo "
    \n"; + } /* }}} */ + + function getMimeIcon($fileType) { /* {{{ */ + // for extension use LOWER CASE only + $icons = array(); + $icons["txt"] = "text-x-preview.svg"; + $icons["text"] = "text-x-preview.svg"; + $icons["tex"] = "text-x-preview.svg"; + $icons["doc"] = "office-document.svg"; + $icons["dot"] = "office-document.svg"; + $icons["docx"] = "office-document.svg"; + $icons["dotx"] = "office-document.svg"; + $icons["rtf"] = "office-document.svg"; + $icons["xls"] = "office-spreadsheet.svg"; + $icons["xlt"] = "office-spreadsheet.svg"; + $icons["xlsx"] = "office-spreadsheet.svg"; + $icons["xltx"] = "office-spreadsheet.svg"; + $icons["ppt"] = "office-presentation.svg"; + $icons["pot"] = "office-presentation.svg"; + $icons["pptx"] = "office-presentation.svg"; + $icons["potx"] = "office-presentation.svg"; + $icons["exe"] = "executable.svg"; + $icons["html"] = "web.svg"; + $icons["htm"] = "web.svg"; + $icons["gif"] = "image.svg"; + $icons["jpg"] = "image.svg"; + $icons["jpeg"] = "image.svg"; + $icons["bmp"] = "image.svg"; + $icons["png"] = "image.svg"; + $icons["tif"] = "image.svg"; + $icons["tiff"] = "image.svg"; + $icons["log"] = "text-x-preview.svg"; + $icons["midi"] = "audio.svg"; + $icons["pdf"] = "gnome-mime-application-pdf.svg"; + $icons["wav"] = "audio.svg"; + $icons["mp3"] = "audio.svg"; + $icons["m4a"] = "audio.svg"; + $icons["ogg"] = "audio.svg"; + $icons["opus"] = "audio.svg"; + $icons["c"] = "text-x-preview.svg"; + $icons["cpp"] = "text-x-preview.svg"; + $icons["h"] = "text-x-preview.svg"; + $icons["java"] = "text-x-preview.svg"; + $icons["py"] = "text-x-preview.svg"; + $icons["tar"] = "package.svg"; + $icons["gz"] = "package.svg"; + $icons["7z"] = "package.svg"; + $icons["bz"] = "package.svg"; + $icons["bz2"] = "package.svg"; + $icons["tgz"] = "package.svg"; + $icons["zip"] = "package.svg"; + $icons["rar"] = "package.svg"; + $icons["mpg"] = "video.svg"; + $icons["mp4"] = "video.svg"; + $icons["avi"] = "video.svg"; + $icons["webm"] = "video.svg"; + $icons["mkv"] = "video.svg"; + $icons["ods"] = "office-spreadsheet.svg"; + $icons["ots"] = "office-spreadsheet.svg"; + $icons["sxc"] = "office-spreadsheet.svg"; + $icons["stc"] = "office-spreadsheet.svg"; + $icons["odt"] = "office-document.svg"; + $icons["ott"] = "office-document.svg"; + $icons["sxw"] = "office-document.svg"; + $icons["stw"] = "office-document.svg"; + $icons["odp"] = "office-presentation.svg"; + $icons["otp"] = "office-presentation.svg"; + $icons["sxi"] = "office-presentation.svg"; + $icons["sti"] = "office-presentation.svg"; + $icons["odg"] = "office-drawing.svg"; + $icons["otg"] = "office-drawing.svg"; + $icons["sxd"] = "office-drawing.svg"; + $icons["std"] = "office-drawing.svg"; + $icons["odf"] = "ooo_formula.png"; + $icons["sxm"] = "ooo_formula.png"; + $icons["smf"] = "ooo_formula.png"; + $icons["mml"] = "ooo_formula.png"; + $icons["folder"] = "folder.svg"; + + $icons["default"] = "text-x-preview.svg"; //"default.png"; + + $ext = strtolower(substr($fileType, 1)); + if (isset($icons[$ext])) { + return $this->imgpath.$icons[$ext]; + } + else { + return $this->imgpath.$icons["default"]; + } + } /* }}} */ + + /** + * Get html for button opening a modal box + * + * @param array $config contains elements + * target: id of modal box + * remote: URL of data to be loaded into box + * title: text on button + * @return string + */ + function getModalBoxLink($config) { /* {{{ */ + $content = ''; + $content .= "$attrval) + $content .= ' '.$attrname.'="'.$attrval.'"'; + } + $content .= ">".$config['title']."…\n"; + return $content; + } /* }}} */ + + /** + * Get html for a modal box with buttons + * + * @param array $config contains elements + * id: id of modal box (must match target of getModalBoxLink()) + * title: title of modal box + * buttons: array of buttons, each having a title and an optional id + * @return string + */ + function getModalBox($config) { /* {{{ */ + $content = ''; + $content .= ' + +'; + return $content; + } /* }}} */ + + function printFileChooserJs() { /* {{{ */ +?> +$(document).ready(function() { + $(document).on('change', '.btn-file :file', function() { + var input = $(this), + numFiles = input.get(0).files ? input.get(0).files.length : 1, + label = input.val().replace(/\\/g, '/').replace(/.*\//, ''); + input.trigger('fileselect', [numFiles, label]); + }); + + $(document).on('fileselect', '.upload-file .btn-file :file', function(event, numFiles, label) { + var input = $(this).parents('.input-group').find(':text'), + log = numFiles > 1 ? numFiles + ' files selected' : label; + + if( input.length ) { + input.val(log); + } else { +// if( log ) alert(log); + } + }); +}); + +
    +
    + +
    + +
    +
    +
    +
    +'; + return $html; + } /* }}} */ + + function printFileChooser($varname='userfile', $multiple=false, $accept='') { /* {{{ */ + echo self::getFileChooserHtml($varname, $multiple, $accept); + } /* }}} */ + + function printDateChooser($defDate = '', $varName, $lang='', $dateformat='', $startdate='', $enddate='') { /* {{{ */ + echo self::getDateChooser($defDate, $varName, $lang, $dateformat, $startdate, $enddate); + } /* }}} */ + + function getDateChooser($defDate = '', $varName, $lang='', $dateformat='', $startdate='', $enddate='') { /* {{{ */ + if(!$dateformat) + $dateformat = getConvertDateFormat(); + $content = ' +
    + +
    + +
    +
    +'; + return $content; + } /* }}} */ + + function __printDateChooser($defDate = -1, $varName) { /* {{{ */ + + if ($defDate == -1) + $defDate = mktime(); + $day = date("d", $defDate); + $month = date("m", $defDate); + $year = date("Y", $defDate); + + print " \n"; + print " \n"; + print ""; + } /* }}} */ + + function printSequenceChooser($objArr, $keepID = -1) { /* {{{ */ + echo $this->getSequenceChooser($objArr, $keepID); + } /* }}} */ + + function getSequenceChooser($objArr, $keepID = -1) { /* {{{ */ + if (count($objArr) > 0) { + $max = $objArr[count($objArr)-1]->getSequence() + 1; + $min = $objArr[0]->getSequence() - 1; + } + else { + $max = 1.0; + } + $content = ""; + return $content; + } /* }}} */ + + function getDocumentChooserHtml($form, $default=false, $formname='', $skiptree=false) { /* {{{ */ + if(!$formname) + $formname = "docid"; + $formid = md5($formname.$form); + + $content = ''; + $content .= "getID() : "") ."\">"; + $content .= "
    \n"; + $content .= "getName()) : "") ."\" placeholder=\"".getMLText('type_to_search')."\" autocomplete=\"off\" />"; + $content .= '
    '; + $content .= ""; + if(!$skiptree) + $content .= $this->getModalBoxLink( + array( + 'target' => 'docChooser'.$formid, + 'remote' => "../out/out.DocumentChooser.php?form=".$formid."&folderid=".$this->params['dms']->getRootFolder()->getId(), + 'title' => getMLText('document') + )); + $content .= "
    \n"; + $content .= "
    \n"; + if(!$skiptree) + $content .= $this->getModalBox( + array( + 'id' => 'docChooser'.$formid, + 'title' => getMLText('choose_target_document'), + 'buttons' => array( + array('title'=>getMLText('close')) + ) + )); + return $content; + } /* }}} */ + + function printDocumentChooserHtml($formName) { /* {{{ */ + echo self::getDocumentChooserHtml($formName); + } /* }}} */ + + /** + * This function is deprecated. Don't use it anymore. There is a generic + * folderSelected and documentSelected function in application.js + * If you extra functions to be called then define them in your own js code + */ + function printDocumentChooserJs($form, $formname='') { /* {{{ */ + if(!$formname) + $formname = "docid"; + $formid = md5($formname.$form); +?> +function documentSelected(id, name) { + $('#').val(id); + $('#choosedocsearch').val(name); + $('#docChooser').modal('hide'); +} +function folderSelected(id, name) { +} +printDocumentChooserHtml($form); +?> + +getID() : "") ."\">"; + $content .= "
    \n"; + $content .= "getName()) : "") ."\" placeholder=\"".getMLText('type_to_search')."\" autocomplete=\"off\" target=\"".$formid."\"/>"; + $content .= '
    '; + $content .= ""; + if(!$skiptree) { + $content .= $this->getModalBoxLink( + array( + 'target' => 'folderChooser'.$formid, + 'remote' => "../out/out.FolderChooser.php?form=".$formid."&mode=".$accessMode."&exclude=".$exclude, + 'title' => getMLText('folder') + )); + } + $content .= "
    \n"; + $content .= "
    \n"; + if(!$skiptree) { + $content .= $this->getModalBox( + array( + 'id' => 'folderChooser'.$formid, + 'title' => getMLText('choose_target_folder'), + 'buttons' => array( + array('title'=>getMLText('close')) + ) + )); + } + return $content; + } /* }}} */ + + function printFolderChooserHtml($form, $accessMode, $exclude = -1, $default = false, $formname = '') { /* {{{ */ + echo self::getFolderChooserHtml($form, $accessMode, $exclude, $default, $formname); + } /* }}} */ + + /** + * This function is deprecated. Don't use it anymore. There is a generic + * folderSelected and documentSelected function in application.js + * If you extra functions to be called then define them in your own js code + */ + function printFolderChooserJs($form, $formname='') { /* {{{ */ + if(!$formname) + $formname = "targetid"; + $formid = md5($formname.$form); +?> +function folderSelected(id, name) { + $('#').val(id); + $('#choosefoldersearch').val(name); + $('#folderChooser').modal('hide'); +} +/* +$(document).ready(function() { + $('#clearfolder').click(function(ev) { + $('#choosefoldersearch').val(''); + $('#').val(''); + }); +}); +*/ +printFolderChooserHtml($form, $accessMode, $exclude, $default, $formname); +?> + +params['strictformcheck']; + $content = ''; + $content .= ' +
    + +
    '; + $content .= $this->getModalBoxLink( + array( + 'target' => 'keywordChooser', + 'remote' => "../out/out.KeywordChooser.php?target=".$formName, + 'title' => getMLText('keywords') + )); + $content .= ' +
    +
    +'; + $content .= $this->getModalBox( + array( + 'id' => 'keywordChooser', + 'title' => getMLText('use_default_keywords'), + 'buttons' => array( + array('id'=>'acceptkeywords', 'title'=>getMLText('save')), + array('title'=>getMLText('close')), + ) + )); + return $content; + } /* }}} */ + + function printKeywordChooserJs($formName) { /* {{{ */ +?> +$(document).ready(function() { + $('#acceptkeywords').click(function(ev) { + acceptKeywords(); + }); +}); +printKeywordChooserHtml($formName, $keywords, $fieldname); +?> + +params['dms']; + $attrdef = $attribute->getAttributeDefinition(); + switch($attrdef->getType()) { + case SeedDMS_Core_AttributeDefinition::type_url: + $attrs = $attribute->getValueAsArray(); + $tmp = array(); + foreach($attrs as $attr) { + $tmp[] = ''.htmlspecialchars($attr).''; + } + return implode('
    ', $tmp); + break; + case SeedDMS_Core_AttributeDefinition::type_email: + $attrs = $attribute->getValueAsArray(); + $tmp = array(); + foreach($attrs as $attr) { + $tmp[] = ''.htmlspecialchars($attr).''; + } + return implode('
    ', $tmp); + break; + case SeedDMS_Core_AttributeDefinition::type_folder: + $attrs = $attribute->getValueAsArray(); + $tmp = array(); + foreach($attrs as $attr) { + if($targetfolder = $dms->getFolder(intval($attr))) + $tmp[] = ''.htmlspecialchars($targetfolder->getName()).''; + } + return implode('
    ', $tmp); + break; + case SeedDMS_Core_AttributeDefinition::type_document: + $attrs = $attribute->getValueAsArray(); + $tmp = array(); + foreach($attrs as $attr) { + if($targetdoc = $dms->getDocument(intval($attr))) + $tmp[] = ''.htmlspecialchars($targetdoc->getName()).''; + } + return implode('
    ', $tmp); + break; + case SeedDMS_Core_AttributeDefinition::type_user: + $attrs = $attribute->getValueAsArray(); + $tmp = array(); + foreach($attrs as $attr) { + $curuser = $dms->getUser((int) $attr); + $tmp[] = htmlspecialchars($curuser->getFullname()." (".$curuser->getLogin().")"); + } + return implode('
    ', $tmp); + break; + case SeedDMS_Core_AttributeDefinition::type_group: + $attrs = $attribute->getValueAsArray(); + $tmp = array(); + foreach($attrs as $attr) { + $curgroup = $dms->getGroup((int) $attr); + $tmp[] = htmlspecialchars($curgroup->getName()); + } + return implode('
    ', $tmp); + break; + case SeedDMS_Core_AttributeDefinition::type_date: + $attrs = $attribute->getValueAsArray(); + $tmp = array(); + foreach($attrs as $attr) { + $tmp[] = getReadableDate($attr); + } + return implode(', ', $tmp); + break; + default: + return htmlspecialchars(implode(', ', $attribute->getValueAsArray())); + } + } /* }}} */ + + function printAttributeEditField($attrdef, $attribute, $fieldname='attributes', $norequire=false, $namepostfix='') { /* {{{ */ + echo self::getAttributeEditField($attrdef, $attribute, $fieldname, $norequire, $namepostfix); + } /* }}} */ + + function getAttributeEditField($attrdef, $attribute, $fieldname='attributes', $norequire=false, $namepostfix='') { /* {{{ */ + $dms = $this->params['dms']; + $content = ''; + switch($attrdef->getType()) { + case SeedDMS_Core_AttributeDefinition::type_boolean: + $objvalue = $attribute ? (is_object($attribute) ? $attribute->getValue() : $attribute) : ''; + $content .= "getId()."]\" value=\"\" />"; + $content .= "getId()."\" name=\"".$fieldname."[".$attrdef->getId()."]\" value=\"1\" ".($objvalue ? 'checked' : '')." />"; + break; + case SeedDMS_Core_AttributeDefinition::type_date: + $objvalue = $attribute ? (is_object($attribute) ? $attribute->getValue() : $attribute) : ''; + $dateformat = getConvertDateFormat($this->params['settings']->_dateformat); + /* + $content .= ' + + + '; + */ + $content = ' +
    + +
    + +
    +
    +'; + break; + case SeedDMS_Core_AttributeDefinition::type_email: + $objvalue = $attribute ? (is_object($attribute) ? $attribute->getValue() : $attribute) : ''; + $content .= "getId()."]\" value=\"".htmlspecialchars($objvalue)."\"".((!$norequire && $attrdef->getMinValues() > 0) ? ' required' : '').' data-rule-email="true"'." />"; + break; + case SeedDMS_Core_AttributeDefinition::type_float: + $objvalue = $attribute ? (is_object($attribute) ? $attribute->getValue() : $attribute) : ''; + $content .= "getId()."\" name=\"".$fieldname."[".$attrdef->getId()."]\" value=\"".htmlspecialchars($objvalue)."\"".((!$norequire && $attrdef->getMinValues() > 0) ? ' required' : '')." data-rule-number=\"true\"/>"; + break; + case SeedDMS_Core_AttributeDefinition::type_folder: + $objvalue = $attribute ? (is_object($attribute) ? (int) $attribute->getValue() : (int) $attribute) : 0; + if($objvalue) + $target = $dms->getFolder($objvalue); + else + $target = null; + $content .= $this->getFolderChooserHtml("attr".$attrdef->getId(), M_READWRITE, -1, $target, $fieldname."[".$attrdef->getId()."]", false); + break; + case SeedDMS_Core_AttributeDefinition::type_document: + $objvalue = $attribute ? (is_object($attribute) ? (int) $attribute->getValue() : (int) $attribute) : 0; + if($objvalue) + $target = $dms->getDocument($objvalue); + else + $target = null; + $content .= $this->getDocumentChooserHtml("attr".$attrdef->getId(), $target, $fieldname."[".$attrdef->getId()."]"); + break; + case SeedDMS_Core_AttributeDefinition::type_user: + $objvalue = $attribute ? (is_object($attribute) ? $attribute->getValueAsArray() : $attribute) : array(); + $users = $dms->getAllUsers(); + if($users) { + $allowempty = $attrdef->getMinValues() == 0; + $allowmultiple = $attrdef->getMultipleValues(); + $content .= ""; + } else { + $content .= getMLText('no_users'); + } + break; + case SeedDMS_Core_AttributeDefinition::type_group: + $objvalue = $attribute ? (is_object($attribute) ? $attribute->getValueAsArray() : $attribute) : array(); + $groups = $dms->getAllGroups(); + if($groups) { + $allowempty = $attrdef->getMinValues() == 0; + $allowmultiple = $attrdef->getMultipleValues(); + $content .= ""; + } else { + $content .= getMLText('no_groups'); + } + break; + default: + if($valueset = $attrdef->getValueSetAsArray()) { + $content .= "getId()."]\" value=\"\"/>"; + $content .= ""; + } else { + $objvalue = $attribute ? (is_object($attribute) ? $attribute->getValue() : $attribute) : ''; + if(strlen($objvalue) > 80) { + $content .= ""; + } else { + $content .= "getId()."\" name=\"".$fieldname."[".$attrdef->getId()."]\" value=\"".htmlspecialchars($objvalue)."\"".((!$norequire && $attrdef->getMinValues() > 0) ? ' required' : '').($attrdef->getType() == SeedDMS_Core_AttributeDefinition::type_int ? ' data-rule-digits="true"' : '')." />"; + } + } + break; + } + return $content; + } /* }}} */ + + function printDropFolderChooserHtml($formName, $dropfolderfile="", $showfolders=0) { /* {{{ */ + echo self::getDropFolderChooserHtml($formName, $dropfolderfile, $showfolders); + } /* }}} */ + + function getDropFolderChooserHtml($formName, $dropfolderfile="", $showfolders=0) { /* {{{ */ + $content = "
    \n"; + $content .= ""; + $content .= '
    '; + $content .= ""; + $content .= $this->getModalBoxLink( + array( + 'target' => 'dropfolderChooser', + 'remote' => "../out/out.DropFolderChooser.php?form=".$formName."&dropfolderfile=".urlencode($dropfolderfile)."&showfolders=".$showfolders, + 'title' => ($showfolders ? getMLText("choose_target_folder"): getMLText("choose_target_file")) + )); + $content .= "
    \n"; + $content .= "
    \n"; + $content .= $this->getModalBox( + array( + 'id' => 'dropfolderChooser', + 'title' => ($showfolders ? getMLText("choose_target_folder"): getMLText("choose_target_file")), + 'buttons' => array( + array('title'=>getMLText('close')), + ) + )); + return $content; + } /* }}} */ + + function printDropFolderChooserJs($formName, $showfolders=0) { /* {{{ */ +?> +/* Set up a callback which is called when a folder in the tree is selected */ +modalDropfolderChooser = $('#dropfolderChooser'); +function fileSelected(name, form) { +// $('#dropfolderfile').val(name); + $('#dropfolderfile'+form).val(name); + modalDropfolderChooser.modal('hide'); +} + +function folderSelected(name, form) { +// $('#dropfolderfile').val(name); + $('#dropfolderfile'+form).val(name); + modalDropfolderChooser.modal('hide'); +} + +$(document).ready(function() { + $('#clearfilename').click(function(ev) { + $('#dropfolderfile').val(''); + }); +}); +printDropFolderChooserHtml($formName, $dropfolderfile, $showfolders); +?> + +imgpath.$img) ) { + return $this->imgpath.$img; +// } + return ""; + } /* }}} */ + + function getCountryFlag($lang) { /* {{{ */ + switch($lang) { + case "en_GB": + return 'flags/gb.png'; + break; + default: + return 'flags/'.substr($lang, 0, 2).'.png'; + } + } /* }}} */ + + function printImgPath($img) { /* {{{ */ + print $this->getImgPath($img); + } /* }}} */ + + function infoMsg($msg) { /* {{{ */ + echo "
    \n"; + echo $msg; + echo "
    \n"; + } /* }}} */ + + function warningMsg($msg) { /* {{{ */ + echo "
    \n"; + echo $msg; + echo "
    \n"; + } /* }}} */ + + function errorMsg($msg) { /* {{{ */ + echo "
    \n"; + echo $msg; + echo "
    \n"; + } /* }}} */ + + function successMsg($msg) { /* {{{ */ + echo "
    \n"; + echo $msg; + echo "
    \n"; + } /* }}} */ + + function ___exitError($pagetitle, $error, $noexit=false, $plain=false) { /* {{{ */ + + /* This is just a hack to prevent creation of js files in an error + * case, because they will contain this error page again. It would be much + * better, if there was extra error() function similar to show() and calling + * $view() after setting the action to 'error'. This would also allow to + * set separate error pages for each view. + */ + if(!$noexit && isset($_REQUEST['action'])) { + if(in_array($_REQUEST['action'], array('js', 'footerjs'))) { + exit; + } + + if($_REQUEST['action'] == 'webrootjs') { + $this->webrootjs(); + exit; + } + } + + if(!$plain) { + $this->htmlStartPage($pagetitle); + $this->globalNavigation(); + $this->contentStart(); + } + + print "
    "; + print "

    ".getMLText('error')."!

    "; + print htmlspecialchars($error); + print "
    "; + if(!$plain) { + print "
    "; + + $this->contentEnd(); + $this->htmlEndPage(); + } + + add_log_line(" UI::exitError error=".$error." pagetitle=".$pagetitle, PEAR_LOG_ERR); + + if($noexit) + return; + + exit; + } /* }}} */ + + function printNewTreeNavigation($folderid=0, $accessmode=M_READ, $showdocs=0, $formid='form1', $expandtree=0, $orderby='') { /* {{{ */ + $this->printNewTreeNavigationHtml($folderid, $accessmode, $showdocs, $formid, $expandtree, $orderby); +?> + +\n"; + echo "
    \n"; + } /* }}} */ + + /** + * Create a tree of folders using jqtree. + * + * The tree can contain folders only or include documents. + * + * @param integer $folderid current folderid. If set the tree will be + * folded out and the all folders in the path will be visible + * @param integer $accessmode use this access mode when retrieving folders + * and documents shown in the tree + * @param boolean $showdocs set to true if tree shall contain documents + * as well. + * @param integer $expandtree level to which the tree shall be opened + * @param boolean $partialtree set to true if the given folder is the start folder + */ + function printNewTreeNavigationJs($folderid=0, $accessmode=M_READ, $showdocs=0, $formid='form1', $expandtree=0, $orderby='', $partialtree=false) { /* {{{ */ + function jqtree($path, $folder, $user, $accessmode, $showdocs=1, $expandtree=0, $orderby='', $level=0) { /* {{{ */ + $orderdir = (isset($orderby[1]) ? ($orderby[1] == 'd' ? 'desc' : 'asc') : 'asc'); + if($path/* || $expandtree>=$level*/) { + if($path) + $pathfolder = array_shift($path); + $children = array(); + if($expandtree) { + $subfolders = $folder->getSubFolders(isset($orderby[0]) ? $orderby[0] : '', $orderdir); + $subfolders = SeedDMS_Core_DMS::filterAccess($subfolders, $user, $accessmode); + } else { + $subfolders = array($pathfolder); + } + foreach($subfolders as $subfolder) { + $node = array('label'=>$subfolder->getName(), 'id'=>$subfolder->getID(), 'load_on_demand'=>(1 && ($subfolder->hasSubFolders() || ($subfolder->hasDocuments() && $showdocs))) ? true : false, 'is_folder'=>true); + /* if the subfolder is in the path then further unfold the tree. */ + if(/*$expandtree>=$level ||*/ $path && ($path[0]->getID() == $subfolder->getID())) { + $node['children'] = jqtree($path, $subfolder, $user, $accessmode, $showdocs, $expandtree, $orderby, $level+1); + if($showdocs) { + $documents = $subfolder->getDocuments(isset($orderby[0]) ? $orderby[0] : '', $orderdir); + $documents = SeedDMS_Core_DMS::filterAccess($documents, $user, $accessmode); + foreach($documents as $document) { + $node2 = array('label'=>$document->getName(), 'id'=>$document->getID(), 'load_on_demand'=>false, 'is_folder'=>false); + $node['children'][] = $node2; + } + } + } + $children[] = $node; + } + return $children; + } else { + $subfolders = $folder->getSubFolders(isset($orderby[0]) ? $orderby[0] : '', $orderdir); + $subfolders = SeedDMS_Core_DMS::filterAccess($subfolders, $user, $accessmode); + $children = array(); + foreach($subfolders as $subfolder) { + $node = array('label'=>$subfolder->getName(), 'id'=>$subfolder->getID(), 'load_on_demand'=>($subfolder->hasSubFolders() || ($subfolder->hasDocuments() && $showdocs)) ? true : false, 'is_folder'=>true); + $children[] = $node; + } + return $children; + } + return array(); + } /* }}} */ + + $orderdir = (isset($orderby[1]) ? ($orderby[1] == 'd' ? 'desc' : 'asc') : 'asc'); + if($folderid && ($folder = $this->params['dms']->getFolder($folderid))) { + if(!$partialtree) { + $path = $folder->getPath(); + /* Get the first folder (root folder) of path */ + $folder = array_shift($path); + } + $node = array('label'=>$folder->getName(), 'id'=>$folder->getID(), 'load_on_demand'=>false, 'is_folder'=>true); + if(!$folder->hasSubFolders()) { + $node['load_on_demand'] = true; + $node['children'] = array(); + } else { + $node['children'] = jqtree($path, $folder, $this->params['user'], $accessmode, $showdocs, 1 /*$expandtree*/, $orderby, 0); + if($showdocs) { + $documents = $folder->getDocuments(isset($orderby[0]) ? $orderby[0] : '', $orderdir); + $documents = SeedDMS_Core_DMS::filterAccess($documents, $this->params['user'], $accessmode); + foreach($documents as $document) { + $node2 = array('label'=>$document->getName(), 'id'=>$document->getID(), 'load_on_demand'=>false, 'is_folder'=>false); + $node['children'][] = $node2; + } + } + } + /* Nasty hack to remove the highest folder */ + if(isset($this->params['remove_root_from_tree']) && $this->params['remove_root_from_tree']) { + foreach($node['children'] as $n) + $tree[] = $n; + } else { + $tree[] = $node; + } + + } else { + if($root = $this->params['dms']->getFolder($this->params['rootfolderid'])) + $tree = array(array('label'=>$root->getName(), 'id'=>$root->getID(), 'load_on_demand'=>false, 'is_folder'=>true)); + else + $tree = array(); + } +?> +var data = ; +$(function() { + const $tree = $('#jqtree'); + $tree.tree({ +// saveState: false, + selectable: false, + data: data, + saveState: 'jqtree', + openedIcon: $(''), + closedIcon: $(''), +/* + _onCanSelectNode: function(node) { + if(node.is_folder) { + folderSelected(node.id, node.name); + treeFolderSelected('', node.id, node.name); + } else { + documentSelected(node.id, node.name); + treeDocumentSelected('', node.id, node.name); + } + }, +*/ + autoOpen: false, + drapAndDrop: true, + onCreateLi: function(node, $li) { + // Add 'icon' span before title + if(node.is_folder) + $li.find('.jqtree-title').before(' ').attr('data-name', node.name).attr('rel', 'folder_' + node.id).attr('formtoken', '').attr('data-uploadformtoken', '').attr('data-droptarget', 'folder_' + node.id).addClass('droptarget'); + else + $li.find('.jqtree-title').before(' '); + } + }); + // Unfold node for currently selected folder + $('#jqtree').tree('selectNode', $('#jqtree').tree('getNodeById', ), false, true); + $('#jqtree').on( + 'tree.click', + function(event) { + var node = event.node; + if(!node) + return; + if(node.is_folder) { + $('#jqtree').tree('openNode', node); + +// event.preventDefault(); + if(typeof node.fetched == 'undefined') { + node.fetched = true; + $(this).tree('loadDataFromUrl', node, function () { + $(this).tree('openNode', node); + }); + } + + /* folderSelectedXXXX() can still be set, e.g. for the main tree + * to update the folder list. + */ + if (typeof folderSelected === 'function') { + folderSelected(node.id, node.name); + } + treeFolderSelected('', node.id, node.name); + } else { + + if (typeof documentSelected === 'function') { + documentSelected(node.id, node.name); + } + treeDocumentSelected('', node.id, node.name); + + } + } + ); + $('#jqtree').on( + 'tree.contextmenu', + function(event) { + // The clicked node is 'event.node' + var node = event.node; + if(typeof node.fetched == 'undefined') { + node.fetched = true; + $(this).tree('loadDataFromUrl', node); + } + $(this).tree('openNode', node); + } + ); + $("#jqtree").on('dragenter', function (e) { + attr_rel = $(e.srcElement).attr('rel'); + if(typeof attr_rel == 'undefined') + return; + target_type = attr_rel.split("_")[0]; + target_id = attr_rel.split("_")[1]; + var node = $(this).tree('getNodeById', parseInt(target_id)); + if(typeof node.fetched == 'undefined') { + node.fetched = true; + $(this).tree('loadDataFromUrl', node, function() {$(this).tree('openNode', node);}); + } + }); +}); +params['dms']; + $user = $this->params['user']; + + $folder = $dms->getFolder($folderid); + if (!is_object($folder)) return ''; + + $subfolders = $folder->getSubFolders($orderby); + $subfolders = SeedDMS_Core_DMS::filterAccess($subfolders, $user, M_READ); + $tree = array(); + foreach($subfolders as $subfolder) { + $loadondemand = $subfolder->hasSubFolders() || ($subfolder->hasDocuments() && $showdocs); + $level = array('label'=>$subfolder->getName(), 'id'=>$subfolder->getID(), 'load_on_demand'=>$loadondemand, 'is_folder'=>true); + if(!$subfolder->hasSubFolders()) + $level['children'] = array(); + $tree[] = $level; + } + if($showdocs) { + $documents = $folder->getDocuments($orderby); + $documents = SeedDMS_Core_DMS::filterAccess($documents, $user, M_READ); + foreach($documents as $document) { + $level = array('label'=>$document->getName(), 'id'=>$document->getID(), 'load_on_demand'=>false, 'is_folder'=>false); + $tree[] = $level; + } + } + + header('Content-Type: application/json'); + echo json_encode($tree); + } /* }}} */ + + /** + * Deprecated! + */ + function __printTreeNavigation($folderid, $showtree){ /* {{{ */ + if ($showtree==1){ + $this->contentHeading("", true); + $this->contentContainerStart(); +?> + +printNewTreeNavigation($folderid, M_READ, 0, ''); + $this->contentContainerEnd(); + } else { + $this->contentHeading("", true); + } + } /* }}} */ + + /** + * Print clipboard in div container + * + * @param array clipboard + */ + function printClipboard($clipboard, $previewer){ /* {{{ */ + echo "
    \n"; + $this->contentHeading(getMLText("clipboard").'', true); + echo "
    \n"; +?> +
    +\n"; + echo "
    \n"; + } /* }}} */ + + /** + * Wrap text in inline editing tags + * + * @param string text + */ + function printInlineEdit($text, $object){ /* {{{ */ + if(!empty($this->params['settings']->_inlineEditing)) { + echo "isType('document')) + echo " data-document=\"".$object->getId()."\""; + echo ">".$text; + echo "\n"; + } else + echo $text; + } /* }}} */ + + /** + * Print button with link for deleting a document + * + * This button is used in document listings (e.g. on the ViewFolder page) + * for deleting a document. In seeddms version < 4.3.9 this was just a + * link to the out/out.RemoveDocument.php page which asks for confirmation + * an than calls op/op.RemoveDocument.php. Starting with version 4.3.9 + * the button just opens a small popup asking for confirmation and than + * calls the ajax command 'deletedocument'. The ajax call is called + * in the click function of 'button.removedocument'. That button needs + * to have two attributes: 'rel' for the id of the document, and 'msg' + * for the message shown by notify if the document could be deleted. + * + * @param object $document document to be deleted + * @param string $msg message shown in case of successful deletion + * @param boolean $return return html instead of printing it + * @return string html content if $return is true, otherwise an empty string + */ + function printDeleteDocumentButton($document, $msg, $return=false){ /* {{{ */ + $docid = $document->getID(); + $content = ''; + $content .= ' $document->getName())), ENT_QUOTES).'">'; + if($return) + return $content; + else + echo $content; + return ''; + } /* }}} */ + + function printDeleteDocumentButtonJs(){ /* {{{ */ + echo " + $(document).ready(function () { +// $('.delete-document-btn').click(function(ev) { + $('body').on('click', 'a.delete-document-btn', function(ev){ + ev.stopPropagation(); + id = $(ev.currentTarget).attr('rel'); + confirmmsg = $(ev.currentTarget).attr('confirmmsg'); + msg = $(ev.currentTarget).attr('msg'); + formtoken = '".createFormKey('removedocument')."'; + bootbox.confirm({ + \"message\": confirmmsg, + \"buttons\": { + \"confirm\": { + \"label\" : \" ".getMLText("rm_document")."\", + \"className\" : \"btn-danger\", + }, + \"cancel\": { + \"label\" : \"".getMLText("cancel")."\", + \"className\" : \"btn-secondary\", + } + }, + \"callback\": function(result) { + if(result) { + $.get('../op/op.Ajax.php', + { command: 'deletedocument', id: id, formtoken: formtoken }, + function(data) { + if(data.success) { + $('#table-row-document-'+id).hide('slow'); + noty({ + text: msg, + type: 'success', + dismissQueue: true, + layout: 'topRight', + theme: 'defaultTheme', + timeout: 1500, + }); + } else { + noty({ + text: data.message, + type: 'error', + dismissQueue: true, + layout: 'topRight', + theme: 'defaultTheme', + timeout: 3500, + }); + } + }, + 'json' + ); + } + } + }); + }); + }); + "; + } /* }}} */ + + /** + * Print button with link for deleting a folder + * + * This button works like document delete button + * {@link SeedDMS_Bootstrap_Style::printDeleteDocumentButton()} + * + * @param object $folder folder to be deleted + * @param string $msg message shown in case of successful deletion + * @param boolean $return return html instead of printing it + * @return string html content if $return is true, otherwise an empty string + */ + function printDeleteFolderButton($folder, $msg, $return=false){ /* {{{ */ + $folderid = $folder->getID(); + $content = ''; + $content .= ' $folder->getName())), ENT_QUOTES).'">'; + if($return) + return $content; + else + echo $content; + return ''; + } /* }}} */ + + function printDeleteFolderButtonJs(){ /* {{{ */ + echo " + $(document).ready(function () { +// $('.delete-folder-btn').click(function(ev) { + $('body').on('click', 'a.delete-folder-btn', function(ev){ + ev.stopPropagation(); + id = $(ev.currentTarget).attr('rel'); + confirmmsg = $(ev.currentTarget).attr('confirmmsg'); + msg = $(ev.currentTarget).attr('msg'); + formtoken = '".createFormKey('removefolder')."'; + bootbox.confirm({ + \"message\": confirmmsg, + \"buttons\": { + \"confirm\": { + \"label\" : \" ".getMLText("rm_folder")."\", + \"className\" : \"btn-danger\", + }, + \"cancel\": { + \"label\" : \"".getMLText("cancel")."\", + \"className\" : \"btn-secondary\", + } + }, + \"callback\": function(result) { + if(result) { + $.get('../op/op.Ajax.php', + { command: 'deletefolder', id: id, formtoken: formtoken }, + function(data) { + if(data.success) { + $('#table-row-folder-'+id).hide('slow'); + noty({ + text: msg, + type: 'success', + dismissQueue: true, + layout: 'topRight', + theme: 'defaultTheme', + timeout: 1500, + }); + } else { + noty({ + text: data.message, + type: 'error', + dismissQueue: true, + layout: 'topRight', + theme: 'defaultTheme', + timeout: 3500, + }); + } + }, + 'json' + ); + } + } + }); + }); + }); + "; + } /* }}} */ + + function printLockButton($document, $msglock, $msgunlock, $return=false) { /* {{{ */ + $accessobject = $this->params['accessobject']; + $docid = $document->getID(); + if($document->isLocked()) { + if(!$accessobject->check_controller_access('UnlockDocument')) + return ''; + $icon = 'unlock'; + $msg = $msgunlock; + $title = 'unlock_document'; + } else { + if(!$accessobject->check_controller_access('LockDocument')) + return ''; + $icon = 'lock'; + $msg = $msglock; + $title = 'lock_document'; + } + $content = ''; + $content .= ''; + if($return) + return $content; + else + echo $content; + return ''; + } /* }}} */ + + function printAccessButton($object, $return=false) { /* {{{ */ + $content = ''; + $objid = $object->getId(); + if($object->isType('document')) { + $content .= ''; + } elseif($object->isType('folder')) { + $content .= ''; + } + if($return) + return $content; + else + echo $content; + return ''; + } /* }}} */ + + /** + * Output left-arrow with link which takes over a number of ids into + * a select box. + * + * Clicking in the button will preset the comma seperated list of ids + * in data-ref as options in the select box with name $name + * + * @param string $name id of select box + * @param array $ids list of option values + */ + function getSelectPresetButtonHtml($name, $ids) { /* {{{ */ + return ''; + } /* }}} */ + + /** + * Output left-arrow with link which takes over a number of ids into + * a select box. + * + * Clicking in the button will preset the comma seperated list of ids + * in data-ref as options in the select box with name $name + * + * @param string $name id of select box + * @param array $ids list of option values + */ + function printSelectPresetButtonHtml($name, $ids) { /* {{{ */ + echo self::getSelectPresetButtonHtml($name, $ids); + } /* }}} */ + + /** + * Javascript code for select preset button + */ + function printSelectPresetButtonJs() { /* {{{ */ +?> +$(document).ready( function() { + $('.selectpreset_btn').click(function(ev){ + ev.preventDefault(); + if (typeof $(ev.currentTarget).data('ids') != 'undefined') { + target = $(ev.currentTarget).data('ref'); + // Use attr() instead of data() because data() converts to int which cannot be split + items = $(ev.currentTarget).attr('data-ids'); + arr = items.split(","); + for(var i in arr) { + $("#"+target+" option[value='"+arr[i]+"']").attr("selected", "selected"); + } +// $("#"+target).trigger("chosen:updated"); + $("#"+target).trigger("change"); + } + }); +}); +'; + } /* }}} */ + + /** + * Output left-arrow with link which takes over a string into + * a input field. + * + * Clicking on the button will preset the string + * in data-ref the value of the input field with name $name + * + * @param string $name id of select box + * @param string $text text + */ + function printInputPresetButtonHtml($name, $text, $sep='') { /* {{{ */ + echo self::getInputPresetButtonHtml($name, $text, $sep); + } /* }}} */ + + /** + * Javascript code for input preset button + * This code workѕ for input fields and single select fields + */ + function printInputPresetButtonJs() { /* {{{ */ +?> +$(document).ready( function() { + $('.inputpreset_btn').click(function(ev){ + ev.preventDefault(); + if (typeof $(ev.currentTarget).data('text') != 'undefined') { + target = $(ev.currentTarget).data('ref'); + value = $(ev.currentTarget).data('text'); + sep = $(ev.currentTarget).data('sep'); + if(sep) { + // Use attr() instead of data() because data() converts to int which cannot be split + arr = value.split(sep); + for(var i in arr) { + $("#"+target+" option[value='"+arr[i]+"']").attr("selected", "selected"); + } + } else { + $("#"+target).val(value); + } + } + }); +}); + + return ''; + +$(document).ready( function() { + $('.checkboxpreset_btn').click(function(ev){ + ev.preventDefault(); + if (typeof $(ev.currentTarget).data('text') != 'undefined') { + target = $(ev.currentTarget).data('ref'); + value = $(ev.currentTarget).data('text'); + if(value) { + $("#"+target).attr('checked', ''); + } else { + $("#"+target).removeAttribute('checked'); + } + } + }); +}); +getID().'" msg="'.getMLText($msg).'" attrvalue="'.htmlspecialchars($value, ENT_QUOTES).'" confirmmsg="'.htmlspecialchars(getMLText("confirm_rm_attr_value", array ("attrdefname" => $attrdef->getName())), ENT_QUOTES).'">'; + if($return) + return $content; + else + echo $content; + return ''; + } /* }}} */ + + function printDeleteAttributeValueButtonJs(){ /* {{{ */ + echo " + $(document).ready(function () { +// $('.delete-attribute-value-btn').click(function(ev) { + $('body').on('click', 'a.delete-attribute-value-btn', function(ev){ + id = $(ev.currentTarget).attr('rel'); + confirmmsg = $(ev.currentTarget).attr('confirmmsg'); + attrvalue = $(ev.currentTarget).attr('attrvalue'); + msg = $(ev.currentTarget).attr('msg'); + formtoken = '".createFormKey('removeattrvalue')."'; + bootbox.confirm({ + \"message\": confirmmsg, + \"buttons\": { + \"confirm\": { + \"label\" : \" ".getMLText("rm_attr_value")."\", + \"className\" : \"btn-danger\", + }, + \"cancel\": { + \"label\" : \"".getMLText("cancel")."\", + \"className\" : \"btn-secondary\", + } + }, + \"callback\": function(result) { + if(result) { + $.post('../op/op.AttributeMgr.php', + { action: 'removeattrvalue', attrdefid: id, attrvalue: attrvalue, formtoken: formtoken }, + function(data) { + if(data.success) { + $('#table-row-attrvalue-'+id).hide('slow'); + noty({ + text: msg, + type: 'success', + dismissQueue: true, + layout: 'topRight', + theme: 'defaultTheme', + timeout: 1500, + }); + } else { + noty({ + text: data.message, + type: 'error', + dismissQueue: true, + layout: 'topRight', + theme: 'defaultTheme', + timeout: 3500, + }); + } + }, + 'json' + ); + } + } + }); + }); + }); + "; + } /* }}} */ + + function printClickDocumentJs() { /* {{{ */ + $onepage = $this->params['onepage']; + if($onepage) { +?> +/* catch click on a document row in the list folders and documents */ +$('body').on('click', '[id^=\"table-row-document\"] td:nth-child(2)', function(ev) { + attr_id = $(ev.currentTarget).parent().attr('id').split('-')[3]; + window.location = '../out/out.ViewDocument.php?documentid=' + attr_id; +}); +params['onepage']; + if($onepage) { +?> +/* catch click on a document row in the list folders and documents */ +$('body').on('click', '[id^=\"table-row-folder\"] td:nth-child(2)', function(ev) { + attr_id = $(ev.currentTarget).parent().data('target-id'); + if(typeof attr_id == 'undefined') + attr_id = $(ev.currentTarget).parent().attr('id').split('-')[3]; + window.location = '../out/out.ViewFolder.php?folderid=' + attr_id; +}); +getID(); + return "getName(), ENT_QUOTES)."\">"; + } /* }}} */ + + function documentListRowEnd($document) { /* {{{ */ + return "\n"; + } /* }}} */ + + /** + * Return HTML of a single row in the document list table + * + * @param object $document + * @param object $previewer + * @param boolean $skipcont set to true if embrasing tr shall be skipped + */ + function documentListRow($document, $previewer, $skipcont=false, $version=0, $extracontent=array()) { /* {{{ */ + $dms = $this->params['dms']; + $user = $this->params['user']; + $showtree = $this->params['showtree']; + $workflowmode = $this->params['workflowmode']; + $previewwidth = $this->params['previewWidthList']; + $enableClipboard = $this->params['enableclipboard']; + $accessop = $this->params['accessobject']; + $onepage = $this->params['onepage']; + + $content = ''; + + $owner = $document->getOwner(); + $comment = $document->getComment(); + if (strlen($comment) > 150) $comment = substr($comment, 0, 147) . "..."; + $docID = $document->getID(); + + if($version) { + $latestContent = $this->callHook('documentContent', $document, $version); + if($latestContent === null) + $latestContent = $document->getContentByVersion($version); + } else { + $latestContent = $this->callHook('documentLatestContent', $document); + if($latestContent === null) + $latestContent = $document->getLatestContent(); + } + + if($latestContent) { + if(!$skipcont) + $content .= $this->documentListRowStart($document); + + $previewer->createPreview($latestContent); + $version = $latestContent->getVersion(); + $status = $latestContent->getStatus(); + $needwkflaction = false; + if($workflowmode == 'advanced') { + $workflow = $latestContent->getWorkflow(); + if($workflow) { + $needwkflaction = $latestContent->needsWorkflowAction($user); + } + } + + /* Retrieve attacheѕ files */ + $files = $document->getDocumentFiles($latestContent->getVersion()); + $files = SeedDMS_Core_DMS::filterDocumentFiles($user, $files); + + /* Retrieve linked documents */ + $links = $document->getDocumentLinks(); + $links = SeedDMS_Core_DMS::filterDocumentLinks($user, $links); + + /* Retrieve reverse linked documents */ + $revlinks = $document->getReverseDocumentLinks(); + $revlinks = SeedDMS_Core_DMS::filterDocumentLinks($user, $revlinks); + + $content .= ""; + if (file_exists($dms->contentDir . $latestContent->getPath())) { + if($accessop->check_controller_access('Download', array('action'=>'version'))) + $content .= ""; + if($previewer->hasPreview($latestContent)) { + $content .= "getID()."&version=".$latestContent->getVersion()."&width=".$previewwidth."\" title=\"".htmlspecialchars($latestContent->getMimeType())."\">"; + } else { + $content .= "getMimeIcon($latestContent->getFileType())."\" ".($previewwidth ? "width=\"".$previewwidth."\"" : "")."\" title=\"".htmlspecialchars($latestContent->getMimeType())."\">"; + } + if($accessop->check_controller_access('Download', array('action'=>'version'))) + $content .= ""; + } else + $content .= "getMimeIcon($latestContent->getFileType())."\" title=\"".htmlspecialchars($latestContent->getMimeType())."\">"; + $content .= ""; + + $content .= ""; + if($onepage) + $content .= "".htmlspecialchars($document->getName()) . ""; + else + $content .= "" . htmlspecialchars($document->getName()) . ""; + if(isset($extracontent['below_title'])) + $content .= $extracontent['below_title']; + $content .= "
    "; + if($belowtitle = $this->callHook('documentListRowBelowTitle', $document, $latestContent)) + $content .= $belowtitle; + else + $content .= "".getMLText('owner').": ".htmlspecialchars($owner->getFullName()).", ".getMLText('creation_date').": ".getReadableDate($document->getDate()).", ".getMLText('version')." ".$version." - ".getReadableDate($latestContent->getDate())."".($document->expires() ? ", ".getMLText('expires').": ".getReadableDate($document->getExpires())."" : "").""; + if($comment) { + $content .= "
    ".htmlspecialchars($comment).""; + } + if(!empty($extracontent['bottom_title'])) + $content .= $extracontent['bottom_title']; + $content .= "\n"; + + $content .= ""; + $attentionstr = ''; + if ( $document->isLocked() ) { + $attentionstr .= "getImgPath("lock.png")."\" title=\"". getMLText("locked_by").": ".htmlspecialchars($document->getLockingUser()->getFullName())."\"> "; + } + if ( $needwkflaction ) { + $attentionstr .= "getImgPath("attention.gif")."\" title=\"". getMLText("workflow").": ".htmlspecialchars($workflow->getName())."\"> "; + } + if($attentionstr) + $content .= $attentionstr."
    "; + $content .= ""; + if(count($files)) + $content .= count($files)." ".getMLText("linked_files")."
    "; + if(count($links) || count($revlinks)) + $content .= count($links)."/".count($revlinks)." ".getMLText("linked_documents")."
    "; + if($status["status"] == S_IN_WORKFLOW && $workflowmode == 'advanced') { + $workflowstate = $latestContent->getWorkflowState(); + $content .= 'getName()) : '').'">'.($workflowstate ? htmlspecialchars($workflowstate->getName()) : '').''; + } else { + $content .= getOverallStatusText($status["status"]); + } + $content .= "
    "; +// $content .= "".$version.""; + $content .= ""; + $content .= "
    "; + if(!empty($extracontent['begin_action_list'])) + $content .= $extracontent['begin_action_list']; + if($accessop->check_view_access('RemoveDocument')) { + if($document->getAccessMode($user) >= M_ALL) { + $content .= $this->printDeleteDocumentButton($document, 'splash_rm_document', true); + } else { + $content .= ''; + } + } + if($document->getAccessMode($user) >= M_READWRITE) { + $content .= ''; + } else { + $content .= ''; + } + if($document->getAccessMode($user) >= M_READWRITE) { + $content .= $this->printLockButton($document, 'splash_document_locked', 'splash_document_unlocked', true); + } + if($document->getAccessMode($user) >= M_READWRITE) { + $content .= $this->printAccessButton($document, true); + } + if($enableClipboard) { + $content .= ''; + } + if($onepage) + $content .= ''; + if(!empty($extracontent['end_action_list'])) + $content .= $extracontent['end_action_list']; + $content .= "
    "; + $content .= ""; + if(!$skipcont) + $content .= $this->documentListRowEnd($document); + } + return $content; + } /* }}} */ + + /** + * Start the row for a folder in list of documents and folders + * + * This method creates the starting tr tag for a new table row containing + * a folder list entry. The tr tag contains various attributes which are + * used for removing the table line and to make drap&drop work. + * + * id=table-row-folder- : used for identifying the row when removing the table + * row after deletion of the folder by clicking on the delete button in that table + * row. + * data-droptarget=folder_ : identifies the folder represented by this row + * when it used as a target of the drag&drop operation. + * If an element (either a file or a dragged item) is dropped on this row, the + * data-droptarget will be evaluated to identify the underlying dms object. + * Dropping a file on a folder will upload that file into the folder. Droping + * an item (which is currently either a document or a folder) from the page will + * move that item into the folder. + * rel=folder_ : This data is put into drag data when a drag starts. When the + * item is dropped on some other item this data will identify the source object. + * The attributes data-droptarget and rel are usually equal. At least there is + * currently no scenario where they are different. + * formtoken= : token made of key 'movefolder' + * formtoken is also placed in the drag data just like the value of attibute 'rel'. + * This is always set to a value made of 'movefolder'. + * data-uploadformtoken= : token made of key 'adddocument' + * class=table-row-folder : The class must have a class named 'table-row-folder' in + * order to be draggable and to extract the drag data from the attributes 'rel' and + * 'formtoken' + * + * @param object $folder + * @return string starting tr tag for a table + */ + function folderListRowStart($folder, $class='') { /* {{{ */ + return "getID()."\" draggable=\"true\" data-droptarget=\"folder_".$folder->getID()."\" rel=\"folder_".$folder->getID()."\" class=\"folder table-row-folder droptarget".($class ? ' '.$class : '')."\" data-uploadformtoken=\"".createFormKey('')."\" formtoken=\"".createFormKey('')."\" data-name=\"".htmlspecialchars($folder->getName(), ENT_QUOTES)."\">"; + } /* }}} */ + + function folderListRowEnd($folder) { /* {{{ */ + return "\n"; + } /* }}} */ + + function folderListRow($subFolder, $skipcont=false, $extracontent=array()) { /* {{{ */ + $dms = $this->params['dms']; + $user = $this->params['user']; +// $folder = $this->params['folder']; + $showtree = $this->params['showtree']; + $enableRecursiveCount = $this->params['enableRecursiveCount']; + $maxRecursiveCount = $this->params['maxRecursiveCount']; + $enableClipboard = $this->params['enableclipboard']; + $accessop = $this->params['accessobject']; + $onepage = $this->params['onepage']; + + $owner = $subFolder->getOwner(); + $comment = $subFolder->getComment(); + if (strlen($comment) > 150) $comment = substr($comment, 0, 147) . "..."; + + $content = ''; + if(!$skipcont) + $content .= $this->folderListRowStart($subFolder); + $content .= "getID()."&showtree=".$showtree."\">getMimeIcon(".folder")."\" width=\"24\" height=\"24\" border=0>\n"; + if($onepage) + $content .= "" . "getId()."\">".htmlspecialchars($subFolder->getName()).""; + else + $content .= "getID()."&showtree=".$showtree."\">" . htmlspecialchars($subFolder->getName()) . ""; + $content .= "
    ".getMLText('owner').": ".htmlspecialchars($owner->getFullName()).", ".getMLText('creation_date').": ".date('Y-m-d', $subFolder->getDate()).""; + if($comment) { + $content .= "
    ".htmlspecialchars($comment).""; + } + if(isset($extracontent['bottom_title'])) + $content .= $extracontent['bottom_title']; + $content .= "\n"; +// $content .= "".htmlspecialchars($owner->getFullName()).""; + $content .= ""; + if($enableRecursiveCount) { + if($user->isAdmin()) { + /* No need to check for access rights in countChildren() for + * admin. So pass 0 as the limit. + */ + $cc = $subFolder->countChildren($user, 0); + $content .= $cc['folder_count']." ".getMLText("folders")."
    ".$cc['document_count']." ".getMLText("documents"); + } else { + $cc = $subFolder->countChildren($user, $maxRecursiveCount); + if($maxRecursiveCount > 5000) + $rr = 100.0; + else + $rr = 10.0; + $content .= (!$cc['folder_precise'] ? '~'.(round($cc['folder_count']/$rr)*$rr) : $cc['folder_count'])." ".getMLText("folders")."
    ".(!$cc['document_precise'] ? '~'.(round($cc['document_count']/$rr)*$rr) : $cc['document_count'])." ".getMLText("documents"); + } + } else { + /* FIXME: the following is very inefficient for just getting the number of + * subfolders and documents. Making it more efficient is difficult, because + * the access rights need to be checked. + */ + $subsub = $subFolder->getSubFolders(); + $subsub = SeedDMS_Core_DMS::filterAccess($subsub, $user, M_READ); + $subdoc = $subFolder->getDocuments(); + $subdoc = SeedDMS_Core_DMS::filterAccess($subdoc, $user, M_READ); + $content .= count($subsub)." ".getMLText("folders")."
    ".count($subdoc)." ".getMLText("documents"); + } + $content .= "
    "; +// $content .= ""; + $content .= ""; + $content .= "
    "; + if(!empty($extracontent['begin_action_list'])) + $content .= $extracontent['begin_action_list']; + $subFolderAccessMode = $subFolder->getAccessMode($user); + if($subFolderAccessMode >= M_ALL) { + $content .= $this->printDeleteFolderButton($subFolder, 'splash_rm_folder', true); + } else { + $content .= ''; + } + if($subFolderAccessMode >= M_READWRITE) { + $content .= ''; + } else { + $content .= ''; + } + if($subFolderAccessMode >= M_READWRITE) { + $content .= $this->printAccessButton($subFolder, true); + } + if($enableClipboard) { + $content .= ''; + } + if($onepage) + $content .= ''; + if(!empty($extracontent['end_action_list'])) + $content .= $extracontent['end_action_list']; + $content .= "
    "; + $content .= ""; + if(!$skipcont) + $content .= $this->folderListRowEnd($subFolder); + return $content; + } /* }}} */ + + function show(){ /* {{{ */ + parent::show(); + } /* }}} */ + + function error(){ /* {{{ */ + parent::error(); + $dms = $this->params['dms']; + $user = $this->params['user']; + $pagetitle = $this->params['pagetitle']; + $errormsg = $this->params['errormsg']; + $plain = $this->params['plain']; + $noexit = $this->params['noexit']; + + if(!$plain) { + $this->htmlStartPage($pagetitle); + $this->globalNavigation(); + $this->contentStart(); + } + + print "
    "; + print "

    ".getMLText('error')."!

    "; + print htmlspecialchars($errormsg); + print "
    "; + print "
    "; + + $this->contentEnd(); + $this->htmlEndPage(); + + add_log_line(" UI::exitError error=".$errormsg." pagetitle=".$pagetitle, PEAR_LOG_ERR); + + if($noexit) + return; + + exit; + } /* }}} */ + + /** + * Return HTML Template for jumploader + * + * @param string $uploadurl URL where post data is send + * @param integer $folderid id of folder where document is saved + * @param integer $maxfiles maximum number of files allowed to upload + * @param array $fields list of post fields + */ + function getFineUploaderTemplate() { /* {{{ */ + return ' + +'; + } /* }}} */ + + /** + * Output HTML Code for Fine Uploader + * + * @param string $uploadurl URL where post data is send + * @param integer $folderid id of folder where document is saved + * @param integer $maxfiles maximum number of files allowed to upload + * @param array $fields list of post fields + */ + function printFineUploaderHtml($prefix='userfile') { /* {{{ */ + echo self::getFineUploaderHtml($prefix); + } /* }}} */ + + /** + * Get HTML Code for Fine Uploader + * + * @param string $uploadurl URL where post data is send + * @param integer $folderid id of folder where document is saved + * @param integer $maxfiles maximum number of files allowed to upload + * @param array $fields list of post fields + */ + function getFineUploaderHtml($prefix='userfile') { /* {{{ */ + $html = '
    + + '; + return $html; + } /* }}} */ + + /** + * Output Javascript Code for fine uploader + * + * @param string $uploadurl URL where post data is send + * @param integer $folderid id of folder where document is saved + * @param integer $maxfiles maximum number of files allowed to upload + * @param array $fields list of post fields + */ + function printFineUploaderJs($uploadurl, $partsize=0, $maxuploadsize=0, $multiple=true, $prefix='userfile', $formname='form1') { /* {{{ */ +?> +$(document).ready(function() { + uploader = new qq.FineUploader({ + debug: false, + autoUpload: false, + multiple: , + element: $('#-fine-uploader')[0], + template: 'qq-template', + request: { + endpoint: 'params['settings']->_encryptionKey.'uploadchunks'); ?>' + }, + 0 ? ' + validation: { + sizeLimit: '.$maxuploadsize.' + }, +' : ''); ?> + chunking: { + enabled: true, + + mandatory: true + }, + messages: { + sizeError: '{file} is too large, maximum file size is {sizeLimit}.' + }, + callbacks: { + onComplete: function(id, name, json, xhr) { + }, + onAllComplete: function(succeeded, failed) { + var uuids = Array(); + var names = Array(); + for (var i = 0; i < succeeded.length; i++) { + uuids.push(this.getUuid(succeeded[i])) + names.push(this.getName(succeeded[i])) + } + $('#-fine-uploader-uuids').val(uuids.join(';')); + $('#-fine-uploader-names').val(names.join(';')); + /* Run upload only if all files could be uploaded */ + if(succeeded.length > 0 && failed.length == 0) + document.getElementById('').submit(); + }, + onError: function(id, name, reason, xhr) { + noty({ + text: reason, + type: 'error', + dismissQueue: true, + layout: 'topRight', + theme: 'defaultTheme', + timeout: 3500, + }); + } + } + }); +}); +params['dms']; + $document = $latestContent->getDocument(); + $accessop = $this->params['accessobject']; +?> + + + +getReviewStatus(10); + break; + case "approval": + $statusList = $latestContent->getApprovalStatus(10); + break; + default: + $statusList = array(); + } + foreach($statusList as $rec) { + echo ""; + echo ""; + echo ""; + echo ""; + echo ""; + } +?> +
    ,
    "; + switch ($rec["type"]) { + case 0: // individual. + $required = $dms->getUser($rec["required"]); + if (!is_object($required)) { + $reqName = getMLText("unknown_user")." '".$rec["required"]."'"; + } else { + $reqName = htmlspecialchars($required->getFullName()." (".$required->getLogin().")"); + } + break; + case 1: // Approver is a group. + $required = $dms->getGroup($rec["required"]); + if (!is_object($required)) { + $reqName = getMLText("unknown_group")." '".$rec["required"]."'"; + } + else { + $reqName = "".htmlspecialchars($required->getName()).""; + } + break; + } + echo $reqName; + echo ""; + echo "".getLongReadableDate($rec['date'])." - "; + $updateuser = $dms->getUser($rec["userID"]); + if(!is_object($updateuser)) + echo getMLText("unknown_user"); + else + echo htmlspecialchars($updateuser->getFullName()." (".$updateuser->getLogin().")"); + echo ""; + if($rec['comment']) + echo "
    ".htmlspecialchars($rec['comment']); + switch($type) { + case "review": + if($accessop->check_controller_access('Download', array('action'=>'review'))) + if($rec['file']) { + echo "
    "; + echo "getID()."&reviewlogid=".$rec['reviewLogID']."\" class=\"btn btn-mini\"> ".getMLText('download').""; + } + break; + case "approval": + if($accessop->check_controller_access('Download', array('action'=>'approval'))) + if($rec['file']) { + echo "
    "; + echo "getID()."&approvelogid=".$rec['approveLogID']."\" class=\"btn btn-mini\"> ".getMLText('download').""; + } + break; + } + echo "
    "; + switch($type) { + case "review": + echo getReviewStatusText($rec["status"]); + break; + case "approval": + echo getApprovalStatusText($rec["status"]); + break; + default: + } + echo "
    + $value) { + $used = (int) ($value/$max*100.0+0.5); + $free = 100-$used; + } else { + $free = 0; + $used = 100; + } + $html = ' +
    +
    +
    +
    '; + return $html; + } /* }}} */ + + /** + * Output a timeline for a document + * + * @param object $document document + */ + protected function printTimelineJs($timelineurl, $height=300, $start='', $end='', $skip=array()) { /* {{{ */ + if(!$timelineurl) + return; +?> + var timeline; + var data; + + // specify options + var options = { + 'width': '100%', + 'height': '100%', + + 'editable': false, + 'selectable': true, + 'style': 'box', + 'locale': 'params['session']->getLanguage() ?>' + }; + + function onselect() { + var sel = timeline.getSelection(); + if (sel.length) { + if (sel[0].row != undefined) { + var row = sel[0].row; + console.log(timeline.getItem(sel[0].row)); + item = timeline.getItem(sel[0].row); + $('div.ajax').trigger('update', {documentid: item.docid, version: item.version, statusid: item.statusid, statuslogid: item.statuslogid, fileid: item.fileid}); + } + } + } + $(document).ready(function () { + // Instantiate our timeline object. + timeline = new links.Timeline(document.getElementById('timeline'), options); + links.events.addListener(timeline, 'select', onselect); + $.getJSON( + '', + function(data) { + $.each( data, function( key, val ) { + val.start = new Date(val.start); + }); + timeline.draw(data); + } + ); + }); + +
    +\n"; + $this->printTimelineJs($timelineurl, $height, $start, $end, $skip); + echo ""; + $this->printTimelineHtml($height); + } /* }}} */ + + public function printPopupBox($title, $content, $ret=false) { /* {{{ */ + $id = md5(uniqid()); + /* + $this->addFooterJS(' +$("body").on("click", "span.openpopupbox", function(e) { + $(""+$(e.target).data("href")).toggle(); +// $("div.popupbox").toggle(); +}); +'); + */ + $html = ' + '.$title.' + '; + if($ret) + return $html; + else + echo $html; + } /* }}} */ + + protected function printAccordion($title, $content) { /* {{{ */ + $id = substr(md5(uniqid()), 0, 4); +?> +
    +
    +
    + + + +
    +
    +
    + +
    +
    +
    +
    + i { + text-decoration: none; +} +ul.actions li a > i { + color: #000; + margin-right: 5px; +} +ul.actions li a.btn > i { + font-size: 200%; +} + +ul.tree, ul.tree ul { + margin-left: 20px; +} + +ul.jqtree-tree li.jqtree-selected > .jqtree-element, +ul.jqtree-tree li.jqtree-selected > .jqtree-element:hover { + background-color: #fff; + background: none; + text-shadow: none; + font-weight: bold; +} + +legend > span { + float: right; +} + +td.today { + background-color: rgb(255, 200, 0); +} + +td.event { + background-color: rgb(0, 200, 255); +} + +.wordbreak { + word-break: break-word; +} + +.btn-file { + position: relative; + overflow: hidden; +} +.btn-file input[type=file] { + position: absolute; + top: 0; + right: 0; + min-width: 100%; + min-height: 100%; + font-size: 999px; + text-align: right; + filter: alpha(opacity=0); + opacity: 0; + background: red; + cursor: inherit; + display: block; +} +input[readonly] { + background-color: white !important; + cursor: text !important; +} + +div.mandatories { + font-size: 90%; + font-style: italic; + color: #888; +} +div.mandatories span { + font-weight: bold; +} + +div.statusbar { + font-size: 80%; +} +div.statusbar div.filename { + display: inline-block; +} +div.statusbar div.filesize { + display: inline-block; + float: right; +} +div.statusbar div.progress { + margin-bottom: 10px; +} +div.statusbar a.btn { + margin-bottom: 10px; +} + +#database .chosen-container, +#fulltext .chosen-container { + width: 95% !important; +} + +.chosen-container-multi .chosen-choices { + border: 1px solid #cccccc; + border-radius: 4px; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + transition: border linear 0.2s, box-shadow linear 0.2s; + padding: 2px 6px; + height: 20px; +} + +div.help h1 { + font-size: 24px; +} + +div.help h2 { + font-size: 18px; +} + +div.help h3 { + font-size: 16px; +} + +div.splash { + display: none; +} + +div.clipboard-container { + position: fixed; + left: 10px; + top: 40px; + width: 29.8%; + background: white; + border: 1px solid #d4d4d4; + border-radius: 5px; + padding: 10px; + height: 500px; + margin: 10px; + overflow-y: auto; + overflow-x: hidden; +} + +div.statusbar-container { + display: none; + position: fixed; + right:10px; + top:60px; + width:300px; + padding:10px; + background-color: white; + border: 1px solid #E0E0E0; + border-radius: 4px; + z-index: 10; + overflow-y: scroll; + max-height: calc(100% - 100px); +} +div.statusbar-container::-webkit-scrollbar { + width: 5px; +} +div.statusbar-container::-webkit-scrollbar-track { + -webkit-box-shadow: inset 0 0 6px rgba(0,0,0,0.3); + border-radius: 10px; +} + +div.statusbar-container::-webkit-scrollbar-thumb { + border-radius: 10px; + -webkit-box-shadow: inset 0 0 6px rgba(0,0,0,0.5); +} + +div.statusbar-container h1 { + font-size: 21px; + line-height: 40px; + color: #333333; + font-weight: normal; +} + +ul.jqtree-tree li.jqtree_common > .jqtree-element:hover { + background-color: #E0E0E0; +} + +span.datepicker { + padding: 0px; +} +/* Sidenav for Docs + * -------------------------------------------------- */ + +.bs-docs-sidenav { + width: 100%; + margin: 0px 0 30px 0; + padding: 0; + background-color: #fff; + -webkit-border-radius: 6px; + -moz-border-radius: 6px; + border-radius: 6px; + -webkit-box-shadow: 0 1px 4px rgba(0,0,0,.065); + -moz-box-shadow: 0 1px 4px rgba(0,0,0,.065); + box-shadow: 0 1px 4px rgba(0,0,0,.065); +} +.bs-docs-sidenav > li > a { + display: block; + width: 190px \9; + margin: 0 0 -1px; + padding: 8px 14px; + border: 1px solid #e5e5e5; +} +.bs-docs-sidenav > li:first-child > a { + -webkit-border-radius: 6px 6px 0 0; + -moz-border-radius: 6px 6px 0 0; + border-radius: 6px 6px 0 0; +} +.bs-docs-sidenav > li:last-child > a { + -webkit-border-radius: 0 0 6px 6px; + -moz-border-radius: 0 0 6px 6px; + border-radius: 0 0 6px 6px; +} +.bs-docs-sidenav > .active > a { + position: relative; + z-index: 2; + padding: 9px 15px; + border: 0; + text-shadow: 0 1px 0 rgba(0,0,0,.15); + -webkit-box-shadow: inset 1px 0 0 rgba(0,0,0,.1), inset -1px 0 0 rgba(0,0,0,.1); + -moz-box-shadow: inset 1px 0 0 rgba(0,0,0,.1), inset -1px 0 0 rgba(0,0,0,.1); + box-shadow: inset 1px 0 0 rgba(0,0,0,.1), inset -1px 0 0 rgba(0,0,0,.1); +} +/* Chevrons */ +.bs-docs-sidenav .badge-right { + float: right; + margin-top: 2px; + margin-right: -6px; +} +.bs-docs-sidenav > li > a:hover { + background-color: #f5f5f5; +} +.bs-docs-sidenav a:hover .icon-chevron-right { + opacity: .5; +} +.bs-docs-sidenav .active .icon-chevron-right, +.bs-docs-sidenav .active a:hover .icon-chevron-right { + background-image: url(../img/glyphicons-halflings-white.png); + opacity: 1; +} +.bs-docs-sidenav.affix { + top: 100px; +} +.bs-docs-sidenav.affix-bottom { + position: absolute; + top: auto; + bottom: 270px; +} + +i.success {color: #00b000;} +i.enabled {color: #00b000;} +i.error {color: #b00000;} +i.disabled {color: #b00000;} +i.warning {color: #ff9900;} +i.initstate {color: #ff9900;} +i.released {color: #00b000;} +i.rejected {color: #b00000;} +i.in-workflow {color: #11479e;} +i.workflow-action {color: #91479e;} +i.selected {border: 1px solid #d4d4d4;padding:3px;border-radius:3px;background-color:#fafafa;background-image: linear-gradient(to bottom, #ffffff, #f2f2f2);} + +span.editable:after { + font: normal normal normal 14px/1 FontAwesome; + content: " \f044"; +} + +span.openpopupbox { + cursor: pointer; +} + +div.popupbox { + margin-top: 5px; + background-color: #fff; + border-radius: 4px; + color: black; + text-align: left; + text-shadow: none; + border: 1px solid #ccc; + padding: 25px 15px 15px 15px; + display: none; + position: absolute; + min-width: 230px; + z-index: 10; +} + +div.popupbox dt { + font-weight: normal; + font-size: 80%; +} + +div.popupbox dd { + margin-left: 0px; + margin-bottom: 5px; +} + +div.popupbox span.closepopupbox { + position: absolute; + right: 5px; + top: 0px; +} + +ul.qq-upload-list { + /* + background-color: #fff; + border-radius: 4px; + border: 1px solid #cccccc; + */ +} + +ul.qq-upload-list li { + display: inline-block; + margin: 5px 5px 5px 0; + padding: 5px; + background-color: #fff; + border: 1px solid #cccccc; + border-radius: 4px; +} + +ul.qq-upload-list li img { + display: block; +} + +ul.qq-upload-list li span { + display: block; +} + +.qq-upload-button { + display: inline-block; +} + +.qq-upload-drop-area { + display: inline-block; + width: 200px; + height: 22px; + padding: 3px; + background-color: #fff; + border: 1px solid #cccccc; + border-radius: 4px; +} +.qq-hide, .qq-uploader dialog { + display: none; +} diff --git a/views/bootstrap4/styles/application.js b/views/bootstrap4/styles/application.js new file mode 100644 index 000000000..d6339a280 --- /dev/null +++ b/views/bootstrap4/styles/application.js @@ -0,0 +1,1425 @@ +/* Template function which outputs an option in a chzn-select + * The replace() call is required to prevent xss attacks (see CVE-2019-12745) + * Using htmlspecialchars() in php isn't sufficient because, chzn_template_func + * will receive an unescaped string + * (see https://forums.select2.org/t/propperly-escape-option-value-to-prevent-xss/788) + */ +chzn_template_func = function (state) { + var subtitle = ''; + if($(state.element).data('subtitle')) + subtitle = $(state.element).data('subtitle')+''; /* make sure it is a string */ + var warning = ''; + if($(state.element).data('warning')) + warning = $(state.element).data('warning')+''; /* make sure it is a string */ + var html = ''; + if($(state.element).data('icon-before')) + html += ' '; + html += state.text.replace(/'; + if(warning) + html += '
    '+warning+''; + html += '
    '; + var $newstate = $(html); + return $newstate; +}; +function escapeHtml(text) { + var map = { + '&': '&', + '<': '<', + '>': '>', + '"': '"', + "'": ''' + }; + + return text.replace(/[&<>"']/g, function(m) { return map[m]; }); +} + +function treeFolderSelected(formid, nodeid, nodename) { + $('#'+formid).val(nodeid); + $('#choosefoldersearch'+formid).val(nodename); + $('#folderChooser'+formid).modal('hide'); +} + +function treeDocumentSelected(formid, nodeid, nodename) { + $('#'+formid).val(nodeid); + $('#choosedocsearch'+formid).val(nodename); + $('#docChooser'+formid).modal('hide'); +} + +$(document).ready( function() { +// $('.dropdown-menu a.dropdown-toggle').on('click', function(e) { + $('body').on('click', '.dropdown-menu a.dropdown-toggle', function (e) { + if (!$(this).next().hasClass('show')) { + $(this).parents('.dropdown-menu').first().find('.show').removeClass("show"); + } + var $subMenu = $(this).next(".dropdown-menu"); + $subMenu.toggleClass('show'); + + + $(this).parents('li.nav-item.dropdown.show').on('hidden.bs.dropdown', function(e) { + $('.dropdown-submenu .show').removeClass("show"); + }); + + + return false; + }); + + /* close popovers when clicking somewhere except in the popover or the + * remove icon + */ + $('html').on('click', function(e) { + if (typeof $(e.target).data('original-title') == 'undefined' && !$(e.target).parents().is('.popover.in') && !$(e.target).is('.fa fa-remove')) { + $('[data-original-title]').popover('hide'); + } + }); + + $('body').on('hidden', '.modal', function () { + $(this).removeData('modal'); + }); + + /* Bootstrap 4 does not support to the remote loading of the modal content + * anymore. This adds it by using jquery. + */ + $('body').on('click', '[data-toggle="modal"]', function(ev){ + ev.preventDefault(); + $($(this).data("target")+' .modal-body').load($(this).data("remote")); + }); + +// $('body').on('touchstart.dropdown', '.dropdown-menu', function (e) { e.stopPropagation(); }); + + $('.datepicker, #expirationdate, #createstartdate, #createenddate, #expirationstartdate, #expirationenddate') + .datepicker({todayHighlight: true, toggleActive: true, autoclose: "true"}) + /* + .on('changeDate', function(ev){ + if(ev.date && $(ev.target).data('selectmenu')) { + $("#"+$(ev.target).data('selectmenu')).val('date'); + } + $(ev.currentTarget).datepicker('hide'); + }); +*/ + + $(".chzn-select").select2({ + theme: "bootstrap4", + //width: '100%', + templateResult: chzn_template_func//, + //templateSelection: chzn_template_func + }); + + /* change the color and length of the bar graph showing the password + * strength on each change to the passwod field. + */ + $(".pwd").passStrength({ /* {{{ */ + url: "../op/op.Ajax.php", + onChange: function(data, target) { + pwsp = 100*data.score; + $('#'+target+' div.bar').width(pwsp+'%'); + if(data.ok) { + $('#'+target+' div.bar').removeClass('bg-danger'); + $('#'+target+' div.bar').addClass('bg-success'); + } else { + $('#'+target+' div.bar').removeClass('bg-success'); + $('#'+target+' div.bar').addClass('bg-danger'); + } + } + }); /* }}} */ + + /* The typeahead functionality useѕ the modified version of + * bootstrap-typeahead, which is able to set the render function. + * This was needed because the search function return json objects + * for each hit and render could only process strings. + * */ + $("#searchfield").typeahead({ /* {{{ */ + menu: '', + item: '
  • ', + minLength: 3, + items: 100, /* the query will limit the number of hits */ + source: function(query, process) { + var d = new Date(); + var pastYear = d.getFullYear() - 1; + d.setFullYear(pastYear); +// console.log(d.toISOString().split('T')[0]); + +// $.get('../restapi/index.php/search', { query: query, limit: 8, mode: 'typeahead' }, function(data) { + var data = { + query: query, + limit: 18, +// fullsearch: 1, +// creationdate: 1, +// createstart: d.toISOString().split('T')[0], + action: 'typeahead' + }; + /* Return a list of json objects, each containing + * type: type of object (D=doc, F=folder, S=searchterm) + * name: name of object + */ + $.get('../out/out.Search.php', data, function(data) { + process(data); + }); + }, + /* updater is called when the item in the list is clicked. It is + * actually provided to update the input field, but here we use + * it to set the document location. The passed value is the string + * set in data-value of the list items. + * This method relies on some changes in bootstrap-typeahead.js + * Originally, update was passed only the data-value of the li item + * which is set in the render fuction below, + * but the modified version passes all data fields. which also + * contain the 'id' and 'type' (also set in render function). + **/ + updater: function (item) { + if(item.id) { + if(item.type == 'D') + document.location = "../out/out.ViewDocument.php?documentid=" + item.id; + else + document.location = "../out/out.ViewFolder.php?folderid=" + item.id; + } else + document.location = "../out/out.Search.php?query=" + encodeURIComponent(item.value); + return item.value; + }, + sorter: function(items) { + return items; + }, + /* matcher will always return true, because the initial search returns + * matches only + */ + matcher : function (item) { + return true; + }, + /* highlighter is for modifying the 'a' tag text. It places an icon + * in front of the name and replaces a '<' within the name with an + * entity. + **/ + highlighter : function (item) { + if(item.type.charAt(0) == 'D') + return ' ' + item.name.replace(/ ' + item.name.replace(/ ' + item.name.replace(/ ' + strarr[1].replace(/ ' + strarr[1].replace(/
    '); + $.get(url, function(data) { + element.html(data); + $(".chzn-select").select2({ + theme: "bootstrap4", + width: '100%', + templateResult: chzn_template_func//, + //templateSelection: chzn_template_func + }); + $(".pwd").passStrength({ /* {{{ */ + url: "../op/op.Ajax.php", + onChange: function(data, target) { + pwsp = 100*data.score; + $('#'+target+' div.bar').width(pwsp+'%'); + if(data.ok) { + $('#'+target+' div.bar').removeClass('bar-danger'); + $('#'+target+' div.bar').addClass('bar-success'); + } else { + $('#'+target+' div.bar').removeClass('bar-success'); + $('#'+target+' div.bar').addClass('bar-danger'); + } + } + }); /* }}} */ + if(afterload) { + var func = eval(afterload); + if(typeof func === "function"){ + func(); + } + } + }); + }); /* }}} */ + + $('div.ajax').on('update', function(event, param1, callback) { /* {{{ */ + var element = $(this); + var url = ''; + var href = element.data('href'); + var base = element.data('base'); + if(typeof base == 'undefined') + base = ''; + var view = element.data('view'); + var action = element.data('action'); + var query = element.data('query'); + var afterload = $(this).data('afterload'); + if(view && action) { + url = seeddms_webroot+base+"out/out."+view+".php?action="+action; + if(query) { + url += "&"+query; + } + } else + url = href; + if(typeof param1 === 'object') { + for(var key in param1) { + if(key == 'callback') + callback = param1[key]; + else { + if($.isArray(param1[key])) { + if(param1[key].length > 0) + url += "&"+key+"[]="+param1[key].join("&"+key+"[]="); + } else + url += "&"+key+"="+param1[key]; + } + } + } else { + url += "&"+param1; + } + console.log(url); + if(!element.data('no-spinner')) + element.prepend('
    '); + $.get(url, function(data) { + element.html(data); + $(".chzn-select").select2({ + theme: "bootstrap4", + width: '100%', + templateResult: chzn_template_func//, + //templateSelection: chzn_template_func + }); + $(".pwd").passStrength({ /* {{{ */ + url: "../op/op.Ajax.php", + onChange: function(data, target) { + pwsp = 100*data.score; + $('#'+target+' div.bar').width(pwsp+'%'); + if(data.ok) { + $('#'+target+' div.bar').removeClass('bar-danger'); + $('#'+target+' div.bar').addClass('bar-success'); + } else { + $('#'+target+' div.bar').removeClass('bar-success'); + $('#'+target+' div.bar').addClass('bar-danger'); + } + } + }); /* }}} */ + if(callback) + callback.call(); + if(afterload) { + var func = eval(afterload); + if(typeof func === "function"){ + func(); + } + } + }); + }); /* }}} */ + + $("body").on("click", ".ajax-click", function() { /* {{{ */ + var element = $(this); + var url = element.data('href')+"?"+element.data('param1'); + $.ajax({ + type: 'GET', + url: url, + dataType: 'json', + success: function(data){ + if(data.success) { + if(element.data('param1') == 'command=clearclipboard') { + $("#main-clipboard").html('Loading').load('../out/out.Clipboard.php?action=mainclipboard') + $("#menu-clipboard div").html('Loading').load('../out/out.Clipboard.php?action=menuclipboard') + } + noty({ + text: data.message, + type: 'success', + dismissQueue: true, + layout: 'topRight', + theme: 'defaultTheme', + timeout: 1500 + }); + } else { + noty({ + text: data.message, + type: 'error', + dismissQueue: true, + layout: 'topRight', + theme: 'defaultTheme', + timeout: 3500 + }); + } + } + }); + }); /* }}} */ + + $('button.history-back').on('click', function(event) { /* {{{ */ + window.history.back(); + }); /* }}} */ + + $("body").on("blur", "span.editable", function(e) { /* {{{ */ + console.log($(this).data('document')); + console.log('Hallo'+$(this).text()); + e.preventDefault(); + $.post( "../op/op.Ajax.php", { command: "setdocumentname", id: $(this).data('document'), name: $(this).text() }) + .done(function( data ) { + noty({ + text: data.message, + type: data.success ? 'success' : 'error', + dismissQueue: true, + layout: 'topRight', + theme: 'defaultTheme', + timeout: 1500 + }); + }); + }); /* }}} */ + + $("body").on("keypress", "span.editable", function(e) { /* {{{ */ + if(e.which == 13) { + $(this).blur(); + } + return e.which != 13; + }); /* }}} */ +}); + +function onAddClipboard(ev) { /* {{{ */ + ev.preventDefault(); + var source_info = JSON.parse(ev.originalEvent.dataTransfer.getData("text")); + source_type = source_info.type; + source_id = source_info.id; + formtoken = source_info.formtoken; + if(source_type == 'document' || source_type == 'folder') { + $.get('../op/op.Ajax.php', + { command: 'addtoclipboard', type: source_type, id: source_id }, + function(data) { + if(data.success) { + $("#main-clipboard").html('Loading').load('../out/out.Clipboard.php?action=mainclipboard') + $("#menu-clipboard div").html('Loading').load('../out/out.Clipboard.php?action=menuclipboard') + noty({ + text: data.message, + type: 'success', + dismissQueue: true, + layout: 'topRight', + theme: 'defaultTheme', + timeout: 1500 + }); + } else { + noty({ + text: data.message, + type: 'error', + dismissQueue: true, + layout: 'topRight', + theme: 'defaultTheme', + timeout: 3500 + }); + } + }, + 'json' + ); + //url = "../op/op.AddToClipboard.php?id="+source_id+"&type="+source_type; + //document.location = url; + } +} /* }}} */ + +(function( SeedDMSUpload, $, undefined ) { /* {{{ */ + var ajaxurl = "../op/op.Ajax.php"; + var editBtnLabel = "Edit"; + var abortBtnLabel = "Abort"; + var maxFileSize = 100000; + var maxFileSizeMsg = 'File too large'; + var rowCount=0; + + SeedDMSUpload.setUrl = function(url) { + ajaxurl = url; + } + + SeedDMSUpload.setAbortBtnLabel = function(label) { + abortBtnLabel = label; + } + + SeedDMSUpload.setEditBtnLabel = function(label) { + editBtnLabel = label; + } + + SeedDMSUpload.setMaxFileSize = function(size) { + maxFileSize = size; + } + + SeedDMSUpload.setMaxFileSizeMsg = function(msg) { + maxFileSizeMsg = msg; + } + + function sendFileToServer(formData,status,callback) { + var uploadURL = ajaxurl; //Upload URL + var extraData ={}; //Extra Data. + var jqXHR=$.ajax({ + xhr: function() { + var xhrobj = $.ajaxSettings.xhr(); + if (xhrobj.upload) { + xhrobj.upload.addEventListener('progress', function(event) { + var percent = 0; + var position = event.loaded || event.position; + var total = event.total; + if (event.lengthComputable) { + percent = Math.ceil(position / total * 100); + } + //Set progress + status.setProgress(percent); + }, false); + } + return xhrobj; + }, + url: uploadURL, + type: "POST", + contentType: false, + dataType:"json", + processData: false, + cache: false, + data: formData, + success: function(data, textStatus) { + status.setProgress(100); + if(data.success) { + noty({ + text: data.message, + type: 'success', + dismissQueue: true, + layout: 'topRight', + theme: 'defaultTheme', + timeout: 1500 + }); + status.statusbar.after($('' + editBtnLabel + '')); + if(callback) { + callback(); + } + } else { + noty({ + text: data.message, + type: 'error', + dismissQueue: true, + layout: 'topRight', + theme: 'defaultTheme', + timeout: 3500 + }); + } + } + }); + + status.setAbort(jqXHR); + } + + function createStatusbar(obj) { + rowCount++; + var row="odd"; + this.obj = obj; + if(rowCount %2 ==0) row ="even"; + this.statusbar = $("
    "); + this.filename = $("
    ").appendTo(this.statusbar); + this.size = $("
    ").appendTo(this.statusbar); + this.progressBar = $("
    ").appendTo(this.statusbar); + this.abort = $("
    " + abortBtnLabel + "
    ").appendTo(this.statusbar); +// $('.statusbar').empty(); + obj.after(this.statusbar); + this.setFileNameSize = function(name,size) { + var sizeStr=""; + var sizeKB = size/1024; + if(parseInt(sizeKB) > 1024) { + var sizeMB = sizeKB/1024; + sizeStr = sizeMB.toFixed(2)+" MB"; + } else { + sizeStr = sizeKB.toFixed(2)+" KB"; + } + + this.filename.html(name); + this.size.html(sizeStr); + } + this.setProgress = function(progress) { + var progressBarWidth =progress*this.progressBar.width()/ 100; + this.progressBar.find('div').animate({ width: progressBarWidth }, 10).html(progress + "% "); + if(parseInt(progress) >= 100) { + this.abort.hide(); + } + } + this.setAbort = function(jqxhr) { + var sb = this.statusbar; + this.abort.click(function() { + jqxhr.abort(); + sb.hide(); + }); + } + } + + SeedDMSUpload.handleFileUpload = function(files,obj,statusbar) { + /* target is set for the quick upload area */ + var target_id = obj.data('target'); + var target_type = 'folder'; + /* droptarget is set for folders and documents in lists */ + var droptarget = obj.data('droptarget'); + if(droptarget) { + target_type = droptarget.split("_")[0]; + target_id = droptarget.split("_")[1]; + } + if(target_type == 'folder' && target_id) { + for (var i = 0; i < files.length; i++) { + if(files[i].size <= maxFileSize) { + var fd = new FormData(); + fd.append('targettype', target_type); + fd.append('folderid', target_id); + fd.append('formtoken', obj.data('uploadformtoken')); + fd.append('userfile', files[i]); + fd.append('command', 'uploaddocument'); +// fd.append('path', files[i].webkitRelativePath); + + statusbar.parent().show(); + var status = new createStatusbar(statusbar); + status.setFileNameSize(files[i].name,files[i].size); + sendFileToServer(fd,status,function(){ + if(target_id == seeddms_folder) + $("div.ajax[data-action='folderList']").trigger('update', {folderid: seeddms_folder}); + }); + } else { + noty({ + text: maxFileSizeMsg + '
    ' + files[i].name + ' (' + files[i].size + ' Bytes)', + type: 'error', + dismissQueue: true, + layout: 'topRight', + theme: 'defaultTheme', + timeout: 5000 + }); + } + } + } else if(target_type == 'document' && target_id) { + /* + for (var i = 0; i < files.length; i++) { + if(files[i].size <= maxFileSize) { + var fd = new FormData(); + fd.append('targettype', target_type); + fd.append('documentid', target_id); + fd.append('formtoken', obj.data('uploadformtoken')); + fd.append('userfile', files[i]); + fd.append('command', 'uploaddocument'); + + var status = new createStatusbar(statusbar); + status.setFileNameSize(files[i].name,files[i].size); + sendFileToServer(fd,status); + } else { + noty({ + text: maxFileSizeMsg + '
    ' + files[i].name + ' (' + files[i].size + ' Bytes)', + type: 'error', + dismissQueue: true, + layout: 'topRight', + theme: 'defaultTheme', + timeout: 5000 + }); + } + } + */ + } + } +}( window.SeedDMSUpload = window.SeedDMSUpload || {}, jQuery )); /* }}} */ + +$(document).ready(function() { /* {{{ */ + $(document).on('dragenter', "#draganddrophandler", function (e) { + e.stopPropagation(); + e.preventDefault(); + $(this).css('border', '2px dashed #0B85A1'); + }); + $(document).on('dragleave', "#draganddrophandler", function (e) { + $(this).css('border', '0px solid white'); + }); + $(document).on('dragover', "#draganddrophandler", function (e) { + e.stopPropagation(); + e.preventDefault(); + }); + $(document).on('drop', "#draganddrophandler", function (e) { + $(this).css('border', '0px dotted #0B85A1'); + e.preventDefault(); + var files = e.originalEvent.dataTransfer.files; + + //We need to send dropped files to Server + SeedDMSUpload.handleFileUpload(files, $(this), $(this)); + }); + + $(document).on('dragenter', '.droptarget', function (e) { + e.stopPropagation(); + e.preventDefault(); + $(e.currentTarget).css('border', '2px dashed #0B85A1'); + }); + $(document).on('dragleave', '.droptarget', function (e) { + e.stopPropagation(); + e.preventDefault(); + $(e.currentTarget).css('border', '0px solid white'); + }); + $(document).on('dragover', '.droptarget', function (e) { + e.stopPropagation(); + e.preventDefault(); + }); + $(document).on('drop', '.droptarget', function (e) { + e.preventDefault(); + e.stopPropagation(); + $(e.currentTarget).css('border', '0px solid white'); + attr_rel = $(e.currentTarget).data('droptarget'); + target_type = attr_rel.split("_")[0]; + target_id = attr_rel.split("_")[1]; + target_name = $(e.currentTarget).data('name')+''; // Force this to be a string + if(target_type == 'folder') { + var files = e.originalEvent.dataTransfer.files; + if(files.length > 0) { +// console.log('Drop '+files.length+' files on '+target_type+' '+target_id); + SeedDMSUpload.handleFileUpload(files,$(e.currentTarget),$('div.statusbar-container h1')/*$(e.currentTarget).find("span")*/); + } else { + var source_info = JSON.parse(e.originalEvent.dataTransfer.getData("text")); + source_type = source_info.type; + source_id = source_info.id; + formtoken = source_info.formtoken; +// console.log('Drop '+source_type+' '+source_id+' on '+target_type+' '+target_id); + if(source_type == 'document') { + var bootbox_message = trans.confirm_move_document; + if(source_info.name) + bootbox_message += "

    "+escapeHtml(source_info.name)+' '+escapeHtml(target_name)+"

    "; + bootbox.dialog({ + "message" : bootbox_message, + "buttons" : { + "cancel" : { + "label" : trans.cancel, + "className" : "btn-secondary", + "callback": function() { + } + }, + "move" : { + "label" : " "+trans.move_document, + "className" : "btn-danger", + "callback": function() { + $.get('../op/op.Ajax.php', + { command: 'movedocument', docid: source_id, targetfolderid: target_id, formtoken: formtoken }, + function(data) { + if(data.success) { + $('#table-row-document-'+source_id).hide('slow'); + noty({ + text: data.message, + type: 'success', + dismissQueue: true, + layout: 'topRight', + theme: 'defaultTheme', + timeout: 1500 + }); + } else { + noty({ + text: data.message, + type: 'error', + dismissQueue: true, + layout: 'topRight', + theme: 'defaultTheme', + timeout: 3500 + }); + } + }, + 'json' + ); + } + } + } + }); + + url = "../out/out.MoveDocument.php?documentid="+source_id+"&targetid="+target_id; + // document.location = url; + } else if(source_type == 'folder' && source_id != target_id) { + var bootbox_message = trans.confirm_move_folder; + if(source_info.name) + bootbox_message += "

    "+escapeHtml(source_info.name)+' '+escapeHtml(target_name)+"

    "; + bootbox.dialog({ + "message" : bootbox_message, + "buttons" : { + "cancel" : { + "label" : trans.cancel, + "className" : "btn-secondary", + "callback": function() { + } + }, + "move" : { + "label" : " "+trans.move_folder, + "className" : "btn-danger", + "callback": function() { + $.get('../op/op.Ajax.php', + { command: 'movefolder', folderid: source_id, targetfolderid: target_id, formtoken: formtoken }, + function(data) { + if(data.success) { + $('#table-row-folder-'+source_id).hide('slow'); + noty({ + text: data.message, + type: 'success', + dismissQueue: true, + layout: 'topRight', + theme: 'defaultTheme', + timeout: 1500 + }); + } else { + noty({ + text: data.message, + type: 'error', + dismissQueue: true, + layout: 'topRight', + theme: 'defaultTheme', + timeout: 3500 + }); + } + }, + 'json' + ); + } + } + } + }); + + url = "../out/out.MoveFolder.php?folderid="+source_id+"&targetid="+target_id; + // document.location = url; + } + } + } else if(target_type == 'document') { + var files = e.originalEvent.dataTransfer.files; + if(files.length > 0) { +// console.log('Drop '+files.length+' files on '+target_type+' '+target_id); + SeedDMSUpload.handleFileUpload(files,$(e.currentTarget),$('div.statusbar-container h1')/*$(e.currentTarget).find("span")*/); + } else { + var source_info = JSON.parse(e.originalEvent.dataTransfer.getData("text")); + source_type = source_info.type; + source_id = source_info.id; + formtoken = source_info.formtoken; +// console.log('Drop '+source_type+' '+source_id+' on '+target_type+' '+target_id); + if(source_type == 'document') { + if(source_id != target_id) { + bootbox.dialog({ + "message" : trans.confirm_transfer_link_document, + "buttons" : { + "cancel" : { + "label" : trans.cancel, + "className" : "btn-secondary", + "callback": function() { + } + }, + "transfer": { + "label" : " "+trans.transfer_content, + "className" : "btn-danger", + "callback": function() { + $.get('../op/op.Ajax.php', + { command: 'transfercontent', docid: source_id, targetdocumentid: target_id, formtoken: formtoken }, + function(data) { + if(data.success) { + $('#table-row-document-'+source_id).hide('slow'); + noty({ + text: data.message, + type: 'success', + dismissQueue: true, + layout: 'topRight', + theme: 'defaultTheme', + timeout: 1500 + }); + } else { + noty({ + text: data.message, + type: 'error', + dismissQueue: true, + layout: 'topRight', + theme: 'defaultTheme', + timeout: 3500 + }); + } + }, + 'json' + ); + } + }, + "link" : { + "label" : trans.link_document, + "className" : "btn-danger", + "callback": function() { + $.get('../op/op.Ajax.php', + { command: 'linkdocument', docid: source_id, targetdocumentid: target_id, formtoken: formtoken }, + function(data) { + if(data.success) { + noty({ + text: data.message, + type: 'success', + dismissQueue: true, + layout: 'topRight', + theme: 'defaultTheme', + timeout: 1500 + }); + } else { + noty({ + text: data.message, + type: 'error', + dismissQueue: true, + layout: 'topRight', + theme: 'defaultTheme', + timeout: 3500 + }); + } + }, + 'json' + ); + } + } + } + }); + } + url = "../out/out.MoveDocument.php?documentid="+source_id+"&targetid="+target_id; + // document.location = url; + } + } + } else if(target_type == 'attachment') { + console.log('attachment'); + var files = e.originalEvent.dataTransfer.files; + if(files.length > 0) { + } + } + }); + $(document).on('dragstart', '.table-row-folder', function (e) { + attr_rel = $(e.target).attr('rel'); + if(typeof attr_rel == 'undefined') + return; + var dragStartInfo = { + id : attr_rel.split("_")[1], + type : "folder", + formtoken : $(e.target).attr('formtoken'), + name: $(e.target).data('name')+'' + }; + /* Currently not used + $.ajax({url: '../out/out.ViewFolder.php', + type: 'GET', + dataType: "json", + data: {action: 'data', folderid: attr_rel.split("_")[1]}, + success: function(data) { + if(data) { + dragStartInfo.source = data; + } + }, + timeout: 3000 + }); + */ + e.originalEvent.dataTransfer.setData("text", JSON.stringify(dragStartInfo)); + }); + + $(document).on('dragstart', '.table-row-document', function (e) { + attr_rel = $(e.target).attr('rel'); + if(typeof attr_rel == 'undefined') + return; + var dragStartInfo = { + id : attr_rel.split("_")[1], + type : "document", + formtoken : $(e.target).attr('formtoken'), + name: $(e.target).data('name')+'' + }; + e.originalEvent.dataTransfer.setData("text", JSON.stringify(dragStartInfo)); + }); + + /* Dropping item on alert below clipboard */ + $(document).on('dragenter', '.add-clipboard-area', function (e) { + e.stopPropagation(); + e.preventDefault(); + $(this).css('border', '2px dashed #0B85A1'); + }); + $(document).on('dragleave', '.add-clipboard-area', function (e) { + $(this).css('border', '0px solid white'); + }); + $(document).on('dragover', '.add-clipboard-area', function (e) { + e.preventDefault(); + }); + $(document).on('drop', '.add-clipboard-area', function (e) { + $(this).css('border', '0px dotted #0B85A1'); + onAddClipboard(e); + }); + + $("#jqtree").on('dragenter', function (e) { + attr_rel = $(e.srcElement).attr('rel'); + if(typeof attr_rel == 'undefined') + return; + $(e.target).parent().css('border', '1px dashed #0B85A1'); + e.stopPropagation(); + e.preventDefault(); + }); + $("#jqtree").on('dragleave', function (e) { + attr_rel = $(e.srcElement).attr('rel'); + if(typeof attr_rel == 'undefined') + return; + $(e.target).parent().css('border', '0px solid white'); + e.stopPropagation(); + e.preventDefault(); + }); + $("#jqtree").on('dragover', function (e) { + e.stopPropagation(); + e.preventDefault(); + }); + $("#jqtree").on('drop', function (e) { + e.stopPropagation(); + e.preventDefault(); + attr_rel = $(e.target).attr('rel'); + if(typeof attr_rel == 'undefined') + return; + $(e.target).parent().css('border', '1px solid white'); + target_type = attr_rel.split("_")[0]; + target_id = attr_rel.split("_")[1]; + var source_info = JSON.parse(e.originalEvent.dataTransfer.getData("text")); + source_type = source_info.type; + source_id = source_info.id; + formtoken = source_info.formtoken; + if(source_type == 'document') { + bootbox.dialog(trans.confirm_move_document, [{ + "label" : " "+trans.move_document, + "class" : "btn-danger", + "callback": function() { + $.get('../op/op.Ajax.php', + { command: 'movedocument', docid: source_id, targetfolderid: target_id, formtoken: formtoken }, + function(data) { + if(data.success) { + $('#table-row-document-'+source_id).hide('slow'); + noty({ + text: data.message, + type: 'success', + dismissQueue: true, + layout: 'topRight', + theme: 'defaultTheme', + timeout: 1500 + }); + } else { + noty({ + text: data.message, + type: 'error', + dismissQueue: true, + layout: 'topRight', + theme: 'defaultTheme', + timeout: 3500 + }); + } + }, + 'json' + ); + } + }, { + "label" : trans.cancel, + "class" : "btn-cancel", + "callback": function() { + } + }]); + + url = "../out/out.MoveDocument.php?documentid="+source_id+"&targetid="+target_id; +// document.location = url; + } else if(source_type == 'folder' && source_id != target_id) { + bootbox.dialog(trans.confirm_move_folder, [{ + "label" : " "+trans.move_folder, + "class" : "btn-danger", + "callback": function() { + $.get('../op/op.Ajax.php', + { command: 'movefolder', folderid: source_id, targetfolderid: target_id, formtoken: formtoken }, + function(data) { + if(data.success) { + $('#table-row-folder-'+source_id).hide('slow'); + noty({ + text: data.message, + type: 'success', + dismissQueue: true, + layout: 'topRight', + theme: 'defaultTheme', + timeout: 1500 + }); + } else { + noty({ + text: data.message, + type: 'error', + dismissQueue: true, + layout: 'topRight', + theme: 'defaultTheme', + timeout: 3500 + }); + } + }, + 'json' + ); + } + }, { + "label" : trans.cancel, + "class" : "btn-cancel", + "callback": function() { + } + }]); + + url = "../out/out.MoveFolder.php?folderid="+source_id+"&targetid="+target_id; +// document.location = url; + } + }); + + $('div.splash').each(function(index) { + var element = $(this); + var msgtype = element.data('type'); + var timeout = element.data('timeout'); + var msg = element.text(); + noty({ + text: msg, + type: msgtype, + dismissQueue: true, + layout: 'topRight', + theme: 'defaultTheme', + timeout: (typeof timeout == 'undefined' ? 1500 : timeout) + }); + }); + + $("body").on("click", "span.openpopupbox", function(e) { + $(""+$(e.target).data("href")).toggle(); + e.stopPropagation(); + }); + $("body").on("click", "span.openpopupbox i", function(e) { + $(e.target).parent().click(); + }); + $("body").on("click", "span.openpopupbox span", function(e) { + $(e.target).parent().click(); + }); + $("body").on("click", "span.closepopupbox", function(e) { + $(this).parent().hide(); + e.stopPropagation(); + }); + + $("body").on("mouseenter", "#main-menu-dropfolderlist div.dropdown-menu a", function(e) { + $(e.currentTarget).find('.dropfolder-menu-img').css('display', 'inline'); + }); + $("body").on("mouseleave", "#main-menu-dropfolderlist div.dropdown-menu a", function(e) { + $(e.currentTarget).find('.dropfolder-menu-img').hide(); + }); + +}); /* }}} */ + +$(document).ready(function() { /* {{{ */ + $('body').on('click.modal.data-api', '[data-toggle="modal"]', function(){ + $($(this).data("target")+' .modal-body').load($(this).attr('href')); + }); +}); /* }}} */ + +(function( SeedDMSTask, $, undefined ) { /* {{{ */ + var approval_count, review_count, workflow_count; + var timeout = 1000; + var counter = 0; + var tasks = Array( + {name: 'checktasks', interval: 15, func: + checkTasks = function() { + $.ajax({url: '../out/out.Tasks.php', + type: 'GET', + dataType: "json", + data: {action: 'mytasks'}, + success: function(data) { + if(data) { + if((typeof data.data.approval != 'undefined' && approval_count != data.data.approval.length) || + (typeof data.data.review != 'undefined' && review_count != data.data.review.length) || + (typeof data.data.workflow != 'undefined' && workflow_count != data.data.workflow.length)) { + // $("#menu-tasks").html('Loading').hide().load('../out/out.Tasks.php?action=menutasks').fadeIn('500') + $('#menu-tasks > div.ajax').trigger('update', {folderid: seeddms_folder}); + approval_count = typeof data.data.approval != 'undefined' ? data.data.approval.length : 0; + review_count = typeof data.data.review != 'undefined' ? data.data.review.length : 0; + workflow_count = typeof data.data.workflow != 'undefined' ? data.data.workflow.length : 0; + } + } + }, + timeout: 3000 + }); + } + } + ); + + SeedDMSTask.add = function(task) { + tasks.push(task); + } + + SeedDMSTask.run = function() { + for(let task of tasks) { + if(counter % task.interval == 0) { +// console.log("Running task '" + task.name + "'"); + task.func(); + } + } + //console.log(counter); + counter++; + timeOutId = setTimeout(SeedDMSTask.run, timeout); + } +}( window.SeedDMSTask = window.SeedDMSTask || {}, jQuery )); /* }}} */ diff --git a/views/bootstrap4/styles/seeddms.css b/views/bootstrap4/styles/seeddms.css new file mode 100644 index 000000000..ea7146ca8 --- /dev/null +++ b/views/bootstrap4/styles/seeddms.css @@ -0,0 +1,10899 @@ +/*! `SeedDMS` Bootstrap 4 theme */ +/* +@import url(https://fonts.googleapis.com/css?family=Nunito:200,300,400,700); +$font-family-base: "Nunito"; +*/ +@import url(https://fonts.googleapis.com/css?family=Source+Sans+Pro:200,300,400,700); +@import url(https://fonts.googleapis.com/css?family=Crete+Round:200,300,400,700); +/* +$theme-colors: ( + "primary": #04c, + "danger": #ff4136, + "custom-color": #900 +); +*/ +/*! + * Bootstrap v4.5.2 (https://getbootstrap.com/) + * Copyright 2011-2020 The Bootstrap Authors + * Copyright 2011-2020 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) + */ +:root { + --blue: #007bff; + --indigo: #6610f2; + --purple: #6f42c1; + --pink: #e83e8c; + --red: #dc3545; + --orange: #fd7e14; + --yellow: #ffc107; + --green: #28a745; + --teal: #20c997; + --cyan: #17a2b8; + --white: #fff; + --gray: #6c757d; + --gray-dark: #343a40; + --primary: #083358; + --secondary: #b8b8b8; + --success: #008a29; + --info: #74dbef; + --warning: #e6d200; + --danger: #e13737; + --light: #f4f4f4; + --dark: #072247; + --breakpoint-xs: 0; + --breakpoint-sm: 576px; + --breakpoint-md: 768px; + --breakpoint-lg: 992px; + --breakpoint-xl: 1200px; + --font-family-sans-serif: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; + --font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; +} + +*, +*::before, +*::after { + box-sizing: border-box; +} + +html { + font-family: sans-serif; + line-height: 1.15; + -webkit-text-size-adjust: 100%; + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); +} + +article, aside, figcaption, figure, footer, header, hgroup, main, nav, section { + display: block; +} + +body { + margin: 0; + font-family: "Source Sans Pro"; + font-size: 1rem; + font-weight: 400; + line-height: 1.5; + color: #212529; + text-align: left; + background-color: #fff; +} + +[tabindex="-1"]:focus:not(:focus-visible) { + outline: 0 !important; +} + +hr { + box-sizing: content-box; + height: 0; + overflow: visible; +} + +h1, h2, h3, h4, h5, h6 { + margin-top: 0; + margin-bottom: 0.25rem; +} + +p { + margin-top: 0; + margin-bottom: 1rem; +} + +abbr[title], +abbr[data-original-title] { + text-decoration: underline; + text-decoration: underline dotted; + cursor: help; + border-bottom: 0; + text-decoration-skip-ink: none; +} + +address { + margin-bottom: 1rem; + font-style: normal; + line-height: inherit; +} + +ol, +ul, +dl { + margin-top: 0; + margin-bottom: 1rem; +} + +ol ol, +ul ul, +ol ul, +ul ol { + margin-bottom: 0; +} + +dt { + font-weight: 700; +} + +dd { + margin-bottom: .5rem; + margin-left: 0; +} + +blockquote { + margin: 0 0 1rem; +} + +b, +strong { + font-weight: bolder; +} + +small { + font-size: 80%; +} + +sub, +sup { + position: relative; + font-size: 75%; + line-height: 0; + vertical-align: baseline; +} + +sub { + bottom: -.25em; +} + +sup { + top: -.5em; +} + +a { + color: #083358; + text-decoration: none; + background-color: transparent; +} + +a:hover { + color: #020a12; + text-decoration: underline; +} + +a:not([href]):not([class]) { + color: inherit; + text-decoration: none; +} + +a:not([href]):not([class]):hover { + color: inherit; + text-decoration: none; +} + +pre, +code, +kbd, +samp { + font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; + font-size: 1em; +} + +pre { + margin-top: 0; + margin-bottom: 1rem; + overflow: auto; + -ms-overflow-style: scrollbar; +} + +figure { + margin: 0 0 1rem; +} + +img { + vertical-align: middle; + border-style: none; +} + +svg { + overflow: hidden; + vertical-align: middle; +} + +table { + border-collapse: collapse; +} + +caption { + padding-top: 0.75rem; + padding-bottom: 0.75rem; + color: #6c757d; + text-align: left; + caption-side: bottom; +} + +th { + text-align: inherit; +} + +label { + display: inline-block; + margin-bottom: 0.5rem; +} + +button { + border-radius: 0; +} + +button:focus { + outline: 1px dotted; + outline: 5px auto -webkit-focus-ring-color; +} + +input, +button, +select, +optgroup, +textarea { + margin: 0; + font-family: inherit; + font-size: inherit; + line-height: inherit; +} + +button, +input { + overflow: visible; +} + +button, +select { + text-transform: none; +} + +[role="button"] { + cursor: pointer; +} + +select { + word-wrap: normal; +} + +button, +[type="button"], +[type="reset"], +[type="submit"] { + -webkit-appearance: button; +} + +button:not(:disabled), +[type="button"]:not(:disabled), +[type="reset"]:not(:disabled), +[type="submit"]:not(:disabled) { + cursor: pointer; +} + +button::-moz-focus-inner, +[type="button"]::-moz-focus-inner, +[type="reset"]::-moz-focus-inner, +[type="submit"]::-moz-focus-inner { + padding: 0; + border-style: none; +} + +input[type="radio"], +input[type="checkbox"] { + box-sizing: border-box; + padding: 0; +} + +textarea { + overflow: auto; + resize: vertical; +} + +fieldset { + min-width: 0; + padding: 0; + margin: 0; + border: 0; +} + +legend { + display: block; + width: 100%; + max-width: 100%; + padding: 0; + margin-bottom: .5rem; + font-size: 1.5rem; + line-height: inherit; + color: inherit; + white-space: normal; +} + +progress { + vertical-align: baseline; +} + +[type="number"]::-webkit-inner-spin-button, +[type="number"]::-webkit-outer-spin-button { + height: auto; +} + +[type="search"] { + outline-offset: -2px; + -webkit-appearance: none; +} + +[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} + +::-webkit-file-upload-button { + font: inherit; + -webkit-appearance: button; +} + +output { + display: inline-block; +} + +summary { + display: list-item; + cursor: pointer; +} + +template { + display: none; +} + +[hidden] { + display: none !important; +} + +h1, h2, h3, h4, h5, h6, +.h1, .h2, .h3, .h4, .h5, .h6 { + margin-bottom: 0.25rem; + font-family: "Crete Round"; + font-weight: 500; + line-height: 1.2; +} + +h1, .h1 { + font-size: 2.5rem; +} + +h2, .h2 { + font-size: 2rem; +} + +h3, .h3 { + font-size: 1.75rem; +} + +h4, .h4 { + font-size: 1.5rem; +} + +h5, .h5 { + font-size: 1.25rem; +} + +h6, .h6 { + font-size: 1rem; +} + +.lead { + font-size: 1.25rem; + font-weight: 300; +} + +.display-1 { + font-size: 6rem; + font-weight: 300; + line-height: 1.2; +} + +.display-2 { + font-size: 5.5rem; + font-weight: 300; + line-height: 1.2; +} + +.display-3 { + font-size: 4.5rem; + font-weight: 300; + line-height: 1.2; +} + +.display-4 { + font-size: 3.5rem; + font-weight: 300; + line-height: 1.2; +} + +hr { + margin-top: 0.5rem; + margin-bottom: 0.5rem; + border: 0; + border-top: 1px solid rgba(0, 0, 0, 0.1); +} + +small, +.small { + font-size: 80%; + font-weight: 400; +} + +mark, +.mark { + padding: 0.2em; + background-color: #fcf8e3; +} + +.list-unstyled { + padding-left: 0; + list-style: none; +} + +.list-inline { + padding-left: 0; + list-style: none; +} + +.list-inline-item { + display: inline-block; +} + +.list-inline-item:not(:last-child) { + margin-right: 0.5rem; +} + +.initialism { + font-size: 90%; + text-transform: uppercase; +} + +.blockquote { + margin-bottom: 0.5rem; + font-size: 1.25rem; +} + +.blockquote-footer { + display: block; + font-size: 80%; + color: #6c757d; +} + +.blockquote-footer::before { + content: "\2014\00A0"; +} + +.img-fluid { + max-width: 100%; + height: auto; +} + +.img-thumbnail { + padding: 0.25rem; + background-color: #fff; + border: 1px solid #dee2e6; + box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075); + max-width: 100%; + height: auto; +} + +.figure { + display: inline-block; +} + +.figure-img { + margin-bottom: 0.25rem; + line-height: 1; +} + +.figure-caption { + font-size: 90%; + color: #6c757d; +} + +code { + font-size: 87.5%; + color: #e83e8c; + word-wrap: break-word; +} + +a > code { + color: inherit; +} + +kbd { + padding: 0.2rem 0.4rem; + font-size: 87.5%; + color: #fff; + background-color: #212529; + box-shadow: inset 0 -0.1rem 0 rgba(0, 0, 0, 0.25); +} + +kbd kbd { + padding: 0; + font-size: 100%; + font-weight: 700; + box-shadow: none; +} + +pre { + display: block; + font-size: 87.5%; + color: #212529; +} + +pre code { + font-size: inherit; + color: inherit; + word-break: normal; +} + +.pre-scrollable { + max-height: 340px; + overflow-y: scroll; +} + +.container, +.container-fluid, +.container-sm, +.container-md, +.container-lg, +.container-xl { + width: 100%; + padding-right: 15px; + padding-left: 15px; + margin-right: auto; + margin-left: auto; +} + +@media (min-width: 576px) { + .container, .container-sm { + max-width: 540px; + } +} + +@media (min-width: 768px) { + .container, .container-sm, .container-md { + max-width: 720px; + } +} + +@media (min-width: 992px) { + .container, .container-sm, .container-md, .container-lg { + max-width: 960px; + } +} + +@media (min-width: 1200px) { + .container, .container-sm, .container-md, .container-lg, .container-xl { + max-width: 1140px; + } +} + +.row { + display: flex; + flex-wrap: wrap; + margin-right: -15px; + margin-left: -15px; +} + +.no-gutters { + margin-right: 0; + margin-left: 0; +} + +.no-gutters > .col, +.no-gutters > [class*="col-"] { + padding-right: 0; + padding-left: 0; +} + +.col-1, .col-2, .col-3, .col-4, .col-5, .col-6, .col-7, .col-8, .col-9, .col-10, .col-11, .col-12, .col, +.col-auto, .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12, .col-sm, +.col-sm-auto, .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12, .col-md, +.col-md-auto, .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12, .col-lg, +.col-lg-auto, .col-xl-1, .col-xl-2, .col-xl-3, .col-xl-4, .col-xl-5, .col-xl-6, .col-xl-7, .col-xl-8, .col-xl-9, .col-xl-10, .col-xl-11, .col-xl-12, .col-xl, +.col-xl-auto { + position: relative; + width: 100%; + padding-right: 15px; + padding-left: 15px; +} + +.col { + flex-basis: 0; + flex-grow: 1; + max-width: 100%; +} + +.row-cols-1 > * { + flex: 0 0 100%; + max-width: 100%; +} + +.row-cols-2 > * { + flex: 0 0 50%; + max-width: 50%; +} + +.row-cols-3 > * { + flex: 0 0 33.333333%; + max-width: 33.333333%; +} + +.row-cols-4 > * { + flex: 0 0 25%; + max-width: 25%; +} + +.row-cols-5 > * { + flex: 0 0 20%; + max-width: 20%; +} + +.row-cols-6 > * { + flex: 0 0 16.666667%; + max-width: 16.666667%; +} + +.col-auto { + flex: 0 0 auto; + width: auto; + max-width: 100%; +} + +.col-1 { + flex: 0 0 8.333333%; + max-width: 8.333333%; +} + +.col-2 { + flex: 0 0 16.666667%; + max-width: 16.666667%; +} + +.col-3 { + flex: 0 0 25%; + max-width: 25%; +} + +.col-4 { + flex: 0 0 33.333333%; + max-width: 33.333333%; +} + +.col-5 { + flex: 0 0 41.666667%; + max-width: 41.666667%; +} + +.col-6 { + flex: 0 0 50%; + max-width: 50%; +} + +.col-7 { + flex: 0 0 58.333333%; + max-width: 58.333333%; +} + +.col-8 { + flex: 0 0 66.666667%; + max-width: 66.666667%; +} + +.col-9 { + flex: 0 0 75%; + max-width: 75%; +} + +.col-10 { + flex: 0 0 83.333333%; + max-width: 83.333333%; +} + +.col-11 { + flex: 0 0 91.666667%; + max-width: 91.666667%; +} + +.col-12 { + flex: 0 0 100%; + max-width: 100%; +} + +.order-first { + order: -1; +} + +.order-last { + order: 13; +} + +.order-0 { + order: 0; +} + +.order-1 { + order: 1; +} + +.order-2 { + order: 2; +} + +.order-3 { + order: 3; +} + +.order-4 { + order: 4; +} + +.order-5 { + order: 5; +} + +.order-6 { + order: 6; +} + +.order-7 { + order: 7; +} + +.order-8 { + order: 8; +} + +.order-9 { + order: 9; +} + +.order-10 { + order: 10; +} + +.order-11 { + order: 11; +} + +.order-12 { + order: 12; +} + +.offset-1 { + margin-left: 8.333333%; +} + +.offset-2 { + margin-left: 16.666667%; +} + +.offset-3 { + margin-left: 25%; +} + +.offset-4 { + margin-left: 33.333333%; +} + +.offset-5 { + margin-left: 41.666667%; +} + +.offset-6 { + margin-left: 50%; +} + +.offset-7 { + margin-left: 58.333333%; +} + +.offset-8 { + margin-left: 66.666667%; +} + +.offset-9 { + margin-left: 75%; +} + +.offset-10 { + margin-left: 83.333333%; +} + +.offset-11 { + margin-left: 91.666667%; +} + +@media (min-width: 576px) { + .col-sm { + flex-basis: 0; + flex-grow: 1; + max-width: 100%; + } + .row-cols-sm-1 > * { + flex: 0 0 100%; + max-width: 100%; + } + .row-cols-sm-2 > * { + flex: 0 0 50%; + max-width: 50%; + } + .row-cols-sm-3 > * { + flex: 0 0 33.333333%; + max-width: 33.333333%; + } + .row-cols-sm-4 > * { + flex: 0 0 25%; + max-width: 25%; + } + .row-cols-sm-5 > * { + flex: 0 0 20%; + max-width: 20%; + } + .row-cols-sm-6 > * { + flex: 0 0 16.666667%; + max-width: 16.666667%; + } + .col-sm-auto { + flex: 0 0 auto; + width: auto; + max-width: 100%; + } + .col-sm-1 { + flex: 0 0 8.333333%; + max-width: 8.333333%; + } + .col-sm-2 { + flex: 0 0 16.666667%; + max-width: 16.666667%; + } + .col-sm-3 { + flex: 0 0 25%; + max-width: 25%; + } + .col-sm-4 { + flex: 0 0 33.333333%; + max-width: 33.333333%; + } + .col-sm-5 { + flex: 0 0 41.666667%; + max-width: 41.666667%; + } + .col-sm-6 { + flex: 0 0 50%; + max-width: 50%; + } + .col-sm-7 { + flex: 0 0 58.333333%; + max-width: 58.333333%; + } + .col-sm-8 { + flex: 0 0 66.666667%; + max-width: 66.666667%; + } + .col-sm-9 { + flex: 0 0 75%; + max-width: 75%; + } + .col-sm-10 { + flex: 0 0 83.333333%; + max-width: 83.333333%; + } + .col-sm-11 { + flex: 0 0 91.666667%; + max-width: 91.666667%; + } + .col-sm-12 { + flex: 0 0 100%; + max-width: 100%; + } + .order-sm-first { + order: -1; + } + .order-sm-last { + order: 13; + } + .order-sm-0 { + order: 0; + } + .order-sm-1 { + order: 1; + } + .order-sm-2 { + order: 2; + } + .order-sm-3 { + order: 3; + } + .order-sm-4 { + order: 4; + } + .order-sm-5 { + order: 5; + } + .order-sm-6 { + order: 6; + } + .order-sm-7 { + order: 7; + } + .order-sm-8 { + order: 8; + } + .order-sm-9 { + order: 9; + } + .order-sm-10 { + order: 10; + } + .order-sm-11 { + order: 11; + } + .order-sm-12 { + order: 12; + } + .offset-sm-0 { + margin-left: 0; + } + .offset-sm-1 { + margin-left: 8.333333%; + } + .offset-sm-2 { + margin-left: 16.666667%; + } + .offset-sm-3 { + margin-left: 25%; + } + .offset-sm-4 { + margin-left: 33.333333%; + } + .offset-sm-5 { + margin-left: 41.666667%; + } + .offset-sm-6 { + margin-left: 50%; + } + .offset-sm-7 { + margin-left: 58.333333%; + } + .offset-sm-8 { + margin-left: 66.666667%; + } + .offset-sm-9 { + margin-left: 75%; + } + .offset-sm-10 { + margin-left: 83.333333%; + } + .offset-sm-11 { + margin-left: 91.666667%; + } +} + +@media (min-width: 768px) { + .col-md { + flex-basis: 0; + flex-grow: 1; + max-width: 100%; + } + .row-cols-md-1 > * { + flex: 0 0 100%; + max-width: 100%; + } + .row-cols-md-2 > * { + flex: 0 0 50%; + max-width: 50%; + } + .row-cols-md-3 > * { + flex: 0 0 33.333333%; + max-width: 33.333333%; + } + .row-cols-md-4 > * { + flex: 0 0 25%; + max-width: 25%; + } + .row-cols-md-5 > * { + flex: 0 0 20%; + max-width: 20%; + } + .row-cols-md-6 > * { + flex: 0 0 16.666667%; + max-width: 16.666667%; + } + .col-md-auto { + flex: 0 0 auto; + width: auto; + max-width: 100%; + } + .col-md-1 { + flex: 0 0 8.333333%; + max-width: 8.333333%; + } + .col-md-2 { + flex: 0 0 16.666667%; + max-width: 16.666667%; + } + .col-md-3 { + flex: 0 0 25%; + max-width: 25%; + } + .col-md-4 { + flex: 0 0 33.333333%; + max-width: 33.333333%; + } + .col-md-5 { + flex: 0 0 41.666667%; + max-width: 41.666667%; + } + .col-md-6 { + flex: 0 0 50%; + max-width: 50%; + } + .col-md-7 { + flex: 0 0 58.333333%; + max-width: 58.333333%; + } + .col-md-8 { + flex: 0 0 66.666667%; + max-width: 66.666667%; + } + .col-md-9 { + flex: 0 0 75%; + max-width: 75%; + } + .col-md-10 { + flex: 0 0 83.333333%; + max-width: 83.333333%; + } + .col-md-11 { + flex: 0 0 91.666667%; + max-width: 91.666667%; + } + .col-md-12 { + flex: 0 0 100%; + max-width: 100%; + } + .order-md-first { + order: -1; + } + .order-md-last { + order: 13; + } + .order-md-0 { + order: 0; + } + .order-md-1 { + order: 1; + } + .order-md-2 { + order: 2; + } + .order-md-3 { + order: 3; + } + .order-md-4 { + order: 4; + } + .order-md-5 { + order: 5; + } + .order-md-6 { + order: 6; + } + .order-md-7 { + order: 7; + } + .order-md-8 { + order: 8; + } + .order-md-9 { + order: 9; + } + .order-md-10 { + order: 10; + } + .order-md-11 { + order: 11; + } + .order-md-12 { + order: 12; + } + .offset-md-0 { + margin-left: 0; + } + .offset-md-1 { + margin-left: 8.333333%; + } + .offset-md-2 { + margin-left: 16.666667%; + } + .offset-md-3 { + margin-left: 25%; + } + .offset-md-4 { + margin-left: 33.333333%; + } + .offset-md-5 { + margin-left: 41.666667%; + } + .offset-md-6 { + margin-left: 50%; + } + .offset-md-7 { + margin-left: 58.333333%; + } + .offset-md-8 { + margin-left: 66.666667%; + } + .offset-md-9 { + margin-left: 75%; + } + .offset-md-10 { + margin-left: 83.333333%; + } + .offset-md-11 { + margin-left: 91.666667%; + } +} + +@media (min-width: 992px) { + .col-lg { + flex-basis: 0; + flex-grow: 1; + max-width: 100%; + } + .row-cols-lg-1 > * { + flex: 0 0 100%; + max-width: 100%; + } + .row-cols-lg-2 > * { + flex: 0 0 50%; + max-width: 50%; + } + .row-cols-lg-3 > * { + flex: 0 0 33.333333%; + max-width: 33.333333%; + } + .row-cols-lg-4 > * { + flex: 0 0 25%; + max-width: 25%; + } + .row-cols-lg-5 > * { + flex: 0 0 20%; + max-width: 20%; + } + .row-cols-lg-6 > * { + flex: 0 0 16.666667%; + max-width: 16.666667%; + } + .col-lg-auto { + flex: 0 0 auto; + width: auto; + max-width: 100%; + } + .col-lg-1 { + flex: 0 0 8.333333%; + max-width: 8.333333%; + } + .col-lg-2 { + flex: 0 0 16.666667%; + max-width: 16.666667%; + } + .col-lg-3 { + flex: 0 0 25%; + max-width: 25%; + } + .col-lg-4 { + flex: 0 0 33.333333%; + max-width: 33.333333%; + } + .col-lg-5 { + flex: 0 0 41.666667%; + max-width: 41.666667%; + } + .col-lg-6 { + flex: 0 0 50%; + max-width: 50%; + } + .col-lg-7 { + flex: 0 0 58.333333%; + max-width: 58.333333%; + } + .col-lg-8 { + flex: 0 0 66.666667%; + max-width: 66.666667%; + } + .col-lg-9 { + flex: 0 0 75%; + max-width: 75%; + } + .col-lg-10 { + flex: 0 0 83.333333%; + max-width: 83.333333%; + } + .col-lg-11 { + flex: 0 0 91.666667%; + max-width: 91.666667%; + } + .col-lg-12 { + flex: 0 0 100%; + max-width: 100%; + } + .order-lg-first { + order: -1; + } + .order-lg-last { + order: 13; + } + .order-lg-0 { + order: 0; + } + .order-lg-1 { + order: 1; + } + .order-lg-2 { + order: 2; + } + .order-lg-3 { + order: 3; + } + .order-lg-4 { + order: 4; + } + .order-lg-5 { + order: 5; + } + .order-lg-6 { + order: 6; + } + .order-lg-7 { + order: 7; + } + .order-lg-8 { + order: 8; + } + .order-lg-9 { + order: 9; + } + .order-lg-10 { + order: 10; + } + .order-lg-11 { + order: 11; + } + .order-lg-12 { + order: 12; + } + .offset-lg-0 { + margin-left: 0; + } + .offset-lg-1 { + margin-left: 8.333333%; + } + .offset-lg-2 { + margin-left: 16.666667%; + } + .offset-lg-3 { + margin-left: 25%; + } + .offset-lg-4 { + margin-left: 33.333333%; + } + .offset-lg-5 { + margin-left: 41.666667%; + } + .offset-lg-6 { + margin-left: 50%; + } + .offset-lg-7 { + margin-left: 58.333333%; + } + .offset-lg-8 { + margin-left: 66.666667%; + } + .offset-lg-9 { + margin-left: 75%; + } + .offset-lg-10 { + margin-left: 83.333333%; + } + .offset-lg-11 { + margin-left: 91.666667%; + } +} + +@media (min-width: 1200px) { + .col-xl { + flex-basis: 0; + flex-grow: 1; + max-width: 100%; + } + .row-cols-xl-1 > * { + flex: 0 0 100%; + max-width: 100%; + } + .row-cols-xl-2 > * { + flex: 0 0 50%; + max-width: 50%; + } + .row-cols-xl-3 > * { + flex: 0 0 33.333333%; + max-width: 33.333333%; + } + .row-cols-xl-4 > * { + flex: 0 0 25%; + max-width: 25%; + } + .row-cols-xl-5 > * { + flex: 0 0 20%; + max-width: 20%; + } + .row-cols-xl-6 > * { + flex: 0 0 16.666667%; + max-width: 16.666667%; + } + .col-xl-auto { + flex: 0 0 auto; + width: auto; + max-width: 100%; + } + .col-xl-1 { + flex: 0 0 8.333333%; + max-width: 8.333333%; + } + .col-xl-2 { + flex: 0 0 16.666667%; + max-width: 16.666667%; + } + .col-xl-3 { + flex: 0 0 25%; + max-width: 25%; + } + .col-xl-4 { + flex: 0 0 33.333333%; + max-width: 33.333333%; + } + .col-xl-5 { + flex: 0 0 41.666667%; + max-width: 41.666667%; + } + .col-xl-6 { + flex: 0 0 50%; + max-width: 50%; + } + .col-xl-7 { + flex: 0 0 58.333333%; + max-width: 58.333333%; + } + .col-xl-8 { + flex: 0 0 66.666667%; + max-width: 66.666667%; + } + .col-xl-9 { + flex: 0 0 75%; + max-width: 75%; + } + .col-xl-10 { + flex: 0 0 83.333333%; + max-width: 83.333333%; + } + .col-xl-11 { + flex: 0 0 91.666667%; + max-width: 91.666667%; + } + .col-xl-12 { + flex: 0 0 100%; + max-width: 100%; + } + .order-xl-first { + order: -1; + } + .order-xl-last { + order: 13; + } + .order-xl-0 { + order: 0; + } + .order-xl-1 { + order: 1; + } + .order-xl-2 { + order: 2; + } + .order-xl-3 { + order: 3; + } + .order-xl-4 { + order: 4; + } + .order-xl-5 { + order: 5; + } + .order-xl-6 { + order: 6; + } + .order-xl-7 { + order: 7; + } + .order-xl-8 { + order: 8; + } + .order-xl-9 { + order: 9; + } + .order-xl-10 { + order: 10; + } + .order-xl-11 { + order: 11; + } + .order-xl-12 { + order: 12; + } + .offset-xl-0 { + margin-left: 0; + } + .offset-xl-1 { + margin-left: 8.333333%; + } + .offset-xl-2 { + margin-left: 16.666667%; + } + .offset-xl-3 { + margin-left: 25%; + } + .offset-xl-4 { + margin-left: 33.333333%; + } + .offset-xl-5 { + margin-left: 41.666667%; + } + .offset-xl-6 { + margin-left: 50%; + } + .offset-xl-7 { + margin-left: 58.333333%; + } + .offset-xl-8 { + margin-left: 66.666667%; + } + .offset-xl-9 { + margin-left: 75%; + } + .offset-xl-10 { + margin-left: 83.333333%; + } + .offset-xl-11 { + margin-left: 91.666667%; + } +} + +.table { + width: 100%; + margin-bottom: 0.5rem; + color: #212529; +} + +.table th, +.table td { + padding: 0.75rem; + vertical-align: top; + border-top: 1px solid #e3e3e3; +} + +.table thead th { + vertical-align: bottom; + border-bottom: 2px solid #e3e3e3; +} + +.table tbody + tbody { + border-top: 2px solid #e3e3e3; +} + +.table-sm th, +.table-sm td { + padding: 0.3rem; +} + +.table-bordered { + border: 1px solid #e3e3e3; +} + +.table-bordered th, +.table-bordered td { + border: 1px solid #e3e3e3; +} + +.table-bordered thead th, +.table-bordered thead td { + border-bottom-width: 2px; +} + +.table-borderless th, +.table-borderless td, +.table-borderless thead th, +.table-borderless tbody + tbody { + border: 0; +} + +.table-striped tbody tr:nth-of-type(odd) { + background-color: rgba(0, 0, 0, 0.05); +} + +.table-hover tbody tr:hover { + color: #212529; + background-color: rgba(0, 0, 0, 0.075); +} + +.table-primary, +.table-primary > th, +.table-primary > td { + background-color: #bac6d0; +} + +.table-primary th, +.table-primary td, +.table-primary thead th, +.table-primary tbody + tbody { + border-color: #7f95a8; +} + +.table-hover .table-primary:hover { + background-color: #abb9c6; +} + +.table-hover .table-primary:hover > td, +.table-hover .table-primary:hover > th { + background-color: #abb9c6; +} + +.table-secondary, +.table-secondary > th, +.table-secondary > td { + background-color: #ebebeb; +} + +.table-secondary th, +.table-secondary td, +.table-secondary thead th, +.table-secondary tbody + tbody { + border-color: #dadada; +} + +.table-hover .table-secondary:hover { + background-color: #dedede; +} + +.table-hover .table-secondary:hover > td, +.table-hover .table-secondary:hover > th { + background-color: #dedede; +} + +.table-success, +.table-success > th, +.table-success > td { + background-color: #b8dec3; +} + +.table-success th, +.table-success td, +.table-success thead th, +.table-success tbody + tbody { + border-color: #7ac290; +} + +.table-hover .table-success:hover { + background-color: #a7d6b4; +} + +.table-hover .table-success:hover > td, +.table-hover .table-success:hover > th { + background-color: #a7d6b4; +} + +.table-info, +.table-info > th, +.table-info > td { + background-color: #d8f5fb; +} + +.table-info th, +.table-info td, +.table-info thead th, +.table-info tbody + tbody { + border-color: #b7ecf7; +} + +.table-hover .table-info:hover { + background-color: #c1eff9; +} + +.table-hover .table-info:hover > td, +.table-hover .table-info:hover > th { + background-color: #c1eff9; +} + +.table-warning, +.table-warning > th, +.table-warning > td { + background-color: #f8f2b8; +} + +.table-warning th, +.table-warning td, +.table-warning thead th, +.table-warning tbody + tbody { + border-color: #f2e87a; +} + +.table-hover .table-warning:hover { + background-color: #f6eea1; +} + +.table-hover .table-warning:hover > td, +.table-hover .table-warning:hover > th { + background-color: #f6eea1; +} + +.table-danger, +.table-danger > th, +.table-danger > td { + background-color: #f7c7c7; +} + +.table-danger th, +.table-danger td, +.table-danger thead th, +.table-danger tbody + tbody { + border-color: #ef9797; +} + +.table-hover .table-danger:hover { + background-color: #f4b1b1; +} + +.table-hover .table-danger:hover > td, +.table-hover .table-danger:hover > th { + background-color: #f4b1b1; +} + +.table-light, +.table-light > th, +.table-light > td { + background-color: #fcfcfc; +} + +.table-light th, +.table-light td, +.table-light thead th, +.table-light tbody + tbody { + border-color: #f9f9f9; +} + +.table-hover .table-light:hover { + background-color: #efefef; +} + +.table-hover .table-light:hover > td, +.table-hover .table-light:hover > th { + background-color: #efefef; +} + +.table-dark, +.table-dark > th, +.table-dark > td { + background-color: #bac1cb; +} + +.table-dark th, +.table-dark td, +.table-dark thead th, +.table-dark tbody + tbody { + border-color: #7e8c9f; +} + +.table-hover .table-dark:hover { + background-color: #abb4c0; +} + +.table-hover .table-dark:hover > td, +.table-hover .table-dark:hover > th { + background-color: #abb4c0; +} + +.table-active, +.table-active > th, +.table-active > td { + background-color: rgba(0, 0, 0, 0.075); +} + +.table-hover .table-active:hover { + background-color: rgba(0, 0, 0, 0.075); +} + +.table-hover .table-active:hover > td, +.table-hover .table-active:hover > th { + background-color: rgba(0, 0, 0, 0.075); +} + +.table .thead-dark th { + color: #fff; + background-color: #343a40; + border-color: #454d55; +} + +.table .thead-light th { + color: #495057; + background-color: #e9ecef; + border-color: #e3e3e3; +} + +.table-dark { + color: #fff; + background-color: #343a40; +} + +.table-dark th, +.table-dark td, +.table-dark thead th { + border-color: #454d55; +} + +.table-dark.table-bordered { + border: 0; +} + +.table-dark.table-striped tbody tr:nth-of-type(odd) { + background-color: rgba(255, 255, 255, 0.05); +} + +.table-dark.table-hover tbody tr:hover { + color: #fff; + background-color: rgba(255, 255, 255, 0.075); +} + +@media (max-width: 575.98px) { + .table-responsive-sm { + display: block; + width: 100%; + overflow-x: auto; + -webkit-overflow-scrolling: touch; + } + .table-responsive-sm > .table-bordered { + border: 0; + } +} + +@media (max-width: 767.98px) { + .table-responsive-md { + display: block; + width: 100%; + overflow-x: auto; + -webkit-overflow-scrolling: touch; + } + .table-responsive-md > .table-bordered { + border: 0; + } +} + +@media (max-width: 991.98px) { + .table-responsive-lg { + display: block; + width: 100%; + overflow-x: auto; + -webkit-overflow-scrolling: touch; + } + .table-responsive-lg > .table-bordered { + border: 0; + } +} + +@media (max-width: 1199.98px) { + .table-responsive-xl { + display: block; + width: 100%; + overflow-x: auto; + -webkit-overflow-scrolling: touch; + } + .table-responsive-xl > .table-bordered { + border: 0; + } +} + +.table-responsive { + display: block; + width: 100%; + overflow-x: auto; + -webkit-overflow-scrolling: touch; +} + +.table-responsive > .table-bordered { + border: 0; +} + +.form-control { + display: block; + width: 100%; + height: calc(1.5em + 0.75rem + 2px); + padding: 0.375rem 0.75rem; + font-size: 1rem; + font-weight: 400; + line-height: 1.5; + color: #495057; + background-color: #fff; + background-clip: padding-box; + border: 1px solid #ced4da; + border-radius: 0; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; +} + +@media (prefers-reduced-motion: reduce) { + .form-control { + transition: none; + } +} + +.form-control::-ms-expand { + background-color: transparent; + border: 0; +} + +.form-control:-moz-focusring { + color: transparent; + text-shadow: 0 0 0 #495057; +} + +.form-control:focus { + color: #495057; + background-color: #fff; + border-color: #1377cd; + outline: 0; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 0 0.2rem rgba(8, 51, 88, 0.25); +} + +.form-control::placeholder { + color: #6c757d; + opacity: 1; +} + +.form-control:disabled, .form-control[readonly] { + background-color: #e9ecef; + opacity: 1; +} + +input[type="date"].form-control, +input[type="time"].form-control, +input[type="datetime-local"].form-control, +input[type="month"].form-control { + appearance: none; +} + +select.form-control:focus::-ms-value { + color: #495057; + background-color: #fff; +} + +.form-control-file, +.form-control-range { + display: block; + width: 100%; +} + +.col-form-label { + padding-top: calc(0.375rem + 1px); + padding-bottom: calc(0.375rem + 1px); + margin-bottom: 0; + font-size: inherit; + line-height: 1.5; +} + +.col-form-label-lg { + padding-top: calc(0.5rem + 1px); + padding-bottom: calc(0.5rem + 1px); + font-size: 1.25rem; + line-height: 1.5; +} + +.col-form-label-sm { + padding-top: calc(0.25rem + 1px); + padding-bottom: calc(0.25rem + 1px); + font-size: 0.875rem; + line-height: 1.5; +} + +.form-control-plaintext { + display: block; + width: 100%; + padding: 0.375rem 0; + margin-bottom: 0; + font-size: 1rem; + line-height: 1.5; + color: #212529; + background-color: transparent; + border: solid transparent; + border-width: 1px 0; +} + +.form-control-plaintext.form-control-sm, .form-control-plaintext.form-control-lg { + padding-right: 0; + padding-left: 0; +} + +.form-control-sm { + height: calc(1.5em + 0.5rem + 2px); + padding: 0.25rem 0.5rem; + font-size: 0.875rem; + line-height: 1.5; +} + +.form-control-lg { + height: calc(1.5em + 1rem + 2px); + padding: 0.5rem 1rem; + font-size: 1.25rem; + line-height: 1.5; +} + +select.form-control[size], select.form-control[multiple] { + height: auto; +} + +textarea.form-control { + height: auto; +} + +.form-group { + margin-bottom: 1rem; +} + +.form-text { + display: block; + margin-top: 0.25rem; +} + +.form-row { + display: flex; + flex-wrap: wrap; + margin-right: -5px; + margin-left: -5px; +} + +.form-row > .col, +.form-row > [class*="col-"] { + padding-right: 5px; + padding-left: 5px; +} + +.form-check { + position: relative; + display: block; + padding-left: 1.25rem; +} + +.form-check-input { + position: absolute; + margin-top: 0.3rem; + margin-left: -1.25rem; +} + +.form-check-input[disabled] ~ .form-check-label, +.form-check-input:disabled ~ .form-check-label { + color: #6c757d; +} + +.form-check-label { + margin-bottom: 0; +} + +.form-check-inline { + display: inline-flex; + align-items: center; + padding-left: 0; + margin-right: 0.75rem; +} + +.form-check-inline .form-check-input { + position: static; + margin-top: 0; + margin-right: 0.3125rem; + margin-left: 0; +} + +.valid-feedback { + display: none; + width: 100%; + margin-top: 0.25rem; + font-size: 80%; + color: #008a29; +} + +.valid-tooltip { + position: absolute; + top: 100%; + left: 0; + z-index: 5; + display: none; + max-width: 100%; + padding: 0.25rem 0.5rem; + margin-top: .1rem; + font-size: 0.875rem; + line-height: 1.5; + color: #fff; + background-color: rgba(0, 138, 41, 0.9); +} + +.was-validated :valid ~ .valid-feedback, +.was-validated :valid ~ .valid-tooltip, +.is-valid ~ .valid-feedback, +.is-valid ~ .valid-tooltip { + display: block; +} + +.was-validated .form-control:valid, .form-control.is-valid { + border-color: #008a29; + padding-right: calc(1.5em + 0.75rem); + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%23008a29' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e"); + background-repeat: no-repeat; + background-position: right calc(0.375em + 0.1875rem) center; + background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); +} + +.was-validated .form-control:valid:focus, .form-control.is-valid:focus { + border-color: #008a29; + box-shadow: 0 0 0 0.2rem rgba(0, 138, 41, 0.25); +} + +.was-validated textarea.form-control:valid, textarea.form-control.is-valid { + padding-right: calc(1.5em + 0.75rem); + background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem); +} + +.was-validated .custom-select:valid, .custom-select.is-valid { + border-color: #008a29; + padding-right: calc(0.75em + 2.3125rem); + background: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right 0.75rem center/8px 10px, url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%23008a29' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e") #fff no-repeat center right 1.75rem/calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); +} + +.was-validated .custom-select:valid:focus, .custom-select.is-valid:focus { + border-color: #008a29; + box-shadow: 0 0 0 0.2rem rgba(0, 138, 41, 0.25); +} + +.was-validated .form-check-input:valid ~ .form-check-label, .form-check-input.is-valid ~ .form-check-label { + color: #008a29; +} + +.was-validated .form-check-input:valid ~ .valid-feedback, +.was-validated .form-check-input:valid ~ .valid-tooltip, .form-check-input.is-valid ~ .valid-feedback, +.form-check-input.is-valid ~ .valid-tooltip { + display: block; +} + +.was-validated .custom-control-input:valid ~ .custom-control-label, .custom-control-input.is-valid ~ .custom-control-label { + color: #008a29; +} + +.was-validated .custom-control-input:valid ~ .custom-control-label::before, .custom-control-input.is-valid ~ .custom-control-label::before { + border-color: #008a29; +} + +.was-validated .custom-control-input:valid:checked ~ .custom-control-label::before, .custom-control-input.is-valid:checked ~ .custom-control-label::before { + border-color: #00bd38; + background: #00bd38 linear-gradient(180deg, #26c756, #00bd38) repeat-x; +} + +.was-validated .custom-control-input:valid:focus ~ .custom-control-label::before, .custom-control-input.is-valid:focus ~ .custom-control-label::before { + box-shadow: 0 0 0 0.2rem rgba(0, 138, 41, 0.25); +} + +.was-validated .custom-control-input:valid:focus:not(:checked) ~ .custom-control-label::before, .custom-control-input.is-valid:focus:not(:checked) ~ .custom-control-label::before { + border-color: #008a29; +} + +.was-validated .custom-file-input:valid ~ .custom-file-label, .custom-file-input.is-valid ~ .custom-file-label { + border-color: #008a29; +} + +.was-validated .custom-file-input:valid:focus ~ .custom-file-label, .custom-file-input.is-valid:focus ~ .custom-file-label { + border-color: #008a29; + box-shadow: 0 0 0 0.2rem rgba(0, 138, 41, 0.25); +} + +.invalid-feedback { + display: none; + width: 100%; + margin-top: 0.25rem; + font-size: 80%; + color: #e13737; +} + +.invalid-tooltip { + position: absolute; + top: 100%; + left: 0; + z-index: 5; + display: none; + max-width: 100%; + padding: 0.25rem 0.5rem; + margin-top: .1rem; + font-size: 0.875rem; + line-height: 1.5; + color: #fff; + background-color: rgba(225, 55, 55, 0.9); +} + +.was-validated :invalid ~ .invalid-feedback, +.was-validated :invalid ~ .invalid-tooltip, +.is-invalid ~ .invalid-feedback, +.is-invalid ~ .invalid-tooltip { + display: block; +} + +.was-validated .form-control:invalid, .form-control.is-invalid { + border-color: #e13737; + padding-right: calc(1.5em + 0.75rem); + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23e13737' viewBox='0 0 12 12'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23e13737' stroke='none'/%3e%3c/svg%3e"); + background-repeat: no-repeat; + background-position: right calc(0.375em + 0.1875rem) center; + background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); +} + +.was-validated .form-control:invalid:focus, .form-control.is-invalid:focus { + border-color: #e13737; + box-shadow: 0 0 0 0.2rem rgba(225, 55, 55, 0.25); +} + +.was-validated textarea.form-control:invalid, textarea.form-control.is-invalid { + padding-right: calc(1.5em + 0.75rem); + background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem); +} + +.was-validated .custom-select:invalid, .custom-select.is-invalid { + border-color: #e13737; + padding-right: calc(0.75em + 2.3125rem); + background: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right 0.75rem center/8px 10px, url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' fill='none' stroke='%23e13737' viewBox='0 0 12 12'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23e13737' stroke='none'/%3e%3c/svg%3e") #fff no-repeat center right 1.75rem/calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); +} + +.was-validated .custom-select:invalid:focus, .custom-select.is-invalid:focus { + border-color: #e13737; + box-shadow: 0 0 0 0.2rem rgba(225, 55, 55, 0.25); +} + +.was-validated .form-check-input:invalid ~ .form-check-label, .form-check-input.is-invalid ~ .form-check-label { + color: #e13737; +} + +.was-validated .form-check-input:invalid ~ .invalid-feedback, +.was-validated .form-check-input:invalid ~ .invalid-tooltip, .form-check-input.is-invalid ~ .invalid-feedback, +.form-check-input.is-invalid ~ .invalid-tooltip { + display: block; +} + +.was-validated .custom-control-input:invalid ~ .custom-control-label, .custom-control-input.is-invalid ~ .custom-control-label { + color: #e13737; +} + +.was-validated .custom-control-input:invalid ~ .custom-control-label::before, .custom-control-input.is-invalid ~ .custom-control-label::before { + border-color: #e13737; +} + +.was-validated .custom-control-input:invalid:checked ~ .custom-control-label::before, .custom-control-input.is-invalid:checked ~ .custom-control-label::before { + border-color: #e86363; + background: #e86363 linear-gradient(180deg, #eb7b7b, #e86363) repeat-x; +} + +.was-validated .custom-control-input:invalid:focus ~ .custom-control-label::before, .custom-control-input.is-invalid:focus ~ .custom-control-label::before { + box-shadow: 0 0 0 0.2rem rgba(225, 55, 55, 0.25); +} + +.was-validated .custom-control-input:invalid:focus:not(:checked) ~ .custom-control-label::before, .custom-control-input.is-invalid:focus:not(:checked) ~ .custom-control-label::before { + border-color: #e13737; +} + +.was-validated .custom-file-input:invalid ~ .custom-file-label, .custom-file-input.is-invalid ~ .custom-file-label { + border-color: #e13737; +} + +.was-validated .custom-file-input:invalid:focus ~ .custom-file-label, .custom-file-input.is-invalid:focus ~ .custom-file-label { + border-color: #e13737; + box-shadow: 0 0 0 0.2rem rgba(225, 55, 55, 0.25); +} + +.form-inline { + display: flex; + flex-flow: row wrap; + align-items: center; +} + +.form-inline .form-check { + width: 100%; +} + +@media (min-width: 576px) { + .form-inline label { + display: flex; + align-items: center; + justify-content: center; + margin-bottom: 0; + } + .form-inline .form-group { + display: flex; + flex: 0 0 auto; + flex-flow: row wrap; + align-items: center; + margin-bottom: 0; + } + .form-inline .form-control { + display: inline-block; + width: auto; + vertical-align: middle; + } + .form-inline .form-control-plaintext { + display: inline-block; + } + .form-inline .input-group, + .form-inline .custom-select { + width: auto; + } + .form-inline .form-check { + display: flex; + align-items: center; + justify-content: center; + width: auto; + padding-left: 0; + } + .form-inline .form-check-input { + position: relative; + flex-shrink: 0; + margin-top: 0; + margin-right: 0.25rem; + margin-left: 0; + } + .form-inline .custom-control { + align-items: center; + justify-content: center; + } + .form-inline .custom-control-label { + margin-bottom: 0; + } +} + +.btn { + display: inline-block; + font-weight: 400; + color: #212529; + text-align: center; + vertical-align: middle; + user-select: none; + background-color: transparent; + border: 1px solid transparent; + padding: 0.375rem 0.75rem; + font-size: 1rem; + line-height: 1.5; + border-radius: 0; + transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; +} + +@media (prefers-reduced-motion: reduce) { + .btn { + transition: none; + } +} + +.btn:hover { + color: #212529; + text-decoration: none; +} + +.btn:focus, .btn.focus { + outline: 0; + box-shadow: 0 0 0 0.2rem rgba(8, 51, 88, 0.25); +} + +.btn.disabled, .btn:disabled { + opacity: 0.65; + box-shadow: none; +} + +.btn:not(:disabled):not(.disabled) { + cursor: pointer; +} + +.btn:not(:disabled):not(.disabled):active, .btn:not(:disabled):not(.disabled).active { + box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); +} + +.btn:not(:disabled):not(.disabled):active:focus, .btn:not(:disabled):not(.disabled).active:focus { + box-shadow: 0 0 0 0.2rem rgba(8, 51, 88, 0.25), inset 0 3px 5px rgba(0, 0, 0, 0.125); +} + +a.btn.disabled, +fieldset:disabled a.btn { + pointer-events: none; +} + +.btn-primary { + color: #fff; + background: #083358 linear-gradient(180deg, #2d5271, #083358) repeat-x; + border-color: #083358; + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075); +} + +.btn-primary:hover { + color: #fff; + background: #051f35 linear-gradient(180deg, #2a4053, #051f35) repeat-x; + border-color: #041829; +} + +.btn-primary:focus, .btn-primary.focus { + color: #fff; + background: #051f35 linear-gradient(180deg, #2a4053, #051f35) repeat-x; + border-color: #041829; + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 0 0.2rem rgba(45, 82, 113, 0.5); +} + +.btn-primary.disabled, .btn-primary:disabled { + color: #fff; + background-color: #083358; + border-color: #083358; + background-image: none; +} + +.btn-primary:not(:disabled):not(.disabled):active, .btn-primary:not(:disabled):not(.disabled).active, +.show > .btn-primary.dropdown-toggle { + color: #fff; + background-color: #041829; + background-image: none; + border-color: #03111e; +} + +.btn-primary:not(:disabled):not(.disabled):active:focus, .btn-primary:not(:disabled):not(.disabled).active:focus, +.show > .btn-primary.dropdown-toggle:focus { + box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125), 0 0 0 0.2rem rgba(45, 82, 113, 0.5); +} + +.btn-secondary { + color: #212529; + background: #b8b8b8 linear-gradient(180deg, #c3c3c3, #b8b8b8) repeat-x; + border-color: #b8b8b8; + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075); +} + +.btn-secondary:hover { + color: #212529; + background: #a5a5a5 linear-gradient(180deg, #b2b2b2, #a5a5a5) repeat-x; + border-color: #9f9f9f; +} + +.btn-secondary:focus, .btn-secondary.focus { + color: #212529; + background: #a5a5a5 linear-gradient(180deg, #b2b2b2, #a5a5a5) repeat-x; + border-color: #9f9f9f; + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 0 0.2rem rgba(161, 162, 163, 0.5); +} + +.btn-secondary.disabled, .btn-secondary:disabled { + color: #212529; + background-color: #b8b8b8; + border-color: #b8b8b8; + background-image: none; +} + +.btn-secondary:not(:disabled):not(.disabled):active, .btn-secondary:not(:disabled):not(.disabled).active, +.show > .btn-secondary.dropdown-toggle { + color: #212529; + background-color: #9f9f9f; + background-image: none; + border-color: #989898; +} + +.btn-secondary:not(:disabled):not(.disabled):active:focus, .btn-secondary:not(:disabled):not(.disabled).active:focus, +.show > .btn-secondary.dropdown-toggle:focus { + box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125), 0 0 0 0.2rem rgba(161, 162, 163, 0.5); +} + +.btn-success { + color: #fff; + background: #008a29 linear-gradient(180deg, #269c49, #008a29) repeat-x; + border-color: #008a29; + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075); +} + +.btn-success:hover { + color: #fff; + background: #00641e linear-gradient(180deg, #267b3f, #00641e) repeat-x; + border-color: #00571a; +} + +.btn-success:focus, .btn-success.focus { + color: #fff; + background: #00641e linear-gradient(180deg, #267b3f, #00641e) repeat-x; + border-color: #00571a; + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 0 0.2rem rgba(38, 156, 73, 0.5); +} + +.btn-success.disabled, .btn-success:disabled { + color: #fff; + background-color: #008a29; + border-color: #008a29; + background-image: none; +} + +.btn-success:not(:disabled):not(.disabled):active, .btn-success:not(:disabled):not(.disabled).active, +.show > .btn-success.dropdown-toggle { + color: #fff; + background-color: #00571a; + background-image: none; + border-color: #004a16; +} + +.btn-success:not(:disabled):not(.disabled):active:focus, .btn-success:not(:disabled):not(.disabled).active:focus, +.show > .btn-success.dropdown-toggle:focus { + box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125), 0 0 0 0.2rem rgba(38, 156, 73, 0.5); +} + +.btn-info { + color: #212529; + background: #74dbef linear-gradient(180deg, #89e0f1, #74dbef) repeat-x; + border-color: #74dbef; + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075); +} + +.btn-info:hover { + color: #212529; + background: #52d2eb linear-gradient(180deg, #6cd9ee, #52d2eb) repeat-x; + border-color: #46cfea; +} + +.btn-info:focus, .btn-info.focus { + color: #212529; + background: #52d2eb linear-gradient(180deg, #6cd9ee, #52d2eb) repeat-x; + border-color: #46cfea; + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 0 0.2rem rgba(104, 192, 209, 0.5); +} + +.btn-info.disabled, .btn-info:disabled { + color: #212529; + background-color: #74dbef; + border-color: #74dbef; + background-image: none; +} + +.btn-info:not(:disabled):not(.disabled):active, .btn-info:not(:disabled):not(.disabled).active, +.show > .btn-info.dropdown-toggle { + color: #212529; + background-color: #46cfea; + background-image: none; + border-color: #3bcce8; +} + +.btn-info:not(:disabled):not(.disabled):active:focus, .btn-info:not(:disabled):not(.disabled).active:focus, +.show > .btn-info.dropdown-toggle:focus { + box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125), 0 0 0 0.2rem rgba(104, 192, 209, 0.5); +} + +.btn-warning { + color: #212529; + background: #e6d200 linear-gradient(180deg, #ead926, #e6d200) repeat-x; + border-color: #e6d200; + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075); +} + +.btn-warning:hover { + color: #212529; + background: #c0af00 linear-gradient(180deg, #c9bb26, #c0af00) repeat-x; + border-color: #b3a300; +} + +.btn-warning:focus, .btn-warning.focus { + color: #212529; + background: #c0af00 linear-gradient(180deg, #c9bb26, #c0af00) repeat-x; + border-color: #b3a300; + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 0 0.2rem rgba(200, 184, 6, 0.5); +} + +.btn-warning.disabled, .btn-warning:disabled { + color: #212529; + background-color: #e6d200; + border-color: #e6d200; + background-image: none; +} + +.btn-warning:not(:disabled):not(.disabled):active, .btn-warning:not(:disabled):not(.disabled).active, +.show > .btn-warning.dropdown-toggle { + color: #fff; + background-color: #b3a300; + background-image: none; + border-color: #a69800; +} + +.btn-warning:not(:disabled):not(.disabled):active:focus, .btn-warning:not(:disabled):not(.disabled).active:focus, +.show > .btn-warning.dropdown-toggle:focus { + box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125), 0 0 0 0.2rem rgba(200, 184, 6, 0.5); +} + +.btn-danger { + color: #fff; + background: #e13737 linear-gradient(180deg, #e65555, #e13737) repeat-x; + border-color: #e13737; + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075); +} + +.btn-danger:hover { + color: #fff; + background: #d22020 linear-gradient(180deg, #d94141, #d22020) repeat-x; + border-color: #c71e1e; +} + +.btn-danger:focus, .btn-danger.focus { + color: #fff; + background: #d22020 linear-gradient(180deg, #d94141, #d22020) repeat-x; + border-color: #c71e1e; + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 0 0.2rem rgba(230, 85, 85, 0.5); +} + +.btn-danger.disabled, .btn-danger:disabled { + color: #fff; + background-color: #e13737; + border-color: #e13737; + background-image: none; +} + +.btn-danger:not(:disabled):not(.disabled):active, .btn-danger:not(:disabled):not(.disabled).active, +.show > .btn-danger.dropdown-toggle { + color: #fff; + background-color: #c71e1e; + background-image: none; + border-color: #bc1c1c; +} + +.btn-danger:not(:disabled):not(.disabled):active:focus, .btn-danger:not(:disabled):not(.disabled).active:focus, +.show > .btn-danger.dropdown-toggle:focus { + box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125), 0 0 0 0.2rem rgba(230, 85, 85, 0.5); +} + +.btn-light { + color: #212529; + background: #f4f4f4 linear-gradient(180deg, #f6f6f6, #f4f4f4) repeat-x; + border-color: #f4f4f4; + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075); +} + +.btn-light:hover { + color: #212529; + background: #e1e1e1 linear-gradient(180deg, #e5e5e5, #e1e1e1) repeat-x; + border-color: #dbdbdb; +} + +.btn-light:focus, .btn-light.focus { + color: #212529; + background: #e1e1e1 linear-gradient(180deg, #e5e5e5, #e1e1e1) repeat-x; + border-color: #dbdbdb; + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 0 0.2rem rgba(212, 213, 214, 0.5); +} + +.btn-light.disabled, .btn-light:disabled { + color: #212529; + background-color: #f4f4f4; + border-color: #f4f4f4; + background-image: none; +} + +.btn-light:not(:disabled):not(.disabled):active, .btn-light:not(:disabled):not(.disabled).active, +.show > .btn-light.dropdown-toggle { + color: #212529; + background-color: #dbdbdb; + background-image: none; + border-color: #d4d4d4; +} + +.btn-light:not(:disabled):not(.disabled):active:focus, .btn-light:not(:disabled):not(.disabled).active:focus, +.show > .btn-light.dropdown-toggle:focus { + box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125), 0 0 0 0.2rem rgba(212, 213, 214, 0.5); +} + +.btn-dark { + color: #fff; + background: #072247 linear-gradient(180deg, #2c4363, #072247) repeat-x; + border-color: #072247; + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075); +} + +.btn-dark:hover { + color: #fff; + background: #041124 linear-gradient(180deg, #293545, #041124) repeat-x; + border-color: #020c19; +} + +.btn-dark:focus, .btn-dark.focus { + color: #fff; + background: #041124 linear-gradient(180deg, #293545, #041124) repeat-x; + border-color: #020c19; + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.15), 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 0 0.2rem rgba(44, 67, 99, 0.5); +} + +.btn-dark.disabled, .btn-dark:disabled { + color: #fff; + background-color: #072247; + border-color: #072247; + background-image: none; +} + +.btn-dark:not(:disabled):not(.disabled):active, .btn-dark:not(:disabled):not(.disabled).active, +.show > .btn-dark.dropdown-toggle { + color: #fff; + background-color: #020c19; + background-image: none; + border-color: #01060d; +} + +.btn-dark:not(:disabled):not(.disabled):active:focus, .btn-dark:not(:disabled):not(.disabled).active:focus, +.show > .btn-dark.dropdown-toggle:focus { + box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125), 0 0 0 0.2rem rgba(44, 67, 99, 0.5); +} + +.btn-outline-primary { + color: #083358; + border-color: #083358; +} + +.btn-outline-primary:hover { + color: #fff; + background-color: #083358; + border-color: #083358; +} + +.btn-outline-primary:focus, .btn-outline-primary.focus { + box-shadow: 0 0 0 0.2rem rgba(8, 51, 88, 0.5); +} + +.btn-outline-primary.disabled, .btn-outline-primary:disabled { + color: #083358; + background-color: transparent; +} + +.btn-outline-primary:not(:disabled):not(.disabled):active, .btn-outline-primary:not(:disabled):not(.disabled).active, +.show > .btn-outline-primary.dropdown-toggle { + color: #fff; + background-color: #083358; + border-color: #083358; +} + +.btn-outline-primary:not(:disabled):not(.disabled):active:focus, .btn-outline-primary:not(:disabled):not(.disabled).active:focus, +.show > .btn-outline-primary.dropdown-toggle:focus { + box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125), 0 0 0 0.2rem rgba(8, 51, 88, 0.5); +} + +.btn-outline-secondary { + color: #b8b8b8; + border-color: #b8b8b8; +} + +.btn-outline-secondary:hover { + color: #212529; + background-color: #b8b8b8; + border-color: #b8b8b8; +} + +.btn-outline-secondary:focus, .btn-outline-secondary.focus { + box-shadow: 0 0 0 0.2rem rgba(184, 184, 184, 0.5); +} + +.btn-outline-secondary.disabled, .btn-outline-secondary:disabled { + color: #b8b8b8; + background-color: transparent; +} + +.btn-outline-secondary:not(:disabled):not(.disabled):active, .btn-outline-secondary:not(:disabled):not(.disabled).active, +.show > .btn-outline-secondary.dropdown-toggle { + color: #212529; + background-color: #b8b8b8; + border-color: #b8b8b8; +} + +.btn-outline-secondary:not(:disabled):not(.disabled):active:focus, .btn-outline-secondary:not(:disabled):not(.disabled).active:focus, +.show > .btn-outline-secondary.dropdown-toggle:focus { + box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125), 0 0 0 0.2rem rgba(184, 184, 184, 0.5); +} + +.btn-outline-success { + color: #008a29; + border-color: #008a29; +} + +.btn-outline-success:hover { + color: #fff; + background-color: #008a29; + border-color: #008a29; +} + +.btn-outline-success:focus, .btn-outline-success.focus { + box-shadow: 0 0 0 0.2rem rgba(0, 138, 41, 0.5); +} + +.btn-outline-success.disabled, .btn-outline-success:disabled { + color: #008a29; + background-color: transparent; +} + +.btn-outline-success:not(:disabled):not(.disabled):active, .btn-outline-success:not(:disabled):not(.disabled).active, +.show > .btn-outline-success.dropdown-toggle { + color: #fff; + background-color: #008a29; + border-color: #008a29; +} + +.btn-outline-success:not(:disabled):not(.disabled):active:focus, .btn-outline-success:not(:disabled):not(.disabled).active:focus, +.show > .btn-outline-success.dropdown-toggle:focus { + box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125), 0 0 0 0.2rem rgba(0, 138, 41, 0.5); +} + +.btn-outline-info { + color: #74dbef; + border-color: #74dbef; +} + +.btn-outline-info:hover { + color: #212529; + background-color: #74dbef; + border-color: #74dbef; +} + +.btn-outline-info:focus, .btn-outline-info.focus { + box-shadow: 0 0 0 0.2rem rgba(116, 219, 239, 0.5); +} + +.btn-outline-info.disabled, .btn-outline-info:disabled { + color: #74dbef; + background-color: transparent; +} + +.btn-outline-info:not(:disabled):not(.disabled):active, .btn-outline-info:not(:disabled):not(.disabled).active, +.show > .btn-outline-info.dropdown-toggle { + color: #212529; + background-color: #74dbef; + border-color: #74dbef; +} + +.btn-outline-info:not(:disabled):not(.disabled):active:focus, .btn-outline-info:not(:disabled):not(.disabled).active:focus, +.show > .btn-outline-info.dropdown-toggle:focus { + box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125), 0 0 0 0.2rem rgba(116, 219, 239, 0.5); +} + +.btn-outline-warning { + color: #e6d200; + border-color: #e6d200; +} + +.btn-outline-warning:hover { + color: #212529; + background-color: #e6d200; + border-color: #e6d200; +} + +.btn-outline-warning:focus, .btn-outline-warning.focus { + box-shadow: 0 0 0 0.2rem rgba(230, 210, 0, 0.5); +} + +.btn-outline-warning.disabled, .btn-outline-warning:disabled { + color: #e6d200; + background-color: transparent; +} + +.btn-outline-warning:not(:disabled):not(.disabled):active, .btn-outline-warning:not(:disabled):not(.disabled).active, +.show > .btn-outline-warning.dropdown-toggle { + color: #212529; + background-color: #e6d200; + border-color: #e6d200; +} + +.btn-outline-warning:not(:disabled):not(.disabled):active:focus, .btn-outline-warning:not(:disabled):not(.disabled).active:focus, +.show > .btn-outline-warning.dropdown-toggle:focus { + box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125), 0 0 0 0.2rem rgba(230, 210, 0, 0.5); +} + +.btn-outline-danger { + color: #e13737; + border-color: #e13737; +} + +.btn-outline-danger:hover { + color: #fff; + background-color: #e13737; + border-color: #e13737; +} + +.btn-outline-danger:focus, .btn-outline-danger.focus { + box-shadow: 0 0 0 0.2rem rgba(225, 55, 55, 0.5); +} + +.btn-outline-danger.disabled, .btn-outline-danger:disabled { + color: #e13737; + background-color: transparent; +} + +.btn-outline-danger:not(:disabled):not(.disabled):active, .btn-outline-danger:not(:disabled):not(.disabled).active, +.show > .btn-outline-danger.dropdown-toggle { + color: #fff; + background-color: #e13737; + border-color: #e13737; +} + +.btn-outline-danger:not(:disabled):not(.disabled):active:focus, .btn-outline-danger:not(:disabled):not(.disabled).active:focus, +.show > .btn-outline-danger.dropdown-toggle:focus { + box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125), 0 0 0 0.2rem rgba(225, 55, 55, 0.5); +} + +.btn-outline-light { + color: #f4f4f4; + border-color: #f4f4f4; +} + +.btn-outline-light:hover { + color: #212529; + background-color: #f4f4f4; + border-color: #f4f4f4; +} + +.btn-outline-light:focus, .btn-outline-light.focus { + box-shadow: 0 0 0 0.2rem rgba(244, 244, 244, 0.5); +} + +.btn-outline-light.disabled, .btn-outline-light:disabled { + color: #f4f4f4; + background-color: transparent; +} + +.btn-outline-light:not(:disabled):not(.disabled):active, .btn-outline-light:not(:disabled):not(.disabled).active, +.show > .btn-outline-light.dropdown-toggle { + color: #212529; + background-color: #f4f4f4; + border-color: #f4f4f4; +} + +.btn-outline-light:not(:disabled):not(.disabled):active:focus, .btn-outline-light:not(:disabled):not(.disabled).active:focus, +.show > .btn-outline-light.dropdown-toggle:focus { + box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125), 0 0 0 0.2rem rgba(244, 244, 244, 0.5); +} + +.btn-outline-dark { + color: #072247; + border-color: #072247; +} + +.btn-outline-dark:hover { + color: #fff; + background-color: #072247; + border-color: #072247; +} + +.btn-outline-dark:focus, .btn-outline-dark.focus { + box-shadow: 0 0 0 0.2rem rgba(7, 34, 71, 0.5); +} + +.btn-outline-dark.disabled, .btn-outline-dark:disabled { + color: #072247; + background-color: transparent; +} + +.btn-outline-dark:not(:disabled):not(.disabled):active, .btn-outline-dark:not(:disabled):not(.disabled).active, +.show > .btn-outline-dark.dropdown-toggle { + color: #fff; + background-color: #072247; + border-color: #072247; +} + +.btn-outline-dark:not(:disabled):not(.disabled):active:focus, .btn-outline-dark:not(:disabled):not(.disabled).active:focus, +.show > .btn-outline-dark.dropdown-toggle:focus { + box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125), 0 0 0 0.2rem rgba(7, 34, 71, 0.5); +} + +.btn-link { + font-weight: 400; + color: #083358; + text-decoration: none; +} + +.btn-link:hover { + color: #020a12; + text-decoration: underline; +} + +.btn-link:focus, .btn-link.focus { + text-decoration: underline; +} + +.btn-link:disabled, .btn-link.disabled { + color: #6c757d; + pointer-events: none; +} + +.btn-lg, .btn-group-lg > .btn { + padding: 0.5rem 1rem; + font-size: 1.25rem; + line-height: 1.5; + border-radius: 0; +} + +.btn-sm, .btn-group-sm > .btn { + padding: 0.25rem 0.5rem; + font-size: 0.875rem; + line-height: 1.5; + border-radius: 0; +} + +.btn-block { + display: block; + width: 100%; +} + +.btn-block + .btn-block { + margin-top: 0.5rem; +} + +input[type="submit"].btn-block, +input[type="reset"].btn-block, +input[type="button"].btn-block { + width: 100%; +} + +.fade { + transition: opacity 0.15s linear; +} + +@media (prefers-reduced-motion: reduce) { + .fade { + transition: none; + } +} + +.fade:not(.show) { + opacity: 0; +} + +.collapse:not(.show) { + display: none; +} + +.collapsing { + position: relative; + height: 0; + overflow: hidden; + transition: height 0.35s ease; +} + +@media (prefers-reduced-motion: reduce) { + .collapsing { + transition: none; + } +} + +.dropup, +.dropright, +.dropdown, +.dropleft { + position: relative; +} + +.dropdown-toggle { + white-space: nowrap; +} + +.dropdown-toggle::after { + display: inline-block; + margin-left: 0.255em; + vertical-align: 0.255em; + content: ""; + border-top: 0.3em solid; + border-right: 0.3em solid transparent; + border-bottom: 0; + border-left: 0.3em solid transparent; +} + +.dropdown-toggle:empty::after { + margin-left: 0; +} + +.dropdown-menu { + position: absolute; + top: 100%; + left: 0; + z-index: 1000; + display: none; + float: left; + min-width: 10rem; + padding: 0.5rem 0; + margin: 0.125rem 0 0; + font-size: 1rem; + color: #212529; + text-align: left; + list-style: none; + background-color: #fff; + background-clip: padding-box; + border: 1px solid rgba(0, 0, 0, 0.15); + box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.175); +} + +.dropdown-menu-left { + right: auto; + left: 0; +} + +.dropdown-menu-right { + right: 0; + left: auto; +} + +@media (min-width: 576px) { + .dropdown-menu-sm-left { + right: auto; + left: 0; + } + .dropdown-menu-sm-right { + right: 0; + left: auto; + } +} + +@media (min-width: 768px) { + .dropdown-menu-md-left { + right: auto; + left: 0; + } + .dropdown-menu-md-right { + right: 0; + left: auto; + } +} + +@media (min-width: 992px) { + .dropdown-menu-lg-left { + right: auto; + left: 0; + } + .dropdown-menu-lg-right { + right: 0; + left: auto; + } +} + +@media (min-width: 1200px) { + .dropdown-menu-xl-left { + right: auto; + left: 0; + } + .dropdown-menu-xl-right { + right: 0; + left: auto; + } +} + +.dropup .dropdown-menu { + top: auto; + bottom: 100%; + margin-top: 0; + margin-bottom: 0.125rem; +} + +.dropup .dropdown-toggle::after { + display: inline-block; + margin-left: 0.255em; + vertical-align: 0.255em; + content: ""; + border-top: 0; + border-right: 0.3em solid transparent; + border-bottom: 0.3em solid; + border-left: 0.3em solid transparent; +} + +.dropup .dropdown-toggle:empty::after { + margin-left: 0; +} + +.dropright .dropdown-menu { + top: 0; + right: auto; + left: 100%; + margin-top: 0; + margin-left: 0.125rem; +} + +.dropright .dropdown-toggle::after { + display: inline-block; + margin-left: 0.255em; + vertical-align: 0.255em; + content: ""; + border-top: 0.3em solid transparent; + border-right: 0; + border-bottom: 0.3em solid transparent; + border-left: 0.3em solid; +} + +.dropright .dropdown-toggle:empty::after { + margin-left: 0; +} + +.dropright .dropdown-toggle::after { + vertical-align: 0; +} + +.dropleft .dropdown-menu { + top: 0; + right: 100%; + left: auto; + margin-top: 0; + margin-right: 0.125rem; +} + +.dropleft .dropdown-toggle::after { + display: inline-block; + margin-left: 0.255em; + vertical-align: 0.255em; + content: ""; +} + +.dropleft .dropdown-toggle::after { + display: none; +} + +.dropleft .dropdown-toggle::before { + display: inline-block; + margin-right: 0.255em; + vertical-align: 0.255em; + content: ""; + border-top: 0.3em solid transparent; + border-right: 0.3em solid; + border-bottom: 0.3em solid transparent; +} + +.dropleft .dropdown-toggle:empty::after { + margin-left: 0; +} + +.dropleft .dropdown-toggle::before { + vertical-align: 0; +} + +.dropdown-menu[x-placement^="top"], .dropdown-menu[x-placement^="right"], .dropdown-menu[x-placement^="bottom"], .dropdown-menu[x-placement^="left"] { + right: auto; + bottom: auto; +} + +.dropdown-divider { + height: 0; + margin: 0.25rem 0; + overflow: hidden; + border-top: 1px solid #e9ecef; +} + +.dropdown-item { + display: block; + width: 100%; + padding: 0.25rem 1.5rem; + clear: both; + font-weight: 400; + color: #212529; + text-align: inherit; + white-space: nowrap; + background-color: transparent; + border: 0; +} + +.dropdown-item:hover, .dropdown-item:focus { + color: #16181b; + text-decoration: none; + background: #f8f9fa linear-gradient(180deg, #f9fafb, #f8f9fa) repeat-x; +} + +.dropdown-item.active, .dropdown-item:active { + color: #fff; + text-decoration: none; + background: #083358 linear-gradient(180deg, #2d5271, #083358) repeat-x; +} + +.dropdown-item.disabled, .dropdown-item:disabled { + color: #6c757d; + pointer-events: none; + background-color: transparent; + background-image: none; +} + +.dropdown-menu.show { + display: block; +} + +.dropdown-header { + display: block; + padding: 0.5rem 1.5rem; + margin-bottom: 0; + font-size: 0.875rem; + color: #6c757d; + white-space: nowrap; +} + +.dropdown-item-text { + display: block; + padding: 0.25rem 1.5rem; + color: #212529; +} + +.btn-group, +.btn-group-vertical { + position: relative; + display: inline-flex; + vertical-align: middle; +} + +.btn-group > .btn, +.btn-group-vertical > .btn { + position: relative; + flex: 1 1 auto; +} + +.btn-group > .btn:hover, +.btn-group-vertical > .btn:hover { + z-index: 1; +} + +.btn-group > .btn:focus, .btn-group > .btn:active, .btn-group > .btn.active, +.btn-group-vertical > .btn:focus, +.btn-group-vertical > .btn:active, +.btn-group-vertical > .btn.active { + z-index: 1; +} + +.btn-toolbar { + display: flex; + flex-wrap: wrap; + justify-content: flex-start; +} + +.btn-toolbar .input-group { + width: auto; +} + +.btn-group > .btn:not(:first-child), +.btn-group > .btn-group:not(:first-child) { + margin-left: -1px; +} + +.dropdown-toggle-split { + padding-right: 0.5625rem; + padding-left: 0.5625rem; +} + +.dropdown-toggle-split::after, +.dropup .dropdown-toggle-split::after, +.dropright .dropdown-toggle-split::after { + margin-left: 0; +} + +.dropleft .dropdown-toggle-split::before { + margin-right: 0; +} + +.btn-sm + .dropdown-toggle-split, .btn-group-sm > .btn + .dropdown-toggle-split { + padding-right: 0.375rem; + padding-left: 0.375rem; +} + +.btn-lg + .dropdown-toggle-split, .btn-group-lg > .btn + .dropdown-toggle-split { + padding-right: 0.75rem; + padding-left: 0.75rem; +} + +.btn-group.show .dropdown-toggle { + box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); +} + +.btn-group.show .dropdown-toggle.btn-link { + box-shadow: none; +} + +.btn-group-vertical { + flex-direction: column; + align-items: flex-start; + justify-content: center; +} + +.btn-group-vertical > .btn, +.btn-group-vertical > .btn-group { + width: 100%; +} + +.btn-group-vertical > .btn:not(:first-child), +.btn-group-vertical > .btn-group:not(:first-child) { + margin-top: -1px; +} + +.btn-group-toggle > .btn, +.btn-group-toggle > .btn-group > .btn { + margin-bottom: 0; +} + +.btn-group-toggle > .btn input[type="radio"], +.btn-group-toggle > .btn input[type="checkbox"], +.btn-group-toggle > .btn-group > .btn input[type="radio"], +.btn-group-toggle > .btn-group > .btn input[type="checkbox"] { + position: absolute; + clip: rect(0, 0, 0, 0); + pointer-events: none; +} + +.input-group { + position: relative; + display: flex; + flex-wrap: wrap; + align-items: stretch; + width: 100%; +} + +.input-group > .form-control, +.input-group > .form-control-plaintext, +.input-group > .custom-select, +.input-group > .custom-file { + position: relative; + flex: 1 1 auto; + width: 1%; + min-width: 0; + margin-bottom: 0; +} + +.input-group > .form-control + .form-control, +.input-group > .form-control + .custom-select, +.input-group > .form-control + .custom-file, +.input-group > .form-control-plaintext + .form-control, +.input-group > .form-control-plaintext + .custom-select, +.input-group > .form-control-plaintext + .custom-file, +.input-group > .custom-select + .form-control, +.input-group > .custom-select + .custom-select, +.input-group > .custom-select + .custom-file, +.input-group > .custom-file + .form-control, +.input-group > .custom-file + .custom-select, +.input-group > .custom-file + .custom-file { + margin-left: -1px; +} + +.input-group > .form-control:focus, +.input-group > .custom-select:focus, +.input-group > .custom-file .custom-file-input:focus ~ .custom-file-label { + z-index: 3; +} + +.input-group > .custom-file .custom-file-input:focus { + z-index: 4; +} + +.input-group > .custom-file { + display: flex; + align-items: center; +} + +.input-group-prepend, +.input-group-append { + display: flex; +} + +.input-group-prepend .btn, +.input-group-append .btn { + position: relative; + z-index: 2; +} + +.input-group-prepend .btn:focus, +.input-group-append .btn:focus { + z-index: 3; +} + +.input-group-prepend .btn + .btn, +.input-group-prepend .btn + .input-group-text, +.input-group-prepend .input-group-text + .input-group-text, +.input-group-prepend .input-group-text + .btn, +.input-group-append .btn + .btn, +.input-group-append .btn + .input-group-text, +.input-group-append .input-group-text + .input-group-text, +.input-group-append .input-group-text + .btn { + margin-left: -1px; +} + +.input-group-prepend { + margin-right: -1px; +} + +.input-group-append { + margin-left: -1px; +} + +.input-group-text { + display: flex; + align-items: center; + padding: 0.375rem 0.75rem; + margin-bottom: 0; + font-size: 1rem; + font-weight: 400; + line-height: 1.5; + color: #495057; + text-align: center; + white-space: nowrap; + background-color: #e9ecef; + border: 1px solid #ced4da; +} + +.input-group-text input[type="radio"], +.input-group-text input[type="checkbox"] { + margin-top: 0; +} + +.input-group-lg > .form-control:not(textarea), +.input-group-lg > .custom-select { + height: calc(1.5em + 1rem + 2px); +} + +.input-group-lg > .form-control, +.input-group-lg > .custom-select, +.input-group-lg > .input-group-prepend > .input-group-text, +.input-group-lg > .input-group-append > .input-group-text, +.input-group-lg > .input-group-prepend > .btn, +.input-group-lg > .input-group-append > .btn { + padding: 0.5rem 1rem; + font-size: 1.25rem; + line-height: 1.5; +} + +.input-group-sm > .form-control:not(textarea), +.input-group-sm > .custom-select { + height: calc(1.5em + 0.5rem + 2px); +} + +.input-group-sm > .form-control, +.input-group-sm > .custom-select, +.input-group-sm > .input-group-prepend > .input-group-text, +.input-group-sm > .input-group-append > .input-group-text, +.input-group-sm > .input-group-prepend > .btn, +.input-group-sm > .input-group-append > .btn { + padding: 0.25rem 0.5rem; + font-size: 0.875rem; + line-height: 1.5; +} + +.input-group-lg > .custom-select, +.input-group-sm > .custom-select { + padding-right: 1.75rem; +} + +.custom-control { + position: relative; + z-index: 1; + display: block; + min-height: 1.5rem; + padding-left: 1.5rem; +} + +.custom-control-inline { + display: inline-flex; + margin-right: 1rem; +} + +.custom-control-input { + position: absolute; + left: 0; + z-index: -1; + width: 1rem; + height: 1.25rem; + opacity: 0; +} + +.custom-control-input:checked ~ .custom-control-label::before { + color: #fff; + border-color: #083358; + background: #083358 linear-gradient(180deg, #2d5271, #083358) repeat-x; + box-shadow:; +} + +.custom-control-input:focus ~ .custom-control-label::before { + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 0 0.2rem rgba(8, 51, 88, 0.25); +} + +.custom-control-input:focus:not(:checked) ~ .custom-control-label::before { + border-color: #1377cd; +} + +.custom-control-input:not(:disabled):active ~ .custom-control-label::before { + color: #fff; + background-color: #2791eb; + border-color: #2791eb; + box-shadow:; +} + +.custom-control-input[disabled] ~ .custom-control-label, .custom-control-input:disabled ~ .custom-control-label { + color: #6c757d; +} + +.custom-control-input[disabled] ~ .custom-control-label::before, .custom-control-input:disabled ~ .custom-control-label::before { + background-color: #e9ecef; +} + +.custom-control-label { + position: relative; + margin-bottom: 0; + vertical-align: top; +} + +.custom-control-label::before { + position: absolute; + top: 0.25rem; + left: -1.5rem; + display: block; + width: 1rem; + height: 1rem; + pointer-events: none; + content: ""; + background-color: #fff; + border: #adb5bd solid 1px; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); +} + +.custom-control-label::after { + position: absolute; + top: 0.25rem; + left: -1.5rem; + display: block; + width: 1rem; + height: 1rem; + content: ""; + background: no-repeat 50% / 50% 50%; +} + +.custom-checkbox .custom-control-input:checked ~ .custom-control-label::after { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26l2.974 2.99L8 2.193z'/%3e%3c/svg%3e"); +} + +.custom-checkbox .custom-control-input:indeterminate ~ .custom-control-label::before { + border-color: #083358; + background: #083358 linear-gradient(180deg, #2d5271, #083358) repeat-x; + box-shadow:; +} + +.custom-checkbox .custom-control-input:indeterminate ~ .custom-control-label::after { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='4' viewBox='0 0 4 4'%3e%3cpath stroke='%23fff' d='M0 2h4'/%3e%3c/svg%3e"); +} + +.custom-checkbox .custom-control-input:disabled:checked ~ .custom-control-label::before { + background: rgba(8, 51, 88, 0.5) linear-gradient(180deg, rgba(94, 122, 146, 0.575), rgba(8, 51, 88, 0.5)) repeat-x; +} + +.custom-checkbox .custom-control-input:disabled:indeterminate ~ .custom-control-label::before { + background: rgba(8, 51, 88, 0.5) linear-gradient(180deg, rgba(94, 122, 146, 0.575), rgba(8, 51, 88, 0.5)) repeat-x; +} + +.custom-radio .custom-control-label::before { + border-radius: 50%; +} + +.custom-radio .custom-control-input:checked ~ .custom-control-label::after { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e"); +} + +.custom-radio .custom-control-input:disabled:checked ~ .custom-control-label::before { + background: rgba(8, 51, 88, 0.5) linear-gradient(180deg, rgba(94, 122, 146, 0.575), rgba(8, 51, 88, 0.5)) repeat-x; +} + +.custom-switch { + padding-left: 2.25rem; +} + +.custom-switch .custom-control-label::before { + left: -2.25rem; + width: 1.75rem; + pointer-events: all; + border-radius: 0.5rem; +} + +.custom-switch .custom-control-label::after { + top: calc(0.25rem + 2px); + left: calc(-2.25rem + 2px); + width: calc(1rem - 4px); + height: calc(1rem - 4px); + background-color: #adb5bd; + border-radius: 0.5rem; + transition: transform 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; +} + +@media (prefers-reduced-motion: reduce) { + .custom-switch .custom-control-label::after { + transition: none; + } +} + +.custom-switch .custom-control-input:checked ~ .custom-control-label::after { + background-color: #fff; + transform: translateX(0.75rem); +} + +.custom-switch .custom-control-input:disabled:checked ~ .custom-control-label::before { + background: rgba(8, 51, 88, 0.5) linear-gradient(180deg, rgba(94, 122, 146, 0.575), rgba(8, 51, 88, 0.5)) repeat-x; +} + +.custom-select { + display: inline-block; + width: 100%; + height: calc(1.5em + 0.75rem + 2px); + padding: 0.375rem 1.75rem 0.375rem 0.75rem; + font-size: 1rem; + font-weight: 400; + line-height: 1.5; + color: #495057; + vertical-align: middle; + background: #fff url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='4' height='5' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e") no-repeat right 0.75rem center/8px 10px; + border: 1px solid #ced4da; + border-radius: 0; + box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.075); + appearance: none; +} + +.custom-select:focus { + border-color: #1377cd; + outline: 0; + box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.075), 0 0 0 0.2rem rgba(8, 51, 88, 0.25); +} + +.custom-select:focus::-ms-value { + color: #495057; + background-color: #fff; +} + +.custom-select[multiple], .custom-select[size]:not([size="1"]) { + height: auto; + padding-right: 0.75rem; + background-image: none; +} + +.custom-select:disabled { + color: #6c757d; + background-color: #e9ecef; +} + +.custom-select::-ms-expand { + display: none; +} + +.custom-select:-moz-focusring { + color: transparent; + text-shadow: 0 0 0 #495057; +} + +.custom-select-sm { + height: calc(1.5em + 0.5rem + 2px); + padding-top: 0.25rem; + padding-bottom: 0.25rem; + padding-left: 0.5rem; + font-size: 0.875rem; +} + +.custom-select-lg { + height: calc(1.5em + 1rem + 2px); + padding-top: 0.5rem; + padding-bottom: 0.5rem; + padding-left: 1rem; + font-size: 1.25rem; +} + +.custom-file { + position: relative; + display: inline-block; + width: 100%; + height: calc(1.5em + 0.75rem + 2px); + margin-bottom: 0; +} + +.custom-file-input { + position: relative; + z-index: 2; + width: 100%; + height: calc(1.5em + 0.75rem + 2px); + margin: 0; + opacity: 0; +} + +.custom-file-input:focus ~ .custom-file-label { + border-color: #1377cd; + box-shadow: 0 0 0 0.2rem rgba(8, 51, 88, 0.25); +} + +.custom-file-input[disabled] ~ .custom-file-label, +.custom-file-input:disabled ~ .custom-file-label { + background-color: #e9ecef; +} + +.custom-file-input:lang(en) ~ .custom-file-label::after { + content: "Browse"; +} + +.custom-file-input ~ .custom-file-label[data-browse]::after { + content: attr(data-browse); +} + +.custom-file-label { + position: absolute; + top: 0; + right: 0; + left: 0; + z-index: 1; + height: calc(1.5em + 0.75rem + 2px); + padding: 0.375rem 0.75rem; + font-weight: 400; + line-height: 1.5; + color: #495057; + background-color: #fff; + border: 1px solid #ced4da; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); +} + +.custom-file-label::after { + position: absolute; + top: 0; + right: 0; + bottom: 0; + z-index: 3; + display: block; + height: calc(1.5em + 0.75rem); + padding: 0.375rem 0.75rem; + line-height: 1.5; + color: #495057; + content: "Browse"; + background: #e9ecef linear-gradient(180deg, #eceff1, #e9ecef) repeat-x; + border-left: inherit; +} + +.custom-range { + width: 100%; + height: 1.4rem; + padding: 0; + background-color: transparent; + appearance: none; +} + +.custom-range:focus { + outline: none; +} + +.custom-range:focus::-webkit-slider-thumb { + box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(8, 51, 88, 0.25); +} + +.custom-range:focus::-moz-range-thumb { + box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(8, 51, 88, 0.25); +} + +.custom-range:focus::-ms-thumb { + box-shadow: 0 0 0 1px #fff, 0 0 0 0.2rem rgba(8, 51, 88, 0.25); +} + +.custom-range::-moz-focus-outer { + border: 0; +} + +.custom-range::-webkit-slider-thumb { + width: 1rem; + height: 1rem; + margin-top: -0.25rem; + background: #083358 linear-gradient(180deg, #2d5271, #083358) repeat-x; + border: 0; + box-shadow: 0 0.1rem 0.25rem rgba(0, 0, 0, 0.1); + transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; + appearance: none; +} + +@media (prefers-reduced-motion: reduce) { + .custom-range::-webkit-slider-thumb { + transition: none; + } +} + +.custom-range::-webkit-slider-thumb:active { + background: #2791eb linear-gradient(180deg, #48a1ee, #2791eb) repeat-x; +} + +.custom-range::-webkit-slider-runnable-track { + width: 100%; + height: 0.5rem; + color: transparent; + cursor: pointer; + background-color: #dee2e6; + border-color: transparent; + box-shadow: inset 0 0.25rem 0.25rem rgba(0, 0, 0, 0.1); +} + +.custom-range::-moz-range-thumb { + width: 1rem; + height: 1rem; + background: #083358 linear-gradient(180deg, #2d5271, #083358) repeat-x; + border: 0; + box-shadow: 0 0.1rem 0.25rem rgba(0, 0, 0, 0.1); + transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; + appearance: none; +} + +@media (prefers-reduced-motion: reduce) { + .custom-range::-moz-range-thumb { + transition: none; + } +} + +.custom-range::-moz-range-thumb:active { + background: #2791eb linear-gradient(180deg, #48a1ee, #2791eb) repeat-x; +} + +.custom-range::-moz-range-track { + width: 100%; + height: 0.5rem; + color: transparent; + cursor: pointer; + background-color: #dee2e6; + border-color: transparent; + box-shadow: inset 0 0.25rem 0.25rem rgba(0, 0, 0, 0.1); +} + +.custom-range::-ms-thumb { + width: 1rem; + height: 1rem; + margin-top: 0; + margin-right: 0.2rem; + margin-left: 0.2rem; + background: #083358 linear-gradient(180deg, #2d5271, #083358) repeat-x; + border: 0; + box-shadow: 0 0.1rem 0.25rem rgba(0, 0, 0, 0.1); + transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; + appearance: none; +} + +@media (prefers-reduced-motion: reduce) { + .custom-range::-ms-thumb { + transition: none; + } +} + +.custom-range::-ms-thumb:active { + background: #2791eb linear-gradient(180deg, #48a1ee, #2791eb) repeat-x; +} + +.custom-range::-ms-track { + width: 100%; + height: 0.5rem; + color: transparent; + cursor: pointer; + background-color: transparent; + border-color: transparent; + border-width: 0.5rem; + box-shadow: inset 0 0.25rem 0.25rem rgba(0, 0, 0, 0.1); +} + +.custom-range::-ms-fill-lower { + background-color: #dee2e6; +} + +.custom-range::-ms-fill-upper { + margin-right: 15px; + background-color: #dee2e6; +} + +.custom-range:disabled::-webkit-slider-thumb { + background-color: #adb5bd; +} + +.custom-range:disabled::-webkit-slider-runnable-track { + cursor: default; +} + +.custom-range:disabled::-moz-range-thumb { + background-color: #adb5bd; +} + +.custom-range:disabled::-moz-range-track { + cursor: default; +} + +.custom-range:disabled::-ms-thumb { + background-color: #adb5bd; +} + +.custom-control-label::before, +.custom-file-label, +.custom-select { + transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; +} + +@media (prefers-reduced-motion: reduce) { + .custom-control-label::before, + .custom-file-label, + .custom-select { + transition: none; + } +} + +.nav { + display: flex; + flex-wrap: wrap; + padding-left: 0; + margin-bottom: 0; + list-style: none; +} + +.nav-link { + display: block; + padding: 0.5rem 1rem; +} + +.nav-link:hover, .nav-link:focus { + text-decoration: none; +} + +.nav-link.disabled { + color: #6c757d; + pointer-events: none; + cursor: default; +} + +.nav-tabs { + border-bottom: 1px solid #dee2e6; +} + +.nav-tabs .nav-item { + margin-bottom: -1px; +} + +.nav-tabs .nav-link { + border: 1px solid transparent; +} + +.nav-tabs .nav-link:hover, .nav-tabs .nav-link:focus { + border-color: #e9ecef #e9ecef #dee2e6; +} + +.nav-tabs .nav-link.disabled { + color: #6c757d; + background-color: transparent; + border-color: transparent; +} + +.nav-tabs .nav-link.active, +.nav-tabs .nav-item.show .nav-link { + color: #495057; + background-color: #fff; + border-color: #dee2e6 #dee2e6 #fff; +} + +.nav-tabs .dropdown-menu { + margin-top: -1px; +} + +.nav-pills .nav-link.active, +.nav-pills .show > .nav-link { + color: #fff; + background-color: #083358; +} + +.nav-fill > .nav-link, +.nav-fill .nav-item { + flex: 1 1 auto; + text-align: center; +} + +.nav-justified > .nav-link, +.nav-justified .nav-item { + flex-basis: 0; + flex-grow: 1; + text-align: center; +} + +.tab-content > .tab-pane { + display: none; +} + +.tab-content > .active { + display: block; +} + +.navbar { + position: relative; + display: flex; + flex-wrap: wrap; + align-items: center; + justify-content: space-between; + padding: 0.25rem 0.5rem; +} + +.navbar .container, +.navbar .container-fluid, .navbar .container-sm, .navbar .container-md, .navbar .container-lg, .navbar .container-xl { + display: flex; + flex-wrap: wrap; + align-items: center; + justify-content: space-between; +} + +.navbar-brand { + display: inline-block; + padding-top: 0.3125rem; + padding-bottom: 0.3125rem; + margin-right: 0.5rem; + font-size: 1.25rem; + line-height: inherit; + white-space: nowrap; +} + +.navbar-brand:hover, .navbar-brand:focus { + text-decoration: none; +} + +.navbar-nav { + display: flex; + flex-direction: column; + padding-left: 0; + margin-bottom: 0; + list-style: none; +} + +.navbar-nav .nav-link { + padding-right: 0; + padding-left: 0; +} + +.navbar-nav .dropdown-menu { + position: static; + float: none; +} + +.navbar-text { + display: inline-block; + padding-top: 0.5rem; + padding-bottom: 0.5rem; +} + +.navbar-collapse { + flex-basis: 100%; + flex-grow: 1; + align-items: center; +} + +.navbar-toggler { + padding: 0.25rem 0.75rem; + font-size: 1.25rem; + line-height: 1; + background-color: transparent; + border: 1px solid transparent; +} + +.navbar-toggler:hover, .navbar-toggler:focus { + text-decoration: none; +} + +.navbar-toggler-icon { + display: inline-block; + width: 1.5em; + height: 1.5em; + vertical-align: middle; + content: ""; + background: no-repeat center center; + background-size: 100% 100%; +} + +@media (max-width: 575.98px) { + .navbar-expand-sm > .container, + .navbar-expand-sm > .container-fluid, .navbar-expand-sm > .container-sm, .navbar-expand-sm > .container-md, .navbar-expand-sm > .container-lg, .navbar-expand-sm > .container-xl { + padding-right: 0; + padding-left: 0; + } +} + +@media (min-width: 576px) { + .navbar-expand-sm { + flex-flow: row nowrap; + justify-content: flex-start; + } + .navbar-expand-sm .navbar-nav { + flex-direction: row; + } + .navbar-expand-sm .navbar-nav .dropdown-menu { + position: absolute; + } + .navbar-expand-sm .navbar-nav .nav-link { + padding-right: 0.5rem; + padding-left: 0.5rem; + } + .navbar-expand-sm > .container, + .navbar-expand-sm > .container-fluid, .navbar-expand-sm > .container-sm, .navbar-expand-sm > .container-md, .navbar-expand-sm > .container-lg, .navbar-expand-sm > .container-xl { + flex-wrap: nowrap; + } + .navbar-expand-sm .navbar-collapse { + display: flex !important; + flex-basis: auto; + } + .navbar-expand-sm .navbar-toggler { + display: none; + } +} + +@media (max-width: 767.98px) { + .navbar-expand-md > .container, + .navbar-expand-md > .container-fluid, .navbar-expand-md > .container-sm, .navbar-expand-md > .container-md, .navbar-expand-md > .container-lg, .navbar-expand-md > .container-xl { + padding-right: 0; + padding-left: 0; + } +} + +@media (min-width: 768px) { + .navbar-expand-md { + flex-flow: row nowrap; + justify-content: flex-start; + } + .navbar-expand-md .navbar-nav { + flex-direction: row; + } + .navbar-expand-md .navbar-nav .dropdown-menu { + position: absolute; + } + .navbar-expand-md .navbar-nav .nav-link { + padding-right: 0.5rem; + padding-left: 0.5rem; + } + .navbar-expand-md > .container, + .navbar-expand-md > .container-fluid, .navbar-expand-md > .container-sm, .navbar-expand-md > .container-md, .navbar-expand-md > .container-lg, .navbar-expand-md > .container-xl { + flex-wrap: nowrap; + } + .navbar-expand-md .navbar-collapse { + display: flex !important; + flex-basis: auto; + } + .navbar-expand-md .navbar-toggler { + display: none; + } +} + +@media (max-width: 991.98px) { + .navbar-expand-lg > .container, + .navbar-expand-lg > .container-fluid, .navbar-expand-lg > .container-sm, .navbar-expand-lg > .container-md, .navbar-expand-lg > .container-lg, .navbar-expand-lg > .container-xl { + padding-right: 0; + padding-left: 0; + } +} + +@media (min-width: 992px) { + .navbar-expand-lg { + flex-flow: row nowrap; + justify-content: flex-start; + } + .navbar-expand-lg .navbar-nav { + flex-direction: row; + } + .navbar-expand-lg .navbar-nav .dropdown-menu { + position: absolute; + } + .navbar-expand-lg .navbar-nav .nav-link { + padding-right: 0.5rem; + padding-left: 0.5rem; + } + .navbar-expand-lg > .container, + .navbar-expand-lg > .container-fluid, .navbar-expand-lg > .container-sm, .navbar-expand-lg > .container-md, .navbar-expand-lg > .container-lg, .navbar-expand-lg > .container-xl { + flex-wrap: nowrap; + } + .navbar-expand-lg .navbar-collapse { + display: flex !important; + flex-basis: auto; + } + .navbar-expand-lg .navbar-toggler { + display: none; + } +} + +@media (max-width: 1199.98px) { + .navbar-expand-xl > .container, + .navbar-expand-xl > .container-fluid, .navbar-expand-xl > .container-sm, .navbar-expand-xl > .container-md, .navbar-expand-xl > .container-lg, .navbar-expand-xl > .container-xl { + padding-right: 0; + padding-left: 0; + } +} + +@media (min-width: 1200px) { + .navbar-expand-xl { + flex-flow: row nowrap; + justify-content: flex-start; + } + .navbar-expand-xl .navbar-nav { + flex-direction: row; + } + .navbar-expand-xl .navbar-nav .dropdown-menu { + position: absolute; + } + .navbar-expand-xl .navbar-nav .nav-link { + padding-right: 0.5rem; + padding-left: 0.5rem; + } + .navbar-expand-xl > .container, + .navbar-expand-xl > .container-fluid, .navbar-expand-xl > .container-sm, .navbar-expand-xl > .container-md, .navbar-expand-xl > .container-lg, .navbar-expand-xl > .container-xl { + flex-wrap: nowrap; + } + .navbar-expand-xl .navbar-collapse { + display: flex !important; + flex-basis: auto; + } + .navbar-expand-xl .navbar-toggler { + display: none; + } +} + +.navbar-expand { + flex-flow: row nowrap; + justify-content: flex-start; +} + +.navbar-expand > .container, +.navbar-expand > .container-fluid, .navbar-expand > .container-sm, .navbar-expand > .container-md, .navbar-expand > .container-lg, .navbar-expand > .container-xl { + padding-right: 0; + padding-left: 0; +} + +.navbar-expand .navbar-nav { + flex-direction: row; +} + +.navbar-expand .navbar-nav .dropdown-menu { + position: absolute; +} + +.navbar-expand .navbar-nav .nav-link { + padding-right: 0.5rem; + padding-left: 0.5rem; +} + +.navbar-expand > .container, +.navbar-expand > .container-fluid, .navbar-expand > .container-sm, .navbar-expand > .container-md, .navbar-expand > .container-lg, .navbar-expand > .container-xl { + flex-wrap: nowrap; +} + +.navbar-expand .navbar-collapse { + display: flex !important; + flex-basis: auto; +} + +.navbar-expand .navbar-toggler { + display: none; +} + +.navbar-light .navbar-brand { + color: rgba(0, 0, 0, 0.9); +} + +.navbar-light .navbar-brand:hover, .navbar-light .navbar-brand:focus { + color: rgba(0, 0, 0, 0.9); +} + +.navbar-light .navbar-nav .nav-link { + color: rgba(0, 0, 0, 0.5); +} + +.navbar-light .navbar-nav .nav-link:hover, .navbar-light .navbar-nav .nav-link:focus { + color: rgba(0, 0, 0, 0.7); +} + +.navbar-light .navbar-nav .nav-link.disabled { + color: rgba(0, 0, 0, 0.3); +} + +.navbar-light .navbar-nav .show > .nav-link, +.navbar-light .navbar-nav .active > .nav-link, +.navbar-light .navbar-nav .nav-link.show, +.navbar-light .navbar-nav .nav-link.active { + color: rgba(0, 0, 0, 0.9); +} + +.navbar-light .navbar-toggler { + color: rgba(0, 0, 0, 0.5); + border-color: rgba(0, 0, 0, 0.1); +} + +.navbar-light .navbar-toggler-icon { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%280, 0, 0, 0.5%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e"); +} + +.navbar-light .navbar-text { + color: rgba(0, 0, 0, 0.5); +} + +.navbar-light .navbar-text a { + color: rgba(0, 0, 0, 0.9); +} + +.navbar-light .navbar-text a:hover, .navbar-light .navbar-text a:focus { + color: rgba(0, 0, 0, 0.9); +} + +.navbar-dark .navbar-brand { + color: #fff; +} + +.navbar-dark .navbar-brand:hover, .navbar-dark .navbar-brand:focus { + color: #fff; +} + +.navbar-dark .navbar-nav .nav-link { + color: rgba(255, 255, 255, 0.5); +} + +.navbar-dark .navbar-nav .nav-link:hover, .navbar-dark .navbar-nav .nav-link:focus { + color: rgba(255, 255, 255, 0.75); +} + +.navbar-dark .navbar-nav .nav-link.disabled { + color: rgba(255, 255, 255, 0.25); +} + +.navbar-dark .navbar-nav .show > .nav-link, +.navbar-dark .navbar-nav .active > .nav-link, +.navbar-dark .navbar-nav .nav-link.show, +.navbar-dark .navbar-nav .nav-link.active { + color: #fff; +} + +.navbar-dark .navbar-toggler { + color: rgba(255, 255, 255, 0.5); + border-color: rgba(255, 255, 255, 0.1); +} + +.navbar-dark .navbar-toggler-icon { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' width='30' height='30' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.5%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e"); +} + +.navbar-dark .navbar-text { + color: rgba(255, 255, 255, 0.5); +} + +.navbar-dark .navbar-text a { + color: #fff; +} + +.navbar-dark .navbar-text a:hover, .navbar-dark .navbar-text a:focus { + color: #fff; +} + +.card { + position: relative; + display: flex; + flex-direction: column; + min-width: 0; + word-wrap: break-word; + background-color: #fff; + background-clip: border-box; + border: 1px solid rgba(0, 0, 0, 0.125); +} + +.card > hr { + margin-right: 0; + margin-left: 0; +} + +.card > .list-group { + border-top: inherit; + border-bottom: inherit; +} + +.card > .list-group:first-child { + border-top-width: 0; +} + +.card > .list-group:last-child { + border-bottom-width: 0; +} + +.card > .card-header + .list-group, +.card > .list-group + .card-footer { + border-top: 0; +} + +.card-body { + flex: 1 1 auto; + min-height: 1px; + padding: 1.25rem; +} + +.card-title { + margin-bottom: 0.75rem; +} + +.card-subtitle { + margin-top: -0.375rem; + margin-bottom: 0; +} + +.card-text:last-child { + margin-bottom: 0; +} + +.card-link:hover { + text-decoration: none; +} + +.card-link + .card-link { + margin-left: 1.25rem; +} + +.card-header { + padding: 0.75rem 1.25rem; + margin-bottom: 0; + background-color: rgba(0, 0, 0, 0.03); + border-bottom: 1px solid rgba(0, 0, 0, 0.125); +} + +.card-footer { + padding: 0.75rem 1.25rem; + background-color: rgba(0, 0, 0, 0.03); + border-top: 1px solid rgba(0, 0, 0, 0.125); +} + +.card-header-tabs { + margin-right: -0.625rem; + margin-bottom: -0.75rem; + margin-left: -0.625rem; + border-bottom: 0; +} + +.card-header-pills { + margin-right: -0.625rem; + margin-left: -0.625rem; +} + +.card-img-overlay { + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + padding: 1.25rem; +} + +.card-img, +.card-img-top, +.card-img-bottom { + flex-shrink: 0; + width: 100%; +} + +.card-deck .card { + margin-bottom: 15px; +} + +@media (min-width: 576px) { + .card-deck { + display: flex; + flex-flow: row wrap; + margin-right: -15px; + margin-left: -15px; + } + .card-deck .card { + flex: 1 0 0%; + margin-right: 15px; + margin-bottom: 0; + margin-left: 15px; + } +} + +.card-group > .card { + margin-bottom: 15px; +} + +@media (min-width: 576px) { + .card-group { + display: flex; + flex-flow: row wrap; + } + .card-group > .card { + flex: 1 0 0%; + margin-bottom: 0; + } + .card-group > .card + .card { + margin-left: 0; + border-left: 0; + } +} + +.card-columns .card { + margin-bottom: 0.75rem; +} + +@media (min-width: 576px) { + .card-columns { + column-count: 3; + column-gap: 1.25rem; + orphans: 1; + widows: 1; + } + .card-columns .card { + display: inline-block; + width: 100%; + } +} + +.accordion { + overflow-anchor: none; +} + +.accordion > .card { + overflow: hidden; +} + +.accordion > .card:not(:last-of-type) { + border-bottom: 0; +} + +.accordion > .card > .card-header { + margin-bottom: -1px; +} + +.breadcrumb { + display: flex; + flex-wrap: wrap; + padding: 0.5rem 1rem; + margin-bottom: 1rem; + list-style: none; + background-color: #e9ecef; +} + +.breadcrumb-item { + display: flex; +} + +.breadcrumb-item + .breadcrumb-item { + padding-left: 0.5rem; +} + +.breadcrumb-item + .breadcrumb-item::before { + display: inline-block; + padding-right: 0.5rem; + color: #6c757d; + content: "/"; +} + +.breadcrumb-item + .breadcrumb-item:hover::before { + text-decoration: underline; +} + +.breadcrumb-item + .breadcrumb-item:hover::before { + text-decoration: none; +} + +.breadcrumb-item.active { + color: #6c757d; +} + +.pagination { + display: flex; + padding-left: 0; + list-style: none; +} + +.page-link { + position: relative; + display: block; + padding: 0.5rem 0.75rem; + margin-left: -1px; + line-height: 1.25; + color: #083358; + background-color: #fff; + border: 1px solid #dee2e6; +} + +.page-link:hover { + z-index: 2; + color: #020a12; + text-decoration: none; + background-color: #e9ecef; + border-color: #dee2e6; +} + +.page-link:focus { + z-index: 3; + outline: 0; + box-shadow: 0 0 0 0.2rem rgba(8, 51, 88, 0.25); +} + +.page-item:first-child .page-link { + margin-left: 0; +} + +.page-item.active .page-link { + z-index: 3; + color: #fff; + background-color: #083358; + border-color: #083358; +} + +.page-item.disabled .page-link { + color: #6c757d; + pointer-events: none; + cursor: auto; + background-color: #fff; + border-color: #dee2e6; +} + +.pagination-lg .page-link { + padding: 0.75rem 1.5rem; + font-size: 1.25rem; + line-height: 1.5; +} + +.pagination-sm .page-link { + padding: 0.25rem 0.5rem; + font-size: 0.875rem; + line-height: 1.5; +} + +.badge { + display: inline-block; + padding: 0.25em 0.4em; + font-size: 75%; + font-weight: 700; + line-height: 1; + text-align: center; + white-space: nowrap; + vertical-align: baseline; + transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; +} + +@media (prefers-reduced-motion: reduce) { + .badge { + transition: none; + } +} + +a.badge:hover, a.badge:focus { + text-decoration: none; +} + +.badge:empty { + display: none; +} + +.btn .badge { + position: relative; + top: -1px; +} + +.badge-pill { + padding-right: 0.6em; + padding-left: 0.6em; +} + +.badge-primary { + color: #fff; + background-color: #083358; +} + +a.badge-primary:hover, a.badge-primary:focus { + color: #fff; + background-color: #041829; +} + +a.badge-primary:focus, a.badge-primary.focus { + outline: 0; + box-shadow: 0 0 0 0.2rem rgba(8, 51, 88, 0.5); +} + +.badge-secondary { + color: #212529; + background-color: #b8b8b8; +} + +a.badge-secondary:hover, a.badge-secondary:focus { + color: #212529; + background-color: #9f9f9f; +} + +a.badge-secondary:focus, a.badge-secondary.focus { + outline: 0; + box-shadow: 0 0 0 0.2rem rgba(184, 184, 184, 0.5); +} + +.badge-success { + color: #fff; + background-color: #008a29; +} + +a.badge-success:hover, a.badge-success:focus { + color: #fff; + background-color: #00571a; +} + +a.badge-success:focus, a.badge-success.focus { + outline: 0; + box-shadow: 0 0 0 0.2rem rgba(0, 138, 41, 0.5); +} + +.badge-info { + color: #212529; + background-color: #74dbef; +} + +a.badge-info:hover, a.badge-info:focus { + color: #212529; + background-color: #46cfea; +} + +a.badge-info:focus, a.badge-info.focus { + outline: 0; + box-shadow: 0 0 0 0.2rem rgba(116, 219, 239, 0.5); +} + +.badge-warning { + color: #212529; + background-color: #e6d200; +} + +a.badge-warning:hover, a.badge-warning:focus { + color: #212529; + background-color: #b3a300; +} + +a.badge-warning:focus, a.badge-warning.focus { + outline: 0; + box-shadow: 0 0 0 0.2rem rgba(230, 210, 0, 0.5); +} + +.badge-danger { + color: #fff; + background-color: #e13737; +} + +a.badge-danger:hover, a.badge-danger:focus { + color: #fff; + background-color: #c71e1e; +} + +a.badge-danger:focus, a.badge-danger.focus { + outline: 0; + box-shadow: 0 0 0 0.2rem rgba(225, 55, 55, 0.5); +} + +.badge-light { + color: #212529; + background-color: #f4f4f4; +} + +a.badge-light:hover, a.badge-light:focus { + color: #212529; + background-color: #dbdbdb; +} + +a.badge-light:focus, a.badge-light.focus { + outline: 0; + box-shadow: 0 0 0 0.2rem rgba(244, 244, 244, 0.5); +} + +.badge-dark { + color: #fff; + background-color: #072247; +} + +a.badge-dark:hover, a.badge-dark:focus { + color: #fff; + background-color: #020c19; +} + +a.badge-dark:focus, a.badge-dark.focus { + outline: 0; + box-shadow: 0 0 0 0.2rem rgba(7, 34, 71, 0.5); +} + +.jumbotron { + padding: 2rem 1rem; + margin-bottom: 2rem; + background-color: #e9ecef; +} + +@media (min-width: 576px) { + .jumbotron { + padding: 4rem 2rem; + } +} + +.jumbotron-fluid { + padding-right: 0; + padding-left: 0; +} + +.alert { + position: relative; + padding: 0.75rem 1.25rem; + margin-bottom: 1rem; + border: 1px solid transparent; +} + +.alert-heading { + color: inherit; +} + +.alert-link { + font-weight: 700; +} + +.alert-dismissible { + padding-right: 4rem; +} + +.alert-dismissible .close { + position: absolute; + top: 0; + right: 0; + padding: 0.75rem 1.25rem; + color: inherit; +} + +.alert-primary { + color: #041b2e; + background: #ced6de linear-gradient(180deg, #d5dce3, #ced6de) repeat-x; + border-color: #bac6d0; +} + +.alert-primary hr { + border-top-color: #abb9c6; +} + +.alert-primary .alert-link { + color: black; +} + +.alert-secondary { + color: #606060; + background: #f1f1f1 linear-gradient(180deg, #f3f3f3, #f1f1f1) repeat-x; + border-color: #ebebeb; +} + +.alert-secondary hr { + border-top-color: #dedede; +} + +.alert-secondary .alert-link { + color: #474747; +} + +.alert-success { + color: #004815; + background: #cce8d4 linear-gradient(180deg, #d4ebda, #cce8d4) repeat-x; + border-color: #b8dec3; +} + +.alert-success hr { + border-top-color: #a7d6b4; +} + +.alert-success .alert-link { + color: #001506; +} + +.alert-info { + color: #3c727c; + background: #e3f8fc linear-gradient(180deg, #e7f9fc, #e3f8fc) repeat-x; + border-color: #d8f5fb; +} + +.alert-info hr { + border-top-color: #c1eff9; +} + +.alert-info .alert-link { + color: #2b525a; +} + +.alert-warning { + color: #786d00; + background: #faf6cc linear-gradient(180deg, #fbf7d4, #faf6cc) repeat-x; + border-color: #f8f2b8; +} + +.alert-warning hr { + border-top-color: #f6eea1; +} + +.alert-warning .alert-link { + color: #453f00; +} + +.alert-danger { + color: #751d1d; + background: #f9d7d7 linear-gradient(180deg, #fadddd, #f9d7d7) repeat-x; + border-color: #f7c7c7; +} + +.alert-danger hr { + border-top-color: #f4b1b1; +} + +.alert-danger .alert-link { + color: #4c1313; +} + +.alert-light { + color: #7f7f7f; + background: #fdfdfd linear-gradient(180deg, #fdfdfd, #fdfdfd) repeat-x; + border-color: #fcfcfc; +} + +.alert-light hr { + border-top-color: #efefef; +} + +.alert-light .alert-link { + color: #666666; +} + +.alert-dark { + color: #041225; + background: #cdd3da linear-gradient(180deg, #d5dae0, #cdd3da) repeat-x; + border-color: #bac1cb; +} + +.alert-dark hr { + border-top-color: #abb4c0; +} + +.alert-dark .alert-link { + color: black; +} + +@keyframes progress-bar-stripes { + from { + background-position: 1rem 0; + } + to { + background-position: 0 0; + } +} + +.progress { + display: flex; + height: 1rem; + overflow: hidden; + line-height: 0; + font-size: 0.75rem; + background-color: #e9ecef; + box-shadow: inset 0 0.1rem 0.1rem rgba(0, 0, 0, 0.1); +} + +.progress-bar { + display: flex; + flex-direction: column; + justify-content: center; + overflow: hidden; + color: #fff; + text-align: center; + white-space: nowrap; + background-color: #083358; + transition: width 0.6s ease; +} + +@media (prefers-reduced-motion: reduce) { + .progress-bar { + transition: none; + } +} + +.progress-bar-striped { + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); + background-size: 1rem 1rem; +} + +.progress-bar-animated { + animation: progress-bar-stripes 1s linear infinite; +} + +@media (prefers-reduced-motion: reduce) { + .progress-bar-animated { + animation: none; + } +} + +.media { + display: flex; + align-items: flex-start; +} + +.media-body { + flex: 1; +} + +.list-group { + display: flex; + flex-direction: column; + padding-left: 0; + margin-bottom: 0; +} + +.list-group-item-action { + width: 100%; + color: #495057; + text-align: inherit; +} + +.list-group-item-action:hover, .list-group-item-action:focus { + z-index: 1; + color: #495057; + text-decoration: none; + background-color: #f8f9fa; +} + +.list-group-item-action:active { + color: #212529; + background-color: #e9ecef; +} + +.list-group-item { + position: relative; + display: block; + padding: 0.75rem 1.25rem; + background-color: #fff; + border: 1px solid rgba(0, 0, 0, 0.125); +} + +.list-group-item.disabled, .list-group-item:disabled { + color: #6c757d; + pointer-events: none; + background-color: #fff; +} + +.list-group-item.active { + z-index: 2; + color: #fff; + background-color: #083358; + border-color: #083358; +} + +.list-group-item + .list-group-item { + border-top-width: 0; +} + +.list-group-item + .list-group-item.active { + margin-top: -1px; + border-top-width: 1px; +} + +.list-group-horizontal { + flex-direction: row; +} + +.list-group-horizontal > .list-group-item.active { + margin-top: 0; +} + +.list-group-horizontal > .list-group-item + .list-group-item { + border-top-width: 1px; + border-left-width: 0; +} + +.list-group-horizontal > .list-group-item + .list-group-item.active { + margin-left: -1px; + border-left-width: 1px; +} + +@media (min-width: 576px) { + .list-group-horizontal-sm { + flex-direction: row; + } + .list-group-horizontal-sm > .list-group-item.active { + margin-top: 0; + } + .list-group-horizontal-sm > .list-group-item + .list-group-item { + border-top-width: 1px; + border-left-width: 0; + } + .list-group-horizontal-sm > .list-group-item + .list-group-item.active { + margin-left: -1px; + border-left-width: 1px; + } +} + +@media (min-width: 768px) { + .list-group-horizontal-md { + flex-direction: row; + } + .list-group-horizontal-md > .list-group-item.active { + margin-top: 0; + } + .list-group-horizontal-md > .list-group-item + .list-group-item { + border-top-width: 1px; + border-left-width: 0; + } + .list-group-horizontal-md > .list-group-item + .list-group-item.active { + margin-left: -1px; + border-left-width: 1px; + } +} + +@media (min-width: 992px) { + .list-group-horizontal-lg { + flex-direction: row; + } + .list-group-horizontal-lg > .list-group-item.active { + margin-top: 0; + } + .list-group-horizontal-lg > .list-group-item + .list-group-item { + border-top-width: 1px; + border-left-width: 0; + } + .list-group-horizontal-lg > .list-group-item + .list-group-item.active { + margin-left: -1px; + border-left-width: 1px; + } +} + +@media (min-width: 1200px) { + .list-group-horizontal-xl { + flex-direction: row; + } + .list-group-horizontal-xl > .list-group-item.active { + margin-top: 0; + } + .list-group-horizontal-xl > .list-group-item + .list-group-item { + border-top-width: 1px; + border-left-width: 0; + } + .list-group-horizontal-xl > .list-group-item + .list-group-item.active { + margin-left: -1px; + border-left-width: 1px; + } +} + +.list-group-flush > .list-group-item { + border-width: 0 0 1px; +} + +.list-group-flush > .list-group-item:last-child { + border-bottom-width: 0; +} + +.list-group-item-primary { + color: #041b2e; + background-color: #bac6d0; +} + +.list-group-item-primary.list-group-item-action:hover, .list-group-item-primary.list-group-item-action:focus { + color: #041b2e; + background-color: #abb9c6; +} + +.list-group-item-primary.list-group-item-action.active { + color: #fff; + background-color: #041b2e; + border-color: #041b2e; +} + +.list-group-item-secondary { + color: #606060; + background-color: #ebebeb; +} + +.list-group-item-secondary.list-group-item-action:hover, .list-group-item-secondary.list-group-item-action:focus { + color: #606060; + background-color: #dedede; +} + +.list-group-item-secondary.list-group-item-action.active { + color: #fff; + background-color: #606060; + border-color: #606060; +} + +.list-group-item-success { + color: #004815; + background-color: #b8dec3; +} + +.list-group-item-success.list-group-item-action:hover, .list-group-item-success.list-group-item-action:focus { + color: #004815; + background-color: #a7d6b4; +} + +.list-group-item-success.list-group-item-action.active { + color: #fff; + background-color: #004815; + border-color: #004815; +} + +.list-group-item-info { + color: #3c727c; + background-color: #d8f5fb; +} + +.list-group-item-info.list-group-item-action:hover, .list-group-item-info.list-group-item-action:focus { + color: #3c727c; + background-color: #c1eff9; +} + +.list-group-item-info.list-group-item-action.active { + color: #fff; + background-color: #3c727c; + border-color: #3c727c; +} + +.list-group-item-warning { + color: #786d00; + background-color: #f8f2b8; +} + +.list-group-item-warning.list-group-item-action:hover, .list-group-item-warning.list-group-item-action:focus { + color: #786d00; + background-color: #f6eea1; +} + +.list-group-item-warning.list-group-item-action.active { + color: #fff; + background-color: #786d00; + border-color: #786d00; +} + +.list-group-item-danger { + color: #751d1d; + background-color: #f7c7c7; +} + +.list-group-item-danger.list-group-item-action:hover, .list-group-item-danger.list-group-item-action:focus { + color: #751d1d; + background-color: #f4b1b1; +} + +.list-group-item-danger.list-group-item-action.active { + color: #fff; + background-color: #751d1d; + border-color: #751d1d; +} + +.list-group-item-light { + color: #7f7f7f; + background-color: #fcfcfc; +} + +.list-group-item-light.list-group-item-action:hover, .list-group-item-light.list-group-item-action:focus { + color: #7f7f7f; + background-color: #efefef; +} + +.list-group-item-light.list-group-item-action.active { + color: #fff; + background-color: #7f7f7f; + border-color: #7f7f7f; +} + +.list-group-item-dark { + color: #041225; + background-color: #bac1cb; +} + +.list-group-item-dark.list-group-item-action:hover, .list-group-item-dark.list-group-item-action:focus { + color: #041225; + background-color: #abb4c0; +} + +.list-group-item-dark.list-group-item-action.active { + color: #fff; + background-color: #041225; + border-color: #041225; +} + +.close { + float: right; + font-size: 1.5rem; + font-weight: 700; + line-height: 1; + color: #000; + text-shadow: 0 1px 0 #fff; + opacity: .5; +} + +.close:hover { + color: #000; + text-decoration: none; +} + +.close:not(:disabled):not(.disabled):hover, .close:not(:disabled):not(.disabled):focus { + opacity: .75; +} + +button.close { + padding: 0; + background-color: transparent; + border: 0; +} + +a.close.disabled { + pointer-events: none; +} + +.toast { + flex-basis: 350px; + max-width: 350px; + font-size: 0.875rem; + background-color: rgba(255, 255, 255, 0.85); + background-clip: padding-box; + border: 1px solid rgba(0, 0, 0, 0.1); + box-shadow: 0 0.25rem 0.75rem rgba(0, 0, 0, 0.1); + opacity: 0; +} + +.toast:not(:last-child) { + margin-bottom: 0.75rem; +} + +.toast.showing { + opacity: 1; +} + +.toast.show { + display: block; + opacity: 1; +} + +.toast.hide { + display: none; +} + +.toast-header { + display: flex; + align-items: center; + padding: 0.25rem 0.75rem; + color: #6c757d; + background-color: rgba(255, 255, 255, 0.85); + background-clip: padding-box; + border-bottom: 1px solid rgba(0, 0, 0, 0.05); +} + +.toast-body { + padding: 0.75rem; +} + +.modal-open { + overflow: hidden; +} + +.modal-open .modal { + overflow-x: hidden; + overflow-y: auto; +} + +.modal { + position: fixed; + top: 0; + left: 0; + z-index: 1050; + display: none; + width: 100%; + height: 100%; + overflow: hidden; + outline: 0; +} + +.modal-dialog { + position: relative; + width: auto; + margin: 0.5rem; + pointer-events: none; +} + +.modal.fade .modal-dialog { + transition: transform 0.3s ease-out; + transform: translate(0, -50px); +} + +@media (prefers-reduced-motion: reduce) { + .modal.fade .modal-dialog { + transition: none; + } +} + +.modal.show .modal-dialog { + transform: none; +} + +.modal.modal-static .modal-dialog { + transform: scale(1.02); +} + +.modal-dialog-scrollable { + display: flex; + max-height: calc(100% - 1rem); +} + +.modal-dialog-scrollable .modal-content { + max-height: calc(100vh - 1rem); + overflow: hidden; +} + +.modal-dialog-scrollable .modal-header, +.modal-dialog-scrollable .modal-footer { + flex-shrink: 0; +} + +.modal-dialog-scrollable .modal-body { + overflow-y: auto; +} + +.modal-dialog-centered { + display: flex; + align-items: center; + min-height: calc(100% - 1rem); +} + +.modal-dialog-centered::before { + display: block; + height: calc(100vh - 1rem); + height: min-content; + content: ""; +} + +.modal-dialog-centered.modal-dialog-scrollable { + flex-direction: column; + justify-content: center; + height: 100%; +} + +.modal-dialog-centered.modal-dialog-scrollable .modal-content { + max-height: none; +} + +.modal-dialog-centered.modal-dialog-scrollable::before { + content: none; +} + +.modal-content { + position: relative; + display: flex; + flex-direction: column; + width: 100%; + pointer-events: auto; + background-color: #fff; + background-clip: padding-box; + border: 1px solid rgba(0, 0, 0, 0.2); + box-shadow: 0 0.25rem 0.5rem rgba(0, 0, 0, 0.5); + outline: 0; +} + +.modal-backdrop { + position: fixed; + top: 0; + left: 0; + z-index: 1040; + width: 100vw; + height: 100vh; + background-color: #000; +} + +.modal-backdrop.fade { + opacity: 0; +} + +.modal-backdrop.show { + opacity: 0.5; +} + +.modal-header { + display: flex; + align-items: flex-start; + justify-content: space-between; + padding: 1rem 1rem; + border-bottom: 1px solid #e3e3e3; +} + +.modal-header .close { + padding: 1rem 1rem; + margin: -1rem -1rem -1rem auto; +} + +.modal-title { + margin-bottom: 0; + line-height: 1.5; +} + +.modal-body { + position: relative; + flex: 1 1 auto; + padding: 1rem; +} + +.modal-footer { + display: flex; + flex-wrap: wrap; + align-items: center; + justify-content: flex-end; + padding: 0.75rem; + border-top: 1px solid #e3e3e3; +} + +.modal-footer > * { + margin: 0.25rem; +} + +.modal-scrollbar-measure { + position: absolute; + top: -9999px; + width: 50px; + height: 50px; + overflow: scroll; +} + +@media (min-width: 576px) { + .modal-dialog { + max-width: 500px; + margin: 1.75rem auto; + } + .modal-dialog-scrollable { + max-height: calc(100% - 3.5rem); + } + .modal-dialog-scrollable .modal-content { + max-height: calc(100vh - 3.5rem); + } + .modal-dialog-centered { + min-height: calc(100% - 3.5rem); + } + .modal-dialog-centered::before { + height: calc(100vh - 3.5rem); + height: min-content; + } + .modal-content { + box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.5); + } + .modal-sm { + max-width: 300px; + } +} + +@media (min-width: 992px) { + .modal-lg, + .modal-xl { + max-width: 800px; + } +} + +@media (min-width: 1200px) { + .modal-xl { + max-width: 1140px; + } +} + +.tooltip { + position: absolute; + z-index: 1070; + display: block; + margin: 0; + font-family: "Source Sans Pro"; + font-style: normal; + font-weight: 400; + line-height: 1.5; + text-align: left; + text-align: start; + text-decoration: none; + text-shadow: none; + text-transform: none; + letter-spacing: normal; + word-break: normal; + word-spacing: normal; + white-space: normal; + line-break: auto; + font-size: 0.875rem; + word-wrap: break-word; + opacity: 0; +} + +.tooltip.show { + opacity: 0.9; +} + +.tooltip .arrow { + position: absolute; + display: block; + width: 0.8rem; + height: 0.4rem; +} + +.tooltip .arrow::before { + position: absolute; + content: ""; + border-color: transparent; + border-style: solid; +} + +.bs-tooltip-top, .bs-tooltip-auto[x-placement^="top"] { + padding: 0.4rem 0; +} + +.bs-tooltip-top .arrow, .bs-tooltip-auto[x-placement^="top"] .arrow { + bottom: 0; +} + +.bs-tooltip-top .arrow::before, .bs-tooltip-auto[x-placement^="top"] .arrow::before { + top: 0; + border-width: 0.4rem 0.4rem 0; + border-top-color: #000; +} + +.bs-tooltip-right, .bs-tooltip-auto[x-placement^="right"] { + padding: 0 0.4rem; +} + +.bs-tooltip-right .arrow, .bs-tooltip-auto[x-placement^="right"] .arrow { + left: 0; + width: 0.4rem; + height: 0.8rem; +} + +.bs-tooltip-right .arrow::before, .bs-tooltip-auto[x-placement^="right"] .arrow::before { + right: 0; + border-width: 0.4rem 0.4rem 0.4rem 0; + border-right-color: #000; +} + +.bs-tooltip-bottom, .bs-tooltip-auto[x-placement^="bottom"] { + padding: 0.4rem 0; +} + +.bs-tooltip-bottom .arrow, .bs-tooltip-auto[x-placement^="bottom"] .arrow { + top: 0; +} + +.bs-tooltip-bottom .arrow::before, .bs-tooltip-auto[x-placement^="bottom"] .arrow::before { + bottom: 0; + border-width: 0 0.4rem 0.4rem; + border-bottom-color: #000; +} + +.bs-tooltip-left, .bs-tooltip-auto[x-placement^="left"] { + padding: 0 0.4rem; +} + +.bs-tooltip-left .arrow, .bs-tooltip-auto[x-placement^="left"] .arrow { + right: 0; + width: 0.4rem; + height: 0.8rem; +} + +.bs-tooltip-left .arrow::before, .bs-tooltip-auto[x-placement^="left"] .arrow::before { + left: 0; + border-width: 0.4rem 0 0.4rem 0.4rem; + border-left-color: #000; +} + +.tooltip-inner { + max-width: 200px; + padding: 0.25rem 0.5rem; + color: #fff; + text-align: center; + background-color: #000; +} + +.popover { + position: absolute; + top: 0; + left: 0; + z-index: 1060; + display: block; + max-width: 276px; + font-family: "Source Sans Pro"; + font-style: normal; + font-weight: 400; + line-height: 1.5; + text-align: left; + text-align: start; + text-decoration: none; + text-shadow: none; + text-transform: none; + letter-spacing: normal; + word-break: normal; + word-spacing: normal; + white-space: normal; + line-break: auto; + font-size: 0.875rem; + word-wrap: break-word; + background-color: #fff; + background-clip: padding-box; + border: 1px solid rgba(0, 0, 0, 0.2); + box-shadow: 0 0.25rem 0.5rem rgba(0, 0, 0, 0.2); +} + +.popover .arrow { + position: absolute; + display: block; + width: 1rem; + height: 0.5rem; + margin: 0 0.3rem; +} + +.popover .arrow::before, .popover .arrow::after { + position: absolute; + display: block; + content: ""; + border-color: transparent; + border-style: solid; +} + +.bs-popover-top, .bs-popover-auto[x-placement^="top"] { + margin-bottom: 0.5rem; +} + +.bs-popover-top > .arrow, .bs-popover-auto[x-placement^="top"] > .arrow { + bottom: calc(-0.5rem - 1px); +} + +.bs-popover-top > .arrow::before, .bs-popover-auto[x-placement^="top"] > .arrow::before { + bottom: 0; + border-width: 0.5rem 0.5rem 0; + border-top-color: rgba(0, 0, 0, 0.25); +} + +.bs-popover-top > .arrow::after, .bs-popover-auto[x-placement^="top"] > .arrow::after { + bottom: 1px; + border-width: 0.5rem 0.5rem 0; + border-top-color: #fff; +} + +.bs-popover-right, .bs-popover-auto[x-placement^="right"] { + margin-left: 0.5rem; +} + +.bs-popover-right > .arrow, .bs-popover-auto[x-placement^="right"] > .arrow { + left: calc(-0.5rem - 1px); + width: 0.5rem; + height: 1rem; + margin: 0.3rem 0; +} + +.bs-popover-right > .arrow::before, .bs-popover-auto[x-placement^="right"] > .arrow::before { + left: 0; + border-width: 0.5rem 0.5rem 0.5rem 0; + border-right-color: rgba(0, 0, 0, 0.25); +} + +.bs-popover-right > .arrow::after, .bs-popover-auto[x-placement^="right"] > .arrow::after { + left: 1px; + border-width: 0.5rem 0.5rem 0.5rem 0; + border-right-color: #fff; +} + +.bs-popover-bottom, .bs-popover-auto[x-placement^="bottom"] { + margin-top: 0.5rem; +} + +.bs-popover-bottom > .arrow, .bs-popover-auto[x-placement^="bottom"] > .arrow { + top: calc(-0.5rem - 1px); +} + +.bs-popover-bottom > .arrow::before, .bs-popover-auto[x-placement^="bottom"] > .arrow::before { + top: 0; + border-width: 0 0.5rem 0.5rem 0.5rem; + border-bottom-color: rgba(0, 0, 0, 0.25); +} + +.bs-popover-bottom > .arrow::after, .bs-popover-auto[x-placement^="bottom"] > .arrow::after { + top: 1px; + border-width: 0 0.5rem 0.5rem 0.5rem; + border-bottom-color: #fff; +} + +.bs-popover-bottom .popover-header::before, .bs-popover-auto[x-placement^="bottom"] .popover-header::before { + position: absolute; + top: 0; + left: 50%; + display: block; + width: 1rem; + margin-left: -0.5rem; + content: ""; + border-bottom: 1px solid #f7f7f7; +} + +.bs-popover-left, .bs-popover-auto[x-placement^="left"] { + margin-right: 0.5rem; +} + +.bs-popover-left > .arrow, .bs-popover-auto[x-placement^="left"] > .arrow { + right: calc(-0.5rem - 1px); + width: 0.5rem; + height: 1rem; + margin: 0.3rem 0; +} + +.bs-popover-left > .arrow::before, .bs-popover-auto[x-placement^="left"] > .arrow::before { + right: 0; + border-width: 0.5rem 0 0.5rem 0.5rem; + border-left-color: rgba(0, 0, 0, 0.25); +} + +.bs-popover-left > .arrow::after, .bs-popover-auto[x-placement^="left"] > .arrow::after { + right: 1px; + border-width: 0.5rem 0 0.5rem 0.5rem; + border-left-color: #fff; +} + +.popover-header { + padding: 0.5rem 0.75rem; + margin-bottom: 0; + font-size: 1rem; + background-color: #f7f7f7; + border-bottom: 1px solid #ebebeb; +} + +.popover-header:empty { + display: none; +} + +.popover-body { + padding: 0.5rem 0.75rem; + color: #212529; +} + +.carousel { + position: relative; +} + +.carousel.pointer-event { + touch-action: pan-y; +} + +.carousel-inner { + position: relative; + width: 100%; + overflow: hidden; +} + +.carousel-inner::after { + display: block; + clear: both; + content: ""; +} + +.carousel-item { + position: relative; + display: none; + float: left; + width: 100%; + margin-right: -100%; + backface-visibility: hidden; + transition: transform 0.6s ease-in-out; +} + +@media (prefers-reduced-motion: reduce) { + .carousel-item { + transition: none; + } +} + +.carousel-item.active, +.carousel-item-next, +.carousel-item-prev { + display: block; +} + +.carousel-item-next:not(.carousel-item-left), +.active.carousel-item-right { + transform: translateX(100%); +} + +.carousel-item-prev:not(.carousel-item-right), +.active.carousel-item-left { + transform: translateX(-100%); +} + +.carousel-fade .carousel-item { + opacity: 0; + transition-property: opacity; + transform: none; +} + +.carousel-fade .carousel-item.active, +.carousel-fade .carousel-item-next.carousel-item-left, +.carousel-fade .carousel-item-prev.carousel-item-right { + z-index: 1; + opacity: 1; +} + +.carousel-fade .active.carousel-item-left, +.carousel-fade .active.carousel-item-right { + z-index: 0; + opacity: 0; + transition: opacity 0s 0.6s; +} + +@media (prefers-reduced-motion: reduce) { + .carousel-fade .active.carousel-item-left, + .carousel-fade .active.carousel-item-right { + transition: none; + } +} + +.carousel-control-prev, +.carousel-control-next { + position: absolute; + top: 0; + bottom: 0; + z-index: 1; + display: flex; + align-items: center; + justify-content: center; + width: 15%; + color: #fff; + text-align: center; + opacity: 0.5; + transition: opacity 0.15s ease; +} + +@media (prefers-reduced-motion: reduce) { + .carousel-control-prev, + .carousel-control-next { + transition: none; + } +} + +.carousel-control-prev:hover, .carousel-control-prev:focus, +.carousel-control-next:hover, +.carousel-control-next:focus { + color: #fff; + text-decoration: none; + outline: 0; + opacity: 0.9; +} + +.carousel-control-prev { + left: 0; + background-image: linear-gradient(90deg, rgba(0, 0, 0, 0.25), rgba(0, 0, 0, 0.001)); +} + +.carousel-control-next { + right: 0; + background-image: linear-gradient(270deg, rgba(0, 0, 0, 0.25), rgba(0, 0, 0, 0.001)); +} + +.carousel-control-prev-icon, +.carousel-control-next-icon { + display: inline-block; + width: 20px; + height: 20px; + background: no-repeat 50% / 100% 100%; +} + +.carousel-control-prev-icon { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath d='M5.25 0l-4 4 4 4 1.5-1.5L4.25 4l2.5-2.5L5.25 0z'/%3e%3c/svg%3e"); +} + +.carousel-control-next-icon { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' width='8' height='8' viewBox='0 0 8 8'%3e%3cpath d='M2.75 0l-1.5 1.5L3.75 4l-2.5 2.5L2.75 8l4-4-4-4z'/%3e%3c/svg%3e"); +} + +.carousel-indicators { + position: absolute; + right: 0; + bottom: 0; + left: 0; + z-index: 15; + display: flex; + justify-content: center; + padding-left: 0; + margin-right: 15%; + margin-left: 15%; + list-style: none; +} + +.carousel-indicators li { + box-sizing: content-box; + flex: 0 1 auto; + width: 30px; + height: 3px; + margin-right: 3px; + margin-left: 3px; + text-indent: -999px; + cursor: pointer; + background-color: #fff; + background-clip: padding-box; + border-top: 10px solid transparent; + border-bottom: 10px solid transparent; + opacity: .5; + transition: opacity 0.6s ease; +} + +@media (prefers-reduced-motion: reduce) { + .carousel-indicators li { + transition: none; + } +} + +.carousel-indicators .active { + opacity: 1; +} + +.carousel-caption { + position: absolute; + right: 15%; + bottom: 20px; + left: 15%; + z-index: 10; + padding-top: 20px; + padding-bottom: 20px; + color: #fff; + text-align: center; +} + +@keyframes spinner-border { + to { + transform: rotate(360deg); + } +} + +.spinner-border { + display: inline-block; + width: 2rem; + height: 2rem; + vertical-align: text-bottom; + border: 0.25em solid currentColor; + border-right-color: transparent; + border-radius: 50%; + animation: spinner-border .75s linear infinite; +} + +.spinner-border-sm { + width: 1rem; + height: 1rem; + border-width: 0.2em; +} + +@keyframes spinner-grow { + 0% { + transform: scale(0); + } + 50% { + opacity: 1; + transform: none; + } +} + +.spinner-grow { + display: inline-block; + width: 2rem; + height: 2rem; + vertical-align: text-bottom; + background-color: currentColor; + border-radius: 50%; + opacity: 0; + animation: spinner-grow .75s linear infinite; +} + +.spinner-grow-sm { + width: 1rem; + height: 1rem; +} + +.align-baseline { + vertical-align: baseline !important; +} + +.align-top { + vertical-align: top !important; +} + +.align-middle { + vertical-align: middle !important; +} + +.align-bottom { + vertical-align: bottom !important; +} + +.align-text-bottom { + vertical-align: text-bottom !important; +} + +.align-text-top { + vertical-align: text-top !important; +} + +.bg-primary { + background-color: #083358 !important; +} + +a.bg-primary:hover, a.bg-primary:focus, +button.bg-primary:hover, +button.bg-primary:focus { + background-color: #041829 !important; +} + +.bg-secondary { + background-color: #b8b8b8 !important; +} + +a.bg-secondary:hover, a.bg-secondary:focus, +button.bg-secondary:hover, +button.bg-secondary:focus { + background-color: #9f9f9f !important; +} + +.bg-success { + background-color: #008a29 !important; +} + +a.bg-success:hover, a.bg-success:focus, +button.bg-success:hover, +button.bg-success:focus { + background-color: #00571a !important; +} + +.bg-info { + background-color: #74dbef !important; +} + +a.bg-info:hover, a.bg-info:focus, +button.bg-info:hover, +button.bg-info:focus { + background-color: #46cfea !important; +} + +.bg-warning { + background-color: #e6d200 !important; +} + +a.bg-warning:hover, a.bg-warning:focus, +button.bg-warning:hover, +button.bg-warning:focus { + background-color: #b3a300 !important; +} + +.bg-danger { + background-color: #e13737 !important; +} + +a.bg-danger:hover, a.bg-danger:focus, +button.bg-danger:hover, +button.bg-danger:focus { + background-color: #c71e1e !important; +} + +.bg-light { + background-color: #f4f4f4 !important; +} + +a.bg-light:hover, a.bg-light:focus, +button.bg-light:hover, +button.bg-light:focus { + background-color: #dbdbdb !important; +} + +.bg-dark { + background-color: #072247 !important; +} + +a.bg-dark:hover, a.bg-dark:focus, +button.bg-dark:hover, +button.bg-dark:focus { + background-color: #020c19 !important; +} + +.bg-gradient-primary { + background: #083358 linear-gradient(180deg, #2d5271, #083358) repeat-x !important; +} + +.bg-gradient-secondary { + background: #b8b8b8 linear-gradient(180deg, #c3c3c3, #b8b8b8) repeat-x !important; +} + +.bg-gradient-success { + background: #008a29 linear-gradient(180deg, #269c49, #008a29) repeat-x !important; +} + +.bg-gradient-info { + background: #74dbef linear-gradient(180deg, #89e0f1, #74dbef) repeat-x !important; +} + +.bg-gradient-warning { + background: #e6d200 linear-gradient(180deg, #ead926, #e6d200) repeat-x !important; +} + +.bg-gradient-danger { + background: #e13737 linear-gradient(180deg, #e65555, #e13737) repeat-x !important; +} + +.bg-gradient-light { + background: #f4f4f4 linear-gradient(180deg, #f6f6f6, #f4f4f4) repeat-x !important; +} + +.bg-gradient-dark { + background: #072247 linear-gradient(180deg, #2c4363, #072247) repeat-x !important; +} + +.bg-white { + background-color: #fff !important; +} + +.bg-transparent { + background-color: transparent !important; +} + +.border { + border: 1px solid #e3e3e3 !important; +} + +.border-top { + border-top: 1px solid #e3e3e3 !important; +} + +.border-right { + border-right: 1px solid #e3e3e3 !important; +} + +.border-bottom { + border-bottom: 1px solid #e3e3e3 !important; +} + +.border-left { + border-left: 1px solid #e3e3e3 !important; +} + +.border-0 { + border: 0 !important; +} + +.border-top-0 { + border-top: 0 !important; +} + +.border-right-0 { + border-right: 0 !important; +} + +.border-bottom-0 { + border-bottom: 0 !important; +} + +.border-left-0 { + border-left: 0 !important; +} + +.border-primary { + border-color: #083358 !important; +} + +.border-secondary { + border-color: #b8b8b8 !important; +} + +.border-success { + border-color: #008a29 !important; +} + +.border-info { + border-color: #74dbef !important; +} + +.border-warning { + border-color: #e6d200 !important; +} + +.border-danger { + border-color: #e13737 !important; +} + +.border-light { + border-color: #f4f4f4 !important; +} + +.border-dark { + border-color: #072247 !important; +} + +.border-white { + border-color: #fff !important; +} + +.rounded-sm { + border-radius: 0.2rem !important; +} + +.rounded { + border-radius: 0.25rem !important; +} + +.rounded-top { + border-top-left-radius: 0.25rem !important; + border-top-right-radius: 0.25rem !important; +} + +.rounded-right { + border-top-right-radius: 0.25rem !important; + border-bottom-right-radius: 0.25rem !important; +} + +.rounded-bottom { + border-bottom-right-radius: 0.25rem !important; + border-bottom-left-radius: 0.25rem !important; +} + +.rounded-left { + border-top-left-radius: 0.25rem !important; + border-bottom-left-radius: 0.25rem !important; +} + +.rounded-lg { + border-radius: 0.3rem !important; +} + +.rounded-circle { + border-radius: 50% !important; +} + +.rounded-pill { + border-radius: 50rem !important; +} + +.rounded-0 { + border-radius: 0 !important; +} + +.clearfix::after { + display: block; + clear: both; + content: ""; +} + +.d-none { + display: none !important; +} + +.d-inline { + display: inline !important; +} + +.d-inline-block { + display: inline-block !important; +} + +.d-block { + display: block !important; +} + +.d-table { + display: table !important; +} + +.d-table-row { + display: table-row !important; +} + +.d-table-cell { + display: table-cell !important; +} + +.d-flex { + display: flex !important; +} + +.d-inline-flex { + display: inline-flex !important; +} + +@media (min-width: 576px) { + .d-sm-none { + display: none !important; + } + .d-sm-inline { + display: inline !important; + } + .d-sm-inline-block { + display: inline-block !important; + } + .d-sm-block { + display: block !important; + } + .d-sm-table { + display: table !important; + } + .d-sm-table-row { + display: table-row !important; + } + .d-sm-table-cell { + display: table-cell !important; + } + .d-sm-flex { + display: flex !important; + } + .d-sm-inline-flex { + display: inline-flex !important; + } +} + +@media (min-width: 768px) { + .d-md-none { + display: none !important; + } + .d-md-inline { + display: inline !important; + } + .d-md-inline-block { + display: inline-block !important; + } + .d-md-block { + display: block !important; + } + .d-md-table { + display: table !important; + } + .d-md-table-row { + display: table-row !important; + } + .d-md-table-cell { + display: table-cell !important; + } + .d-md-flex { + display: flex !important; + } + .d-md-inline-flex { + display: inline-flex !important; + } +} + +@media (min-width: 992px) { + .d-lg-none { + display: none !important; + } + .d-lg-inline { + display: inline !important; + } + .d-lg-inline-block { + display: inline-block !important; + } + .d-lg-block { + display: block !important; + } + .d-lg-table { + display: table !important; + } + .d-lg-table-row { + display: table-row !important; + } + .d-lg-table-cell { + display: table-cell !important; + } + .d-lg-flex { + display: flex !important; + } + .d-lg-inline-flex { + display: inline-flex !important; + } +} + +@media (min-width: 1200px) { + .d-xl-none { + display: none !important; + } + .d-xl-inline { + display: inline !important; + } + .d-xl-inline-block { + display: inline-block !important; + } + .d-xl-block { + display: block !important; + } + .d-xl-table { + display: table !important; + } + .d-xl-table-row { + display: table-row !important; + } + .d-xl-table-cell { + display: table-cell !important; + } + .d-xl-flex { + display: flex !important; + } + .d-xl-inline-flex { + display: inline-flex !important; + } +} + +@media print { + .d-print-none { + display: none !important; + } + .d-print-inline { + display: inline !important; + } + .d-print-inline-block { + display: inline-block !important; + } + .d-print-block { + display: block !important; + } + .d-print-table { + display: table !important; + } + .d-print-table-row { + display: table-row !important; + } + .d-print-table-cell { + display: table-cell !important; + } + .d-print-flex { + display: flex !important; + } + .d-print-inline-flex { + display: inline-flex !important; + } +} + +.embed-responsive { + position: relative; + display: block; + width: 100%; + padding: 0; + overflow: hidden; +} + +.embed-responsive::before { + display: block; + content: ""; +} + +.embed-responsive .embed-responsive-item, +.embed-responsive iframe, +.embed-responsive embed, +.embed-responsive object, +.embed-responsive video { + position: absolute; + top: 0; + bottom: 0; + left: 0; + width: 100%; + height: 100%; + border: 0; +} + +.embed-responsive-21by9::before { + padding-top: 42.857143%; +} + +.embed-responsive-16by9::before { + padding-top: 56.25%; +} + +.embed-responsive-4by3::before { + padding-top: 75%; +} + +.embed-responsive-1by1::before { + padding-top: 100%; +} + +.flex-row { + flex-direction: row !important; +} + +.flex-column { + flex-direction: column !important; +} + +.flex-row-reverse { + flex-direction: row-reverse !important; +} + +.flex-column-reverse { + flex-direction: column-reverse !important; +} + +.flex-wrap { + flex-wrap: wrap !important; +} + +.flex-nowrap { + flex-wrap: nowrap !important; +} + +.flex-wrap-reverse { + flex-wrap: wrap-reverse !important; +} + +.flex-fill { + flex: 1 1 auto !important; +} + +.flex-grow-0 { + flex-grow: 0 !important; +} + +.flex-grow-1 { + flex-grow: 1 !important; +} + +.flex-shrink-0 { + flex-shrink: 0 !important; +} + +.flex-shrink-1 { + flex-shrink: 1 !important; +} + +.justify-content-start { + justify-content: flex-start !important; +} + +.justify-content-end { + justify-content: flex-end !important; +} + +.justify-content-center { + justify-content: center !important; +} + +.justify-content-between { + justify-content: space-between !important; +} + +.justify-content-around { + justify-content: space-around !important; +} + +.align-items-start { + align-items: flex-start !important; +} + +.align-items-end { + align-items: flex-end !important; +} + +.align-items-center { + align-items: center !important; +} + +.align-items-baseline { + align-items: baseline !important; +} + +.align-items-stretch { + align-items: stretch !important; +} + +.align-content-start { + align-content: flex-start !important; +} + +.align-content-end { + align-content: flex-end !important; +} + +.align-content-center { + align-content: center !important; +} + +.align-content-between { + align-content: space-between !important; +} + +.align-content-around { + align-content: space-around !important; +} + +.align-content-stretch { + align-content: stretch !important; +} + +.align-self-auto { + align-self: auto !important; +} + +.align-self-start { + align-self: flex-start !important; +} + +.align-self-end { + align-self: flex-end !important; +} + +.align-self-center { + align-self: center !important; +} + +.align-self-baseline { + align-self: baseline !important; +} + +.align-self-stretch { + align-self: stretch !important; +} + +@media (min-width: 576px) { + .flex-sm-row { + flex-direction: row !important; + } + .flex-sm-column { + flex-direction: column !important; + } + .flex-sm-row-reverse { + flex-direction: row-reverse !important; + } + .flex-sm-column-reverse { + flex-direction: column-reverse !important; + } + .flex-sm-wrap { + flex-wrap: wrap !important; + } + .flex-sm-nowrap { + flex-wrap: nowrap !important; + } + .flex-sm-wrap-reverse { + flex-wrap: wrap-reverse !important; + } + .flex-sm-fill { + flex: 1 1 auto !important; + } + .flex-sm-grow-0 { + flex-grow: 0 !important; + } + .flex-sm-grow-1 { + flex-grow: 1 !important; + } + .flex-sm-shrink-0 { + flex-shrink: 0 !important; + } + .flex-sm-shrink-1 { + flex-shrink: 1 !important; + } + .justify-content-sm-start { + justify-content: flex-start !important; + } + .justify-content-sm-end { + justify-content: flex-end !important; + } + .justify-content-sm-center { + justify-content: center !important; + } + .justify-content-sm-between { + justify-content: space-between !important; + } + .justify-content-sm-around { + justify-content: space-around !important; + } + .align-items-sm-start { + align-items: flex-start !important; + } + .align-items-sm-end { + align-items: flex-end !important; + } + .align-items-sm-center { + align-items: center !important; + } + .align-items-sm-baseline { + align-items: baseline !important; + } + .align-items-sm-stretch { + align-items: stretch !important; + } + .align-content-sm-start { + align-content: flex-start !important; + } + .align-content-sm-end { + align-content: flex-end !important; + } + .align-content-sm-center { + align-content: center !important; + } + .align-content-sm-between { + align-content: space-between !important; + } + .align-content-sm-around { + align-content: space-around !important; + } + .align-content-sm-stretch { + align-content: stretch !important; + } + .align-self-sm-auto { + align-self: auto !important; + } + .align-self-sm-start { + align-self: flex-start !important; + } + .align-self-sm-end { + align-self: flex-end !important; + } + .align-self-sm-center { + align-self: center !important; + } + .align-self-sm-baseline { + align-self: baseline !important; + } + .align-self-sm-stretch { + align-self: stretch !important; + } +} + +@media (min-width: 768px) { + .flex-md-row { + flex-direction: row !important; + } + .flex-md-column { + flex-direction: column !important; + } + .flex-md-row-reverse { + flex-direction: row-reverse !important; + } + .flex-md-column-reverse { + flex-direction: column-reverse !important; + } + .flex-md-wrap { + flex-wrap: wrap !important; + } + .flex-md-nowrap { + flex-wrap: nowrap !important; + } + .flex-md-wrap-reverse { + flex-wrap: wrap-reverse !important; + } + .flex-md-fill { + flex: 1 1 auto !important; + } + .flex-md-grow-0 { + flex-grow: 0 !important; + } + .flex-md-grow-1 { + flex-grow: 1 !important; + } + .flex-md-shrink-0 { + flex-shrink: 0 !important; + } + .flex-md-shrink-1 { + flex-shrink: 1 !important; + } + .justify-content-md-start { + justify-content: flex-start !important; + } + .justify-content-md-end { + justify-content: flex-end !important; + } + .justify-content-md-center { + justify-content: center !important; + } + .justify-content-md-between { + justify-content: space-between !important; + } + .justify-content-md-around { + justify-content: space-around !important; + } + .align-items-md-start { + align-items: flex-start !important; + } + .align-items-md-end { + align-items: flex-end !important; + } + .align-items-md-center { + align-items: center !important; + } + .align-items-md-baseline { + align-items: baseline !important; + } + .align-items-md-stretch { + align-items: stretch !important; + } + .align-content-md-start { + align-content: flex-start !important; + } + .align-content-md-end { + align-content: flex-end !important; + } + .align-content-md-center { + align-content: center !important; + } + .align-content-md-between { + align-content: space-between !important; + } + .align-content-md-around { + align-content: space-around !important; + } + .align-content-md-stretch { + align-content: stretch !important; + } + .align-self-md-auto { + align-self: auto !important; + } + .align-self-md-start { + align-self: flex-start !important; + } + .align-self-md-end { + align-self: flex-end !important; + } + .align-self-md-center { + align-self: center !important; + } + .align-self-md-baseline { + align-self: baseline !important; + } + .align-self-md-stretch { + align-self: stretch !important; + } +} + +@media (min-width: 992px) { + .flex-lg-row { + flex-direction: row !important; + } + .flex-lg-column { + flex-direction: column !important; + } + .flex-lg-row-reverse { + flex-direction: row-reverse !important; + } + .flex-lg-column-reverse { + flex-direction: column-reverse !important; + } + .flex-lg-wrap { + flex-wrap: wrap !important; + } + .flex-lg-nowrap { + flex-wrap: nowrap !important; + } + .flex-lg-wrap-reverse { + flex-wrap: wrap-reverse !important; + } + .flex-lg-fill { + flex: 1 1 auto !important; + } + .flex-lg-grow-0 { + flex-grow: 0 !important; + } + .flex-lg-grow-1 { + flex-grow: 1 !important; + } + .flex-lg-shrink-0 { + flex-shrink: 0 !important; + } + .flex-lg-shrink-1 { + flex-shrink: 1 !important; + } + .justify-content-lg-start { + justify-content: flex-start !important; + } + .justify-content-lg-end { + justify-content: flex-end !important; + } + .justify-content-lg-center { + justify-content: center !important; + } + .justify-content-lg-between { + justify-content: space-between !important; + } + .justify-content-lg-around { + justify-content: space-around !important; + } + .align-items-lg-start { + align-items: flex-start !important; + } + .align-items-lg-end { + align-items: flex-end !important; + } + .align-items-lg-center { + align-items: center !important; + } + .align-items-lg-baseline { + align-items: baseline !important; + } + .align-items-lg-stretch { + align-items: stretch !important; + } + .align-content-lg-start { + align-content: flex-start !important; + } + .align-content-lg-end { + align-content: flex-end !important; + } + .align-content-lg-center { + align-content: center !important; + } + .align-content-lg-between { + align-content: space-between !important; + } + .align-content-lg-around { + align-content: space-around !important; + } + .align-content-lg-stretch { + align-content: stretch !important; + } + .align-self-lg-auto { + align-self: auto !important; + } + .align-self-lg-start { + align-self: flex-start !important; + } + .align-self-lg-end { + align-self: flex-end !important; + } + .align-self-lg-center { + align-self: center !important; + } + .align-self-lg-baseline { + align-self: baseline !important; + } + .align-self-lg-stretch { + align-self: stretch !important; + } +} + +@media (min-width: 1200px) { + .flex-xl-row { + flex-direction: row !important; + } + .flex-xl-column { + flex-direction: column !important; + } + .flex-xl-row-reverse { + flex-direction: row-reverse !important; + } + .flex-xl-column-reverse { + flex-direction: column-reverse !important; + } + .flex-xl-wrap { + flex-wrap: wrap !important; + } + .flex-xl-nowrap { + flex-wrap: nowrap !important; + } + .flex-xl-wrap-reverse { + flex-wrap: wrap-reverse !important; + } + .flex-xl-fill { + flex: 1 1 auto !important; + } + .flex-xl-grow-0 { + flex-grow: 0 !important; + } + .flex-xl-grow-1 { + flex-grow: 1 !important; + } + .flex-xl-shrink-0 { + flex-shrink: 0 !important; + } + .flex-xl-shrink-1 { + flex-shrink: 1 !important; + } + .justify-content-xl-start { + justify-content: flex-start !important; + } + .justify-content-xl-end { + justify-content: flex-end !important; + } + .justify-content-xl-center { + justify-content: center !important; + } + .justify-content-xl-between { + justify-content: space-between !important; + } + .justify-content-xl-around { + justify-content: space-around !important; + } + .align-items-xl-start { + align-items: flex-start !important; + } + .align-items-xl-end { + align-items: flex-end !important; + } + .align-items-xl-center { + align-items: center !important; + } + .align-items-xl-baseline { + align-items: baseline !important; + } + .align-items-xl-stretch { + align-items: stretch !important; + } + .align-content-xl-start { + align-content: flex-start !important; + } + .align-content-xl-end { + align-content: flex-end !important; + } + .align-content-xl-center { + align-content: center !important; + } + .align-content-xl-between { + align-content: space-between !important; + } + .align-content-xl-around { + align-content: space-around !important; + } + .align-content-xl-stretch { + align-content: stretch !important; + } + .align-self-xl-auto { + align-self: auto !important; + } + .align-self-xl-start { + align-self: flex-start !important; + } + .align-self-xl-end { + align-self: flex-end !important; + } + .align-self-xl-center { + align-self: center !important; + } + .align-self-xl-baseline { + align-self: baseline !important; + } + .align-self-xl-stretch { + align-self: stretch !important; + } +} + +.float-left { + float: left !important; +} + +.float-right { + float: right !important; +} + +.float-none { + float: none !important; +} + +@media (min-width: 576px) { + .float-sm-left { + float: left !important; + } + .float-sm-right { + float: right !important; + } + .float-sm-none { + float: none !important; + } +} + +@media (min-width: 768px) { + .float-md-left { + float: left !important; + } + .float-md-right { + float: right !important; + } + .float-md-none { + float: none !important; + } +} + +@media (min-width: 992px) { + .float-lg-left { + float: left !important; + } + .float-lg-right { + float: right !important; + } + .float-lg-none { + float: none !important; + } +} + +@media (min-width: 1200px) { + .float-xl-left { + float: left !important; + } + .float-xl-right { + float: right !important; + } + .float-xl-none { + float: none !important; + } +} + +.user-select-all { + user-select: all !important; +} + +.user-select-auto { + user-select: auto !important; +} + +.user-select-none { + user-select: none !important; +} + +.overflow-auto { + overflow: auto !important; +} + +.overflow-hidden { + overflow: hidden !important; +} + +.position-static { + position: static !important; +} + +.position-relative { + position: relative !important; +} + +.position-absolute { + position: absolute !important; +} + +.position-fixed { + position: fixed !important; +} + +.position-sticky { + position: sticky !important; +} + +.fixed-top { + position: fixed; + top: 0; + right: 0; + left: 0; + z-index: 1030; +} + +.fixed-bottom { + position: fixed; + right: 0; + bottom: 0; + left: 0; + z-index: 1030; +} + +@supports (position: sticky) { + .sticky-top { + position: sticky; + top: 0; + z-index: 1020; + } +} + +.sr-only { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0, 0, 0, 0); + white-space: nowrap; + border: 0; +} + +.sr-only-focusable:active, .sr-only-focusable:focus { + position: static; + width: auto; + height: auto; + overflow: visible; + clip: auto; + white-space: normal; +} + +.shadow-sm { + box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075) !important; +} + +.shadow { + box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15) !important; +} + +.shadow-lg { + box-shadow: 0 1rem 3rem rgba(0, 0, 0, 0.175) !important; +} + +.shadow-none { + box-shadow: none !important; +} + +.w-25 { + width: 25% !important; +} + +.w-50 { + width: 50% !important; +} + +.w-75 { + width: 75% !important; +} + +.w-100 { + width: 100% !important; +} + +.w-auto { + width: auto !important; +} + +.h-25 { + height: 25% !important; +} + +.h-50 { + height: 50% !important; +} + +.h-75 { + height: 75% !important; +} + +.h-100 { + height: 100% !important; +} + +.h-auto { + height: auto !important; +} + +.mw-100 { + max-width: 100% !important; +} + +.mh-100 { + max-height: 100% !important; +} + +.min-vw-100 { + min-width: 100vw !important; +} + +.min-vh-100 { + min-height: 100vh !important; +} + +.vw-100 { + width: 100vw !important; +} + +.vh-100 { + height: 100vh !important; +} + +.m-0 { + margin: 0 !important; +} + +.mt-0, +.my-0 { + margin-top: 0 !important; +} + +.mr-0, +.mx-0 { + margin-right: 0 !important; +} + +.mb-0, +.my-0 { + margin-bottom: 0 !important; +} + +.ml-0, +.mx-0 { + margin-left: 0 !important; +} + +.m-1 { + margin: 0.125rem !important; +} + +.mt-1, +.my-1 { + margin-top: 0.125rem !important; +} + +.mr-1, +.mx-1 { + margin-right: 0.125rem !important; +} + +.mb-1, +.my-1 { + margin-bottom: 0.125rem !important; +} + +.ml-1, +.mx-1 { + margin-left: 0.125rem !important; +} + +.m-2 { + margin: 0.25rem !important; +} + +.mt-2, +.my-2 { + margin-top: 0.25rem !important; +} + +.mr-2, +.mx-2 { + margin-right: 0.25rem !important; +} + +.mb-2, +.my-2 { + margin-bottom: 0.25rem !important; +} + +.ml-2, +.mx-2 { + margin-left: 0.25rem !important; +} + +.m-3 { + margin: 0.5rem !important; +} + +.mt-3, +.my-3 { + margin-top: 0.5rem !important; +} + +.mr-3, +.mx-3 { + margin-right: 0.5rem !important; +} + +.mb-3, +.my-3 { + margin-bottom: 0.5rem !important; +} + +.ml-3, +.mx-3 { + margin-left: 0.5rem !important; +} + +.m-4 { + margin: 0.75rem !important; +} + +.mt-4, +.my-4 { + margin-top: 0.75rem !important; +} + +.mr-4, +.mx-4 { + margin-right: 0.75rem !important; +} + +.mb-4, +.my-4 { + margin-bottom: 0.75rem !important; +} + +.ml-4, +.mx-4 { + margin-left: 0.75rem !important; +} + +.m-5 { + margin: 1.5rem !important; +} + +.mt-5, +.my-5 { + margin-top: 1.5rem !important; +} + +.mr-5, +.mx-5 { + margin-right: 1.5rem !important; +} + +.mb-5, +.my-5 { + margin-bottom: 1.5rem !important; +} + +.ml-5, +.mx-5 { + margin-left: 1.5rem !important; +} + +.p-0 { + padding: 0 !important; +} + +.pt-0, +.py-0 { + padding-top: 0 !important; +} + +.pr-0, +.px-0 { + padding-right: 0 !important; +} + +.pb-0, +.py-0 { + padding-bottom: 0 !important; +} + +.pl-0, +.px-0 { + padding-left: 0 !important; +} + +.p-1 { + padding: 0.125rem !important; +} + +.pt-1, +.py-1 { + padding-top: 0.125rem !important; +} + +.pr-1, +.px-1 { + padding-right: 0.125rem !important; +} + +.pb-1, +.py-1 { + padding-bottom: 0.125rem !important; +} + +.pl-1, +.px-1 { + padding-left: 0.125rem !important; +} + +.p-2 { + padding: 0.25rem !important; +} + +.pt-2, +.py-2 { + padding-top: 0.25rem !important; +} + +.pr-2, +.px-2 { + padding-right: 0.25rem !important; +} + +.pb-2, +.py-2 { + padding-bottom: 0.25rem !important; +} + +.pl-2, +.px-2 { + padding-left: 0.25rem !important; +} + +.p-3 { + padding: 0.5rem !important; +} + +.pt-3, +.py-3 { + padding-top: 0.5rem !important; +} + +.pr-3, +.px-3 { + padding-right: 0.5rem !important; +} + +.pb-3, +.py-3 { + padding-bottom: 0.5rem !important; +} + +.pl-3, +.px-3 { + padding-left: 0.5rem !important; +} + +.p-4 { + padding: 0.75rem !important; +} + +.pt-4, +.py-4 { + padding-top: 0.75rem !important; +} + +.pr-4, +.px-4 { + padding-right: 0.75rem !important; +} + +.pb-4, +.py-4 { + padding-bottom: 0.75rem !important; +} + +.pl-4, +.px-4 { + padding-left: 0.75rem !important; +} + +.p-5 { + padding: 1.5rem !important; +} + +.pt-5, +.py-5 { + padding-top: 1.5rem !important; +} + +.pr-5, +.px-5 { + padding-right: 1.5rem !important; +} + +.pb-5, +.py-5 { + padding-bottom: 1.5rem !important; +} + +.pl-5, +.px-5 { + padding-left: 1.5rem !important; +} + +.m-n1 { + margin: -0.125rem !important; +} + +.mt-n1, +.my-n1 { + margin-top: -0.125rem !important; +} + +.mr-n1, +.mx-n1 { + margin-right: -0.125rem !important; +} + +.mb-n1, +.my-n1 { + margin-bottom: -0.125rem !important; +} + +.ml-n1, +.mx-n1 { + margin-left: -0.125rem !important; +} + +.m-n2 { + margin: -0.25rem !important; +} + +.mt-n2, +.my-n2 { + margin-top: -0.25rem !important; +} + +.mr-n2, +.mx-n2 { + margin-right: -0.25rem !important; +} + +.mb-n2, +.my-n2 { + margin-bottom: -0.25rem !important; +} + +.ml-n2, +.mx-n2 { + margin-left: -0.25rem !important; +} + +.m-n3 { + margin: -0.5rem !important; +} + +.mt-n3, +.my-n3 { + margin-top: -0.5rem !important; +} + +.mr-n3, +.mx-n3 { + margin-right: -0.5rem !important; +} + +.mb-n3, +.my-n3 { + margin-bottom: -0.5rem !important; +} + +.ml-n3, +.mx-n3 { + margin-left: -0.5rem !important; +} + +.m-n4 { + margin: -0.75rem !important; +} + +.mt-n4, +.my-n4 { + margin-top: -0.75rem !important; +} + +.mr-n4, +.mx-n4 { + margin-right: -0.75rem !important; +} + +.mb-n4, +.my-n4 { + margin-bottom: -0.75rem !important; +} + +.ml-n4, +.mx-n4 { + margin-left: -0.75rem !important; +} + +.m-n5 { + margin: -1.5rem !important; +} + +.mt-n5, +.my-n5 { + margin-top: -1.5rem !important; +} + +.mr-n5, +.mx-n5 { + margin-right: -1.5rem !important; +} + +.mb-n5, +.my-n5 { + margin-bottom: -1.5rem !important; +} + +.ml-n5, +.mx-n5 { + margin-left: -1.5rem !important; +} + +.m-auto { + margin: auto !important; +} + +.mt-auto, +.my-auto { + margin-top: auto !important; +} + +.mr-auto, +.mx-auto { + margin-right: auto !important; +} + +.mb-auto, +.my-auto { + margin-bottom: auto !important; +} + +.ml-auto, +.mx-auto { + margin-left: auto !important; +} + +@media (min-width: 576px) { + .m-sm-0 { + margin: 0 !important; + } + .mt-sm-0, + .my-sm-0 { + margin-top: 0 !important; + } + .mr-sm-0, + .mx-sm-0 { + margin-right: 0 !important; + } + .mb-sm-0, + .my-sm-0 { + margin-bottom: 0 !important; + } + .ml-sm-0, + .mx-sm-0 { + margin-left: 0 !important; + } + .m-sm-1 { + margin: 0.125rem !important; + } + .mt-sm-1, + .my-sm-1 { + margin-top: 0.125rem !important; + } + .mr-sm-1, + .mx-sm-1 { + margin-right: 0.125rem !important; + } + .mb-sm-1, + .my-sm-1 { + margin-bottom: 0.125rem !important; + } + .ml-sm-1, + .mx-sm-1 { + margin-left: 0.125rem !important; + } + .m-sm-2 { + margin: 0.25rem !important; + } + .mt-sm-2, + .my-sm-2 { + margin-top: 0.25rem !important; + } + .mr-sm-2, + .mx-sm-2 { + margin-right: 0.25rem !important; + } + .mb-sm-2, + .my-sm-2 { + margin-bottom: 0.25rem !important; + } + .ml-sm-2, + .mx-sm-2 { + margin-left: 0.25rem !important; + } + .m-sm-3 { + margin: 0.5rem !important; + } + .mt-sm-3, + .my-sm-3 { + margin-top: 0.5rem !important; + } + .mr-sm-3, + .mx-sm-3 { + margin-right: 0.5rem !important; + } + .mb-sm-3, + .my-sm-3 { + margin-bottom: 0.5rem !important; + } + .ml-sm-3, + .mx-sm-3 { + margin-left: 0.5rem !important; + } + .m-sm-4 { + margin: 0.75rem !important; + } + .mt-sm-4, + .my-sm-4 { + margin-top: 0.75rem !important; + } + .mr-sm-4, + .mx-sm-4 { + margin-right: 0.75rem !important; + } + .mb-sm-4, + .my-sm-4 { + margin-bottom: 0.75rem !important; + } + .ml-sm-4, + .mx-sm-4 { + margin-left: 0.75rem !important; + } + .m-sm-5 { + margin: 1.5rem !important; + } + .mt-sm-5, + .my-sm-5 { + margin-top: 1.5rem !important; + } + .mr-sm-5, + .mx-sm-5 { + margin-right: 1.5rem !important; + } + .mb-sm-5, + .my-sm-5 { + margin-bottom: 1.5rem !important; + } + .ml-sm-5, + .mx-sm-5 { + margin-left: 1.5rem !important; + } + .p-sm-0 { + padding: 0 !important; + } + .pt-sm-0, + .py-sm-0 { + padding-top: 0 !important; + } + .pr-sm-0, + .px-sm-0 { + padding-right: 0 !important; + } + .pb-sm-0, + .py-sm-0 { + padding-bottom: 0 !important; + } + .pl-sm-0, + .px-sm-0 { + padding-left: 0 !important; + } + .p-sm-1 { + padding: 0.125rem !important; + } + .pt-sm-1, + .py-sm-1 { + padding-top: 0.125rem !important; + } + .pr-sm-1, + .px-sm-1 { + padding-right: 0.125rem !important; + } + .pb-sm-1, + .py-sm-1 { + padding-bottom: 0.125rem !important; + } + .pl-sm-1, + .px-sm-1 { + padding-left: 0.125rem !important; + } + .p-sm-2 { + padding: 0.25rem !important; + } + .pt-sm-2, + .py-sm-2 { + padding-top: 0.25rem !important; + } + .pr-sm-2, + .px-sm-2 { + padding-right: 0.25rem !important; + } + .pb-sm-2, + .py-sm-2 { + padding-bottom: 0.25rem !important; + } + .pl-sm-2, + .px-sm-2 { + padding-left: 0.25rem !important; + } + .p-sm-3 { + padding: 0.5rem !important; + } + .pt-sm-3, + .py-sm-3 { + padding-top: 0.5rem !important; + } + .pr-sm-3, + .px-sm-3 { + padding-right: 0.5rem !important; + } + .pb-sm-3, + .py-sm-3 { + padding-bottom: 0.5rem !important; + } + .pl-sm-3, + .px-sm-3 { + padding-left: 0.5rem !important; + } + .p-sm-4 { + padding: 0.75rem !important; + } + .pt-sm-4, + .py-sm-4 { + padding-top: 0.75rem !important; + } + .pr-sm-4, + .px-sm-4 { + padding-right: 0.75rem !important; + } + .pb-sm-4, + .py-sm-4 { + padding-bottom: 0.75rem !important; + } + .pl-sm-4, + .px-sm-4 { + padding-left: 0.75rem !important; + } + .p-sm-5 { + padding: 1.5rem !important; + } + .pt-sm-5, + .py-sm-5 { + padding-top: 1.5rem !important; + } + .pr-sm-5, + .px-sm-5 { + padding-right: 1.5rem !important; + } + .pb-sm-5, + .py-sm-5 { + padding-bottom: 1.5rem !important; + } + .pl-sm-5, + .px-sm-5 { + padding-left: 1.5rem !important; + } + .m-sm-n1 { + margin: -0.125rem !important; + } + .mt-sm-n1, + .my-sm-n1 { + margin-top: -0.125rem !important; + } + .mr-sm-n1, + .mx-sm-n1 { + margin-right: -0.125rem !important; + } + .mb-sm-n1, + .my-sm-n1 { + margin-bottom: -0.125rem !important; + } + .ml-sm-n1, + .mx-sm-n1 { + margin-left: -0.125rem !important; + } + .m-sm-n2 { + margin: -0.25rem !important; + } + .mt-sm-n2, + .my-sm-n2 { + margin-top: -0.25rem !important; + } + .mr-sm-n2, + .mx-sm-n2 { + margin-right: -0.25rem !important; + } + .mb-sm-n2, + .my-sm-n2 { + margin-bottom: -0.25rem !important; + } + .ml-sm-n2, + .mx-sm-n2 { + margin-left: -0.25rem !important; + } + .m-sm-n3 { + margin: -0.5rem !important; + } + .mt-sm-n3, + .my-sm-n3 { + margin-top: -0.5rem !important; + } + .mr-sm-n3, + .mx-sm-n3 { + margin-right: -0.5rem !important; + } + .mb-sm-n3, + .my-sm-n3 { + margin-bottom: -0.5rem !important; + } + .ml-sm-n3, + .mx-sm-n3 { + margin-left: -0.5rem !important; + } + .m-sm-n4 { + margin: -0.75rem !important; + } + .mt-sm-n4, + .my-sm-n4 { + margin-top: -0.75rem !important; + } + .mr-sm-n4, + .mx-sm-n4 { + margin-right: -0.75rem !important; + } + .mb-sm-n4, + .my-sm-n4 { + margin-bottom: -0.75rem !important; + } + .ml-sm-n4, + .mx-sm-n4 { + margin-left: -0.75rem !important; + } + .m-sm-n5 { + margin: -1.5rem !important; + } + .mt-sm-n5, + .my-sm-n5 { + margin-top: -1.5rem !important; + } + .mr-sm-n5, + .mx-sm-n5 { + margin-right: -1.5rem !important; + } + .mb-sm-n5, + .my-sm-n5 { + margin-bottom: -1.5rem !important; + } + .ml-sm-n5, + .mx-sm-n5 { + margin-left: -1.5rem !important; + } + .m-sm-auto { + margin: auto !important; + } + .mt-sm-auto, + .my-sm-auto { + margin-top: auto !important; + } + .mr-sm-auto, + .mx-sm-auto { + margin-right: auto !important; + } + .mb-sm-auto, + .my-sm-auto { + margin-bottom: auto !important; + } + .ml-sm-auto, + .mx-sm-auto { + margin-left: auto !important; + } +} + +@media (min-width: 768px) { + .m-md-0 { + margin: 0 !important; + } + .mt-md-0, + .my-md-0 { + margin-top: 0 !important; + } + .mr-md-0, + .mx-md-0 { + margin-right: 0 !important; + } + .mb-md-0, + .my-md-0 { + margin-bottom: 0 !important; + } + .ml-md-0, + .mx-md-0 { + margin-left: 0 !important; + } + .m-md-1 { + margin: 0.125rem !important; + } + .mt-md-1, + .my-md-1 { + margin-top: 0.125rem !important; + } + .mr-md-1, + .mx-md-1 { + margin-right: 0.125rem !important; + } + .mb-md-1, + .my-md-1 { + margin-bottom: 0.125rem !important; + } + .ml-md-1, + .mx-md-1 { + margin-left: 0.125rem !important; + } + .m-md-2 { + margin: 0.25rem !important; + } + .mt-md-2, + .my-md-2 { + margin-top: 0.25rem !important; + } + .mr-md-2, + .mx-md-2 { + margin-right: 0.25rem !important; + } + .mb-md-2, + .my-md-2 { + margin-bottom: 0.25rem !important; + } + .ml-md-2, + .mx-md-2 { + margin-left: 0.25rem !important; + } + .m-md-3 { + margin: 0.5rem !important; + } + .mt-md-3, + .my-md-3 { + margin-top: 0.5rem !important; + } + .mr-md-3, + .mx-md-3 { + margin-right: 0.5rem !important; + } + .mb-md-3, + .my-md-3 { + margin-bottom: 0.5rem !important; + } + .ml-md-3, + .mx-md-3 { + margin-left: 0.5rem !important; + } + .m-md-4 { + margin: 0.75rem !important; + } + .mt-md-4, + .my-md-4 { + margin-top: 0.75rem !important; + } + .mr-md-4, + .mx-md-4 { + margin-right: 0.75rem !important; + } + .mb-md-4, + .my-md-4 { + margin-bottom: 0.75rem !important; + } + .ml-md-4, + .mx-md-4 { + margin-left: 0.75rem !important; + } + .m-md-5 { + margin: 1.5rem !important; + } + .mt-md-5, + .my-md-5 { + margin-top: 1.5rem !important; + } + .mr-md-5, + .mx-md-5 { + margin-right: 1.5rem !important; + } + .mb-md-5, + .my-md-5 { + margin-bottom: 1.5rem !important; + } + .ml-md-5, + .mx-md-5 { + margin-left: 1.5rem !important; + } + .p-md-0 { + padding: 0 !important; + } + .pt-md-0, + .py-md-0 { + padding-top: 0 !important; + } + .pr-md-0, + .px-md-0 { + padding-right: 0 !important; + } + .pb-md-0, + .py-md-0 { + padding-bottom: 0 !important; + } + .pl-md-0, + .px-md-0 { + padding-left: 0 !important; + } + .p-md-1 { + padding: 0.125rem !important; + } + .pt-md-1, + .py-md-1 { + padding-top: 0.125rem !important; + } + .pr-md-1, + .px-md-1 { + padding-right: 0.125rem !important; + } + .pb-md-1, + .py-md-1 { + padding-bottom: 0.125rem !important; + } + .pl-md-1, + .px-md-1 { + padding-left: 0.125rem !important; + } + .p-md-2 { + padding: 0.25rem !important; + } + .pt-md-2, + .py-md-2 { + padding-top: 0.25rem !important; + } + .pr-md-2, + .px-md-2 { + padding-right: 0.25rem !important; + } + .pb-md-2, + .py-md-2 { + padding-bottom: 0.25rem !important; + } + .pl-md-2, + .px-md-2 { + padding-left: 0.25rem !important; + } + .p-md-3 { + padding: 0.5rem !important; + } + .pt-md-3, + .py-md-3 { + padding-top: 0.5rem !important; + } + .pr-md-3, + .px-md-3 { + padding-right: 0.5rem !important; + } + .pb-md-3, + .py-md-3 { + padding-bottom: 0.5rem !important; + } + .pl-md-3, + .px-md-3 { + padding-left: 0.5rem !important; + } + .p-md-4 { + padding: 0.75rem !important; + } + .pt-md-4, + .py-md-4 { + padding-top: 0.75rem !important; + } + .pr-md-4, + .px-md-4 { + padding-right: 0.75rem !important; + } + .pb-md-4, + .py-md-4 { + padding-bottom: 0.75rem !important; + } + .pl-md-4, + .px-md-4 { + padding-left: 0.75rem !important; + } + .p-md-5 { + padding: 1.5rem !important; + } + .pt-md-5, + .py-md-5 { + padding-top: 1.5rem !important; + } + .pr-md-5, + .px-md-5 { + padding-right: 1.5rem !important; + } + .pb-md-5, + .py-md-5 { + padding-bottom: 1.5rem !important; + } + .pl-md-5, + .px-md-5 { + padding-left: 1.5rem !important; + } + .m-md-n1 { + margin: -0.125rem !important; + } + .mt-md-n1, + .my-md-n1 { + margin-top: -0.125rem !important; + } + .mr-md-n1, + .mx-md-n1 { + margin-right: -0.125rem !important; + } + .mb-md-n1, + .my-md-n1 { + margin-bottom: -0.125rem !important; + } + .ml-md-n1, + .mx-md-n1 { + margin-left: -0.125rem !important; + } + .m-md-n2 { + margin: -0.25rem !important; + } + .mt-md-n2, + .my-md-n2 { + margin-top: -0.25rem !important; + } + .mr-md-n2, + .mx-md-n2 { + margin-right: -0.25rem !important; + } + .mb-md-n2, + .my-md-n2 { + margin-bottom: -0.25rem !important; + } + .ml-md-n2, + .mx-md-n2 { + margin-left: -0.25rem !important; + } + .m-md-n3 { + margin: -0.5rem !important; + } + .mt-md-n3, + .my-md-n3 { + margin-top: -0.5rem !important; + } + .mr-md-n3, + .mx-md-n3 { + margin-right: -0.5rem !important; + } + .mb-md-n3, + .my-md-n3 { + margin-bottom: -0.5rem !important; + } + .ml-md-n3, + .mx-md-n3 { + margin-left: -0.5rem !important; + } + .m-md-n4 { + margin: -0.75rem !important; + } + .mt-md-n4, + .my-md-n4 { + margin-top: -0.75rem !important; + } + .mr-md-n4, + .mx-md-n4 { + margin-right: -0.75rem !important; + } + .mb-md-n4, + .my-md-n4 { + margin-bottom: -0.75rem !important; + } + .ml-md-n4, + .mx-md-n4 { + margin-left: -0.75rem !important; + } + .m-md-n5 { + margin: -1.5rem !important; + } + .mt-md-n5, + .my-md-n5 { + margin-top: -1.5rem !important; + } + .mr-md-n5, + .mx-md-n5 { + margin-right: -1.5rem !important; + } + .mb-md-n5, + .my-md-n5 { + margin-bottom: -1.5rem !important; + } + .ml-md-n5, + .mx-md-n5 { + margin-left: -1.5rem !important; + } + .m-md-auto { + margin: auto !important; + } + .mt-md-auto, + .my-md-auto { + margin-top: auto !important; + } + .mr-md-auto, + .mx-md-auto { + margin-right: auto !important; + } + .mb-md-auto, + .my-md-auto { + margin-bottom: auto !important; + } + .ml-md-auto, + .mx-md-auto { + margin-left: auto !important; + } +} + +@media (min-width: 992px) { + .m-lg-0 { + margin: 0 !important; + } + .mt-lg-0, + .my-lg-0 { + margin-top: 0 !important; + } + .mr-lg-0, + .mx-lg-0 { + margin-right: 0 !important; + } + .mb-lg-0, + .my-lg-0 { + margin-bottom: 0 !important; + } + .ml-lg-0, + .mx-lg-0 { + margin-left: 0 !important; + } + .m-lg-1 { + margin: 0.125rem !important; + } + .mt-lg-1, + .my-lg-1 { + margin-top: 0.125rem !important; + } + .mr-lg-1, + .mx-lg-1 { + margin-right: 0.125rem !important; + } + .mb-lg-1, + .my-lg-1 { + margin-bottom: 0.125rem !important; + } + .ml-lg-1, + .mx-lg-1 { + margin-left: 0.125rem !important; + } + .m-lg-2 { + margin: 0.25rem !important; + } + .mt-lg-2, + .my-lg-2 { + margin-top: 0.25rem !important; + } + .mr-lg-2, + .mx-lg-2 { + margin-right: 0.25rem !important; + } + .mb-lg-2, + .my-lg-2 { + margin-bottom: 0.25rem !important; + } + .ml-lg-2, + .mx-lg-2 { + margin-left: 0.25rem !important; + } + .m-lg-3 { + margin: 0.5rem !important; + } + .mt-lg-3, + .my-lg-3 { + margin-top: 0.5rem !important; + } + .mr-lg-3, + .mx-lg-3 { + margin-right: 0.5rem !important; + } + .mb-lg-3, + .my-lg-3 { + margin-bottom: 0.5rem !important; + } + .ml-lg-3, + .mx-lg-3 { + margin-left: 0.5rem !important; + } + .m-lg-4 { + margin: 0.75rem !important; + } + .mt-lg-4, + .my-lg-4 { + margin-top: 0.75rem !important; + } + .mr-lg-4, + .mx-lg-4 { + margin-right: 0.75rem !important; + } + .mb-lg-4, + .my-lg-4 { + margin-bottom: 0.75rem !important; + } + .ml-lg-4, + .mx-lg-4 { + margin-left: 0.75rem !important; + } + .m-lg-5 { + margin: 1.5rem !important; + } + .mt-lg-5, + .my-lg-5 { + margin-top: 1.5rem !important; + } + .mr-lg-5, + .mx-lg-5 { + margin-right: 1.5rem !important; + } + .mb-lg-5, + .my-lg-5 { + margin-bottom: 1.5rem !important; + } + .ml-lg-5, + .mx-lg-5 { + margin-left: 1.5rem !important; + } + .p-lg-0 { + padding: 0 !important; + } + .pt-lg-0, + .py-lg-0 { + padding-top: 0 !important; + } + .pr-lg-0, + .px-lg-0 { + padding-right: 0 !important; + } + .pb-lg-0, + .py-lg-0 { + padding-bottom: 0 !important; + } + .pl-lg-0, + .px-lg-0 { + padding-left: 0 !important; + } + .p-lg-1 { + padding: 0.125rem !important; + } + .pt-lg-1, + .py-lg-1 { + padding-top: 0.125rem !important; + } + .pr-lg-1, + .px-lg-1 { + padding-right: 0.125rem !important; + } + .pb-lg-1, + .py-lg-1 { + padding-bottom: 0.125rem !important; + } + .pl-lg-1, + .px-lg-1 { + padding-left: 0.125rem !important; + } + .p-lg-2 { + padding: 0.25rem !important; + } + .pt-lg-2, + .py-lg-2 { + padding-top: 0.25rem !important; + } + .pr-lg-2, + .px-lg-2 { + padding-right: 0.25rem !important; + } + .pb-lg-2, + .py-lg-2 { + padding-bottom: 0.25rem !important; + } + .pl-lg-2, + .px-lg-2 { + padding-left: 0.25rem !important; + } + .p-lg-3 { + padding: 0.5rem !important; + } + .pt-lg-3, + .py-lg-3 { + padding-top: 0.5rem !important; + } + .pr-lg-3, + .px-lg-3 { + padding-right: 0.5rem !important; + } + .pb-lg-3, + .py-lg-3 { + padding-bottom: 0.5rem !important; + } + .pl-lg-3, + .px-lg-3 { + padding-left: 0.5rem !important; + } + .p-lg-4 { + padding: 0.75rem !important; + } + .pt-lg-4, + .py-lg-4 { + padding-top: 0.75rem !important; + } + .pr-lg-4, + .px-lg-4 { + padding-right: 0.75rem !important; + } + .pb-lg-4, + .py-lg-4 { + padding-bottom: 0.75rem !important; + } + .pl-lg-4, + .px-lg-4 { + padding-left: 0.75rem !important; + } + .p-lg-5 { + padding: 1.5rem !important; + } + .pt-lg-5, + .py-lg-5 { + padding-top: 1.5rem !important; + } + .pr-lg-5, + .px-lg-5 { + padding-right: 1.5rem !important; + } + .pb-lg-5, + .py-lg-5 { + padding-bottom: 1.5rem !important; + } + .pl-lg-5, + .px-lg-5 { + padding-left: 1.5rem !important; + } + .m-lg-n1 { + margin: -0.125rem !important; + } + .mt-lg-n1, + .my-lg-n1 { + margin-top: -0.125rem !important; + } + .mr-lg-n1, + .mx-lg-n1 { + margin-right: -0.125rem !important; + } + .mb-lg-n1, + .my-lg-n1 { + margin-bottom: -0.125rem !important; + } + .ml-lg-n1, + .mx-lg-n1 { + margin-left: -0.125rem !important; + } + .m-lg-n2 { + margin: -0.25rem !important; + } + .mt-lg-n2, + .my-lg-n2 { + margin-top: -0.25rem !important; + } + .mr-lg-n2, + .mx-lg-n2 { + margin-right: -0.25rem !important; + } + .mb-lg-n2, + .my-lg-n2 { + margin-bottom: -0.25rem !important; + } + .ml-lg-n2, + .mx-lg-n2 { + margin-left: -0.25rem !important; + } + .m-lg-n3 { + margin: -0.5rem !important; + } + .mt-lg-n3, + .my-lg-n3 { + margin-top: -0.5rem !important; + } + .mr-lg-n3, + .mx-lg-n3 { + margin-right: -0.5rem !important; + } + .mb-lg-n3, + .my-lg-n3 { + margin-bottom: -0.5rem !important; + } + .ml-lg-n3, + .mx-lg-n3 { + margin-left: -0.5rem !important; + } + .m-lg-n4 { + margin: -0.75rem !important; + } + .mt-lg-n4, + .my-lg-n4 { + margin-top: -0.75rem !important; + } + .mr-lg-n4, + .mx-lg-n4 { + margin-right: -0.75rem !important; + } + .mb-lg-n4, + .my-lg-n4 { + margin-bottom: -0.75rem !important; + } + .ml-lg-n4, + .mx-lg-n4 { + margin-left: -0.75rem !important; + } + .m-lg-n5 { + margin: -1.5rem !important; + } + .mt-lg-n5, + .my-lg-n5 { + margin-top: -1.5rem !important; + } + .mr-lg-n5, + .mx-lg-n5 { + margin-right: -1.5rem !important; + } + .mb-lg-n5, + .my-lg-n5 { + margin-bottom: -1.5rem !important; + } + .ml-lg-n5, + .mx-lg-n5 { + margin-left: -1.5rem !important; + } + .m-lg-auto { + margin: auto !important; + } + .mt-lg-auto, + .my-lg-auto { + margin-top: auto !important; + } + .mr-lg-auto, + .mx-lg-auto { + margin-right: auto !important; + } + .mb-lg-auto, + .my-lg-auto { + margin-bottom: auto !important; + } + .ml-lg-auto, + .mx-lg-auto { + margin-left: auto !important; + } +} + +@media (min-width: 1200px) { + .m-xl-0 { + margin: 0 !important; + } + .mt-xl-0, + .my-xl-0 { + margin-top: 0 !important; + } + .mr-xl-0, + .mx-xl-0 { + margin-right: 0 !important; + } + .mb-xl-0, + .my-xl-0 { + margin-bottom: 0 !important; + } + .ml-xl-0, + .mx-xl-0 { + margin-left: 0 !important; + } + .m-xl-1 { + margin: 0.125rem !important; + } + .mt-xl-1, + .my-xl-1 { + margin-top: 0.125rem !important; + } + .mr-xl-1, + .mx-xl-1 { + margin-right: 0.125rem !important; + } + .mb-xl-1, + .my-xl-1 { + margin-bottom: 0.125rem !important; + } + .ml-xl-1, + .mx-xl-1 { + margin-left: 0.125rem !important; + } + .m-xl-2 { + margin: 0.25rem !important; + } + .mt-xl-2, + .my-xl-2 { + margin-top: 0.25rem !important; + } + .mr-xl-2, + .mx-xl-2 { + margin-right: 0.25rem !important; + } + .mb-xl-2, + .my-xl-2 { + margin-bottom: 0.25rem !important; + } + .ml-xl-2, + .mx-xl-2 { + margin-left: 0.25rem !important; + } + .m-xl-3 { + margin: 0.5rem !important; + } + .mt-xl-3, + .my-xl-3 { + margin-top: 0.5rem !important; + } + .mr-xl-3, + .mx-xl-3 { + margin-right: 0.5rem !important; + } + .mb-xl-3, + .my-xl-3 { + margin-bottom: 0.5rem !important; + } + .ml-xl-3, + .mx-xl-3 { + margin-left: 0.5rem !important; + } + .m-xl-4 { + margin: 0.75rem !important; + } + .mt-xl-4, + .my-xl-4 { + margin-top: 0.75rem !important; + } + .mr-xl-4, + .mx-xl-4 { + margin-right: 0.75rem !important; + } + .mb-xl-4, + .my-xl-4 { + margin-bottom: 0.75rem !important; + } + .ml-xl-4, + .mx-xl-4 { + margin-left: 0.75rem !important; + } + .m-xl-5 { + margin: 1.5rem !important; + } + .mt-xl-5, + .my-xl-5 { + margin-top: 1.5rem !important; + } + .mr-xl-5, + .mx-xl-5 { + margin-right: 1.5rem !important; + } + .mb-xl-5, + .my-xl-5 { + margin-bottom: 1.5rem !important; + } + .ml-xl-5, + .mx-xl-5 { + margin-left: 1.5rem !important; + } + .p-xl-0 { + padding: 0 !important; + } + .pt-xl-0, + .py-xl-0 { + padding-top: 0 !important; + } + .pr-xl-0, + .px-xl-0 { + padding-right: 0 !important; + } + .pb-xl-0, + .py-xl-0 { + padding-bottom: 0 !important; + } + .pl-xl-0, + .px-xl-0 { + padding-left: 0 !important; + } + .p-xl-1 { + padding: 0.125rem !important; + } + .pt-xl-1, + .py-xl-1 { + padding-top: 0.125rem !important; + } + .pr-xl-1, + .px-xl-1 { + padding-right: 0.125rem !important; + } + .pb-xl-1, + .py-xl-1 { + padding-bottom: 0.125rem !important; + } + .pl-xl-1, + .px-xl-1 { + padding-left: 0.125rem !important; + } + .p-xl-2 { + padding: 0.25rem !important; + } + .pt-xl-2, + .py-xl-2 { + padding-top: 0.25rem !important; + } + .pr-xl-2, + .px-xl-2 { + padding-right: 0.25rem !important; + } + .pb-xl-2, + .py-xl-2 { + padding-bottom: 0.25rem !important; + } + .pl-xl-2, + .px-xl-2 { + padding-left: 0.25rem !important; + } + .p-xl-3 { + padding: 0.5rem !important; + } + .pt-xl-3, + .py-xl-3 { + padding-top: 0.5rem !important; + } + .pr-xl-3, + .px-xl-3 { + padding-right: 0.5rem !important; + } + .pb-xl-3, + .py-xl-3 { + padding-bottom: 0.5rem !important; + } + .pl-xl-3, + .px-xl-3 { + padding-left: 0.5rem !important; + } + .p-xl-4 { + padding: 0.75rem !important; + } + .pt-xl-4, + .py-xl-4 { + padding-top: 0.75rem !important; + } + .pr-xl-4, + .px-xl-4 { + padding-right: 0.75rem !important; + } + .pb-xl-4, + .py-xl-4 { + padding-bottom: 0.75rem !important; + } + .pl-xl-4, + .px-xl-4 { + padding-left: 0.75rem !important; + } + .p-xl-5 { + padding: 1.5rem !important; + } + .pt-xl-5, + .py-xl-5 { + padding-top: 1.5rem !important; + } + .pr-xl-5, + .px-xl-5 { + padding-right: 1.5rem !important; + } + .pb-xl-5, + .py-xl-5 { + padding-bottom: 1.5rem !important; + } + .pl-xl-5, + .px-xl-5 { + padding-left: 1.5rem !important; + } + .m-xl-n1 { + margin: -0.125rem !important; + } + .mt-xl-n1, + .my-xl-n1 { + margin-top: -0.125rem !important; + } + .mr-xl-n1, + .mx-xl-n1 { + margin-right: -0.125rem !important; + } + .mb-xl-n1, + .my-xl-n1 { + margin-bottom: -0.125rem !important; + } + .ml-xl-n1, + .mx-xl-n1 { + margin-left: -0.125rem !important; + } + .m-xl-n2 { + margin: -0.25rem !important; + } + .mt-xl-n2, + .my-xl-n2 { + margin-top: -0.25rem !important; + } + .mr-xl-n2, + .mx-xl-n2 { + margin-right: -0.25rem !important; + } + .mb-xl-n2, + .my-xl-n2 { + margin-bottom: -0.25rem !important; + } + .ml-xl-n2, + .mx-xl-n2 { + margin-left: -0.25rem !important; + } + .m-xl-n3 { + margin: -0.5rem !important; + } + .mt-xl-n3, + .my-xl-n3 { + margin-top: -0.5rem !important; + } + .mr-xl-n3, + .mx-xl-n3 { + margin-right: -0.5rem !important; + } + .mb-xl-n3, + .my-xl-n3 { + margin-bottom: -0.5rem !important; + } + .ml-xl-n3, + .mx-xl-n3 { + margin-left: -0.5rem !important; + } + .m-xl-n4 { + margin: -0.75rem !important; + } + .mt-xl-n4, + .my-xl-n4 { + margin-top: -0.75rem !important; + } + .mr-xl-n4, + .mx-xl-n4 { + margin-right: -0.75rem !important; + } + .mb-xl-n4, + .my-xl-n4 { + margin-bottom: -0.75rem !important; + } + .ml-xl-n4, + .mx-xl-n4 { + margin-left: -0.75rem !important; + } + .m-xl-n5 { + margin: -1.5rem !important; + } + .mt-xl-n5, + .my-xl-n5 { + margin-top: -1.5rem !important; + } + .mr-xl-n5, + .mx-xl-n5 { + margin-right: -1.5rem !important; + } + .mb-xl-n5, + .my-xl-n5 { + margin-bottom: -1.5rem !important; + } + .ml-xl-n5, + .mx-xl-n5 { + margin-left: -1.5rem !important; + } + .m-xl-auto { + margin: auto !important; + } + .mt-xl-auto, + .my-xl-auto { + margin-top: auto !important; + } + .mr-xl-auto, + .mx-xl-auto { + margin-right: auto !important; + } + .mb-xl-auto, + .my-xl-auto { + margin-bottom: auto !important; + } + .ml-xl-auto, + .mx-xl-auto { + margin-left: auto !important; + } +} + +.stretched-link::after { + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: 1; + pointer-events: auto; + content: ""; + background-color: rgba(0, 0, 0, 0); +} + +.text-monospace { + font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace !important; +} + +.text-justify { + text-align: justify !important; +} + +.text-wrap { + white-space: normal !important; +} + +.text-nowrap { + white-space: nowrap !important; +} + +.text-truncate { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.text-left { + text-align: left !important; +} + +.text-right { + text-align: right !important; +} + +.text-center { + text-align: center !important; +} + +@media (min-width: 576px) { + .text-sm-left { + text-align: left !important; + } + .text-sm-right { + text-align: right !important; + } + .text-sm-center { + text-align: center !important; + } +} + +@media (min-width: 768px) { + .text-md-left { + text-align: left !important; + } + .text-md-right { + text-align: right !important; + } + .text-md-center { + text-align: center !important; + } +} + +@media (min-width: 992px) { + .text-lg-left { + text-align: left !important; + } + .text-lg-right { + text-align: right !important; + } + .text-lg-center { + text-align: center !important; + } +} + +@media (min-width: 1200px) { + .text-xl-left { + text-align: left !important; + } + .text-xl-right { + text-align: right !important; + } + .text-xl-center { + text-align: center !important; + } +} + +.text-lowercase { + text-transform: lowercase !important; +} + +.text-uppercase { + text-transform: uppercase !important; +} + +.text-capitalize { + text-transform: capitalize !important; +} + +.font-weight-light { + font-weight: 300 !important; +} + +.font-weight-lighter { + font-weight: lighter !important; +} + +.font-weight-normal { + font-weight: 400 !important; +} + +.font-weight-bold { + font-weight: 700 !important; +} + +.font-weight-bolder { + font-weight: bolder !important; +} + +.font-italic { + font-style: italic !important; +} + +.text-white { + color: #fff !important; +} + +.text-primary { + color: #083358 !important; +} + +a.text-primary:hover, a.text-primary:focus { + color: #020a12 !important; +} + +.text-secondary { + color: #b8b8b8 !important; +} + +a.text-secondary:hover, a.text-secondary:focus { + color: #929292 !important; +} + +.text-success { + color: #008a29 !important; +} + +a.text-success:hover, a.text-success:focus { + color: #003e12 !important; +} + +.text-info { + color: #74dbef !important; +} + +a.text-info:hover, a.text-info:focus { + color: #2fc9e7 !important; +} + +.text-warning { + color: #e6d200 !important; +} + +a.text-warning:hover, a.text-warning:focus { + color: #9a8c00 !important; +} + +.text-danger { + color: #e13737 !important; +} + +a.text-danger:hover, a.text-danger:focus { + color: #b11b1b !important; +} + +.text-light { + color: #f4f4f4 !important; +} + +a.text-light:hover, a.text-light:focus { + color: #cecece !important; +} + +.text-dark { + color: #072247 !important; +} + +a.text-dark:hover, a.text-dark:focus { + color: #000101 !important; +} + +.text-body { + color: #212529 !important; +} + +.text-muted { + color: #6c757d !important; +} + +.text-black-50 { + color: rgba(0, 0, 0, 0.5) !important; +} + +.text-white-50 { + color: rgba(255, 255, 255, 0.5) !important; +} + +.text-hide { + font: 0/0 a; + color: transparent; + text-shadow: none; + background-color: transparent; + border: 0; +} + +.text-decoration-none { + text-decoration: none !important; +} + +.text-break { + word-break: break-word !important; + overflow-wrap: break-word !important; +} + +.text-reset { + color: inherit !important; +} + +.visible { + visibility: visible !important; +} + +.invisible { + visibility: hidden !important; +} + +@media print { + *, + *::before, + *::after { + text-shadow: none !important; + box-shadow: none !important; + } + a:not(.btn) { + text-decoration: underline; + } + abbr[title]::after { + content: " (" attr(title) ")"; + } + pre { + white-space: pre-wrap !important; + } + pre, + blockquote { + border: 1px solid #adb5bd; + page-break-inside: avoid; + } + thead { + display: table-header-group; + } + tr, + img { + page-break-inside: avoid; + } + p, + h2, + h3 { + orphans: 3; + widows: 3; + } + h2, + h3 { + page-break-after: avoid; + } + @page { + size: a3; + } + body { + min-width: 992px !important; + } + .container { + min-width: 992px !important; + } + .navbar { + display: none; + } + .badge { + border: 1px solid #000; + } + .table { + border-collapse: collapse !important; + } + .table td, + .table th { + background-color: #fff !important; + } + .table-bordered th, + .table-bordered td { + border: 1px solid #dee2e6 !important; + } + .table-dark { + color: inherit; + } + .table-dark th, + .table-dark td, + .table-dark thead th, + .table-dark tbody + tbody { + border-color: #e3e3e3; + } + .table .thead-dark th { + color: inherit; + border-color: #e3e3e3; + } +} + +.select2-container { + box-sizing: border-box; + display: inline-block; + margin: 0; + position: relative; + vertical-align: middle; +} + +.select2-container .select2-selection--single { + box-sizing: border-box; + cursor: pointer; + display: block; + height: 28px; + user-select: none; + -webkit-user-select: none; +} + +.select2-container .select2-selection--single .select2-selection__rendered { + display: block; + padding-left: 8px; + padding-right: 20px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.select2-container .select2-selection--single .select2-selection__clear { + position: relative; +} + +.select2-container[dir="rtl"] .select2-selection--single .select2-selection__rendered { + padding-right: 8px; + padding-left: 20px; +} + +.select2-container .select2-selection--multiple { + box-sizing: border-box; + cursor: pointer; + display: block; + min-height: 32px; + user-select: none; + -webkit-user-select: none; +} + +.select2-container .select2-selection--multiple .select2-selection__rendered { + display: inline-block; + overflow: hidden; + padding-left: 8px; + text-overflow: ellipsis; + white-space: nowrap; +} + +.select2-container .select2-search--inline { + float: left; +} + +.select2-container .select2-search--inline .select2-search__field { + box-sizing: border-box; + border: none; + font-size: 100%; + margin-top: 5px; + padding: 0; +} + +.select2-container .select2-search--inline .select2-search__field::-webkit-search-cancel-button { + -webkit-appearance: none; +} + +.select2-dropdown { + background-color: white; + border: 1px solid #aaa; + border-radius: 4px; + box-sizing: border-box; + display: block; + position: absolute; + left: -100000px; + width: 100%; + z-index: 1051; +} + +.select2-results { + display: block; +} + +.select2-results__options { + list-style: none; + margin: 0; + padding: 0; +} + +.select2-results__option { + padding: 6px; + user-select: none; + -webkit-user-select: none; +} + +.select2-results__option[aria-selected] { + cursor: pointer; +} + +.select2-container--open .select2-dropdown { + left: 0; +} + +.select2-container--open .select2-dropdown--above { + border-bottom: none; + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; +} + +.select2-container--open .select2-dropdown--below { + border-top: none; + border-top-left-radius: 0; + border-top-right-radius: 0; +} + +.select2-search--dropdown { + display: block; + padding: 4px; +} + +.select2-search--dropdown .select2-search__field { + padding: 4px; + width: 100%; + box-sizing: border-box; +} + +.select2-search--dropdown .select2-search__field::-webkit-search-cancel-button { + -webkit-appearance: none; +} + +.select2-search--dropdown.select2-search--hide { + display: none; +} + +.select2-close-mask { + border: 0; + margin: 0; + padding: 0; + display: block; + position: fixed; + left: 0; + top: 0; + min-height: 100%; + min-width: 100%; + height: auto; + width: auto; + opacity: 0; + z-index: 99; + background-color: #fff; + filter: alpha(opacity=0); +} + +.select2-hidden-accessible { + border: 0 !important; + clip: rect(0 0 0 0) !important; + -webkit-clip-path: inset(50%) !important; + clip-path: inset(50%) !important; + height: 1px !important; + overflow: hidden !important; + padding: 0 !important; + position: absolute !important; + width: 1px !important; + white-space: nowrap !important; +} + +.select2-container--default .select2-selection--single { + background-color: #fff; + border: 1px solid #aaa; + border-radius: 4px; +} + +.select2-container--default .select2-selection--single .select2-selection__rendered { + color: #444; + line-height: 28px; +} + +.select2-container--default .select2-selection--single .select2-selection__clear { + cursor: pointer; + float: right; + font-weight: bold; +} + +.select2-container--default .select2-selection--single .select2-selection__placeholder { + color: #999; +} + +.select2-container--default .select2-selection--single .select2-selection__arrow { + height: 26px; + position: absolute; + top: 1px; + right: 1px; + width: 20px; +} + +.select2-container--default .select2-selection--single .select2-selection__arrow b { + border-color: #888 transparent transparent transparent; + border-style: solid; + border-width: 5px 4px 0 4px; + height: 0; + left: 50%; + margin-left: -4px; + margin-top: -2px; + position: absolute; + top: 50%; + width: 0; +} + +.select2-container--default[dir="rtl"] .select2-selection--single .select2-selection__clear { + float: left; +} + +.select2-container--default[dir="rtl"] .select2-selection--single .select2-selection__arrow { + left: 1px; + right: auto; +} + +.select2-container--default.select2-container--disabled .select2-selection--single { + background-color: #eee; + cursor: default; +} + +.select2-container--default.select2-container--disabled .select2-selection--single .select2-selection__clear { + display: none; +} + +.select2-container--default.select2-container--open .select2-selection--single .select2-selection__arrow b { + border-color: transparent transparent #888 transparent; + border-width: 0 4px 5px 4px; +} + +.select2-container--default .select2-selection--multiple { + background-color: white; + border: 1px solid #aaa; + border-radius: 4px; + cursor: text; +} + +.select2-container--default .select2-selection--multiple .select2-selection__rendered { + box-sizing: border-box; + list-style: none; + margin: 0; + padding: 0 5px; + width: 100%; +} + +.select2-container--default .select2-selection--multiple .select2-selection__rendered li { + list-style: none; +} + +.select2-container--default .select2-selection--multiple .select2-selection__clear { + cursor: pointer; + float: right; + font-weight: bold; + margin-top: 5px; + margin-right: 10px; + padding: 1px; +} + +.select2-container--default .select2-selection--multiple .select2-selection__choice { + background-color: #e4e4e4; + border: 1px solid #aaa; + border-radius: 4px; + cursor: default; + float: left; + margin-right: 5px; + margin-top: 5px; + padding: 0 5px; +} + +.select2-container--default .select2-selection--multiple .select2-selection__choice__remove { + color: #999; + cursor: pointer; + display: inline-block; + font-weight: bold; + margin-right: 2px; +} + +.select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover { + color: #333; +} + +.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice, .select2-container--default[dir="rtl"] .select2-selection--multiple .select2-search--inline { + float: right; +} + +.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice { + margin-left: 5px; + margin-right: auto; +} + +.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice__remove { + margin-left: 2px; + margin-right: auto; +} + +.select2-container--default.select2-container--focus .select2-selection--multiple { + border: solid black 1px; + outline: 0; +} + +.select2-container--default.select2-container--disabled .select2-selection--multiple { + background-color: #eee; + cursor: default; +} + +.select2-container--default.select2-container--disabled .select2-selection__choice__remove { + display: none; +} + +.select2-container--default.select2-container--open.select2-container--above .select2-selection--single, .select2-container--default.select2-container--open.select2-container--above .select2-selection--multiple { + border-top-left-radius: 0; + border-top-right-radius: 0; +} + +.select2-container--default.select2-container--open.select2-container--below .select2-selection--single, .select2-container--default.select2-container--open.select2-container--below .select2-selection--multiple { + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; +} + +.select2-container--default .select2-search--dropdown .select2-search__field { + border: 1px solid #aaa; +} + +.select2-container--default .select2-search--inline .select2-search__field { + background: transparent; + border: none; + outline: 0; + box-shadow: none; + -webkit-appearance: textfield; +} + +.select2-container--default .select2-results > .select2-results__options { + max-height: 200px; + overflow-y: auto; +} + +.select2-container--default .select2-results__option[role=group] { + padding: 0; +} + +.select2-container--default .select2-results__option[aria-disabled=true] { + color: #999; +} + +.select2-container--default .select2-results__option[aria-selected=true] { + background-color: #ddd; +} + +.select2-container--default .select2-results__option .select2-results__option { + padding-left: 1em; +} + +.select2-container--default .select2-results__option .select2-results__option .select2-results__group { + padding-left: 0; +} + +.select2-container--default .select2-results__option .select2-results__option .select2-results__option { + margin-left: -1em; + padding-left: 2em; +} + +.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option { + margin-left: -2em; + padding-left: 3em; +} + +.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option { + margin-left: -3em; + padding-left: 4em; +} + +.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option { + margin-left: -4em; + padding-left: 5em; +} + +.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option { + margin-left: -5em; + padding-left: 6em; +} + +.select2-container--default .select2-results__option--highlighted[aria-selected] { + background-color: #5897fb; + color: white; +} + +.select2-container--default .select2-results__group { + cursor: default; + display: block; + padding: 6px; +} + +.select2-container--classic .select2-selection--single { + background-color: #f7f7f7; + border: 1px solid #e3e3e3; + border-radius: 0.25rem; + outline: 0; + background-image: -webkit-linear-gradient(top, white 50%, #eeeeee 100%); + background-image: -o-linear-gradient(top, white 50%, #eeeeee 100%); + background-image: linear-gradient(to bottom, white 50%, #eeeeee 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFFFF', endColorstr='#FFEEEEEE', GradientType=0); +} + +.select2-container--classic .select2-selection--single:focus { + border: 1px solid #5897fb; +} + +.select2-container--classic .select2-selection--single .select2-selection__rendered { + color: #444; + line-height: 28px; +} + +.select2-container--classic .select2-selection--single .select2-selection__clear { + cursor: pointer; + float: right; + font-weight: bold; + margin-right: 10px; +} + +.select2-container--classic .select2-selection--single .select2-selection__placeholder { + color: #999; +} + +.select2-container--classic .select2-selection--single .select2-selection__arrow { + background-color: #ddd; + border: none; + border-left: 1px solid #e3e3e3; + border-top-right-radius: 0.25rem; + border-bottom-right-radius: 0.25rem; + height: 26px; + position: absolute; + top: 1px; + right: 1px; + width: 20px; + background-image: -webkit-linear-gradient(top, #eeeeee 50%, #cccccc 100%); + background-image: -o-linear-gradient(top, #eeeeee 50%, #cccccc 100%); + background-image: linear-gradient(to bottom, #eeeeee 50%, #cccccc 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFEEEEEE', endColorstr='#FFCCCCCC', GradientType=0); +} + +.select2-container--classic .select2-selection--single .select2-selection__arrow b { + border-color: #888 transparent transparent transparent; + border-style: solid; + border-width: 5px 4px 0 4px; + height: 0; + left: 50%; + margin-left: -4px; + margin-top: -2px; + position: absolute; + top: 50%; + width: 0; +} + +.select2-container--classic[dir="rtl"] .select2-selection--single .select2-selection__clear { + float: left; +} + +.select2-container--classic[dir="rtl"] .select2-selection--single .select2-selection__arrow { + border: none; + border-right: 1px solid #e3e3e3; + border-radius: 0; + border-top-left-radius: 0.25rem; + border-bottom-left-radius: 0.25rem; + left: 1px; + right: auto; +} + +.select2-container--classic.select2-container--open .select2-selection--single { + border: 1px solid #5897fb; +} + +.select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow { + background: transparent; + border: none; +} + +.select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow b { + border-color: transparent transparent #888 transparent; + border-width: 0 4px 5px 4px; +} + +.select2-container--classic.select2-container--open.select2-container--above .select2-selection--single { + border-top: none; + border-top-left-radius: 0; + border-top-right-radius: 0; + background-image: -webkit-linear-gradient(top, white 0%, #eeeeee 50%); + background-image: -o-linear-gradient(top, white 0%, #eeeeee 50%); + background-image: linear-gradient(to bottom, white 0%, #eeeeee 50%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFFFF', endColorstr='#FFEEEEEE', GradientType=0); +} + +.select2-container--classic.select2-container--open.select2-container--below .select2-selection--single { + border-bottom: none; + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; + background-image: -webkit-linear-gradient(top, #eeeeee 50%, white 100%); + background-image: -o-linear-gradient(top, #eeeeee 50%, white 100%); + background-image: linear-gradient(to bottom, #eeeeee 50%, white 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFEEEEEE', endColorstr='#FFFFFFFF', GradientType=0); +} + +.select2-container--classic .select2-selection--multiple { + background-color: white; + border: 1px solid #e3e3e3; + border-radius: 0.25rem; + cursor: text; + outline: 0; +} + +.select2-container--classic .select2-selection--multiple:focus { + border: 1px solid #5897fb; +} + +.select2-container--classic .select2-selection--multiple .select2-selection__rendered { + list-style: none; + margin: 0; + padding: 0 5px; +} + +.select2-container--classic .select2-selection--multiple .select2-selection__clear { + display: none; +} + +.select2-container--classic .select2-selection--multiple .select2-selection__choice { + background-color: #e4e4e4; + border: 1px solid #e3e3e3; + border-radius: 0.25rem; + cursor: default; + float: left; + margin-right: 5px; + margin-top: 5px; + padding: 0 5px; +} + +.select2-container--classic .select2-selection--multiple .select2-selection__choice__remove { + color: #888; + cursor: pointer; + display: inline-block; + font-weight: bold; + margin-right: 2px; +} + +.select2-container--classic .select2-selection--multiple .select2-selection__choice__remove:hover { + color: #555; +} + +.select2-container--classic[dir="rtl"] .select2-selection--multiple .select2-selection__choice { + float: right; + margin-left: 5px; + margin-right: auto; +} + +.select2-container--classic[dir="rtl"] .select2-selection--multiple .select2-selection__choice__remove { + margin-left: 2px; + margin-right: auto; +} + +.select2-container--classic.select2-container--open .select2-selection--multiple { + border: 1px solid #5897fb; +} + +.select2-container--classic.select2-container--open.select2-container--above .select2-selection--multiple { + border-top: none; + border-top-left-radius: 0; + border-top-right-radius: 0; +} + +.select2-container--classic.select2-container--open.select2-container--below .select2-selection--multiple { + border-bottom: none; + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; +} + +.select2-container--classic .select2-search--dropdown .select2-search__field { + border: 1px solid #e3e3e3; + outline: 0; +} + +.select2-container--classic .select2-search--inline .select2-search__field { + outline: 0; + box-shadow: none; +} + +.select2-container--classic .select2-dropdown { + background-color: white; + border: 1px solid transparent; +} + +.select2-container--classic .select2-dropdown--above { + border-bottom: none; +} + +.select2-container--classic .select2-dropdown--below { + border-top: none; +} + +.select2-container--classic .select2-results > .select2-results__options { + max-height: 200px; + overflow-y: auto; +} + +.select2-container--classic .select2-results__option[role=group] { + padding: 0; +} + +.select2-container--classic .select2-results__option[aria-disabled=true] { + color: grey; +} + +.select2-container--classic .select2-results__option--highlighted[aria-selected] { + background-color: #3875d7; + color: white; +} + +.select2-container--classic .select2-results__group { + cursor: default; + display: block; + padding: 6px; +} + +.select2-container--classic.select2-container--open .select2-dropdown { + border-color: #5897fb; +} + +/** + * We need a clone of bootstrap color-yiq mixin so we can get the same value for color + */ +.select2-container--bootstrap { + display: block; + /*------------------------------------*\ + #COMMON STYLES + \*------------------------------------*/ + /** + * Search field in the Select2 dropdown. + */ + /** + * No outline for all search fields - in the dropdown + * and inline in multi Select2s. + */ + /** + * Adjust Select2's choices hover and selected styles to match + * Bootstrap 4's default dropdown styles. + * + * @see https://getbootstrap.com/docs/4.0/components/dropdowns/ + */ + /** + * Clear the selection. + */ + /** + * Address disabled Select2 styles. + * + * @see https://select2.github.io/examples.html#disabled + * @see hhttps://getbootstrap.com/docs/4.0/components/forms/#disabled-forms + */ + /*------------------------------------*\ + #DROPDOWN + \*------------------------------------*/ + /** + * Dropdown border color and box-shadow. + */ + /** + * Limit the dropdown height. + */ + /*------------------------------------*\ + #SINGLE SELECT2 + \*------------------------------------*/ + /*------------------------------------*\ + #MULTIPLE SELECT2 + \*------------------------------------*/ + /** + * Address Bootstrap control sizing classes + * + * 1. Reset Bootstrap defaults. + * 2. Adjust the dropdown arrow button icon position. + * + * @see https://getbootstrap.com/docs/4.0/components/forms/#sizing + */ + /* 1 */ + /*------------------------------------*\ + #RTL SUPPORT + \*------------------------------------*/ +} + +.select2-container--bootstrap .select2-selection { + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; + background-color: #fff; + border: 1px solid #ced4da; + color: #495057; + font-size: 1rem; + outline: 0; +} + +@media (prefers-reduced-motion: reduce) { + .select2-container--bootstrap .select2-selection { + transition: none; + } +} + +.select2-container--bootstrap .select2-search--dropdown .select2-search__field { + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); + transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; + background-color: #fff; + border: 1px solid #ced4da; + color: #495057; + font-size: 1rem; +} + +@media (prefers-reduced-motion: reduce) { + .select2-container--bootstrap .select2-search--dropdown .select2-search__field { + transition: none; + } +} + +.select2-container--bootstrap .select2-search__field { + outline: 0; + /* Firefox 18- */ + /** + * Firefox 19+ + * + * @see http://stackoverflow.com/questions/24236240/color-for-styled-placeholder-text-is-muted-in-firefox + */ +} + +.select2-container--bootstrap .select2-search__field::-webkit-input-placeholder { + color: #6c757d; +} + +.select2-container--bootstrap .select2-search__field:-moz-placeholder { + color: #6c757d; +} + +.select2-container--bootstrap .select2-search__field::-moz-placeholder { + color: #6c757d; + opacity: 1; +} + +.select2-container--bootstrap .select2-search__field:-ms-input-placeholder { + color: #6c757d; +} + +.select2-container--bootstrap .select2-results__option { + padding: 0.375rem 0.75rem; + /** + * Disabled results. + * + * @see https://select2.github.io/examples.html#disabled-results + */ + /** + * Hover state. + */ + /** + * Selected state. + */ +} + +.select2-container--bootstrap .select2-results__option[role=group] { + padding: 0; +} + +.select2-container--bootstrap .select2-results__option[aria-disabled=true] { + color: #6c757d; + cursor: not-allowed; +} + +.select2-container--bootstrap .select2-results__option[aria-selected=true] { + background-color: #f8f9fa; + color: #16181b; +} + +.select2-container--bootstrap .select2-results__option--highlighted[aria-selected] { + background-color: #083358; + color: #fff; +} + +.select2-container--bootstrap .select2-results__option .select2-results__option { + padding: 0.375rem 0.75rem; +} + +.select2-container--bootstrap .select2-results__option .select2-results__option .select2-results__group { + padding-left: 0; +} + +.select2-container--bootstrap .select2-results__option .select2-results__option .select2-results__option { + margin-left: -0.75rem; + padding-left: 1.5rem; +} + +.select2-container--bootstrap .select2-results__option .select2-results__option .select2-results__option .select2-results__option { + margin-left: -1.5rem; + padding-left: 2.25rem; +} + +.select2-container--bootstrap .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option { + margin-left: -2.25rem; + padding-left: 3rem; +} + +.select2-container--bootstrap .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option { + margin-left: -3rem; + padding-left: 3.75rem; +} + +.select2-container--bootstrap .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option { + margin-left: -3.75rem; + padding-left: 4.5rem; +} + +.select2-container--bootstrap .select2-results__group { + color: #6c757d; + display: block; + padding: 0.375rem 0.75rem; + font-size: 0.875rem; + line-height: 1.5; + white-space: nowrap; +} + +.select2-container--bootstrap.select2-container--focus .select2-selection, .select2-container--bootstrap.select2-container--open .select2-selection { + border-color: #1377cd; + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 0 0.2rem rgba(8, 51, 88, 0.25); +} + +.select2-container--bootstrap.select2-container--open { + /** + * Make the dropdown arrow point up while the dropdown is visible. + */ + /** + * Handle border radii of the container when the dropdown is showing. + */ +} + +.select2-container--bootstrap.select2-container--open .select2-selection .select2-selection__arrow b { + border-color: transparent transparent #6c757d transparent; + border-width: 0 0.25rem 0.25rem 0.25rem; +} + +.select2-container--bootstrap.select2-container--open.select2-container--below .select2-selection { + border-bottom-color: transparent; + box-shadow: none; +} + +.select2-container--bootstrap.select2-container--open.select2-container--above .select2-selection { + border-top-color: transparent; + box-shadow: none; +} + +.select2-container--bootstrap .select2-selection__clear { + color: #6c757d; + cursor: pointer; + float: right; + font-weight: bold; + margin-right: 10px; +} + +.select2-container--bootstrap .select2-selection__clear:hover { + color: "#111"; +} + +.select2-container--bootstrap.select2-container--disabled .select2-selection { + border-color: #ced4da; + box-shadow: none; +} + +.select2-container--bootstrap.select2-container--disabled .select2-selection, +.select2-container--bootstrap.select2-container--disabled .select2-search__field { + cursor: not-allowed; +} + +.select2-container--bootstrap.select2-container--disabled .select2-selection, +.select2-container--bootstrap.select2-container--disabled .select2-selection--multiple .select2-selection__choice { + background-color: #e9ecef; +} + +.select2-container--bootstrap.select2-container--disabled .select2-selection__clear, +.select2-container--bootstrap.select2-container--disabled .select2-selection--multiple .select2-selection__choice__remove { + display: none; +} + +.select2-container--bootstrap .select2-dropdown { + box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175); + border-color: #1377cd; + overflow-x: hidden; + margin-top: -1px; +} + +.select2-container--bootstrap .select2-dropdown--above { + box-shadow: 0px -6px 12px rgba(0, 0, 0, 0.175); + margin-top: 1px; +} + +.select2-container--bootstrap .select2-results > .select2-results__options { + max-height: 200px; + overflow-y: auto; +} + +.select2-container--bootstrap .select2-selection--single { + height: calc(1.5em + 0.75rem + 2px); + line-height: 1.5; + padding: 0.375rem 1.5rem 0.375rem 0.75rem; + /** + * Adjust the single Select2's dropdown arrow button appearance. + */ +} + +.select2-container--bootstrap .select2-selection--single .select2-selection__arrow { + position: absolute; + bottom: 0; + right: 0.75rem; + top: 0; + width: 0.25rem; +} + +.select2-container--bootstrap .select2-selection--single .select2-selection__arrow b { + border-color: #6c757d transparent transparent transparent; + border-style: solid; + border-width: 0.25rem 0.25rem 0 0.25rem; + height: 0; + left: 0; + margin-left: -0.25rem; + margin-top: -0.125rem; + position: absolute; + top: 50%; + width: 0; +} + +.select2-container--bootstrap .select2-selection--single .select2-selection__rendered { + color: #495057; + padding: 0; +} + +.select2-container--bootstrap .select2-selection--single .select2-selection__placeholder { + color: #6c757d; +} + +.select2-container--bootstrap .select2-selection--multiple { + min-height: calc(1.5em + 0.75rem + 2px); + padding: 0; + height: auto; + /** + * Make Multi Select2's choices match Bootstrap 4's default button styles. + */ + /** + * Minus 2px borders. + */ + /** + * Clear the selection. + */ +} + +.select2-container--bootstrap .select2-selection--multiple .select2-selection__rendered { + box-sizing: border-box; + display: block; + line-height: 1.5; + list-style: none; + margin: 0; + overflow: hidden; + padding: 0; + width: 100%; + text-overflow: ellipsis; + white-space: nowrap; +} + +.select2-container--bootstrap .select2-selection--multiple .select2-selection__placeholder { + color: #6c757d; + float: left; + margin-top: 5px; +} + +.select2-container--bootstrap .select2-selection--multiple .select2-selection__choice { + color: #495057; + background: #e9ecef; + border: 1px solid #b8b8b8; + border-radius: 0.25rem; + cursor: default; + float: left; + margin: calc(0.375rem - 1px) 0 0 0.375rem; + padding: 0 0.375rem; +} + +.select2-container--bootstrap .select2-selection--multiple .select2-search--inline .select2-search__field { + background: transparent; + padding: 0 0.75rem; + height: calc(1.5em + 0.75rem + 2px); + line-height: 1.5; + margin: -1px 0; + min-width: 5em; +} + +.select2-container--bootstrap .select2-selection--multiple .select2-selection__choice__remove { + color: #6c757d; + cursor: pointer; + display: inline-block; + font-weight: bold; + margin-right: 0.1875rem; +} + +.select2-container--bootstrap .select2-selection--multiple .select2-selection__choice__remove:hover { + color: "#111"; +} + +.select2-container--bootstrap .select2-selection--multiple .select2-selection__clear { + margin-top: 0.375rem; +} + +.select2-container--bootstrap .select2-selection--single.form-control-sm, +.input-group-sm .select2-container--bootstrap .select2-selection--single, +.form-group-sm .select2-container--bootstrap .select2-selection--single { + font-size: 0.875rem; + height: calc(1.5em + 0.5rem + 2px); + line-height: 1.5; + padding: 0.25rem 1.25rem 0.25rem 0.5rem; + /* 2 */ +} + +.select2-container--bootstrap .select2-selection--single.form-control-sm .select2-selection__arrow b, +.input-group-sm .select2-container--bootstrap .select2-selection--single .select2-selection__arrow b, +.form-group-sm .select2-container--bootstrap .select2-selection--single .select2-selection__arrow b { + margin-left: -0.25rem; +} + +.select2-container--bootstrap .select2-selection--multiple.form-control-sm, +.input-group-sm .select2-container--bootstrap .select2-selection--multiple, +.form-group-sm .select2-container--bootstrap .select2-selection--multiple { + min-height: calc(1.5em + 0.5rem + 2px); +} + +.select2-container--bootstrap .select2-selection--multiple.form-control-sm .select2-selection__choice, +.input-group-sm .select2-container--bootstrap .select2-selection--multiple .select2-selection__choice, +.form-group-sm .select2-container--bootstrap .select2-selection--multiple .select2-selection__choice { + font-size: 0.875rem; + line-height: 1.5; + margin: calc(0.25rem - 1px) 0 0 0.25rem; + padding: 0 0.25rem; +} + +.select2-container--bootstrap .select2-selection--multiple.form-control-sm .select2-search--inline .select2-search__field, +.input-group-sm .select2-container--bootstrap .select2-selection--multiple .select2-search--inline .select2-search__field, +.form-group-sm .select2-container--bootstrap .select2-selection--multiple .select2-search--inline .select2-search__field { + padding: 0 0.5rem; + font-size: 0.875rem; + height: calc(1.5em + 0.5rem + 2px); + line-height: 1.5; +} + +.select2-container--bootstrap .select2-selection--multiple.form-control-sm .select2-selection__clear, +.input-group-sm .select2-container--bootstrap .select2-selection--multiple .select2-selection__clear, +.form-group-sm .select2-container--bootstrap .select2-selection--multiple .select2-selection__clear { + margin-top: 0.25rem; +} + +.select2-container--bootstrap .select2-selection--single.form-control-lg, +.input-group-lg .select2-container--bootstrap .select2-selection--single, +.form-group-lg .select2-container--bootstrap .select2-selection--single { + font-size: 1.25rem; + height: calc(1.5em + 1rem + 2px); + line-height: 1.5; + padding: 0.5rem 1.9375rem 0.5rem 1rem; + /* 1 */ +} + +.select2-container--bootstrap .select2-selection--single.form-control-lg .select2-selection__arrow, +.input-group-lg .select2-container--bootstrap .select2-selection--single .select2-selection__arrow, +.form-group-lg .select2-container--bootstrap .select2-selection--single .select2-selection__arrow { + width: 0.3125rem; +} + +.select2-container--bootstrap .select2-selection--single.form-control-lg .select2-selection__arrow b, +.input-group-lg .select2-container--bootstrap .select2-selection--single .select2-selection__arrow b, +.form-group-lg .select2-container--bootstrap .select2-selection--single .select2-selection__arrow b { + border-width: 0.3125rem 0.3125rem 0 0.3125rem; + margin-left: -0.3125rem; + margin-left: -0.5rem; + margin-top: -0.15625rem; +} + +.select2-container--bootstrap .select2-selection--multiple.form-control-lg, +.input-group-lg .select2-container--bootstrap .select2-selection--multiple, +.form-group-lg .select2-container--bootstrap .select2-selection--multiple { + min-height: calc(1.5em + 1rem + 2px); + border-radius: 0.3rem; +} + +.select2-container--bootstrap .select2-selection--multiple.form-control-lg .select2-selection__choice, +.input-group-lg .select2-container--bootstrap .select2-selection--multiple .select2-selection__choice, +.form-group-lg .select2-container--bootstrap .select2-selection--multiple .select2-selection__choice { + font-size: 1.25rem; + line-height: 1.5; + border-radius: 0.25rem; + margin: calc(0.5rem - 1px) 0 0 0.5rem; + padding: 0 0.5rem; +} + +.select2-container--bootstrap .select2-selection--multiple.form-control-lg .select2-search--inline .select2-search__field, +.input-group-lg .select2-container--bootstrap .select2-selection--multiple .select2-search--inline .select2-search__field, +.form-group-lg .select2-container--bootstrap .select2-selection--multiple .select2-search--inline .select2-search__field { + padding: 0 1rem; + font-size: 1.25rem; + height: calc(1.5em + 1rem + 2px); + line-height: 1.5; +} + +.select2-container--bootstrap .select2-selection--multiple.form-control-lg .select2-selection__clear, +.input-group-lg .select2-container--bootstrap .select2-selection--multiple .select2-selection__clear, +.form-group-lg .select2-container--bootstrap .select2-selection--multiple .select2-selection__clear { + margin-top: 0.5rem; +} + +.select2-container--bootstrap .select2-selection.form-control-lg.select2-container--open .select2-selection--single { + /** + * Make the dropdown arrow point up while the dropdown is visible. + */ +} + +.select2-container--bootstrap .select2-selection.form-control-lg.select2-container--open .select2-selection--single .select2-selection__arrow b { + border-color: transparent transparent #6c757d transparent; + border-width: 0 0.3125rem 0.3125rem 0.3125rem; +} + +.input-group-lg .select2-container--bootstrap .select2-selection.select2-container--open .select2-selection--single { + /** + * Make the dropdown arrow point up while the dropdown is visible. + */ +} + +.input-group-lg .select2-container--bootstrap .select2-selection.select2-container--open .select2-selection--single .select2-selection__arrow b { + border-color: transparent transparent #6c757d transparent; + border-width: 0 0.3125rem 0.3125rem 0.3125rem; +} + +.select2-container--bootstrap[dir="rtl"] { + /** + * Single Select2 + * + * 1. Makes sure that .select2-selection__placeholder is positioned + * correctly. + */ + /** + * Multiple Select2 + */ +} + +.select2-container--bootstrap[dir="rtl"] .select2-selection--single { + padding-left: 1.5rem; + padding-right: 0.75rem; +} + +.select2-container--bootstrap[dir="rtl"] .select2-selection--single .select2-selection__rendered { + padding-right: 0; + padding-left: 0; + text-align: right; + /* 1 */ +} + +.select2-container--bootstrap[dir="rtl"] .select2-selection--single .select2-selection__clear { + float: left; +} + +.select2-container--bootstrap[dir="rtl"] .select2-selection--single .select2-selection__arrow { + left: 0.75rem; + right: auto; +} + +.select2-container--bootstrap[dir="rtl"] .select2-selection--single .select2-selection__arrow b { + margin-left: 0; +} + +.select2-container--bootstrap[dir="rtl"] .select2-selection--multiple .select2-selection__choice, +.select2-container--bootstrap[dir="rtl"] .select2-selection--multiple .select2-selection__placeholder, +.select2-container--bootstrap[dir="rtl"] .select2-selection--multiple .select2-search--inline { + float: right; +} + +.select2-container--bootstrap[dir="rtl"] .select2-selection--multiple .select2-selection__choice { + margin-left: 0; + margin-right: 0.375rem; +} + +.select2-container--bootstrap[dir="rtl"] .select2-selection--multiple .select2-selection__choice__remove { + margin-left: 2px; + margin-right: auto; +} + +.select2-container--bootstrap .select2-dropdown[dir="rtl"] .select2-results__options { + text-align: right; +} + +/*------------------------------------*\ + #ADDITIONAL GOODIES +\*------------------------------------*/ +/** + * Address Bootstrap's validation states + * + * If a Select2 widget parent has one of Bootstrap's validation state modifier + * classes, adjust Select2's border colors and focus states accordingly. + * You may apply said classes to the Select2 dropdown (body > .select2-container) + * via JavaScript match Bootstraps' to make its styles match. + * + * @see https://getbootstrap.com/docs/4.0/components/forms/#validation + */ +.is-valid .select2-dropdown, +.is-valid .select2-selection { + border-color: #008a29; +} + +.is-valid .select2-container--focus .select2-selection, +.is-valid .select2-container--open .select2-selection { + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #00f047; + border-color: #00571a; +} + +.is-valid .select2-container--focus .select2-selection:focus, +.is-valid .select2-container--open .select2-selection:focus { + box-shadow: 0 0 0 0.2rem rgba(0, 138, 41, 0.25); +} + +.is-valid.select2-drop-active { + border-color: #00571a; +} + +.is-valid.select2-drop-active.select2-drop.select2-drop-above { + border-top-color: #00571a; +} + +.is-invalid .select2-dropdown, +.is-invalid .select2-selection { + border-color: #e13737; +} + +.is-invalid .select2-container--focus .select2-selection, +.is-invalid .select2-container--open .select2-selection { + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ee9090; + border-color: #c71e1e; +} + +.is-invalid .select2-container--focus .select2-selection:focus, +.is-invalid .select2-container--open .select2-selection:focus { + box-shadow: 0 0 0 0.2rem rgba(225, 55, 55, 0.25); +} + +.is-invalid.select2-drop-active { + border-color: #c71e1e; +} + +.is-invalid.select2-drop-active.select2-drop.select2-drop-above { + border-top-color: #c71e1e; +} + +/* Validation classes on parent element. Preserved Bootstrap 3 validation classes */ +.has-warning .select2-dropdown, +.has-warning .select2-selection { + border-color: #e6d200; +} + +.has-warning .select2-container--focus .select2-selection, +.has-warning .select2-container--open .select2-selection { + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #fff04d; + border-color: #b3a300; +} + +.has-warning .select2-container--focus .select2-selection:focus, +.has-warning .select2-container--open .select2-selection:focus { + box-shadow: 0 0 0 0.2rem rgba(230, 210, 0, 0.25); +} + +.has-warning.select2-drop-active { + border-color: #b3a300; +} + +.has-warning.select2-drop-active.select2-drop.select2-drop-above { + border-top-color: #b3a300; +} + +.has-error .select2-dropdown, +.has-error .select2-selection { + border-color: #e13737; +} + +.has-error .select2-container--focus .select2-selection, +.has-error .select2-container--open .select2-selection { + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #ee9090; + border-color: #c71e1e; +} + +.has-error .select2-container--focus .select2-selection:focus, +.has-error .select2-container--open .select2-selection:focus { + box-shadow: 0 0 0 0.2rem rgba(225, 55, 55, 0.25); +} + +.has-error.select2-drop-active { + border-color: #c71e1e; +} + +.has-error.select2-drop-active.select2-drop.select2-drop-above { + border-top-color: #c71e1e; +} + +.has-success .select2-dropdown, +.has-success .select2-selection { + border-color: #008a29; +} + +.has-success .select2-container--focus .select2-selection, +.has-success .select2-container--open .select2-selection { + box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 6px #00f047; + border-color: #00571a; +} + +.has-success .select2-container--focus .select2-selection:focus, +.has-success .select2-container--open .select2-selection:focus { + box-shadow: 0 0 0 0.2rem rgba(0, 138, 41, 0.25); +} + +.has-success.select2-drop-active { + border-color: #00571a; +} + +.has-success.select2-drop-active.select2-drop.select2-drop-above { + border-top-color: #00571a; +} + +/** + * Select2 widgets in Bootstrap Input Groups + * + * @see https://getbootstrap.com/docs/4.0/components/input-group/ + * @see https://github.com/twbs/bootstrap/blob/v4.4.1/scss/_input-group.scss + */ +/** + * Reset rounded corners + */ +.input-group > .select2-container--bootstrap { + flex: 1 1 auto; + position: relative; + z-index: 2; + width: 1%; + margin-bottom: 0; + /** + * Adjust z-index like Bootstrap does to show the focus-box-shadow + * above appended buttons in .input-group and .form-group. + */ + /** + * Adjust alignment of Bootstrap buttons in Bootstrap Input Groups to address + * Multi Select2's height which - depending on how many elements have been selected - + * may grow taller than its initial size. + * + * @see https://github.com/twbs/bootstrap/blob/v4.4.1/scss/_input-group.scss + */ +} + +.input-group > .select2-container--bootstrap > .selection { + display: flex; + flex: 1 1 auto; +} + +.input-group > .select2-container--bootstrap > .selection > .select2-selection.form-control { + float: none; +} + +.input-group > .select2-container--bootstrap.select2-container--open, .input-group > .select2-container--bootstrap.select2-container--focus { + z-index: 3; +} + +.input-group > .select2-container--bootstrap, +.input-group > .select2-container--bootstrap .input-group-append, +.input-group > .select2-container--bootstrap .input-group-prepend, +.input-group > .select2-container--bootstrap .input-group-append .btn, +.input-group > .select2-container--bootstrap .input-group-prepend .btn { + vertical-align: top; +} + +/** + * Temporary fix for https://github.com/select2/select2-bootstrap-theme/issues/9 + * + * Provides `!important` for certain properties of the class applied to the + * original `